用户、项目、机组和部件新增和编辑时增加校验逻辑

This commit is contained in:
高雄 2025-05-19 18:41:06 +08:00
parent a84bbf6928
commit fbddea1c30
32 changed files with 303 additions and 100 deletions

View File

@ -15,7 +15,12 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<!-- Sa-Token 权限认证在线文档https://sa-token.cc -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.43.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId> <artifactId>spring-boot-devtools</artifactId>

View File

@ -1,25 +1,33 @@
package com.dite.znpt.config; package com.dite.znpt.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration @Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport { 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静态资源 * MVC 加载Swagger静态资源
* @param registry * @param registry
*/ */
@Override @Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) { protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/static/"); registry.addResourceHandler("/image/temp/**").addResourceLocations("file:" + uploadTempPath);
registry.addResourceHandler("doc.html") registry.addResourceHandler("/image/**").addResourceLocations("file:" + uploadPermPath);
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**") registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
.addResourceLocations("classpath:/META-INF/resources/webjars/"); registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/swagger-ui/**") registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
.addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
super.addResourceHandlers(registry); super.addResourceHandlers(registry);
} }
} }

View File

@ -1,4 +1,4 @@
package com.dite.znpt.domain; package com.dite.znpt.constant;
/** /**
* @description: 常量 * @description: 常量
@ -21,4 +21,14 @@ public class Constants {
* 参数异常 * 参数异常
*/ */
public static final String PARAMETER_EXCEPTION = "000003"; 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";
} }

View File

@ -20,5 +20,5 @@ public class Message implements Serializable {
public static final String TURBINE_ID_IS_NOT_EXIST = "机组id不存在"; public static final String TURBINE_ID_IS_NOT_EXIST = "机组id不存在";
public static final String PART_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 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不存在";
} }

View File

@ -1,5 +1,6 @@
package com.dite.znpt.domain; package com.dite.znpt.domain;
import com.dite.znpt.constant.Constants;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;

View File

@ -45,6 +45,11 @@ public class UserEntity extends AuditableEntity implements Serializable {
@TableField("password") @TableField("password")
private String password; private String password;
@ExcelProperty("是否默认密码")
@ApiModelProperty("是否默认密码")
@TableField("is_default_password")
private Boolean isDefaultPassword;
@ExcelProperty("加密盐") @ExcelProperty("加密盐")
@ApiModelProperty("加密盐") @ApiModelProperty("加密盐")
@TableField("salt") @TableField("salt")

View File

@ -1,9 +1,12 @@
package com.dite.znpt.domain.vo; package com.dite.znpt.domain.vo;
import com.dite.znpt.util.ValidationGroup;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -19,24 +22,31 @@ public class PartReq implements Serializable {
@Serial @Serial
private static final long serialVersionUID = -585044340118904985L; private static final long serialVersionUID = -585044340118904985L;
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "机组id不能为空")
@ApiModelProperty("机组id") @ApiModelProperty("机组id")
private String turbineId; 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; private String partName;
@ApiModelProperty("编号") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "部件编号长度不能超过20字符")
@ApiModelProperty("部件编号")
private String partCode; private String partCode;
@ApiModelProperty("类型枚举PartTypeEnum") @ApiModelProperty("部件类型枚举PartTypeEnum")
private String partType; private String partType;
@ApiModelProperty("描述") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "部件描述长度不能超过200字符")
@ApiModelProperty("部件描述")
private String partDesc; private String partDesc;
@ApiModelProperty("厂商") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "部件厂商长度不能超过20字符")
@ApiModelProperty("部件厂商")
private String PartManufacturer; private String PartManufacturer;
@ApiModelProperty("型号") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "部件型号长度不能超过20字符")
@ApiModelProperty("部件型号")
private String PartModel; private String PartModel;
} }

View File

@ -34,7 +34,7 @@ public class ProjectListResp implements Serializable {
private String farmName; private String farmName;
@ApiModelProperty("项目状态枚举ProjectStatusEnum") @ApiModelProperty("项目状态枚举ProjectStatusEnum")
private String status; private int status;
@ApiModelProperty("项目状态枚举ProjectStatusEnum") @ApiModelProperty("项目状态枚举ProjectStatusEnum")
private String statusLabel; private String statusLabel;

View File

@ -1,10 +1,12 @@
package com.dite.znpt.domain.vo; 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.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -20,48 +22,57 @@ public class ProjectReq implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 740685592879189406L; 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("项目名称") @ApiModelProperty("项目名称")
private String projectName; private String projectName;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目封面述长度不能超过100字符")
@ApiModelProperty("项目封面") @ApiModelProperty("项目封面")
private String coverUrl; 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("风场名称") @ApiModelProperty("风场名称")
private String farmName; private String farmName;
@ExcelProperty("风场地址") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "风场名称长度不能超过100字符")
@ApiModelProperty("风场地址") @ApiModelProperty("风场地址")
private String farmAddress; private String farmAddress;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "委托单位长度不能超过50字符")
@ApiModelProperty("委托单位") @ApiModelProperty("委托单位")
private String client; private String client;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "委托单位联系人长度不能超过20字符")
@ApiModelProperty("委托单位联系人") @ApiModelProperty("委托单位联系人")
private String clientContact; private String clientContact;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "委托单位联系电话长度不能超过20字符")
@ApiModelProperty("委托单位联系电话") @ApiModelProperty("委托单位联系电话")
private String clientPhone; private String clientPhone;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "检查单位联系电话长度不能超过20字符")
@ApiModelProperty("检查单位") @ApiModelProperty("检查单位")
private String inspectionUnit; private String inspectionUnit;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "检查单位联系人长度不能超过20字符")
@ApiModelProperty("检查单位联系人") @ApiModelProperty("检查单位联系人")
private String inspectionContact; private String inspectionContact;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "检查单位联系电话长度不能超过20字符")
@ApiModelProperty("检查单位联系电话") @ApiModelProperty("检查单位联系电话")
private String inspectionPhone; private String inspectionPhone;
@ExcelProperty("项目规模") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "项目规模长度不能超过20字符")
@ApiModelProperty("项目规模") @ApiModelProperty("项目规模")
private String scale; private String scale;
@ExcelProperty("风机型号") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "风机型号不能超过20字符")
@ApiModelProperty("风机型号") @ApiModelProperty("风机型号")
private String turbineModel; private String turbineModel;
@ApiModelProperty("施工人员id") @ApiModelProperty(value = "施工人员id", notes = "多个用英文逗号隔开")
private String constructorIds; private String constructorIds;
@ApiModelProperty("安全员id") @ApiModelProperty("安全员id")
@ -70,19 +81,20 @@ public class ProjectReq implements Serializable {
@ApiModelProperty("质量员id") @ApiModelProperty("质量员id")
private String qualityOfficerId; private String qualityOfficerId;
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目经理id不能为空")
@ApiModelProperty("项目经理id") @ApiModelProperty("项目经理id")
private String projectManagerId; private String projectManagerId;
@ApiModelProperty("施工组长id") @ApiModelProperty("施工组长id")
private String constructionTeamLeaderId; private String constructionTeamLeaderId;
@ApiModelProperty("技术方案图片,多个用逗号隔开") @ApiModelProperty(value = "技术方案图片", notes = "多项英文逗号隔开")
private String technicalImage; private String technicalImage;
@ApiModelProperty("技术方案内容") @ApiModelProperty("技术方案内容")
private String technicalContent; private String technicalContent;
@ApiModelProperty("安全措施图片,多个用逗号隔开") @ApiModelProperty(value = "安全措施图片", notes = "多项英文逗号隔开")
private String safetyImage; private String safetyImage;
@ApiModelProperty("安全措施内容") @ApiModelProperty("安全措施内容")
@ -92,14 +104,14 @@ public class ProjectReq implements Serializable {
private String discloseContent; private String discloseContent;
@ApiModelProperty("状态0待施工1施工中2已完工3已审核4已验收") @ApiModelProperty("状态0待施工1施工中2已完工3已审核4已验收")
private String status; private int status;
@ApiModelProperty("项目工作类型 可能有多项,逗号分隔") @ApiModelProperty(value = "项目工作类型", notes = "多项英文逗号隔开")
private String workType; private String workType;
@ApiModelProperty("项目工作岗位 可能有多项json对象保存") @ApiModelProperty(value = "项目工作岗位", notes = "多项英文逗号隔开json对象保存")
private String job; private String job;
@ApiModelProperty(value = "项目安全风险点", example = "1", notes = "项目安全风险点 可能有多项,逗号分隔") @ApiModelProperty(value = "项目安全风险点", notes = "多项英文逗号隔开")
private String safetyRiskPoint; private String safetyRiskPoint;
} }

View File

@ -2,10 +2,13 @@ package com.dite.znpt.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.dite.znpt.util.ValidationGroup;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -21,25 +24,33 @@ public class TurbineReq implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 115092978850852080L; private static final long serialVersionUID = 115092978850852080L;
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目id不能为空")
@ApiModelProperty("项目id") @ApiModelProperty("项目id")
private String projectId; 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("机组名称") @ApiModelProperty("机组名称")
private String turbineName; private String turbineName;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "机组编码长度不能超过20字符")
@ApiModelProperty("机组编码") @ApiModelProperty("机组编码")
private String turbineCode; private String turbineCode;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "机组描述长度不能超过200字符")
@ApiModelProperty("机组描述") @ApiModelProperty("机组描述")
private String turbineDesc; private String turbineDesc;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "机组厂商长度不能超过20字符")
@ApiModelProperty("机组厂商") @ApiModelProperty("机组厂商")
private String turbineManufacturer; private String turbineManufacturer;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "机组型号长度不能超过20字符")
@ApiModelProperty("机组型号") @ApiModelProperty("机组型号")
private String turbineModel; private String turbineModel;
@ApiModelProperty("封面图") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "机组封面图长度不能超过100字符")
@ApiModelProperty("机组封面图")
private String turbineCoverUrl; private String turbineCoverUrl;
} }

View File

@ -1,10 +1,12 @@
package com.dite.znpt.domain.vo; package com.dite.znpt.domain.vo;
import com.dite.znpt.util.ValidationGroup;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.*;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDate; import java.time.LocalDate;
@ -21,31 +23,43 @@ public class UserReq implements Serializable {
@Serial @Serial
private static final long serialVersionUID = -5491849652107338027L; 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("头像地址") @ApiModelProperty("头像地址")
private String avatar; private String avatar;
@ApiModelProperty("1正常0禁用") @ApiModelProperty("1正常0禁用")
private Integer status; private Integer status;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "姓名长度不能超过20字符")
@ApiModelProperty("姓名") @ApiModelProperty("姓名")
private String name; private String name;
@Pattern(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, regexp = "^$|\\d(?:\\d{15}|\\d{17})$", message = "身份证号码格式不正确")
@ApiModelProperty("身份证") @ApiModelProperty("身份证")
private String identityCard; private String identityCard;
@ApiModelProperty("性别") @ApiModelProperty("性别")
private String gender; private String gender;
@Pattern(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, regexp ="^$|1\\d{10}$", message = "手机号码格式不正确")
@ApiModelProperty("手机号码") @ApiModelProperty("手机号码")
private String mobile; private String mobile;
@Email(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class})
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "邮箱长度不能超过50字符")
@ApiModelProperty("邮箱") @ApiModelProperty("邮箱")
private String email; private String email;
@Past(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "入职日期必须是过去的日期")
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("入职日期") @ApiModelProperty("入职日期")
private LocalDate hiredate; private LocalDate hiredate;
@Past(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "出生日期必须是过去的日期")
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("出生日期") @ApiModelProperty("出生日期")
private LocalDate birthdate; private LocalDate birthdate;
@ -53,9 +67,11 @@ public class UserReq implements Serializable {
@ApiModelProperty("学历") @ApiModelProperty("学历")
private String education; private String education;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "专业长度不能超过20字符")
@ApiModelProperty("专业") @ApiModelProperty("专业")
private String majorField; private String majorField;
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "工作方向长度不能超过20字符")
@ApiModelProperty("工作方向") @ApiModelProperty("工作方向")
private String workField; private String workField;
} }

View File

@ -13,6 +13,7 @@ import java.util.List;
*/ */
@Getter @Getter
public enum EducationEnum { public enum EducationEnum {
UNKNOWN("unknown","小学"),
PRIMARY_SCHOOL("primary_school","小学"), PRIMARY_SCHOOL("primary_school","小学"),
MIDDLE_SCHOOL("middle_school","初中"), MIDDLE_SCHOOL("middle_school","初中"),
HIGH_SCHOOL(" high_school","高中"), HIGH_SCHOOL(" high_school","高中"),

View File

@ -15,25 +15,25 @@ import java.util.List;
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum ProjectStatusEnum { public enum ProjectStatusEnum {
PENDING("PENDING","待施工", 0), PENDING(0, "待施工"),
IN_PROGRESS("IN_PROGRESS","施工中", 1), IN_PROGRESS(1, "施工中"),
COMPLETED("COMPLETED","已完工", 2), COMPLETED(2, "已完工"),
AUDITED("AUDITED","已审核", 3), AUDITED(3, "已审核"),
ACCEPTED("ACCEPTED","已验收", 4); ACCEPTED(4, "已验收");
private final String code;
private final String desc;
private final int intValue;
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() ) { for (ProjectStatusEnum e : ProjectStatusEnum.values() ) {
if(e.code.equals(code)){ if(e.code == code){
return e; return e;
} }
} }
return null; return null;
} }
public static String getDescByCode(String code){ public static String getDescByCode(int code){
ProjectStatusEnum e = getByCode(code); ProjectStatusEnum e = getByCode(code);
return null == e ? null : e.desc; return null == e ? null : e.desc;
} }
@ -42,7 +42,7 @@ public enum ProjectStatusEnum {
List<JSONObject> list = new ArrayList<>(ProjectStatusEnum.values().length); List<JSONObject> list = new ArrayList<>(ProjectStatusEnum.values().length);
for (ProjectStatusEnum e : ProjectStatusEnum.values() ) { for (ProjectStatusEnum e : ProjectStatusEnum.values() ) {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.set(e.code, e.desc); jsonObject.set(String.valueOf(e.code), e.desc);
list.add(jsonObject); list.add(jsonObject);
} }
return list; return list;

View File

@ -1,6 +1,6 @@
package com.dite.znpt.exception; package com.dite.znpt.exception;
import com.dite.znpt.domain.Constants; import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.Result; import com.dite.znpt.domain.Result;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

View File

@ -51,7 +51,7 @@ public interface UserService extends IService<UserEntity> {
* @author huise23 * @author huise23
* @date 2025/04/11 23:17 * @date 2025/04/11 23:17
**/ **/
void save(UserReq req); String save(UserReq req);
/** /**
* 功能描述更新用户信息 * 功能描述更新用户信息

View File

@ -31,7 +31,7 @@ import java.util.List;
@Service @Service
public class ImageCollectServiceImpl extends ServiceImpl<ImageCollectMapper, ImageCollectEntity> implements ImageCollectService { public class ImageCollectServiceImpl extends ServiceImpl<ImageCollectMapper, ImageCollectEntity> implements ImageCollectService {
@Value("${upload.perm-path}") @Value("${upload.perm-path.image}")
private String permPath; private String permPath;
@Resource @Resource
@ -52,7 +52,7 @@ public class ImageCollectServiceImpl extends ServiceImpl<ImageCollectMapper, Ima
ImageCollectEntity imageCollect = Converts.INSTANCE.toImageCollectEntity(req); ImageCollectEntity imageCollect = Converts.INSTANCE.toImageCollectEntity(req);
this.save(imageCollect); this.save(imageCollect);
List<ImageEntity> imageList = Converts.INSTANCE.toImageEntity(req.getImageList()); List<ImageEntity> 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 -> { imageList.stream().forEach(image -> {
image.setPartId(partId); image.setPartId(partId);
image.setCollectId(imageCollect.getCollectId()); image.setCollectId(imageCollect.getCollectId());

View File

@ -10,7 +10,10 @@ import com.dite.znpt.constant.Message;
import com.dite.znpt.domain.entity.ImageEntity; import com.dite.znpt.domain.entity.ImageEntity;
import com.dite.znpt.domain.entity.PartEntity; import com.dite.znpt.domain.entity.PartEntity;
import com.dite.znpt.domain.vo.*; 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.exception.ServiceException;
import com.dite.znpt.mapper.ImageMapper; import com.dite.znpt.mapper.ImageMapper;
import com.dite.znpt.service.ImageCollectService; import com.dite.znpt.service.ImageCollectService;
@ -54,10 +57,10 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
@Resource @Resource
private PartService partService; private PartService partService;
@Value("${upload.temp-path}") @Value("${upload.temp-path.image}")
private String tempPath; private String tempPath;
@Value("${upload.perm-path}") @Value("${upload.perm-path.image}")
private String permPath; private String permPath;
@Override @Override
public List<ImageListResp> list(ImageListReq req) { public List<ImageListResp> list(ImageListReq req) {
@ -83,8 +86,8 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
Map<String, PartEntity> partIdMap= partService.listByIds(partIds).stream().collect(Collectors.toMap(PartEntity::getPartId, Function.identity())); Map<String, PartEntity> partIdMap= partService.listByIds(partIds).stream().collect(Collectors.toMap(PartEntity::getPartId, Function.identity()));
list.stream().forEach(req -> { list.stream().forEach(req -> {
if(partIdMap.containsKey(req.getPartId())){ 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 path_prefix = permPath.concat(StrUtil.BACKSLASH).concat(req.getImageSource()).concat(StrUtil.BACKSLASH).concat(req.getPartId()).concat(StrUtil.BACKSLASH);
String temp_path_prefix = tempPath.concat(FileUtil.FILE_SEPARATOR).concat(req.getImageSource()).concat(FileUtil.FILE_SEPARATOR).concat(req.getPartId()).concat(FileUtil.FILE_SEPARATOR); 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()); File file = new File(req.getImagePath());
if(file.exists() && req.getImagePath().contains(temp_path_prefix)){ if(file.exists() && req.getImagePath().contains(temp_path_prefix)){
ImageEntity entity = new ImageEntity(); ImageEntity entity = new ImageEntity();
@ -123,7 +126,12 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
throw new ServiceException(Message.IMAGE_IS_EMPTY); throw new ServiceException(Message.IMAGE_IS_EMPTY);
} }
List<ImageReq> list = new ArrayList<>(files.length); List<ImageReq> 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) { for (MultipartFile file : files) {
if (!file.isEmpty()) { if (!file.isEmpty()) {
try { try {
@ -189,7 +197,7 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
req.setCameraManufacturer(obj.getStr("Make")); req.setCameraManufacturer(obj.getStr("Make"));
req.setCameraModel(obj.getStr("Model")); req.setCameraModel(obj.getStr("Model"));
req.setImageName(obj.getStr("File Name")); 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); 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.setImageSize(imageSize.toString().concat("M"));
req.setImageWidth(extractDigit(obj.getStr("Image Width"))); req.setImageWidth(extractDigit(obj.getStr("Image Width")));
@ -200,15 +208,19 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
req.setYResolution(extractDigit(obj.getStr("Y Resolution"))); req.setYResolution(extractDigit(obj.getStr("Y Resolution")));
req.setResolutionUnits(obj.getStr("Resolution Units")); req.setResolutionUnits(obj.getStr("Resolution Units"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss"); 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.setFocalDistance(extractDigit(obj.getStr("Focal Length")));
req.setLatitude(obj.getStr("GPS Latitude")); req.setLatitude(obj.getStr("GPS Latitude"));
req.setLongitude(obj.getStr("GPS Longitude")); req.setLongitude(obj.getStr("GPS Longitude"));
req.setAltitude(extractDigit(obj.getStr("GPS Altitude"))); req.setAltitude(extractDigit(obj.getStr("GPS Altitude")));
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) 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(req.getLongitude()).concat("°").concat(directionTranslator(obj.getStr("GPS Longitude Ref"))).concat(StrUtil.COMMA)
.concat("海拔").concat(req.getAltitude()).concat("m"); .concat("海拔").concat(req.getAltitude()).concat("m");
req.setGPS(gps); req.setGPS(gps);
}
return req; return req;
} }
@ -227,6 +239,9 @@ public class ImageServiceImpl extends ServiceImpl<ImageMapper, ImageEntity> impl
} }
private static String extractDigit(String str) { private static String extractDigit(String str) {
if(StrUtil.isEmpty(str)){
return null;
}
Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?"); Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?");
Matcher matcher = pattern.matcher(str); Matcher matcher = pattern.matcher(str);
if (matcher.find()) { if (matcher.find()) {

View File

@ -201,7 +201,7 @@ public class TurbineServiceImpl extends ServiceImpl<TurbineMapper, TurbineEntity
if (turbine == null) { if (turbine == null) {
return; return;
} }
if (turbine.getStatus() == ProjectStatusEnum.AUDITED.getIntValue()) { if (turbine.getStatus() == ProjectStatusEnum.AUDITED.getCode()) {
return; return;
} }
List<TurbineStatusResp> turbineStatusList = jobService.calCrewStatus(ListUtil.of(turbineId)); List<TurbineStatusResp> turbineStatusList = jobService.calCrewStatus(ListUtil.of(turbineId));
@ -223,19 +223,19 @@ public class TurbineServiceImpl extends ServiceImpl<TurbineMapper, TurbineEntity
&& status3.contains(turbineStatusVo.getAntiThunderWorkStatus()) && status3.contains(turbineStatusVo.getAntiThunderWorkStatus())
&& status3.contains(turbineStatusVo.getSummaryWorkStatus())) { && status3.contains(turbineStatusVo.getSummaryWorkStatus())) {
// 全部提交已完工 // 全部提交已完工
turbine.setStatus(ProjectStatusEnum.COMPLETED.getIntValue()); turbine.setStatus(ProjectStatusEnum.COMPLETED.getCode());
} else if (status4.contains(turbineStatusVo.getInWorkStatus()) } else if (status4.contains(turbineStatusVo.getInWorkStatus())
&& status4.contains(turbineStatusVo.getOutWorkStatus()) && status4.contains(turbineStatusVo.getOutWorkStatus())
&& status4.contains(turbineStatusVo.getAntiThunderWorkStatus()) && status4.contains(turbineStatusVo.getAntiThunderWorkStatus())
&& status4.contains(turbineStatusVo.getSummaryWorkStatus())) { && status4.contains(turbineStatusVo.getSummaryWorkStatus())) {
// 全部审批已审批 // 全部审批已审批
turbine.setStatus(ProjectStatusEnum.AUDITED.getIntValue()); turbine.setStatus(ProjectStatusEnum.AUDITED.getCode());
} else if (status2.contains(turbineStatusVo.getInWorkStatus()) } else if (status2.contains(turbineStatusVo.getInWorkStatus())
|| status2.contains(turbineStatusVo.getOutWorkStatus()) || status2.contains(turbineStatusVo.getOutWorkStatus())
|| status2.contains(turbineStatusVo.getAntiThunderWorkStatus()) || status2.contains(turbineStatusVo.getAntiThunderWorkStatus())
|| status2.contains(turbineStatusVo.getSummaryWorkStatus())) { || status2.contains(turbineStatusVo.getSummaryWorkStatus())) {
// 有一个开始则开始 // 有一个开始则开始
turbine.setStatus(ProjectStatusEnum.IN_PROGRESS.getIntValue()); turbine.setStatus(ProjectStatusEnum.IN_PROGRESS.getCode());
} }
this.updateById(turbine); this.updateById(turbine);
// 更新项目状态 // 更新项目状态
@ -255,19 +255,19 @@ public class TurbineServiceImpl extends ServiceImpl<TurbineMapper, TurbineEntity
List<Integer> statusList = this.lambdaQuery().eq(TurbineEntity::getProjectId, projectId).list() List<Integer> statusList = this.lambdaQuery().eq(TurbineEntity::getProjectId, projectId).list()
.stream().map(TurbineEntity::getStatus).toList(); .stream().map(TurbineEntity::getStatus).toList();
// 有施工中则是施工中 // 有施工中则是施工中
if (statusList.contains(ProjectStatusEnum.IN_PROGRESS.getIntValue())) { if (statusList.contains(ProjectStatusEnum.IN_PROGRESS.getCode())) {
status = ProjectStatusEnum.IN_PROGRESS.getIntValue(); status = ProjectStatusEnum.IN_PROGRESS.getCode();
} }
// 如果机组列表没有状态为 待施工施工中 的则项目 完工 // 如果机组列表没有状态为 待施工施工中 的则项目 完工
if (!statusList.contains(ProjectStatusEnum.PENDING.getIntValue()) && if (!statusList.contains(ProjectStatusEnum.PENDING.getCode()) &&
!statusList.contains(ProjectStatusEnum.IN_PROGRESS.getIntValue())) { !statusList.contains(ProjectStatusEnum.IN_PROGRESS.getCode())) {
status = ProjectStatusEnum.COMPLETED.getIntValue(); status = ProjectStatusEnum.COMPLETED.getCode();
// 如果机组列表没有状态为 待施工施工中已完工 的则项目 已审核 // 如果机组列表没有状态为 待施工施工中已完工 的则项目 已审核
if (!statusList.contains(ProjectStatusEnum.COMPLETED.getIntValue())) { if (!statusList.contains(ProjectStatusEnum.COMPLETED.getCode())) {
status = ProjectStatusEnum.AUDITED.getIntValue(); status = ProjectStatusEnum.AUDITED.getCode();
// 如果机组列表没有状态为 待施工施工中已完工已审核 的则项目 已验收 // 如果机组列表没有状态为 待施工施工中已完工已审核 的则项目 已验收
if (!statusList.contains(ProjectStatusEnum.AUDITED.getIntValue())) { if (!statusList.contains(ProjectStatusEnum.AUDITED.getCode())) {
status = ProjectStatusEnum.ACCEPTED.getIntValue(); status = ProjectStatusEnum.ACCEPTED.getCode();
} }
} }
} }

View File

@ -1,6 +1,11 @@
package com.dite.znpt.service.impl; 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dite.znpt.constant.Constants;
import com.dite.znpt.constant.Message; import com.dite.znpt.constant.Message;
import com.dite.znpt.converts.Converts; import com.dite.znpt.converts.Converts;
import com.dite.znpt.domain.entity.UserEntity; 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.exception.ServiceException;
import com.dite.znpt.service.UserService; import com.dite.znpt.service.UserService;
import com.dite.znpt.mapper.UserMapper; 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 org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import com.dite.znpt.util.PageUtil; import com.dite.znpt.util.PageUtil;
@ -27,6 +34,12 @@ import java.util.List;
@RequiredArgsConstructor @RequiredArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements UserService { public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> 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<UserMapper, UserEntity> impleme
**/ **/
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void save(UserReq req) { public String save(UserReq req) {
UserEntity entity = Converts.INSTANCE.toUserEntity(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); this.save(entity);
return SaBase64Util.encode(password);
} }
/** /**
@ -103,6 +121,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
} }
UserEntity entity = Converts.INSTANCE.toUserEntity(req); UserEntity entity = Converts.INSTANCE.toUserEntity(req);
entity.setUserId(userId); entity.setUserId(userId);
entity.setAccount(null);
this.updateById(entity); this.updateById(entity);
} }
@ -116,10 +135,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> impleme
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void deleteById(String userId) { 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); throw new ServiceException(Message.USER_ID_NOT_EXIST);
} }
this.removeById(userId); entity.setDelFlag(Constants.DEL_FLAG_1);
this.updateById(entity);
} }

View File

@ -3,6 +3,12 @@ package com.dite.znpt.util;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; 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 { public class PasswordUtil {
private static final PasswordEncoder encoder = new BCryptPasswordEncoder(); private static final PasswordEncoder encoder = new BCryptPasswordEncoder();
@ -13,4 +19,48 @@ public class PasswordUtil {
public static boolean matches(String rawPassword, String encodedPassword) { public static boolean matches(String rawPassword, String encodedPassword) {
return encoder.matches(rawPassword, 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<Character> 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();
}
} }

View File

@ -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 {} //
}

View File

@ -1,7 +1,7 @@
package com.dite.znpt.web.controller; 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.CombinedDictListReq;
import com.dite.znpt.domain.vo.CombinedDictResp; import com.dite.znpt.domain.vo.CombinedDictResp;
import com.dite.znpt.domain.entity.CombinedDictEntity; import com.dite.znpt.domain.entity.CombinedDictEntity;

View File

@ -1,7 +1,7 @@
package com.dite.znpt.web.controller; 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.DefectListReq;
import com.dite.znpt.domain.vo.DefectReq; import com.dite.znpt.domain.vo.DefectReq;
import com.dite.znpt.domain.vo.DefectResp; import com.dite.znpt.domain.vo.DefectResp;

View File

@ -1,7 +1,7 @@
package com.dite.znpt.web.controller; 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.FileInfoListReq;
import com.dite.znpt.domain.vo.FileInfoResp; import com.dite.znpt.domain.vo.FileInfoResp;
import com.dite.znpt.domain.entity.FileInfoEntity; import com.dite.znpt.domain.entity.FileInfoEntity;

View File

@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**

View File

@ -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 {
}

View File

@ -1,7 +1,7 @@
package com.dite.znpt.web.controller; 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.PartListReq;
import com.dite.znpt.domain.vo.PartListResp; import com.dite.znpt.domain.vo.PartListResp;
import com.dite.znpt.domain.vo.PartReq; 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.service.PartService;
import com.dite.znpt.domain.Result; import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.PageResult; 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.RequestExcel;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import com.pig4cloud.plugin.excel.vo.ErrorMessage; import com.pig4cloud.plugin.excel.vo.ErrorMessage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -32,39 +34,39 @@ public class PartController {
@Resource @Resource
private PartService partService; private PartService partService;
@ApiOperation(value = "分页获取部件列表", httpMethod = "GET") @ApiOperation(value = "分页查询部件信息列表", httpMethod = "GET")
@GetMapping("/page") @GetMapping("/page")
public PageResult<PartListResp> page(PartListReq partReq) { public PageResult<PartListResp> page(PartListReq partReq) {
return PageResult.ok(partService.page(partReq)); return PageResult.ok(partService.page(partReq));
} }
@ApiOperation(value = "获取部件列表", httpMethod = "GET") @ApiOperation(value = "查询部件信息列表", httpMethod = "GET")
@GetMapping("/list") @GetMapping("/list")
public Result<List<PartListResp>> list(PartListReq partReq) { public Result<List<PartListResp>> list(PartListReq partReq) {
return Result.ok(partService.list(partReq)); return Result.ok(partService.list(partReq));
} }
@ApiOperation(value = "根据Id获取详细信息", httpMethod = "GET") @ApiOperation(value = "查询部件信息详情", httpMethod = "GET")
@GetMapping("/detail/{partId}") @GetMapping("/detail/{partId}")
public Result<PartResp> detail(@PathVariable String partId) { public Result<PartResp> detail(@PathVariable String partId) {
return Result.ok(partService.detail(partId)); return Result.ok(partService.detail(partId));
} }
@ApiOperation(value = "新增", httpMethod = "POST") @ApiOperation(value = "新增部件信息", httpMethod = "POST")
@PostMapping @PostMapping
public Result<Object> add(@RequestBody PartReq req) { public Result<Object> add(@Validated(ValidationGroup.Insert.class) @RequestBody PartReq req) {
partService.save(req); partService.save(req);
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "修改", httpMethod = "PUT") @ApiOperation(value = "修改部件信息", httpMethod = "PUT")
@PutMapping("/{partId}") @PutMapping("/{partId}")
public Result<Object> edit(@PathVariable String partId, @RequestBody PartReq req) { public Result<Object> edit(@Validated(ValidationGroup.Update.class) @PathVariable String partId, @RequestBody PartReq req) {
partService.update(partId, req); partService.update(partId, req);
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "删除", httpMethod = "DELETE") @ApiOperation(value = "删除部件信息", httpMethod = "DELETE")
@DeleteMapping("/{partId}") @DeleteMapping("/{partId}")
public Result<Object> remove(@PathVariable String partId) { public Result<Object> remove(@PathVariable String partId) {
partService.deleteById(partId); partService.deleteById(partId);

View File

@ -1,7 +1,7 @@
package com.dite.znpt.web.controller; package com.dite.znpt.web.controller;
import com.dite.znpt.domain.Constants; import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.ProjectListReq; import com.dite.znpt.domain.vo.ProjectListReq;
import com.dite.znpt.domain.vo.ProjectListResp; import com.dite.znpt.domain.vo.ProjectListResp;
import com.dite.znpt.domain.vo.ProjectReq; import com.dite.znpt.domain.vo.ProjectReq;
@ -10,12 +10,14 @@ import com.dite.znpt.domain.entity.ProjectEntity;
import com.dite.znpt.service.ProjectService; import com.dite.znpt.service.ProjectService;
import com.dite.znpt.domain.Result; import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.PageResult; 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.RequestExcel;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import com.pig4cloud.plugin.excel.vo.ErrorMessage; import com.pig4cloud.plugin.excel.vo.ErrorMessage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -52,14 +54,14 @@ public class ProjectController {
@ApiOperation(value = "新增项目信息", httpMethod = "POST") @ApiOperation(value = "新增项目信息", httpMethod = "POST")
@PostMapping @PostMapping
public Result add(@RequestBody ProjectReq req) { public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody ProjectReq req) {
projectService.save(req); projectService.save(req);
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "修改项目信息", httpMethod = "PUT") @ApiOperation(value = "修改项目信息", httpMethod = "PUT")
@PutMapping("/{projectId}") @PutMapping("/{projectId}")
public Result<Object> edit(@PathVariable String projectId, @RequestBody ProjectReq req) { public Result<Object> edit(@PathVariable String projectId, @Validated(ValidationGroup.Update.class) @RequestBody ProjectReq req) {
projectService.update(projectId, req); projectService.update(projectId, req);
return Result.ok(); return Result.ok();
} }

View File

@ -1,7 +1,7 @@
package com.dite.znpt.web.controller; package com.dite.znpt.web.controller;
import com.dite.znpt.domain.Constants; import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.TConstructionListReq; import com.dite.znpt.domain.vo.TConstructionListReq;
import com.dite.znpt.domain.vo.TConstructionResp; import com.dite.znpt.domain.vo.TConstructionResp;
import com.dite.znpt.domain.entity.TConstructionEntity; import com.dite.znpt.domain.entity.TConstructionEntity;

View File

@ -1,18 +1,20 @@
package com.dite.znpt.web.controller; package com.dite.znpt.web.controller;
import com.dite.znpt.domain.Constants; import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.*; import com.dite.znpt.domain.vo.*;
import com.dite.znpt.domain.entity.TurbineEntity; import com.dite.znpt.domain.entity.TurbineEntity;
import com.dite.znpt.service.TurbineService; import com.dite.znpt.service.TurbineService;
import com.dite.znpt.domain.Result; import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.PageResult; 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.RequestExcel;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import com.pig4cloud.plugin.excel.vo.ErrorMessage; import com.pig4cloud.plugin.excel.vo.ErrorMessage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -61,14 +63,14 @@ public class TurbineController {
@ApiOperation(value = "新增机组", httpMethod = "POST") @ApiOperation(value = "新增机组", httpMethod = "POST")
@PostMapping @PostMapping
public Result<Object> add(@RequestBody TurbineReq req) { public Result<Object> add(@Validated(ValidationGroup.Insert.class) @RequestBody TurbineReq req) {
turbineService.save(req); turbineService.save(req);
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "修改机组", httpMethod = "PUT") @ApiOperation(value = "修改机组", httpMethod = "PUT")
@PutMapping("/{turbineId}") @PutMapping("/{turbineId}")
public Result edit(@PathVariable String turbineId, @RequestBody TurbineReq req) { public Result edit(@PathVariable String turbineId, @Validated(ValidationGroup.Insert.class) @RequestBody TurbineReq req) {
turbineService.update(turbineId, req); turbineService.update(turbineId, req);
return Result.ok(); return Result.ok();
} }

View File

@ -8,15 +8,18 @@ import com.dite.znpt.domain.entity.UserEntity;
import com.dite.znpt.service.UserService; import com.dite.znpt.service.UserService;
import com.dite.znpt.domain.Result; import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.PageResult; 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.RequestExcel;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import com.pig4cloud.plugin.excel.vo.ErrorMessage; import com.pig4cloud.plugin.excel.vo.ErrorMessage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List; import java.util.List;
/** /**
@ -50,14 +53,13 @@ public class UserController {
@ApiOperation(value = "新增用户信息", httpMethod = "POST") @ApiOperation(value = "新增用户信息", httpMethod = "POST")
@PostMapping @PostMapping
public Result<Object> add(@RequestBody UserReq req) { public Result<Object> add(@Validated(ValidationGroup.Insert.class) @RequestBody UserReq req) {
userService.save(req); return Result.ok(userService.save(req));
return Result.ok();
} }
@ApiOperation(value = "修改用户信息", httpMethod = "PUT") @ApiOperation(value = "修改用户信息", httpMethod = "PUT")
@PutMapping("/{userId}") @PutMapping("/{userId}")
public Result<Object> edit(@PathVariable String userId, @RequestBody UserReq req) { public Result<Object> edit(@PathVariable String userId, @Validated(ValidationGroup.Update.class) @RequestBody UserReq req) {
userService.update(userId, req); userService.update(userId, req);
return Result.ok(); return Result.ok();
} }

View File

@ -1,7 +1,7 @@
package com.dite.znpt.web.controller; package com.dite.znpt.web.controller;
import com.dite.znpt.domain.Constants; import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.WeatherTypeListReq; import com.dite.znpt.domain.vo.WeatherTypeListReq;
import com.dite.znpt.domain.vo.WeatherTypeResp; import com.dite.znpt.domain.vo.WeatherTypeResp;
import com.dite.znpt.domain.entity.WeatherTypeEntity; import com.dite.znpt.domain.entity.WeatherTypeEntity;