Compare commits
105 Commits
Author | SHA1 | Date |
---|---|---|
|
2701f7fd46 | |
|
7ce85c6e80 | |
|
987c4eeb38 | |
|
8a968f1a49 | |
|
c15dd69cd9 | |
|
f63b96a178 | |
|
70db15a6fd | |
|
4f7d53aba7 | |
|
74550c615b | |
|
078f0699fa | |
|
01455720be | |
|
231faee0d0 | |
|
3b3aa95437 | |
|
389c8a58b0 | |
|
d4b06d9c66 | |
|
91c54aaf5e | |
|
b45766d377 | |
|
386561125e | |
|
32d43e5a3b | |
|
e1259d904a | |
|
40c11dd974 | |
|
e356368b62 | |
|
3ec94f8487 | |
|
e557a5df86 | |
|
a996310f25 | |
|
a5d5c0006d | |
|
c6d44f1787 | |
|
50659ef1a7 | |
|
2a4ac18052 | |
|
de02aa3891 | |
|
854d311307 | |
|
a589422315 | |
|
0f67c55892 | |
|
e7d892f8a2 | |
|
14ee89c4af | |
|
d8c76f97af | |
|
7665cdd2e0 | |
|
39ec9a99bd | |
|
275cb94c02 | |
|
64d40d0f84 | |
|
67d943af61 | |
|
7034fecc0b | |
|
adc074804e | |
|
ac23b19b0a | |
|
8bdbbdccd5 | |
|
dbbd3922f9 | |
|
24d275045a | |
|
4befd2d588 | |
|
5aa29cc3dd | |
|
0548238a18 | |
|
1c136ed302 | |
|
8c7a441662 | |
|
f2d2800f79 | |
|
bce91a4951 | |
|
b94f7d3f44 | |
|
d7066714e5 | |
|
28ebad9966 | |
|
9b963d43f5 | |
|
4c85f9197c | |
|
1544e3e829 | |
|
ade816ab3f | |
|
8c3da0878e | |
|
ffbf766cee | |
|
b818eec318 | |
|
0a446e5f66 | |
|
8a1c5b04c5 | |
|
5e21feb414 | |
|
524faa18a5 | |
|
a49d01d23a | |
|
351c8e0d8e | |
|
50c343402b | |
|
facf7a8f51 | |
|
d388bbe4a4 | |
|
3ebacd55c1 | |
|
47fb031221 | |
|
345b931de9 | |
|
4cd953ff08 | |
|
8db8dec22b | |
|
6c698b5256 | |
|
3717cbc4ce | |
|
64d469210a | |
|
8e2e73f257 | |
|
d3e0851413 | |
|
075d1daf02 | |
|
141c95f63e | |
|
944681f334 | |
|
14428ca9ae | |
|
b188cbd181 | |
|
d4883a7fb2 | |
|
0d10667ef3 | |
|
f84e1b5aa8 | |
|
02f5447be3 | |
|
8fe29807a8 | |
|
023455be47 | |
|
9723dc0390 | |
|
35fdcf14f6 | |
|
7dbadc7378 | |
|
4b46233805 | |
|
849754b6c6 | |
|
7897ec9de3 | |
|
096151403a | |
|
6e4c96b404 | |
|
4ac2b4314c | |
|
b0f8e7264a | |
|
be16222032 |
|
@ -36,3 +36,9 @@ build/
|
||||||
.vscode/
|
.vscode/
|
||||||
target/
|
target/
|
||||||
logs/
|
logs/
|
||||||
|
|
||||||
|
### Maven ###
|
||||||
|
pom.xml
|
||||||
|
|
||||||
|
### YAML ###
|
||||||
|
*.yaml
|
||||||
|
|
42
core/pom.xml
42
core/pom.xml
|
@ -10,6 +10,10 @@
|
||||||
<artifactId>core</artifactId>
|
<artifactId>core</artifactId>
|
||||||
<version>1.0.0-SNAPSHOT</version>
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
@ -161,6 +165,44 @@
|
||||||
<artifactId>opencv</artifactId>
|
<artifactId>opencv</artifactId>
|
||||||
<version>4.7.0-0</version>
|
<version>4.7.0-0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- JavaMail邮件依赖 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-mail</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 阿里云短信核心库 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.aliyun</groupId>
|
||||||
|
<artifactId>aliyun-java-sdk-core</artifactId>
|
||||||
|
<version>4.6.3</version> <!-- 建议使用最新版本 -->
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 阿里云短信服务 SDK -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.aliyun</groupId>
|
||||||
|
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
|
||||||
|
<version>2.1.0</version> <!-- 建议使用最新版本 -->
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Java 11+ 需要额外添加的依赖 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.xml.bind</groupId>
|
||||||
|
<artifactId>jaxb-api</artifactId>
|
||||||
|
<version>2.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- WebSocket 支持 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.dite.znpt.config;
|
||||||
|
|
||||||
|
import com.dite.znpt.websocket.SimpleWebSocketHandler;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.socket.config.annotation.EnableWebSocket;
|
||||||
|
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
|
||||||
|
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WebSocket配置
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
@EnableWebSocket
|
||||||
|
public class WebSocketConfig implements WebSocketConfigurer {
|
||||||
|
|
||||||
|
private final SimpleWebSocketHandler simpleWebSocketHandler;
|
||||||
|
|
||||||
|
public WebSocketConfig(SimpleWebSocketHandler simpleWebSocketHandler) {
|
||||||
|
this.simpleWebSocketHandler = simpleWebSocketHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
|
||||||
|
registry.addHandler(simpleWebSocketHandler, "/websocket")
|
||||||
|
.setAllowedOrigins("*"); // 在生产环境中应该限制允许的源
|
||||||
|
}
|
||||||
|
}
|
|
@ -80,4 +80,9 @@ public class Message implements Serializable {
|
||||||
public static final String EQUIPMENT_IS_USED = "设备已被使用";
|
public static final String EQUIPMENT_IS_USED = "设备已被使用";
|
||||||
public static final String EQUIPMENT_IS_RETURN = "设备已归还";
|
public static final String EQUIPMENT_IS_RETURN = "设备已归还";
|
||||||
public static final String DAILY_REPORT_EXISTS = "当日已提交日报";
|
public static final String DAILY_REPORT_EXISTS = "当日已提交日报";
|
||||||
|
public static final String BIDDING_INFO_ID_IS_NOT_EXIST = "招标信息id不存在";
|
||||||
|
public static final String TENDER_INFO_ID_IS_NOT_EXIST = "投标信息id不存在";
|
||||||
|
public static final String TENDER_INFO_IS_EXIST = "招标[{}]已存中投信息存在";
|
||||||
|
public static final String OUTBID_INFO_ID_IS_NOT_EXIST = "中标信息id不存在";
|
||||||
|
public static final String OUTBID_INFO_IS_EXIST = "招标[{}]已存中标信息存在";
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,8 @@ public interface Converts {
|
||||||
|
|
||||||
List<RoleResp> toRoleResp(List<RoleEntity> list);
|
List<RoleResp> toRoleResp(List<RoleEntity> list);
|
||||||
|
|
||||||
|
List<UserResp> toUserResp(List<UserEntity> list);
|
||||||
|
|
||||||
RoleEntity toRoleEntity(RoleReq req);
|
RoleEntity toRoleEntity(RoleReq req);
|
||||||
|
|
||||||
MenuEntity toMenuEntity(MenuReq req);
|
MenuEntity toMenuEntity(MenuReq req);
|
||||||
|
@ -124,5 +126,9 @@ public interface Converts {
|
||||||
EquipmentEntity toEquipmentUseRecordEntity(EquipmentReq req);
|
EquipmentEntity toEquipmentUseRecordEntity(EquipmentReq req);
|
||||||
|
|
||||||
EquipmentUseRecordEntity toEquipmentUseRecordEntity(EquipmentUseRecordReq req);
|
EquipmentUseRecordEntity toEquipmentUseRecordEntity(EquipmentUseRecordReq req);
|
||||||
|
BiddingInfoEntity toBiddingInfoReq (BiddingInfoReq req);
|
||||||
|
List<BiddingInfoEntity> toBiddingInfoReq (List<BiddingInfoReq> req);
|
||||||
|
TenderInfoEntity toTenderInfoEntity (TenderInfoReq req);
|
||||||
|
OutbidInfoEntity toOutbidInfoEntity (OutbidInfoReq req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.dite.znpt.domain.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ApiModel("接受文件夹参数")
|
||||||
|
public class FolderDto {
|
||||||
|
private String name = "tom";
|
||||||
|
private Long parentId = 0L;
|
||||||
|
}
|
|
@ -43,6 +43,10 @@ public class AttachInfoEntity extends AuditableEntity implements Serializable {
|
||||||
@TableField("business_type")
|
@TableField("business_type")
|
||||||
private String businessType;
|
private String businessType;
|
||||||
|
|
||||||
|
@ApiModelProperty("文件名")
|
||||||
|
@TableField("file_name")
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
@ApiModelProperty("文件类型")
|
@ApiModelProperty("文件类型")
|
||||||
@TableField("file_type")
|
@TableField("file_type")
|
||||||
private String fileType;
|
private String fileType;
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.dite.znpt.domain.AuditableEntity;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 15:42
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@TableName("bidding_info")
|
||||||
|
@ApiModel(value="BiddingInfoEntity对象", description="招标信息表")
|
||||||
|
public class BiddingInfoEntity extends AuditableEntity implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = -2451841606051749490L;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标信息id")
|
||||||
|
@TableId(type = IdType.ASSIGN_UUID)
|
||||||
|
private String biddingInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标项目")
|
||||||
|
private String biddingProject;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标公司")
|
||||||
|
private String biddingCompany;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标金额")
|
||||||
|
private BigDecimal biddingAmount;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标截止时间")
|
||||||
|
private String biddingDeadline;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标信息录入时间")
|
||||||
|
private LocalDateTime infoEntryTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标信息来源")
|
||||||
|
private String source;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标信息来源网址")
|
||||||
|
private String sourceWebsite;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标文件id")
|
||||||
|
private String biddingFileId;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态:0-待报名,1-已报名")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@TableName("business_data_part")
|
||||||
|
@ApiModel(value="商务资料文件夹对象")
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class BusinessDataEntity {
|
||||||
|
|
||||||
|
// 主键
|
||||||
|
private Long folderId = null;
|
||||||
|
// 文件夹名称
|
||||||
|
private String folderName = null;
|
||||||
|
// 父级文件夹
|
||||||
|
private Long parentId = null;
|
||||||
|
// 创建人
|
||||||
|
private String creatorId = null;
|
||||||
|
// 创建时间
|
||||||
|
private LocalDateTime createTime = null;
|
||||||
|
// 更新时间
|
||||||
|
private LocalDateTime updateTime = null;
|
||||||
|
// 是否删除
|
||||||
|
private Boolean isDeleted = false;
|
||||||
|
// 文件夹路径
|
||||||
|
private String folderPath = null;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@TableName("business_data_part_file")
|
||||||
|
@ApiModel(value="商务资料对象")
|
||||||
|
|
||||||
|
public class BusinessDataFileEntity {
|
||||||
|
|
||||||
|
//文件id
|
||||||
|
private Long fileId = null;
|
||||||
|
//文件夹id
|
||||||
|
private Long folderId = null;
|
||||||
|
//文件名
|
||||||
|
private String fileName = null;
|
||||||
|
//文件路径
|
||||||
|
private String filePath = null;
|
||||||
|
//文件类型
|
||||||
|
private String fileType = "unknown";
|
||||||
|
//文件大小
|
||||||
|
private Long fileSize = null;
|
||||||
|
//上传时间
|
||||||
|
private Date uploadTime = null;
|
||||||
|
//上传人id
|
||||||
|
private String uploaderId = null;
|
||||||
|
//是否删除
|
||||||
|
private Boolean isDeleted = false;
|
||||||
|
// //有效日期
|
||||||
|
// private Date validDate = null;
|
||||||
|
|
||||||
|
}
|
|
@ -1,17 +1,20 @@
|
||||||
package com.dite.znpt.domain.entity;
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import java.util.Date;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import java.io.Serial;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import java.io.Serializable;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
|
||||||
import com.dite.znpt.domain.AuditableEntity;
|
import com.dite.znpt.domain.AuditableEntity;
|
||||||
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 lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author huise23
|
* @author huise23
|
||||||
|
@ -42,10 +45,10 @@ public class ContractEntity extends AuditableEntity implements Serializable {
|
||||||
@TableField("code")
|
@TableField("code")
|
||||||
private String code;
|
private String code;
|
||||||
|
|
||||||
@ExcelProperty("项目id")
|
@ExcelProperty("项目名称")
|
||||||
@ApiModelProperty("项目id")
|
@ApiModelProperty("项目名称")
|
||||||
@TableField("project_id")
|
@TableField("project_name")
|
||||||
private String projectId;
|
private String projectName;
|
||||||
|
|
||||||
@ExcelProperty("业务员id")
|
@ExcelProperty("业务员id")
|
||||||
@ApiModelProperty("业务员id")
|
@ApiModelProperty("业务员id")
|
||||||
|
@ -82,6 +85,11 @@ public class ContractEntity extends AuditableEntity implements Serializable {
|
||||||
@TableField("payment_date")
|
@TableField("payment_date")
|
||||||
private Date paymentDate;
|
private Date paymentDate;
|
||||||
|
|
||||||
|
@ExcelProperty("履约时间期限")
|
||||||
|
@ApiModelProperty("履约时间期限")
|
||||||
|
@TableField("performance_deadline")
|
||||||
|
private Date performanceDeadline;
|
||||||
|
|
||||||
@ExcelProperty("付款地址/交付地址")
|
@ExcelProperty("付款地址/交付地址")
|
||||||
@ApiModelProperty("付款地址/交付地址")
|
@ApiModelProperty("付款地址/交付地址")
|
||||||
@TableField("payment_address")
|
@TableField("payment_address")
|
||||||
|
@ -106,5 +114,10 @@ public class ContractEntity extends AuditableEntity implements Serializable {
|
||||||
@ApiModelProperty("合同状态")
|
@ApiModelProperty("合同状态")
|
||||||
@TableField("contract_status")
|
@TableField("contract_status")
|
||||||
private String contractStatus;
|
private String contractStatus;
|
||||||
|
|
||||||
|
@ExcelProperty("合同内容")
|
||||||
|
@ApiModelProperty("合同内容")
|
||||||
|
@TableField("contract_text")
|
||||||
|
private String contractText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.dite.znpt.domain.AuditableEntity;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/1/8/周三 17:26
|
||||||
|
* @description 设备审批实体
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@TableName("equipment_approval")
|
||||||
|
@ApiModel(value="EquipmentApprovalEntity对象", description="设备审批信息表")
|
||||||
|
public class EquipmentApprovalEntity extends AuditableEntity implements Serializable {
|
||||||
|
private static final long serialVersionUID = -6665040704562461286L;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批ID")
|
||||||
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
|
private String approvalId;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备ID")
|
||||||
|
private String equipmentId;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备名称")
|
||||||
|
private String equipmentName;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备类型")
|
||||||
|
private String equipmentType;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备型号")
|
||||||
|
private String equipmentModel;
|
||||||
|
|
||||||
|
@ApiModelProperty("品牌")
|
||||||
|
private String brand;
|
||||||
|
|
||||||
|
@ApiModelProperty("供应商名称")
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购价格")
|
||||||
|
private BigDecimal purchasePrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("总价")
|
||||||
|
private BigDecimal totalPrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("数量")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请人")
|
||||||
|
private String applicantName;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请人ID")
|
||||||
|
private String applicantId;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请时间")
|
||||||
|
private LocalDateTime applyTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请原因")
|
||||||
|
private String applyReason;
|
||||||
|
|
||||||
|
@ApiModelProperty("业务类型,PROCUREMENT-采购,BORROW-借用,RETURN-归还")
|
||||||
|
private String businessType;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批状态,PENDING-待审批,APPROVED-已通过,REJECTED-已拒绝")
|
||||||
|
private String approvalStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批人")
|
||||||
|
private String approverName;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批人ID")
|
||||||
|
private String approverId;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批时间")
|
||||||
|
private LocalDateTime approvalTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批意见")
|
||||||
|
private String approvalComment;
|
||||||
|
|
||||||
|
@ApiModelProperty("删除标志(0代表存在 1代表删除)")
|
||||||
|
@TableLogic
|
||||||
|
private String delFlag;
|
||||||
|
}
|
|
@ -7,8 +7,9 @@ import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bear.G
|
* @author Bear.G
|
||||||
|
@ -20,13 +21,15 @@ import java.io.Serializable;
|
||||||
@TableName("equipment")
|
@TableName("equipment")
|
||||||
@ApiModel(value="EquipmentEntity对象", description="设备信息表")
|
@ApiModel(value="EquipmentEntity对象", description="设备信息表")
|
||||||
public class EquipmentEntity extends AuditableEntity implements Serializable {
|
public class EquipmentEntity extends AuditableEntity implements Serializable {
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = -6665040704562461286L;
|
private static final long serialVersionUID = -6665040704562461286L;
|
||||||
|
|
||||||
@ApiModelProperty("设备id")
|
@ApiModelProperty("设备id")
|
||||||
@TableId(type = IdType.ASSIGN_ID)
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
private String equipmentId;
|
private String equipmentId;
|
||||||
|
|
||||||
|
@ApiModelProperty("资产编号")
|
||||||
|
private String assetCode;
|
||||||
|
|
||||||
@ApiModelProperty("设备名称")
|
@ApiModelProperty("设备名称")
|
||||||
private String equipmentName;
|
private String equipmentName;
|
||||||
|
|
||||||
|
@ -45,6 +48,165 @@ public class EquipmentEntity extends AuditableEntity implements Serializable {
|
||||||
@ApiModelProperty("设备序列号")
|
@ApiModelProperty("设备序列号")
|
||||||
private String equipmentSn;
|
private String equipmentSn;
|
||||||
|
|
||||||
|
@ApiModelProperty("品牌")
|
||||||
|
private String brand;
|
||||||
|
|
||||||
|
@ApiModelProperty("配置规格/参数")
|
||||||
|
private String specification;
|
||||||
|
|
||||||
|
@ApiModelProperty("位置状态")
|
||||||
|
private String locationStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备当前物理位置")
|
||||||
|
private String physicalLocation;
|
||||||
|
|
||||||
|
@ApiModelProperty("负责人")
|
||||||
|
private String responsiblePerson;
|
||||||
|
|
||||||
|
@ApiModelProperty("健康状态")
|
||||||
|
private String healthStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购时间")
|
||||||
|
private LocalDateTime purchaseTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("入库时间")
|
||||||
|
private LocalDateTime inStockTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("启用时间")
|
||||||
|
private LocalDateTime activationTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("预计报废时间")
|
||||||
|
private LocalDateTime expectedScrapTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("实际报废时间")
|
||||||
|
private LocalDateTime actualScrapTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态变更时间")
|
||||||
|
private LocalDateTime statusChangeTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购订单")
|
||||||
|
private String purchaseOrder;
|
||||||
|
|
||||||
|
@ApiModelProperty("供应商名称")
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
// 移除采购价格字段,使用单价和总价替代
|
||||||
|
// @ApiModelProperty("采购价格")
|
||||||
|
// private BigDecimal purchasePrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("当前净值")
|
||||||
|
private BigDecimal currentNetValue;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧方法")
|
||||||
|
private String depreciationMethod;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧年限")
|
||||||
|
private Integer depreciationYears;
|
||||||
|
|
||||||
|
@ApiModelProperty("残值")
|
||||||
|
private BigDecimal salvageValue;
|
||||||
|
|
||||||
|
@ApiModelProperty("保修截止日期")
|
||||||
|
private LocalDateTime warrantyExpireDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("上次维护日期")
|
||||||
|
private LocalDateTime lastMaintenanceDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("下次维护日期")
|
||||||
|
private LocalDateTime nextMaintenanceDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("维护人员")
|
||||||
|
private String maintenancePerson;
|
||||||
|
|
||||||
|
@ApiModelProperty("库存条码")
|
||||||
|
private String inventoryBarcode;
|
||||||
|
|
||||||
|
@ApiModelProperty("资产备注")
|
||||||
|
private String assetRemark;
|
||||||
|
|
||||||
|
@ApiModelProperty("次户号")
|
||||||
|
private String accountNumber;
|
||||||
|
|
||||||
|
@ApiModelProperty("数量")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("单价")
|
||||||
|
private BigDecimal unitPrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("总价")
|
||||||
|
private BigDecimal totalPrice;
|
||||||
|
|
||||||
|
// 移除备用状态字段,使用现有的 location_status 字段
|
||||||
|
// @ApiModelProperty("备用状态")
|
||||||
|
// private String spareStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点依据")
|
||||||
|
private String inventoryBasis;
|
||||||
|
|
||||||
|
@ApiModelProperty("动态记录")
|
||||||
|
private String dynamicRecord;
|
||||||
|
|
||||||
|
// 移除认证状态字段,使用现有的 health_status 字段
|
||||||
|
// @ApiModelProperty("认证状态")
|
||||||
|
// private String certificationStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("使用部门/人")
|
||||||
|
private String usingDepartment;
|
||||||
|
|
||||||
|
@ApiModelProperty("领用时间")
|
||||||
|
private LocalDateTime borrowingTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("归还时间")
|
||||||
|
private LocalDateTime returnTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("出库时间")
|
||||||
|
private LocalDateTime outStockTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("总使用时间")
|
||||||
|
private String totalUsageTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧率")
|
||||||
|
private BigDecimal depreciationRate;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧方法说明")
|
||||||
|
private String depreciationMethodDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("发票")
|
||||||
|
private String invoice;
|
||||||
|
|
||||||
|
@ApiModelProperty("发票状态")
|
||||||
|
private String invoiceStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("附件")
|
||||||
|
private String attachments;
|
||||||
|
|
||||||
|
@ApiModelProperty("照片")
|
||||||
|
private String photos;
|
||||||
|
|
||||||
|
@ApiModelProperty("条码")
|
||||||
|
private String barcode;
|
||||||
|
|
||||||
|
@ApiModelProperty("导入人")
|
||||||
|
private String importer;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘库时间/状态1")
|
||||||
|
private String inventoryTimeStatus1;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘库时间/状态2")
|
||||||
|
private String inventoryTimeStatus2;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘库时间/状态3")
|
||||||
|
private String inventoryTimeStatus3;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点时间/状态1")
|
||||||
|
private String inventoryCheckTimeStatus1;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点时间/状态2")
|
||||||
|
private String inventoryCheckTimeStatus2;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点时间/状态3")
|
||||||
|
private String inventoryCheckTimeStatus3;
|
||||||
|
|
||||||
@ApiModelProperty("当前使用记录id")
|
@ApiModelProperty("当前使用记录id")
|
||||||
@TableField(updateStrategy = FieldStrategy.ALWAYS)
|
@TableField(updateStrategy = FieldStrategy.ALWAYS)
|
||||||
private String useRecordId;
|
private String useRecordId;
|
||||||
|
@ -52,4 +214,7 @@ public class EquipmentEntity extends AuditableEntity implements Serializable {
|
||||||
@ApiModelProperty("删除标志(0代表存在 1代表删除)")
|
@ApiModelProperty("删除标志(0代表存在 1代表删除)")
|
||||||
@TableLogic(value = "0", delval = "1")
|
@TableLogic(value = "0", delval = "1")
|
||||||
private String delFlag;
|
private String delFlag;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目id")
|
||||||
|
private String projectId;
|
||||||
}
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.dite.znpt.domain.AuditableEntity;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 15:44
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@TableName("outbid_info")
|
||||||
|
@ApiModel(value="OutbidInfoEntity对象", description="中标通知信息表")
|
||||||
|
public class OutbidInfoEntity extends AuditableEntity implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 6941283868242292970L;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标通知信息id")
|
||||||
|
@TableId(type = IdType.ASSIGN_UUID)
|
||||||
|
private String outbidInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标信息id")
|
||||||
|
private String biddingInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标金额,单位元,精确到分")
|
||||||
|
private BigDecimal outbidAmount;
|
||||||
|
|
||||||
|
@ApiModelProperty("工期,单位天")
|
||||||
|
private Integer duration;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标通知日期")
|
||||||
|
private LocalDateTime outbidNotifyDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标通知文件")
|
||||||
|
private String outbidNoticeFileId;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ApiModelProperty("删除标志(0代表存在 1代表删除)")
|
||||||
|
@TableLogic(value = "0", delval = "1")
|
||||||
|
private String delFlag;
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package com.dite.znpt.domain.entity;
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
@ -13,6 +12,7 @@ import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bear.G
|
* @author Bear.G
|
||||||
|
@ -31,6 +31,10 @@ public class PostEntity extends AuditableEntity implements Serializable {
|
||||||
@TableId(value = "post_id", type = IdType.ASSIGN_UUID)
|
@TableId(value = "post_id", type = IdType.ASSIGN_UUID)
|
||||||
private String postId;
|
private String postId;
|
||||||
|
|
||||||
|
@ApiModelProperty("部门id")
|
||||||
|
@TableField("dept_id")
|
||||||
|
private String deptId;
|
||||||
|
|
||||||
@ApiModelProperty("岗位名称")
|
@ApiModelProperty("岗位名称")
|
||||||
@TableField("post_name")
|
@TableField("post_name")
|
||||||
private String postName;
|
private String postName;
|
||||||
|
@ -46,4 +50,32 @@ public class PostEntity extends AuditableEntity implements Serializable {
|
||||||
@ApiModelProperty("备注")
|
@ApiModelProperty("备注")
|
||||||
@TableField("remark")
|
@TableField("remark")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
@TableField("create_time")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("更新时间")
|
||||||
|
@TableField("update_time")
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位说明")
|
||||||
|
@TableField("statement")
|
||||||
|
private String statement;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位任务")
|
||||||
|
@TableField("responsibilities_task")
|
||||||
|
private String responsibilitiesTask;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位任职资格")
|
||||||
|
@TableField("qualifications")
|
||||||
|
private String qualifications;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位工作条件")
|
||||||
|
@TableField("working_conditions")
|
||||||
|
private String workingConditions;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位薪资")
|
||||||
|
@TableField("salary")
|
||||||
|
private Double salary;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ public class ProjectBudgetInfoEntity extends AuditableEntity implements Serializ
|
||||||
|
|
||||||
@ExcelProperty("主键")
|
@ExcelProperty("主键")
|
||||||
@ApiModelProperty("主键")
|
@ApiModelProperty("主键")
|
||||||
@TableId(value = "budget_id", type = IdType.ASSIGN_ID)
|
@TableId(value = "budget_id", type = IdType.AUTO)
|
||||||
private String budgetId;
|
private String budgetId;
|
||||||
|
|
||||||
@ExcelProperty("项目id")
|
@ExcelProperty("项目id")
|
||||||
|
@ -43,13 +43,8 @@ public class ProjectBudgetInfoEntity extends AuditableEntity implements Serializ
|
||||||
@TableField("budget_name")
|
@TableField("budget_name")
|
||||||
private String budgetName;
|
private String budgetName;
|
||||||
|
|
||||||
@ExcelProperty("预算类型")
|
@ExcelProperty("预算花费金额")
|
||||||
@ApiModelProperty("预算类型")
|
@ApiModelProperty("预算花费金额")
|
||||||
@TableField("budget_type")
|
|
||||||
private String budgetType;
|
|
||||||
|
|
||||||
@ExcelProperty("预算金额(万元)")
|
|
||||||
@ApiModelProperty("预算金额(万元)")
|
|
||||||
@TableField("budget_amount")
|
@TableField("budget_amount")
|
||||||
private Double budgetAmount;
|
private Double budgetAmount;
|
||||||
|
|
||||||
|
@ -57,5 +52,10 @@ public class ProjectBudgetInfoEntity extends AuditableEntity implements Serializ
|
||||||
@ApiModelProperty("预算说明")
|
@ApiModelProperty("预算说明")
|
||||||
@TableField("budget_desc")
|
@TableField("budget_desc")
|
||||||
private String budgetDesc;
|
private String budgetDesc;
|
||||||
|
|
||||||
|
@ExcelProperty("附件")
|
||||||
|
@ApiModelProperty("附件")
|
||||||
|
@TableField("attach")
|
||||||
|
private String attach;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,16 @@ public class ProjectEntity extends AuditableEntity implements Serializable {
|
||||||
@TableId(value = "project_id", type = IdType.ASSIGN_UUID)
|
@TableId(value = "project_id", type = IdType.ASSIGN_UUID)
|
||||||
private String projectId;
|
private String projectId;
|
||||||
|
|
||||||
|
@ExcelProperty("项目来源")
|
||||||
|
@ApiModelProperty("项目来源")
|
||||||
|
@TableField("project_origin")
|
||||||
|
private String projectOrigin;
|
||||||
|
|
||||||
|
@ExcelProperty("项目预算")
|
||||||
|
@ApiModelProperty("项目预算")
|
||||||
|
@TableField("project_budget")
|
||||||
|
private Integer projectBudget;
|
||||||
|
|
||||||
@ExcelProperty("项目名称")
|
@ExcelProperty("项目名称")
|
||||||
@ApiModelProperty("项目名称")
|
@ApiModelProperty("项目名称")
|
||||||
@TableField("project_name")
|
@TableField("project_name")
|
||||||
|
@ -91,24 +101,31 @@ public class ProjectEntity extends AuditableEntity implements Serializable {
|
||||||
@TableField("turbine_model")
|
@TableField("turbine_model")
|
||||||
private String turbineModel;
|
private String turbineModel;
|
||||||
|
|
||||||
@ApiModelProperty("施工人员id")
|
// 人员管理已迁移到 project_member 表
|
||||||
|
// 以下字段保留用于向后兼容,但建议使用 ProjectMemberService 进行人员管理
|
||||||
|
@ApiModelProperty("施工人员id(已废弃,请使用ProjectMemberService)")
|
||||||
@TableField("constructor_ids")
|
@TableField("constructor_ids")
|
||||||
|
@Deprecated
|
||||||
private String constructorIds;
|
private String constructorIds;
|
||||||
|
|
||||||
@ApiModelProperty("安全员id")
|
@ApiModelProperty("安全员id(已废弃,请使用ProjectMemberService)")
|
||||||
@TableField("auditor_id")
|
@TableField("auditor_id")
|
||||||
|
@Deprecated
|
||||||
private String auditorId;
|
private String auditorId;
|
||||||
|
|
||||||
@ApiModelProperty("质量员id")
|
@ApiModelProperty("质量员id(已废弃,请使用ProjectMemberService)")
|
||||||
@TableField("quality_officer_id")
|
@TableField("quality_officer_id")
|
||||||
|
@Deprecated
|
||||||
private String qualityOfficerId;
|
private String qualityOfficerId;
|
||||||
|
|
||||||
@ApiModelProperty("项目经理id")
|
@ApiModelProperty("项目经理id(已废弃,请使用ProjectMemberService)")
|
||||||
@TableField("project_manager_id")
|
@TableField("project_manager_id")
|
||||||
|
@Deprecated
|
||||||
private String projectManagerId;
|
private String projectManagerId;
|
||||||
|
|
||||||
@ApiModelProperty("施工组长id")
|
@ApiModelProperty("施工组长id(已废弃,请使用ProjectMemberService)")
|
||||||
@TableField("construct_team_leader_id")
|
@TableField("construct_team_leader_id")
|
||||||
|
@Deprecated
|
||||||
private String constructTeamLeaderId;
|
private String constructTeamLeaderId;
|
||||||
|
|
||||||
@ApiModelProperty("技术方案图片,多个用逗号隔开")
|
@ApiModelProperty("技术方案图片,多个用逗号隔开")
|
||||||
|
@ -162,5 +179,35 @@ public class ProjectEntity extends AuditableEntity implements Serializable {
|
||||||
// 施工人员,安全经理,项目经理,商务,财务,高级管理员,项目远程顾问外部协作者,质量经理、现场经理及工作组长。
|
// 施工人员,安全经理,项目经理,商务,财务,高级管理员,项目远程顾问外部协作者,质量经理、现场经理及工作组长。
|
||||||
@ApiModelProperty(value = "结束时间")
|
@ApiModelProperty(value = "结束时间")
|
||||||
private LocalDate endDate;
|
private LocalDate endDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("人工成本")
|
||||||
|
private Double laborCost;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备摊销")
|
||||||
|
private Double equipmentAmortization;
|
||||||
|
|
||||||
|
@ApiModelProperty("奖金预提")
|
||||||
|
private Double bonusProvision;
|
||||||
|
|
||||||
|
@ApiModelProperty("交通食宿")
|
||||||
|
private Double transAccomMeals;
|
||||||
|
|
||||||
|
@ApiModelProperty("其他杂费")
|
||||||
|
private Double othersCost;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用人工成本")
|
||||||
|
private Double useLaborCost;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用设备摊销")
|
||||||
|
private Double useEquipmentAmortization;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用奖金预提")
|
||||||
|
private Double useBonusProvision;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用交通食宿")
|
||||||
|
private Double useTransAccomMeals;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用其他杂费")
|
||||||
|
private Double useOthersCost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.dite.znpt.domain.AuditableEntity;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 项目人员关联表实体类
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@TableName("project_member")
|
||||||
|
@ApiModel(value="ProjectMemberEntity对象", description="项目人员关联表")
|
||||||
|
public class ProjectMemberEntity extends AuditableEntity implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ApiModelProperty("关联ID")
|
||||||
|
@TableId(value = "member_id", type = IdType.ASSIGN_UUID)
|
||||||
|
private String memberId;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目ID")
|
||||||
|
@TableField("project_id")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组ID(可选,关联到具体机组)")
|
||||||
|
@TableField("turbine_id")
|
||||||
|
private String turbineId;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务组ID(可选,关联到具体任务组)")
|
||||||
|
@TableField("task_group_id")
|
||||||
|
private String taskGroupId;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务ID(可选,关联到具体任务)")
|
||||||
|
@TableField("task_id")
|
||||||
|
private String taskId;
|
||||||
|
|
||||||
|
@ApiModelProperty("用户ID")
|
||||||
|
@TableField("user_id")
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目角色类型:PROJECT_MANAGER-项目经理,SAFETY_OFFICER-安全员,QUALITY_OFFICER-质量员,CONSTRUCTOR-施工人员,TEAM_LEADER-施工组长")
|
||||||
|
@TableField("role_type")
|
||||||
|
private String roleType;
|
||||||
|
|
||||||
|
@ApiModelProperty("具体岗位代码(如:GROUND_SERVICE-地勤,DRIVER-司机,ASCENDING-登高等)")
|
||||||
|
@TableField("job_code")
|
||||||
|
private String jobCode;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位描述")
|
||||||
|
@TableField("job_desc")
|
||||||
|
private String jobDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("加入时间")
|
||||||
|
@TableField("join_date")
|
||||||
|
private LocalDate joinDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("离开时间")
|
||||||
|
@TableField("leave_date")
|
||||||
|
private LocalDate leaveDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态:ACTIVE-在职,INACTIVE-离职,SUSPENDED-暂停")
|
||||||
|
@TableField("status")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ApiModelProperty("备注")
|
||||||
|
@TableField("remark")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
// 非数据库字段,用于显示
|
||||||
|
@TableField(exist = false)
|
||||||
|
@ApiModelProperty("用户姓名")
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
@ApiModelProperty("用户账号")
|
||||||
|
private String userAccount;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
@ApiModelProperty("角色类型描述")
|
||||||
|
private String roleTypeDesc;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
@ApiModelProperty("岗位代码描述")
|
||||||
|
private String jobCodeDesc;
|
||||||
|
}
|
|
@ -1,12 +1,15 @@
|
||||||
package com.dite.znpt.domain.entity;
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.dite.znpt.domain.AuditableEntity;
|
import com.dite.znpt.domain.AuditableEntity;
|
||||||
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 lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
@ -39,9 +42,7 @@ public class RegulationEntity extends AuditableEntity implements Serializable {
|
||||||
@TableField("content")
|
@TableField("content")
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
@ExcelProperty("制度类型")
|
@TableField(exist = false)
|
||||||
@ApiModelProperty("制度类型")
|
|
||||||
@TableField("regulation_type")
|
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
@ExcelProperty("制度状态")
|
@ExcelProperty("制度状态")
|
||||||
|
@ -97,7 +98,8 @@ public class RegulationEntity extends AuditableEntity implements Serializable {
|
||||||
@ApiModelProperty("创建人姓名")
|
@ApiModelProperty("创建人姓名")
|
||||||
private String createByName;
|
private String createByName;
|
||||||
|
|
||||||
@TableField(exist = false)
|
@ExcelProperty("制度类型")
|
||||||
@ApiModelProperty("制度类型")
|
@ApiModelProperty("制度类型")
|
||||||
|
@TableField("regulation_type")
|
||||||
private String regulationType;
|
private String regulationType;
|
||||||
}
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
package com.dite.znpt.domain.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.dite.znpt.domain.AuditableEntity;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 15:47
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@TableName("tender_info")
|
||||||
|
@ApiModel(value="TenderInfoEntity对象", description="投标信息表")
|
||||||
|
public class TenderInfoEntity extends AuditableEntity implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = -5677009089047831619L;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标信息id")
|
||||||
|
@TableId(type = IdType.ASSIGN_UUID)
|
||||||
|
private String tenderInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标信息id")
|
||||||
|
private String biddingInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标金额")
|
||||||
|
private BigDecimal tenderAmount;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目地址")
|
||||||
|
private String projectAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目类型")
|
||||||
|
private String projectType;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目描述")
|
||||||
|
private String projectDescription;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标负责人")
|
||||||
|
private String tenderManager;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标负责人手机号")
|
||||||
|
private String tenderManagerPhone;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标文件")
|
||||||
|
private String tenderFileId;
|
||||||
|
|
||||||
|
@ApiModelProperty("删除标志(0代表存在 1代表删除)")
|
||||||
|
@TableLogic(value = "0", delval = "1")
|
||||||
|
private String delFlag;
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.dite.znpt.domain.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.dite.znpt.domain.entity.EquipmentApprovalEntity;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/1/8/周三 17:30
|
||||||
|
* @description 设备审批Mapper接口
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface EquipmentApprovalMapper extends BaseMapper<EquipmentApprovalEntity> {
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.dite.znpt.domain.page;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PageBean {
|
||||||
|
private Long total;
|
||||||
|
private List<?> rows;
|
||||||
|
}
|
|
@ -24,6 +24,9 @@ public class AttachInfoReq implements Serializable {
|
||||||
@ApiModelProperty("自定义路径")
|
@ApiModelProperty("自定义路径")
|
||||||
private String userDefinedPath;
|
private String userDefinedPath;
|
||||||
|
|
||||||
|
@ApiModelProperty("文件名称")
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
@ApiModelProperty("文件类型")
|
@ApiModelProperty("文件类型")
|
||||||
private String fileType;
|
private String fileType;
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,9 @@ public class AttachInfoResp implements Serializable {
|
||||||
@ApiModelProperty("附件路径")
|
@ApiModelProperty("附件路径")
|
||||||
private String attachPath;
|
private String attachPath;
|
||||||
|
|
||||||
|
@ApiModelProperty("文件名称")
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
@ApiModelProperty("文件类型")
|
@ApiModelProperty("文件类型")
|
||||||
private String fileType;
|
private String fileType;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.Size;
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:18
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("招标信息请求实体")
|
||||||
|
public class BiddingInfoReq implements Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 6967025339487392364L;
|
||||||
|
@ColumnWidth(40)
|
||||||
|
@ExcelProperty(index = 0, value = "招标项目")
|
||||||
|
@ApiModelProperty("招标项目")
|
||||||
|
@Size(max = 50, message = "招标项目不能超过50个字符")
|
||||||
|
private String biddingProject;
|
||||||
|
|
||||||
|
@ColumnWidth(40)
|
||||||
|
@ExcelProperty(index = 1, value = "招标公司")
|
||||||
|
@ApiModelProperty("招标公司")
|
||||||
|
@Size(max = 50, message = "招标公司不能超过50个字符")
|
||||||
|
private String biddingCompany;
|
||||||
|
|
||||||
|
@ColumnWidth(20)
|
||||||
|
@ExcelProperty(index = 2, value = "招标金额\n(单位元,精确到分)")
|
||||||
|
@ApiModelProperty("招标金额")
|
||||||
|
private BigDecimal biddingAmount;
|
||||||
|
|
||||||
|
@ColumnWidth(30)
|
||||||
|
@ExcelProperty(index = 3, value = "招标截止时间\n(yyyy-MM-dd HH:mm:ss)")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@ApiModelProperty("招标截止时间")
|
||||||
|
private LocalDateTime biddingDeadline;
|
||||||
|
|
||||||
|
@ColumnWidth(30)
|
||||||
|
@ExcelProperty(index = 4, value = "信息录入时间\n(yyyy-MM-dd HH:mm:ss)")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@ApiModelProperty("信息录入时间")
|
||||||
|
private LocalDateTime infoEntryTime;
|
||||||
|
|
||||||
|
@ColumnWidth(20)
|
||||||
|
@ExcelProperty(index = 5, value = "信息来源")
|
||||||
|
@ApiModelProperty("信息来源")
|
||||||
|
@NotBlank(message = "信息来源不能为空")
|
||||||
|
@Size(max = 50, message = "信息来源不能超过50个字符")
|
||||||
|
private String source;
|
||||||
|
|
||||||
|
@ColumnWidth(60)
|
||||||
|
@ExcelProperty(index = 6, value = "信息来源网址")
|
||||||
|
@ApiModelProperty("信息来源网址")
|
||||||
|
@NotBlank(message = "信息来源网址不能为空")
|
||||||
|
@Size(max = 100, message = "信息来源网址不能超过100个字符")
|
||||||
|
private String sourceWebsite;
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:17
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("招标信息响应实体")
|
||||||
|
public class BiddingInfoResp extends BiddingInfoReq implements Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 2750666223381829115L;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标信息id")
|
||||||
|
private String biddingInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("文件名称")
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标文件地址")
|
||||||
|
private String attachPath;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,14 +1,13 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
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 java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author huise23
|
* @author huise23
|
||||||
* @date 2025/07/21 21:13
|
* @date 2025/07/21 21:13
|
||||||
|
@ -33,8 +32,8 @@ public class ContractListReq implements Serializable {
|
||||||
@ApiModelProperty("合同编号")
|
@ApiModelProperty("合同编号")
|
||||||
private String code;
|
private String code;
|
||||||
|
|
||||||
@ApiModelProperty("项目id")
|
@ApiModelProperty("项目名称")
|
||||||
private String projectId;
|
private String projectName;
|
||||||
|
|
||||||
@ApiModelProperty("业务员id")
|
@ApiModelProperty("业务员id")
|
||||||
private String salespersonId;
|
private String salespersonId;
|
||||||
|
@ -42,9 +41,6 @@ public class ContractListReq implements Serializable {
|
||||||
@ApiModelProperty("部门id")
|
@ApiModelProperty("部门id")
|
||||||
private String departmentId;
|
private String departmentId;
|
||||||
|
|
||||||
@ApiModelProperty("签订日期")
|
|
||||||
private Date signDate;
|
|
||||||
|
|
||||||
@ApiModelProperty("期限")
|
@ApiModelProperty("期限")
|
||||||
private String duration;
|
private String duration;
|
||||||
|
|
||||||
|
@ -54,9 +50,6 @@ public class ContractListReq implements Serializable {
|
||||||
@ApiModelProperty("产品或服务")
|
@ApiModelProperty("产品或服务")
|
||||||
private String productService;
|
private String productService;
|
||||||
|
|
||||||
@ApiModelProperty("付款日期/交付日期")
|
|
||||||
private Date paymentDate;
|
|
||||||
|
|
||||||
@ApiModelProperty("付款地址/交付地址")
|
@ApiModelProperty("付款地址/交付地址")
|
||||||
private String paymentAddress;
|
private String paymentAddress;
|
||||||
|
|
||||||
|
@ -72,5 +65,8 @@ public class ContractListReq implements Serializable {
|
||||||
@ApiModelProperty("合同状态")
|
@ApiModelProperty("合同状态")
|
||||||
private String contractStatus;
|
private String contractStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("合同内容")
|
||||||
|
private String contractText;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,14 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
|
||||||
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 lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
|
||||||
|
|
||||||
import com.dite.znpt.util.ValidationGroup;
|
import java.io.Serial;
|
||||||
import javax.validation.constraints.NotBlank;
|
import java.io.Serializable;
|
||||||
import javax.validation.constraints.NotNull;
|
import java.math.BigDecimal;
|
||||||
import javax.validation.constraints.Size;
|
import java.util.Date;
|
||||||
/**
|
/**
|
||||||
* @author huise23
|
* @author huise23
|
||||||
* @date 2025/07/21 21:13
|
* @date 2025/07/21 21:13
|
||||||
|
@ -38,8 +31,8 @@ public class ContractReq implements Serializable {
|
||||||
@ApiModelProperty("合同编号")
|
@ApiModelProperty("合同编号")
|
||||||
private String code;
|
private String code;
|
||||||
|
|
||||||
@ApiModelProperty("项目id")
|
@ApiModelProperty("项目名称")
|
||||||
private String projectId;
|
private String projectName;
|
||||||
|
|
||||||
@ApiModelProperty("业务员id")
|
@ApiModelProperty("业务员id")
|
||||||
private String salespersonId;
|
private String salespersonId;
|
||||||
|
@ -62,6 +55,9 @@ public class ContractReq implements Serializable {
|
||||||
@ApiModelProperty("付款日期/交付日期")
|
@ApiModelProperty("付款日期/交付日期")
|
||||||
private Date paymentDate;
|
private Date paymentDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("履约时间期限")
|
||||||
|
private Date performanceDeadline;
|
||||||
|
|
||||||
@ApiModelProperty("付款地址/交付地址")
|
@ApiModelProperty("付款地址/交付地址")
|
||||||
private String paymentAddress;
|
private String paymentAddress;
|
||||||
|
|
||||||
|
@ -76,5 +72,8 @@ public class ContractReq implements Serializable {
|
||||||
|
|
||||||
@ApiModelProperty("合同状态")
|
@ApiModelProperty("合同状态")
|
||||||
private String contractStatus;
|
private String contractStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("合同内容")
|
||||||
|
private String contractText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,12 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import com.dite.znpt.domain.entity.ContractEntity;
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
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 lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import com.dite.znpt.domain.entity.ContractEntity;
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author huise23
|
* @author huise23
|
||||||
|
@ -21,9 +18,6 @@ import com.dite.znpt.domain.entity.ContractEntity;
|
||||||
@ApiModel("合同响应实体")
|
@ApiModel("合同响应实体")
|
||||||
public class ContractResp extends ContractEntity {
|
public class ContractResp extends ContractEntity {
|
||||||
|
|
||||||
@ApiModelProperty("项目名称")
|
|
||||||
private String projectName;
|
|
||||||
|
|
||||||
@ApiModelProperty("业务员姓名")
|
@ApiModelProperty("业务员姓名")
|
||||||
private String salespersonName;
|
private String salespersonName;
|
||||||
|
|
||||||
|
@ -35,5 +29,8 @@ public class ContractResp extends ContractEntity {
|
||||||
|
|
||||||
@ApiModelProperty("已收款金额")
|
@ApiModelProperty("已收款金额")
|
||||||
private BigDecimal receivedAmount;
|
private BigDecimal receivedAmount;
|
||||||
|
|
||||||
|
@ApiModelProperty("合同状态名称")
|
||||||
|
private String contractStatusLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/1/8/周三 17:45
|
||||||
|
* @description 设备审批列表查询请求VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="EquipmentApprovalListReq对象", description="设备审批列表查询请求")
|
||||||
|
public class EquipmentApprovalListReq implements Serializable {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备名称")
|
||||||
|
private String equipmentName;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请人")
|
||||||
|
private String applicantName;
|
||||||
|
|
||||||
|
@ApiModelProperty("业务类型,PROCUREMENT-采购,BORROW-借用,RETURN-归还")
|
||||||
|
private String businessType;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批状态")
|
||||||
|
private String approvalStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请时间开始")
|
||||||
|
private String applyTimeStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请时间结束")
|
||||||
|
private String applyTimeEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批时间开始")
|
||||||
|
private String approvalTimeStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批时间结束")
|
||||||
|
private String approvalTimeEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("当前页码")
|
||||||
|
private Integer page;
|
||||||
|
|
||||||
|
@ApiModelProperty("每页大小")
|
||||||
|
private Integer pageSize;
|
||||||
|
|
||||||
|
@ApiModelProperty("排序字段")
|
||||||
|
private String orderBy;
|
||||||
|
|
||||||
|
@ApiModelProperty("排序方向")
|
||||||
|
private String orderDirection;
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/1/8/周三 17:35
|
||||||
|
* @description 设备审批请求VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="EquipmentApprovalReq对象", description="设备审批请求")
|
||||||
|
public class EquipmentApprovalReq implements Serializable {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批意见")
|
||||||
|
private String approvalComment;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批结果,APPROVED-通过,REJECTED-拒绝")
|
||||||
|
@NotBlank(message = "审批结果不能为空")
|
||||||
|
private String approvalResult;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批人")
|
||||||
|
private String approverName;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批人ID")
|
||||||
|
private String approverId;
|
||||||
|
}
|
|
@ -0,0 +1,86 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/1/8/周三 17:40
|
||||||
|
* @description 设备审批响应VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="EquipmentApprovalResp对象", description="设备审批响应")
|
||||||
|
public class EquipmentApprovalResp implements Serializable {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批ID")
|
||||||
|
private String approvalId;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备ID")
|
||||||
|
private String equipmentId;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备名称")
|
||||||
|
private String equipmentName;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备类型")
|
||||||
|
private String equipmentType;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备型号")
|
||||||
|
private String equipmentModel;
|
||||||
|
|
||||||
|
@ApiModelProperty("品牌")
|
||||||
|
private String brand;
|
||||||
|
|
||||||
|
@ApiModelProperty("供应商名称")
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购价格")
|
||||||
|
private BigDecimal purchasePrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("总价")
|
||||||
|
private BigDecimal totalPrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("数量")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请人")
|
||||||
|
private String applicantName;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请人ID")
|
||||||
|
private String applicantId;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请时间")
|
||||||
|
private LocalDateTime applyTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请原因")
|
||||||
|
private String applyReason;
|
||||||
|
|
||||||
|
@ApiModelProperty("业务类型,PROCUREMENT-采购,BORROW-借用,RETURN-归还")
|
||||||
|
private String businessType;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批状态")
|
||||||
|
private String approvalStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批人")
|
||||||
|
private String approverName;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批人ID")
|
||||||
|
private String approverId;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批时间")
|
||||||
|
private LocalDateTime approvalTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("审批意见")
|
||||||
|
private String approvalComment;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("更新时间")
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bear.G
|
* @author Bear.G
|
||||||
|
@ -26,4 +27,154 @@ public class EquipmentListReq implements Serializable {
|
||||||
|
|
||||||
@ApiModelProperty("设备状态,0-空闲中,1-使用,3-保养中,4-维修中,5-已报废")
|
@ApiModelProperty("设备状态,0-空闲中,1-使用,3-保养中,4-维修中,5-已报废")
|
||||||
private String equipmentStatus;
|
private String equipmentStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备序列号")
|
||||||
|
private String equipmentSn;
|
||||||
|
|
||||||
|
@ApiModelProperty("资产编号")
|
||||||
|
private String assetCode;
|
||||||
|
|
||||||
|
@ApiModelProperty("品牌")
|
||||||
|
private String brand;
|
||||||
|
|
||||||
|
@ApiModelProperty("位置状态")
|
||||||
|
private String locationStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("健康状态")
|
||||||
|
private String healthStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("负责人")
|
||||||
|
private String responsiblePerson;
|
||||||
|
|
||||||
|
@ApiModelProperty("使用状态,0-空闲中,1-使用中")
|
||||||
|
private String useStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目ID")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("用户ID")
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备型号")
|
||||||
|
private String equipmentModel;
|
||||||
|
|
||||||
|
@ApiModelProperty("配置规格/参数")
|
||||||
|
private String specification;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备当前物理位置")
|
||||||
|
private String physicalLocation;
|
||||||
|
|
||||||
|
@ApiModelProperty("供应商名称")
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购订单号")
|
||||||
|
private String purchaseOrder;
|
||||||
|
|
||||||
|
@ApiModelProperty("维护人员")
|
||||||
|
private String maintenancePerson;
|
||||||
|
|
||||||
|
@ApiModelProperty("次户号")
|
||||||
|
private String accountNumber;
|
||||||
|
|
||||||
|
@ApiModelProperty("数量")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("单价")
|
||||||
|
private java.math.BigDecimal unitPrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("总价")
|
||||||
|
private java.math.BigDecimal totalPrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点依据")
|
||||||
|
private String inventoryBasis;
|
||||||
|
|
||||||
|
@ApiModelProperty("动态记录")
|
||||||
|
private String dynamicRecord;
|
||||||
|
|
||||||
|
@ApiModelProperty("库存条码")
|
||||||
|
private String inventoryBarcode;
|
||||||
|
|
||||||
|
@ApiModelProperty("资产备注")
|
||||||
|
private String assetRemark;
|
||||||
|
|
||||||
|
@ApiModelProperty("使用部门/人")
|
||||||
|
private String usingDepartment;
|
||||||
|
|
||||||
|
@ApiModelProperty("发票")
|
||||||
|
private String invoice;
|
||||||
|
|
||||||
|
@ApiModelProperty("条码")
|
||||||
|
private String barcode;
|
||||||
|
|
||||||
|
@ApiModelProperty("导入人")
|
||||||
|
private String importer;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购时间开始")
|
||||||
|
private LocalDateTime purchaseTimeStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购时间结束")
|
||||||
|
private LocalDateTime purchaseTimeEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("入库时间开始")
|
||||||
|
private LocalDateTime inStockTimeStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("入库时间结束")
|
||||||
|
private LocalDateTime inStockTimeEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("启用时间开始")
|
||||||
|
private LocalDateTime activationTimeStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("启用时间结束")
|
||||||
|
private LocalDateTime activationTimeEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("预计报废时间开始")
|
||||||
|
private LocalDateTime expectedScrapTimeStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("预计报废时间结束")
|
||||||
|
private LocalDateTime expectedScrapTimeEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("保修截止日期开始")
|
||||||
|
private LocalDateTime warrantyExpireDateStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("保修截止日期结束")
|
||||||
|
private LocalDateTime warrantyExpireDateEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("上次维护日期开始")
|
||||||
|
private LocalDateTime lastMaintenanceDateStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("上次维护日期结束")
|
||||||
|
private LocalDateTime lastMaintenanceDateEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("下次维护日期开始")
|
||||||
|
private LocalDateTime nextMaintenanceDateStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("下次维护日期结束")
|
||||||
|
private LocalDateTime nextMaintenanceDateEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间开始")
|
||||||
|
private LocalDateTime createTimeStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间结束")
|
||||||
|
private LocalDateTime createTimeEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("更新时间开始")
|
||||||
|
private LocalDateTime updateTimeStart;
|
||||||
|
|
||||||
|
@ApiModelProperty("更新时间结束")
|
||||||
|
private LocalDateTime updateTimeEnd;
|
||||||
|
|
||||||
|
@ApiModelProperty("当前页码")
|
||||||
|
private Integer pageNum;
|
||||||
|
|
||||||
|
@ApiModelProperty("每页大小")
|
||||||
|
private Integer pageSize;
|
||||||
|
|
||||||
|
@ApiModelProperty("排序字段")
|
||||||
|
private String orderBy;
|
||||||
|
|
||||||
|
@ApiModelProperty("排序方向")
|
||||||
|
private String orderDirection;
|
||||||
|
|
||||||
|
@ApiModelProperty("页码")
|
||||||
|
private Integer page;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/1/8/周三 18:00
|
||||||
|
* @description 设备采购申请请求VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value = "EquipmentProcurementApplyReq", description = "设备采购申请请求")
|
||||||
|
public class EquipmentProcurementApplyReq {
|
||||||
|
|
||||||
|
@ApiModelProperty("设备ID")
|
||||||
|
@NotBlank(message = "设备ID不能为空")
|
||||||
|
private String equipmentId;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备名称")
|
||||||
|
@NotBlank(message = "设备名称不能为空")
|
||||||
|
private String equipmentName;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备类型")
|
||||||
|
@NotBlank(message = "设备类型不能为空")
|
||||||
|
private String equipmentType;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备型号")
|
||||||
|
private String equipmentModel;
|
||||||
|
|
||||||
|
@ApiModelProperty("品牌")
|
||||||
|
private String brand;
|
||||||
|
|
||||||
|
@ApiModelProperty("供应商名称")
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
@ApiModelProperty("预算金额")
|
||||||
|
@NotNull(message = "预算金额不能为空")
|
||||||
|
private BigDecimal budgetAmount;
|
||||||
|
|
||||||
|
@ApiModelProperty("数量")
|
||||||
|
@NotNull(message = "数量不能为空")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("紧急程度:LOW-低,NORMAL-普通,HIGH-高,URGENT-紧急")
|
||||||
|
@NotBlank(message = "紧急程度不能为空")
|
||||||
|
private String urgencyLevel;
|
||||||
|
|
||||||
|
@ApiModelProperty("申请原因")
|
||||||
|
@NotBlank(message = "申请原因不能为空")
|
||||||
|
private String applyReason;
|
||||||
|
|
||||||
|
@ApiModelProperty("技术要求")
|
||||||
|
private String technicalRequirements;
|
||||||
|
|
||||||
|
@ApiModelProperty("业务合理性说明")
|
||||||
|
private String businessJustification;
|
||||||
|
|
||||||
|
@ApiModelProperty("预期交付日期")
|
||||||
|
private LocalDate expectedDeliveryDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购类型:NEW_PURCHASE-新采购,REPLACEMENT-更换,UPGRADE-升级")
|
||||||
|
@NotBlank(message = "采购类型不能为空")
|
||||||
|
private String procurementType;
|
||||||
|
}
|
|
@ -8,6 +8,8 @@ import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bear.G
|
* @author Bear.G
|
||||||
|
@ -22,7 +24,7 @@ public class EquipmentReq implements Serializable {
|
||||||
|
|
||||||
@ApiModelProperty("设备名称")
|
@ApiModelProperty("设备名称")
|
||||||
@NotBlank(message = "设备名称不能为空")
|
@NotBlank(message = "设备名称不能为空")
|
||||||
@Size(max = 100, message = "设备名称长度不能超过100个字")
|
@Size(max = 200, message = "设备名称长度不能超过200个字")
|
||||||
private String equipmentName;
|
private String equipmentName;
|
||||||
|
|
||||||
@ApiModelProperty("设备类型, 枚举:EquipmentTypeEnum")
|
@ApiModelProperty("设备类型, 枚举:EquipmentTypeEnum")
|
||||||
|
@ -31,11 +33,204 @@ public class EquipmentReq implements Serializable {
|
||||||
|
|
||||||
@ApiModelProperty("设备型号")
|
@ApiModelProperty("设备型号")
|
||||||
@NotBlank(message = "设备型号不能为空")
|
@NotBlank(message = "设备型号不能为空")
|
||||||
@Size(max = 50, message = "设备型号长度不能超过50个字")
|
@Size(max = 200, message = "设备型号长度不能超过200个字")
|
||||||
private String equipmentModel;
|
private String equipmentModel;
|
||||||
|
|
||||||
@ApiModelProperty("设备SN")
|
@ApiModelProperty("设备SN")
|
||||||
@NotBlank(message = "设备SN不能为空")
|
@NotBlank(message = "设备SN不能为空")
|
||||||
@Size(max = 50, message = "设备SN长度不能超过50个字")
|
@Size(max = 100, message = "设备SN长度不能超过100个字")
|
||||||
private String equipmentSn;
|
private String equipmentSn;
|
||||||
|
|
||||||
|
@ApiModelProperty("资产编号")
|
||||||
|
@Size(max = 50, message = "资产编号长度不能超过50个字")
|
||||||
|
private String assetCode;
|
||||||
|
|
||||||
|
@ApiModelProperty("品牌")
|
||||||
|
@Size(max = 100, message = "品牌长度不能超过100个字")
|
||||||
|
private String brand;
|
||||||
|
|
||||||
|
@ApiModelProperty("配置规格/参数")
|
||||||
|
@Size(max = 500, message = "配置规格长度不能超过500个字")
|
||||||
|
private String specification;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备状态,枚举:EquipmentStatusEnum")
|
||||||
|
private String equipmentStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("使用状态,0-空闲中,1-使用中")
|
||||||
|
private String useStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("位置状态")
|
||||||
|
private String locationStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备当前物理位置")
|
||||||
|
@Size(max = 200, message = "物理位置长度不能超过200个字")
|
||||||
|
private String physicalLocation;
|
||||||
|
|
||||||
|
@ApiModelProperty("负责人")
|
||||||
|
@Size(max = 100, message = "负责人长度不能超过100个字")
|
||||||
|
private String responsiblePerson;
|
||||||
|
|
||||||
|
@ApiModelProperty("健康状态")
|
||||||
|
private String healthStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购时间")
|
||||||
|
private LocalDateTime purchaseTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("入库时间")
|
||||||
|
private LocalDateTime inStockTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("启用时间")
|
||||||
|
private LocalDateTime activationTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("预计报废时间")
|
||||||
|
private LocalDateTime expectedScrapTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("实际报废时间")
|
||||||
|
private LocalDateTime actualScrapTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态变更时间")
|
||||||
|
private LocalDateTime statusChangeTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购订单")
|
||||||
|
@Size(max = 100, message = "采购订单长度不能超过100个字")
|
||||||
|
private String purchaseOrder;
|
||||||
|
|
||||||
|
@ApiModelProperty("供应商名称")
|
||||||
|
@Size(max = 200, message = "供应商名称长度不能超过200个字")
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
// 移除采购价格字段,使用单价和总价替代
|
||||||
|
// @ApiModelProperty("采购价格")
|
||||||
|
// private BigDecimal purchasePrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("当前净值")
|
||||||
|
private BigDecimal currentNetValue;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧方法")
|
||||||
|
private String depreciationMethod;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧年限")
|
||||||
|
private Integer depreciationYears;
|
||||||
|
|
||||||
|
@ApiModelProperty("残值")
|
||||||
|
private BigDecimal salvageValue;
|
||||||
|
|
||||||
|
@ApiModelProperty("保修截止日期")
|
||||||
|
private LocalDateTime warrantyExpireDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("上次维护日期")
|
||||||
|
private LocalDateTime lastMaintenanceDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("下次维护日期")
|
||||||
|
private LocalDateTime nextMaintenanceDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("维护人员")
|
||||||
|
@Size(max = 100, message = "维护人员长度不能超过100个字")
|
||||||
|
private String maintenancePerson;
|
||||||
|
|
||||||
|
@ApiModelProperty("库存条码")
|
||||||
|
@Size(max = 100, message = "库存条码长度不能超过100个字")
|
||||||
|
private String inventoryBarcode;
|
||||||
|
|
||||||
|
@ApiModelProperty("资产备注")
|
||||||
|
@Size(max = 1000, message = "资产备注长度不能超过1000个字")
|
||||||
|
private String assetRemark;
|
||||||
|
|
||||||
|
@ApiModelProperty("次户号")
|
||||||
|
private String accountNumber;
|
||||||
|
|
||||||
|
@ApiModelProperty("数量")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("单价")
|
||||||
|
private BigDecimal unitPrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("总价")
|
||||||
|
private BigDecimal totalPrice;
|
||||||
|
|
||||||
|
// 移除备用状态字段,使用现有的 location_status 字段
|
||||||
|
// @ApiModelProperty("备用状态")
|
||||||
|
// private String spareStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点依据")
|
||||||
|
private String inventoryBasis;
|
||||||
|
|
||||||
|
@ApiModelProperty("动态记录")
|
||||||
|
private String dynamicRecord;
|
||||||
|
|
||||||
|
// 移除认证状态字段,使用现有的 health_status 字段
|
||||||
|
// @ApiModelProperty("认证状态")
|
||||||
|
// private String certificationStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("使用部门/人")
|
||||||
|
@Size(max = 200, message = "使用部门/人长度不能超过200个字")
|
||||||
|
private String usingDepartment;
|
||||||
|
|
||||||
|
@ApiModelProperty("领用时间")
|
||||||
|
private LocalDateTime borrowingTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("归还时间")
|
||||||
|
private LocalDateTime returnTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("出库时间")
|
||||||
|
private LocalDateTime outStockTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("总使用时间")
|
||||||
|
@Size(max = 100, message = "总使用时间长度不能超过100个字")
|
||||||
|
private String totalUsageTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧率")
|
||||||
|
private BigDecimal depreciationRate;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧方法说明")
|
||||||
|
@Size(max = 500, message = "折旧方法说明长度不能超过500个字")
|
||||||
|
private String depreciationMethodDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("发票")
|
||||||
|
@Size(max = 100, message = "发票长度不能超过100个字")
|
||||||
|
private String invoice;
|
||||||
|
|
||||||
|
@ApiModelProperty("发票状态")
|
||||||
|
@Size(max = 50, message = "发票状态长度不能超过50个字")
|
||||||
|
private String invoiceStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("附件")
|
||||||
|
@Size(max = 500, message = "附件长度不能超过500个字")
|
||||||
|
private String attachments;
|
||||||
|
|
||||||
|
@ApiModelProperty("照片")
|
||||||
|
@Size(max = 500, message = "照片长度不能超过500个字")
|
||||||
|
private String photos;
|
||||||
|
|
||||||
|
@ApiModelProperty("条码")
|
||||||
|
@Size(max = 100, message = "条码长度不能超过100个字")
|
||||||
|
private String barcode;
|
||||||
|
|
||||||
|
@ApiModelProperty("导入人")
|
||||||
|
@Size(max = 100, message = "导入人长度不能超过100个字")
|
||||||
|
private String importer;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘库时间/状态1")
|
||||||
|
@Size(max = 100, message = "盘库时间/状态1长度不能超过100个字")
|
||||||
|
private String inventoryTimeStatus1;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘库时间/状态2")
|
||||||
|
@Size(max = 100, message = "盘库时间/状态2长度不能超过100个字")
|
||||||
|
private String inventoryTimeStatus2;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘库时间/状态3")
|
||||||
|
@Size(max = 100, message = "盘库时间/状态3长度不能超过100个字")
|
||||||
|
private String inventoryTimeStatus3;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点时间/状态1")
|
||||||
|
@Size(max = 100, message = "盘点时间/状态1长度不能超过100个字")
|
||||||
|
private String inventoryCheckTimeStatus1;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点时间/状态2")
|
||||||
|
@Size(max = 100, message = "盘点时间/状态2长度不能超过100个字")
|
||||||
|
private String inventoryCheckTimeStatus2;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点时间/状态3")
|
||||||
|
@Size(max = 100, message = "盘点时间/状态3长度不能超过100个字")
|
||||||
|
private String inventoryCheckTimeStatus3;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
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 java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bear.G
|
* @author Bear.G
|
||||||
|
@ -21,10 +24,13 @@ public class EquipmentResp implements Serializable {
|
||||||
@ApiModelProperty("设备ID")
|
@ApiModelProperty("设备ID")
|
||||||
private String equipmentId;
|
private String equipmentId;
|
||||||
|
|
||||||
|
@ApiModelProperty("资产编号")
|
||||||
|
private String assetCode;
|
||||||
|
|
||||||
@ApiModelProperty("设备名称")
|
@ApiModelProperty("设备名称")
|
||||||
private String equipmentName;
|
private String equipmentName;
|
||||||
|
|
||||||
@ApiModelProperty("设备类型")
|
@ApiModelProperty("类型")
|
||||||
private String equipmentType;
|
private String equipmentType;
|
||||||
|
|
||||||
@ApiModelProperty("设备类型描述")
|
@ApiModelProperty("设备类型描述")
|
||||||
|
@ -36,6 +42,12 @@ public class EquipmentResp implements Serializable {
|
||||||
@ApiModelProperty("设备SN")
|
@ApiModelProperty("设备SN")
|
||||||
private String equipmentSn;
|
private String equipmentSn;
|
||||||
|
|
||||||
|
@ApiModelProperty("品牌")
|
||||||
|
private String brand;
|
||||||
|
|
||||||
|
@ApiModelProperty("配置规格/参数")
|
||||||
|
private String specification;
|
||||||
|
|
||||||
@ApiModelProperty("设备状态, 枚举:EquipmentStatusEnum")
|
@ApiModelProperty("设备状态, 枚举:EquipmentStatusEnum")
|
||||||
private String equipmentStatus;
|
private String equipmentStatus;
|
||||||
|
|
||||||
|
@ -45,6 +57,183 @@ public class EquipmentResp implements Serializable {
|
||||||
@ApiModelProperty("设备使用状态,0-空闲中,1-使用中")
|
@ApiModelProperty("设备使用状态,0-空闲中,1-使用中")
|
||||||
private String useStatus;
|
private String useStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("位置状态")
|
||||||
|
private String locationStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("位置状态描述")
|
||||||
|
private String locationStatusLabel;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备当前物理位置")
|
||||||
|
private String physicalLocation;
|
||||||
|
|
||||||
|
@ApiModelProperty("负责人")
|
||||||
|
private String responsiblePerson;
|
||||||
|
|
||||||
|
@ApiModelProperty("健康状态")
|
||||||
|
private String healthStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("健康状态描述")
|
||||||
|
private String healthStatusLabel;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime purchaseTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("入库时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime inStockTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("启用时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime activationTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("预计报废时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime expectedScrapTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("实际报废时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime actualScrapTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态变更时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime statusChangeTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("采购订单")
|
||||||
|
private String purchaseOrder;
|
||||||
|
|
||||||
|
@ApiModelProperty("供应商名称")
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
// 移除采购价格字段,使用单价和总价替代
|
||||||
|
// @ApiModelProperty("采购价格")
|
||||||
|
// private BigDecimal purchasePrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("当前净值")
|
||||||
|
private BigDecimal currentNetValue;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧方法")
|
||||||
|
private String depreciationMethod;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧年限")
|
||||||
|
private Integer depreciationYears;
|
||||||
|
|
||||||
|
@ApiModelProperty("残值")
|
||||||
|
private BigDecimal salvageValue;
|
||||||
|
|
||||||
|
@ApiModelProperty("保修截止日期")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime warrantyExpireDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("上次维护日期")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime lastMaintenanceDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("下次维护日期")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime nextMaintenanceDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("维护人员")
|
||||||
|
private String maintenancePerson;
|
||||||
|
|
||||||
|
@ApiModelProperty("库存条码")
|
||||||
|
private String inventoryBarcode;
|
||||||
|
|
||||||
|
@ApiModelProperty("资产备注")
|
||||||
|
private String assetRemark;
|
||||||
|
|
||||||
|
@ApiModelProperty("次户号")
|
||||||
|
private String accountNumber;
|
||||||
|
|
||||||
|
@ApiModelProperty("数量")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("单价")
|
||||||
|
private BigDecimal unitPrice;
|
||||||
|
|
||||||
|
@ApiModelProperty("总价")
|
||||||
|
private BigDecimal totalPrice;
|
||||||
|
|
||||||
|
// 移除备用状态字段,使用现有的 location_status 字段
|
||||||
|
// @ApiModelProperty("备用状态")
|
||||||
|
// private String spareStatus;
|
||||||
|
|
||||||
|
// @ApiModelProperty("备用状态描述")
|
||||||
|
// private String spareStatusLabel;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点依据")
|
||||||
|
private String inventoryBasis;
|
||||||
|
|
||||||
|
@ApiModelProperty("动态记录")
|
||||||
|
private String dynamicRecord;
|
||||||
|
|
||||||
|
// 移除认证状态字段,使用现有的 health_status 字段
|
||||||
|
// @ApiModelProperty("认证状态")
|
||||||
|
// private String certificationStatus;
|
||||||
|
|
||||||
|
// @ApiModelProperty("认证状态描述")
|
||||||
|
// private String certificationStatusLabel;
|
||||||
|
|
||||||
|
@ApiModelProperty("使用部门/人")
|
||||||
|
private String usingDepartment;
|
||||||
|
|
||||||
|
@ApiModelProperty("领用时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime borrowingTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("归还时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime returnTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("出库时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime outStockTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("总使用时间")
|
||||||
|
private String totalUsageTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧率")
|
||||||
|
private BigDecimal depreciationRate;
|
||||||
|
|
||||||
|
@ApiModelProperty("折旧方法说明")
|
||||||
|
private String depreciationMethodDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("发票")
|
||||||
|
private String invoice;
|
||||||
|
|
||||||
|
@ApiModelProperty("发票状态")
|
||||||
|
private String invoiceStatus;
|
||||||
|
|
||||||
|
@ApiModelProperty("附件")
|
||||||
|
private String attachments;
|
||||||
|
|
||||||
|
@ApiModelProperty("照片")
|
||||||
|
private String photos;
|
||||||
|
|
||||||
|
@ApiModelProperty("条码")
|
||||||
|
private String barcode;
|
||||||
|
|
||||||
|
@ApiModelProperty("导入人")
|
||||||
|
private String importer;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘库时间/状态1")
|
||||||
|
private String inventoryTimeStatus1;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘库时间/状态2")
|
||||||
|
private String inventoryTimeStatus2;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘库时间/状态3")
|
||||||
|
private String inventoryTimeStatus3;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点时间/状态1")
|
||||||
|
private String inventoryCheckTimeStatus1;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点时间/状态2")
|
||||||
|
private String inventoryCheckTimeStatus2;
|
||||||
|
|
||||||
|
@ApiModelProperty("盘点时间/状态3")
|
||||||
|
private String inventoryCheckTimeStatus3;
|
||||||
|
|
||||||
@ApiModelProperty("项目id")
|
@ApiModelProperty("项目id")
|
||||||
private String projectId;
|
private String projectId;
|
||||||
|
|
||||||
|
@ -56,4 +245,12 @@ public class EquipmentResp implements Serializable {
|
||||||
|
|
||||||
@ApiModelProperty("使用人")
|
@ApiModelProperty("使用人")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("更新时间")
|
||||||
|
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
|
||||||
|
private LocalDateTime updateTime;
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,4 +106,8 @@ public class ImageListResp implements Serializable {
|
||||||
|
|
||||||
@ApiModelProperty("项目id")
|
@ApiModelProperty("项目id")
|
||||||
private String projectId;
|
private String projectId;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@ApiModelProperty("上传时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
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 java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,4 +62,8 @@ public class ImageResp implements Serializable {
|
||||||
|
|
||||||
@ApiModelProperty("项目id")
|
@ApiModelProperty("项目id")
|
||||||
private String projectId;
|
private String projectId;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@ApiModelProperty("上传时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.Size;
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 17:05
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("中标信息请求实体")
|
||||||
|
public class OutbidInfoReq implements Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = -1781661335173747275L;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标信息ID")
|
||||||
|
@NotBlank(message = "中标信息ID不能为空")
|
||||||
|
private String biddingInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标金额")
|
||||||
|
private BigDecimal outbidAmount;
|
||||||
|
|
||||||
|
@ApiModelProperty("工期")
|
||||||
|
private Integer duration;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标通知日期")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime outbidNotifyDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标通知文件")
|
||||||
|
private String outbidNoticeFileId;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态:0-已通知,1-已签约")
|
||||||
|
private String status;
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 17:36
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("中标信息响应实体")
|
||||||
|
public class OutbidInfoResp extends OutbidInfoReq implements Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = -718886028432322862L;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标信息ID")
|
||||||
|
private String outbidInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标项目")
|
||||||
|
private String biddingProject;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标公司")
|
||||||
|
private String biddingCompany;
|
||||||
|
|
||||||
|
@ApiModelProperty("文件名称")
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
|
@ApiModelProperty("中标通知文件地址")
|
||||||
|
private String attachPath;
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/8/6/周三 14:37
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("项目预算信息列表请求实体")
|
||||||
|
public class PostListReq implements Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = -3911963210474319099L;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位名称")
|
||||||
|
private String postName;
|
||||||
|
|
||||||
|
@ApiModelProperty("部门id")
|
||||||
|
private String deptId;
|
||||||
|
|
||||||
|
@ApiModelProperty("是否包含部门子节点")
|
||||||
|
private Boolean includeDeptChildren;
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.dite.znpt.util.ValidationGroup;
|
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;
|
||||||
|
@ -21,6 +22,10 @@ public class PostReq implements Serializable {
|
||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = -149328762675637911L;
|
private static final long serialVersionUID = -149328762675637911L;
|
||||||
|
|
||||||
|
@ApiModelProperty("部门id")
|
||||||
|
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "部门id不能为空")
|
||||||
|
private String deptId;
|
||||||
|
|
||||||
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "岗位名称不能为空")
|
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "岗位名称不能为空")
|
||||||
@Size(max = 30, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "岗位名称长度不能超过30个字符")
|
@Size(max = 30, groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "岗位名称长度不能超过30个字符")
|
||||||
@ApiModelProperty("岗位名称")
|
@ApiModelProperty("岗位名称")
|
||||||
|
@ -29,9 +34,24 @@ public class PostReq implements Serializable {
|
||||||
@ApiModelProperty("显示顺序")
|
@ApiModelProperty("显示顺序")
|
||||||
private Integer postSort;
|
private Integer postSort;
|
||||||
|
|
||||||
@ApiModelProperty("状态(0正常 1停用)")
|
@ApiModelProperty("状态(0停用 1正常)")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
@ApiModelProperty("备注")
|
@ApiModelProperty("备注")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位说明")
|
||||||
|
private String statement;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位任务")
|
||||||
|
private String responsibilitiesTask;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位任职资格")
|
||||||
|
private String qualifications;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位工作条件")
|
||||||
|
private String workingConditions;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位薪资")
|
||||||
|
private Double salary;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
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;
|
||||||
|
@ -7,6 +8,7 @@ import lombok.Data;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bear.G
|
* @author Bear.G
|
||||||
|
@ -22,6 +24,12 @@ public class PostResp implements Serializable {
|
||||||
@ApiModelProperty("岗位id")
|
@ApiModelProperty("岗位id")
|
||||||
private String postId;
|
private String postId;
|
||||||
|
|
||||||
|
@ApiModelProperty("部门id")
|
||||||
|
private String deptId;
|
||||||
|
|
||||||
|
@ApiModelProperty("部门名称")
|
||||||
|
private String deptName;
|
||||||
|
|
||||||
@ApiModelProperty("岗位名称")
|
@ApiModelProperty("岗位名称")
|
||||||
private String postName;
|
private String postName;
|
||||||
|
|
||||||
|
@ -35,4 +43,25 @@ public class PostResp implements Serializable {
|
||||||
@ApiModelProperty("备注")
|
@ApiModelProperty("备注")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("更新时间")
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位说明")
|
||||||
|
private String statement;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位任务")
|
||||||
|
private String responsibilitiesTask;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位任职资格")
|
||||||
|
private String qualifications;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位工作条件")
|
||||||
|
private String workingConditions;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位薪资")
|
||||||
|
private Double salary;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("项目预算信息详情")
|
||||||
|
public class ProjectBudgetInfoDetailResp implements Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 766154886845694269L;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目id")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目名称")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目预算")
|
||||||
|
private Double projectBudget;
|
||||||
|
|
||||||
|
@ApiModelProperty("人工成本")
|
||||||
|
private Double laborCost;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备摊销")
|
||||||
|
private Double equipmentAmortization;
|
||||||
|
|
||||||
|
@ApiModelProperty("奖金预提")
|
||||||
|
private Double bonusProvision;
|
||||||
|
|
||||||
|
@ApiModelProperty("交通食宿")
|
||||||
|
private Double transAccomMeals;
|
||||||
|
|
||||||
|
@ApiModelProperty("其他杂费")
|
||||||
|
private Double othersCost;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用人工成本")
|
||||||
|
private Double useLaborCost;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用设备摊销")
|
||||||
|
private Double useEquipmentAmortization;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用奖金预提")
|
||||||
|
private Double useBonusProvision;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用交通食宿")
|
||||||
|
private Double useTransAccomMeals;
|
||||||
|
|
||||||
|
@ApiModelProperty("已用其他杂费")
|
||||||
|
private Double useOthersCost;
|
||||||
|
|
||||||
|
@ApiModelProperty("剩余预算")
|
||||||
|
private Double restBudget;
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
/**
|
||||||
|
* @author huise23
|
||||||
|
* @date 2025/07/17 21:58
|
||||||
|
* @Description: 项目预算信息表导入请求类
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@ApiModel(value="ProjectBudgetInfo导入请求对象", description="项目预算信息表")
|
||||||
|
public class ProjectBudgetInfoImportReq implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 580212651388155611L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "项目Id")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "预算名称")
|
||||||
|
private String budgetName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "预算花费金额")
|
||||||
|
private Double budgetAmount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "预算说明")
|
||||||
|
private String budgetDesc;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "附件")
|
||||||
|
private String attach;
|
||||||
|
}
|
|
@ -22,7 +22,7 @@ public class ProjectBudgetInfoListReq implements Serializable {
|
||||||
@ApiModelProperty("查询关键字")
|
@ApiModelProperty("查询关键字")
|
||||||
private String keyword;
|
private String keyword;
|
||||||
|
|
||||||
@ApiModelProperty("项目预算信息Id")
|
@ApiModelProperty("项目预算单Id")
|
||||||
private String budgetId;
|
private String budgetId;
|
||||||
|
|
||||||
@ApiModelProperty("项目id")
|
@ApiModelProperty("项目id")
|
||||||
|
@ -31,14 +31,10 @@ public class ProjectBudgetInfoListReq implements Serializable {
|
||||||
@ApiModelProperty("预算名称")
|
@ApiModelProperty("预算名称")
|
||||||
private String budgetName;
|
private String budgetName;
|
||||||
|
|
||||||
@ApiModelProperty("预算类型")
|
@ApiModelProperty("预算花费金额")
|
||||||
private String budgetType;
|
|
||||||
|
|
||||||
@ApiModelProperty("预算金额(万元)")
|
|
||||||
private Double budgetAmount;
|
private Double budgetAmount;
|
||||||
|
|
||||||
@ApiModelProperty("预算说明")
|
@ApiModelProperty("预算说明")
|
||||||
private String budgetDesc;
|
private String budgetDesc;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity;
|
import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@ -14,6 +15,7 @@ import lombok.EqualsAndHashCode;
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ApiModel("项目预算信息列表响应实体")
|
@ApiModel("项目预算信息列表响应实体")
|
||||||
public class ProjectBudgetInfoListResp extends ProjectBudgetInfoEntity {
|
public class ProjectBudgetInfoListResp extends ProjectBudgetInfoEntity {
|
||||||
|
@ApiModelProperty("项目名称")
|
||||||
|
private String projectName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,16 +26,13 @@ public class ProjectBudgetInfoReq implements Serializable {
|
||||||
@ApiModelProperty("预算名称")
|
@ApiModelProperty("预算名称")
|
||||||
private String budgetName;
|
private String budgetName;
|
||||||
|
|
||||||
@ApiModelProperty("预算类型")
|
@ApiModelProperty("预算花费金额")
|
||||||
private String budgetType;
|
|
||||||
|
|
||||||
@ApiModelProperty("预算金额(万元)")
|
|
||||||
private Double budgetAmount;
|
private Double budgetAmount;
|
||||||
|
|
||||||
@ApiModelProperty("预算说明")
|
@ApiModelProperty("预算说明")
|
||||||
private String budgetDesc;
|
private String budgetDesc;
|
||||||
|
|
||||||
@ApiModelProperty("附件id")
|
@ApiModelProperty("附件")
|
||||||
private String attachId;
|
private String attach;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,7 @@ import lombok.EqualsAndHashCode;
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ApiModel("项目预算信息响应实体")
|
@ApiModel("项目预算信息响应实体")
|
||||||
public class ProjectBudgetInfoResp extends ProjectBudgetInfoEntity {
|
public class ProjectBudgetInfoResp extends ProjectBudgetInfoEntity {
|
||||||
|
@ApiModelProperty("项目名称")
|
||||||
@ApiModelProperty("预算类型描述")
|
private String projectName;
|
||||||
private String budgetTypeDesc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,197 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 项目详情响应VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="ProjectDetailResp对象", description="项目详情响应")
|
||||||
|
public class ProjectDetailResp {
|
||||||
|
|
||||||
|
@ApiModelProperty("项目ID")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目名称")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目封面")
|
||||||
|
private String coverUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty("风场名称")
|
||||||
|
private String farmName;
|
||||||
|
|
||||||
|
@ApiModelProperty("风场地址")
|
||||||
|
private String farmAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty("委托单位")
|
||||||
|
private String client;
|
||||||
|
|
||||||
|
@ApiModelProperty("委托单位联系人")
|
||||||
|
private String clientContact;
|
||||||
|
|
||||||
|
@ApiModelProperty("委托单位联系电话")
|
||||||
|
private String clientPhone;
|
||||||
|
|
||||||
|
@ApiModelProperty("检查单位")
|
||||||
|
private String inspectionUnit;
|
||||||
|
|
||||||
|
@ApiModelProperty("检查单位联系人")
|
||||||
|
private String inspectionContact;
|
||||||
|
|
||||||
|
@ApiModelProperty("检查单位联系电话")
|
||||||
|
private String inspectionPhone;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目规模")
|
||||||
|
private String scale;
|
||||||
|
|
||||||
|
@ApiModelProperty("总工期(天数)")
|
||||||
|
private Integer duration;
|
||||||
|
|
||||||
|
@ApiModelProperty("风机型号")
|
||||||
|
private String turbineModel;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目状态描述")
|
||||||
|
private String statusLabel;
|
||||||
|
|
||||||
|
@ApiModelProperty("开始时间")
|
||||||
|
private LocalDate startDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("结束时间")
|
||||||
|
private LocalDate endDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("计划开始时间")
|
||||||
|
private LocalDate plannedStartDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
private String createTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("更新时间")
|
||||||
|
private String updateTime;
|
||||||
|
|
||||||
|
// 新增字段 - 对应前端ProjectCard接口
|
||||||
|
@ApiModelProperty("项目预算(万元)")
|
||||||
|
private BigDecimal budget;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目经理")
|
||||||
|
private String manager;
|
||||||
|
|
||||||
|
@ApiModelProperty("团队规模")
|
||||||
|
private Integer teamSize;
|
||||||
|
|
||||||
|
@ApiModelProperty("准备进度百分比")
|
||||||
|
private Integer preparationProgress;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目进度百分比")
|
||||||
|
private Integer progress;
|
||||||
|
|
||||||
|
// 项目人员信息(从新关联表获取)
|
||||||
|
@ApiModelProperty("项目人员列表")
|
||||||
|
private List<ProjectMemberResp> projectMembers;
|
||||||
|
|
||||||
|
// 项目机组信息
|
||||||
|
@ApiModelProperty("项目机组列表")
|
||||||
|
private List<TurbineInfo> turbines;
|
||||||
|
|
||||||
|
// 项目任务信息
|
||||||
|
@ApiModelProperty("项目任务列表")
|
||||||
|
private List<TaskInfo> tasks;
|
||||||
|
|
||||||
|
// 项目预算信息
|
||||||
|
@ApiModelProperty("项目预算列表")
|
||||||
|
private List<BudgetInfo> budgets;
|
||||||
|
|
||||||
|
// 项目日报信息
|
||||||
|
@ApiModelProperty("项目日报列表")
|
||||||
|
private List<DailyReportInfo> dailyReports;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="TurbineInfo对象", description="机组信息")
|
||||||
|
public static class TurbineInfo {
|
||||||
|
@ApiModelProperty("机组ID")
|
||||||
|
private String turbineId;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组名称")
|
||||||
|
private String turbineName;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组编码")
|
||||||
|
private String turbineCode;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组状态描述")
|
||||||
|
private String statusLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="TaskInfo对象", description="任务信息")
|
||||||
|
public static class TaskInfo {
|
||||||
|
@ApiModelProperty("任务ID")
|
||||||
|
private String taskId;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务名称")
|
||||||
|
private String taskName;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务状态描述")
|
||||||
|
private String statusLabel;
|
||||||
|
|
||||||
|
@ApiModelProperty("计划开始时间")
|
||||||
|
private LocalDate planStartDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("计划结束时间")
|
||||||
|
private LocalDate planEndDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("实际开始时间")
|
||||||
|
private LocalDate actualStartDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("实际结束时间")
|
||||||
|
private LocalDate actualEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="BudgetInfo对象", description="预算信息")
|
||||||
|
public static class BudgetInfo {
|
||||||
|
@ApiModelProperty("预算ID")
|
||||||
|
private String budgetId;
|
||||||
|
|
||||||
|
@ApiModelProperty("预算名称")
|
||||||
|
private String budgetName;
|
||||||
|
|
||||||
|
@ApiModelProperty("预算金额(万元)")
|
||||||
|
private Double budgetAmount;
|
||||||
|
|
||||||
|
@ApiModelProperty("预算说明")
|
||||||
|
private String budgetDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="DailyReportInfo对象", description="日报信息")
|
||||||
|
public static class DailyReportInfo {
|
||||||
|
@ApiModelProperty("日报ID")
|
||||||
|
private String reportId;
|
||||||
|
|
||||||
|
@ApiModelProperty("日报日期")
|
||||||
|
private LocalDate reportDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("日报提交人")
|
||||||
|
private String submitUserName;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
private String createTime;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,173 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 项目看板数据响应VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="ProjectKanbanDataResp对象", description="项目看板数据响应")
|
||||||
|
public class ProjectKanbanDataResp {
|
||||||
|
|
||||||
|
@ApiModelProperty("待施工项目列表")
|
||||||
|
private List<ProjectKanbanItem> pendingProjects;
|
||||||
|
|
||||||
|
@ApiModelProperty("施工中项目列表")
|
||||||
|
private List<ProjectKanbanItem> inProgressProjects;
|
||||||
|
|
||||||
|
@ApiModelProperty("已完工项目列表")
|
||||||
|
private List<ProjectKanbanItem> completedProjects;
|
||||||
|
|
||||||
|
@ApiModelProperty("已审核项目列表")
|
||||||
|
private List<ProjectKanbanItem> auditedProjects;
|
||||||
|
|
||||||
|
@ApiModelProperty("已验收项目列表")
|
||||||
|
private List<ProjectKanbanItem> acceptedProjects;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="ProjectKanbanItem对象", description="项目看板项目项")
|
||||||
|
public static class ProjectKanbanItem {
|
||||||
|
|
||||||
|
@ApiModelProperty("项目ID")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目名称")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目封面")
|
||||||
|
private String coverUrl;
|
||||||
|
|
||||||
|
@ApiModelProperty("风场名称")
|
||||||
|
private String farmName;
|
||||||
|
|
||||||
|
@ApiModelProperty("风场地址")
|
||||||
|
private String farmAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目规模")
|
||||||
|
private String scale;
|
||||||
|
|
||||||
|
@ApiModelProperty("总工期(天数)")
|
||||||
|
private Integer duration;
|
||||||
|
|
||||||
|
@ApiModelProperty("风机型号")
|
||||||
|
private String turbineModel;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目状态描述")
|
||||||
|
private String statusLabel;
|
||||||
|
|
||||||
|
@ApiModelProperty("开始时间")
|
||||||
|
private LocalDate startDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("结束时间")
|
||||||
|
private LocalDate endDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("计划开始时间")
|
||||||
|
private LocalDate plannedStartDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目经理")
|
||||||
|
private String projectManagerName;
|
||||||
|
|
||||||
|
@ApiModelProperty("安全员")
|
||||||
|
private String safetyOfficerName;
|
||||||
|
|
||||||
|
@ApiModelProperty("质量员")
|
||||||
|
private String qualityOfficerName;
|
||||||
|
|
||||||
|
@ApiModelProperty("施工组长")
|
||||||
|
private String constructionTeamLeaderName;
|
||||||
|
|
||||||
|
@ApiModelProperty("施工人员")
|
||||||
|
private String constructorNames;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组数量")
|
||||||
|
private Long turbineCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务数量")
|
||||||
|
private Long taskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("已完成任务数量")
|
||||||
|
private Long completedTaskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目进度百分比")
|
||||||
|
private Integer progressPercentage;
|
||||||
|
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
private String createTime;
|
||||||
|
|
||||||
|
@ApiModelProperty("更新时间")
|
||||||
|
private String updateTime;
|
||||||
|
|
||||||
|
// 新增字段 - 对应前端ProjectCard接口
|
||||||
|
@ApiModelProperty("项目预算(万元)")
|
||||||
|
private BigDecimal budget;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目经理")
|
||||||
|
private String manager;
|
||||||
|
|
||||||
|
@ApiModelProperty("团队规模")
|
||||||
|
private Integer teamSize;
|
||||||
|
|
||||||
|
@ApiModelProperty("准备进度百分比")
|
||||||
|
private Integer preparationProgress;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目进度百分比")
|
||||||
|
private Integer progress;
|
||||||
|
|
||||||
|
@ApiModelProperty("团队成员列表")
|
||||||
|
private List<TeamMemberResp> teamMembers;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="TeamMemberResp对象", description="团队成员响应")
|
||||||
|
public static class TeamMemberResp {
|
||||||
|
@ApiModelProperty("成员ID")
|
||||||
|
private String memberId;
|
||||||
|
|
||||||
|
@ApiModelProperty("用户ID")
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
@ApiModelProperty("用户姓名")
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
@ApiModelProperty("用户账号")
|
||||||
|
private String userAccount;
|
||||||
|
|
||||||
|
@ApiModelProperty("用户头像")
|
||||||
|
private String userAvatar;
|
||||||
|
|
||||||
|
@ApiModelProperty("角色类型")
|
||||||
|
private String roleType;
|
||||||
|
|
||||||
|
@ApiModelProperty("角色类型描述")
|
||||||
|
private String roleTypeDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位代码")
|
||||||
|
private String jobCode;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位代码描述")
|
||||||
|
private String jobCodeDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位描述")
|
||||||
|
private String jobDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("加入时间")
|
||||||
|
private LocalDate joinDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("离开时间")
|
||||||
|
private LocalDate leaveDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态")
|
||||||
|
private String status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,81 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 项目看板统计数据响应VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="ProjectKanbanStatsResp对象", description="项目看板统计数据响应")
|
||||||
|
public class ProjectKanbanStatsResp {
|
||||||
|
|
||||||
|
@ApiModelProperty("总项目数")
|
||||||
|
private Long totalProjectsCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("待施工项目数")
|
||||||
|
private Long pendingProjectCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("施工中项目数")
|
||||||
|
private Long inProgressProjectCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("已完工项目数")
|
||||||
|
private Long completedProjectCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("已审核项目数")
|
||||||
|
private Long auditedProjectCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("已验收项目数")
|
||||||
|
private Long acceptedProjectCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("总机组数")
|
||||||
|
private Long totalTurbineCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("待施工机组数")
|
||||||
|
private Long pendingTurbineCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("施工中机组数")
|
||||||
|
private Long inProgressTurbineCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("已完工机组数")
|
||||||
|
private Long completedTurbineCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("已审核机组数")
|
||||||
|
private Long auditedTurbineCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("已验收机组数")
|
||||||
|
private Long acceptedTurbineCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("总任务数")
|
||||||
|
private Long totalTaskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("未开始任务数")
|
||||||
|
private Long pendingTaskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("进行中任务数")
|
||||||
|
private Long inProgressTaskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("已完成任务数")
|
||||||
|
private Long completedTaskCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("总人员数")
|
||||||
|
private Long totalMemberCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目经理数")
|
||||||
|
private Long projectManagerCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("安全员数")
|
||||||
|
private Long safetyOfficerCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("质量员数")
|
||||||
|
private Long qualityOfficerCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("施工人员数")
|
||||||
|
private Long constructorCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("施工组长数")
|
||||||
|
private Long teamLeaderCount;
|
||||||
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
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;
|
||||||
|
@ -23,6 +21,12 @@ public class ProjectListReq implements Serializable {
|
||||||
@ApiModelProperty("项目名称")
|
@ApiModelProperty("项目名称")
|
||||||
private String projectName;
|
private String projectName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "项目来源")
|
||||||
|
private String projectOrigin;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "项目预算")
|
||||||
|
private Integer projectBudget;
|
||||||
|
|
||||||
@ApiModelProperty("风场名称")
|
@ApiModelProperty("风场名称")
|
||||||
private String farmName;
|
private String farmName;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,5 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import com.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;
|
||||||
|
@ -12,7 +7,6 @@ import lombok.Data;
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: gaoxiong
|
* @Author: gaoxiong
|
||||||
|
@ -31,6 +25,12 @@ public class ProjectListResp implements Serializable {
|
||||||
@ApiModelProperty("项目名称")
|
@ApiModelProperty("项目名称")
|
||||||
private String projectName;
|
private String projectName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "项目来源")
|
||||||
|
private String projectOrigin;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "项目预算")
|
||||||
|
private Integer projectBudget;
|
||||||
|
|
||||||
@ApiModelProperty("风场名称")
|
@ApiModelProperty("风场名称")
|
||||||
private String farmName;
|
private String farmName;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 项目人员响应VO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="ProjectMemberResp对象", description="项目人员响应")
|
||||||
|
public class ProjectMemberResp {
|
||||||
|
|
||||||
|
@ApiModelProperty("关联ID")
|
||||||
|
private String memberId;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目ID")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目名称")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组ID")
|
||||||
|
private String turbineId;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组名称")
|
||||||
|
private String turbineName;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务组ID")
|
||||||
|
private String taskGroupId;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务组名称")
|
||||||
|
private String taskGroupName;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务ID")
|
||||||
|
private String taskId;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务名称")
|
||||||
|
private String taskName;
|
||||||
|
|
||||||
|
@ApiModelProperty("用户ID")
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
// ========================== 前端需要的字段 ==========================
|
||||||
|
|
||||||
|
@ApiModelProperty("姓名")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty("联系电话")
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
@ApiModelProperty("邮箱")
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目岗位")
|
||||||
|
private String position;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ApiModelProperty("技能标签")
|
||||||
|
private String skills;
|
||||||
|
|
||||||
|
@ApiModelProperty("入职日期")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private LocalDate joinDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
// ========================== 保留的原有字段(用于内部处理) ==========================
|
||||||
|
|
||||||
|
@ApiModelProperty("用户账号")
|
||||||
|
private String userAccount;
|
||||||
|
|
||||||
|
@ApiModelProperty("用户头像")
|
||||||
|
private String userAvatar;
|
||||||
|
|
||||||
|
@ApiModelProperty("角色类型")
|
||||||
|
private String roleType;
|
||||||
|
|
||||||
|
@ApiModelProperty("角色类型描述")
|
||||||
|
private String roleTypeDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位代码")
|
||||||
|
private String jobCode;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位代码描述")
|
||||||
|
private String jobCodeDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位描述")
|
||||||
|
private String jobDesc;
|
||||||
|
|
||||||
|
@ApiModelProperty("离开时间")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private LocalDate leaveDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态描述")
|
||||||
|
private String statusDesc;
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
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 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;
|
||||||
|
@ -28,6 +27,14 @@ public class ProjectReq implements Serializable {
|
||||||
@ApiModelProperty("项目id")
|
@ApiModelProperty("项目id")
|
||||||
private String projectId;
|
private String projectId;
|
||||||
|
|
||||||
|
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目来源不能为空")
|
||||||
|
@ApiModelProperty("项目来源")
|
||||||
|
private String projectOrigin;
|
||||||
|
|
||||||
|
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目预算不能为空")
|
||||||
|
@ApiModelProperty("项目预算")
|
||||||
|
private Integer projectBudget;
|
||||||
|
|
||||||
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目名称不能为空")
|
@NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目名称不能为空")
|
||||||
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "项目名称长度不能超过50字符")
|
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "项目名称长度不能超过50字符")
|
||||||
@ApiModelProperty("项目名称")
|
@ApiModelProperty("项目名称")
|
||||||
|
@ -105,4 +112,19 @@ public class ProjectReq implements Serializable {
|
||||||
|
|
||||||
@ApiModelProperty(value = "结束时间")
|
@ApiModelProperty(value = "结束时间")
|
||||||
private LocalDate endDate;
|
private LocalDate endDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("人工成本")
|
||||||
|
private Double laborCost;
|
||||||
|
|
||||||
|
@ApiModelProperty("设备摊销")
|
||||||
|
private Double equipmentAmortization;
|
||||||
|
|
||||||
|
@ApiModelProperty("奖金预提")
|
||||||
|
private Double bonusProvision;
|
||||||
|
|
||||||
|
@ApiModelProperty("交通食宿")
|
||||||
|
private Double transAccomMeals;
|
||||||
|
|
||||||
|
@ApiModelProperty("其他杂费")
|
||||||
|
private Double othersCost;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,11 @@
|
||||||
package com.dite.znpt.domain.vo;
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
||||||
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 lombok.EqualsAndHashCode;
|
|
||||||
import com.dite.znpt.domain.entity.ProjectEntity;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.LocalDate;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author huise23
|
* @author huise23
|
||||||
|
@ -27,6 +19,15 @@ public class ProjectResp extends ProjectReq implements Serializable {
|
||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = -1883901559600186726L;
|
private static final long serialVersionUID = -1883901559600186726L;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目ID")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目来源")
|
||||||
|
private String projectOrigin;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目预算")
|
||||||
|
private Integer projectBudget;
|
||||||
|
|
||||||
@ApiModelProperty("施工人员")
|
@ApiModelProperty("施工人员")
|
||||||
private String constructorName;
|
private String constructorName;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@ApiModel("项目任务详情响应实体")
|
||||||
|
public class ProjectTasksDetailResp {
|
||||||
|
private List<ProjectTaskResp> list;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目名称")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目任务总数")
|
||||||
|
private Integer total;
|
||||||
|
|
||||||
|
@ApiModelProperty("已完成任务数")
|
||||||
|
private Integer finished;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 团队成员查询参数(支持筛选、分页、搜索)
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="TeamMemberQuery对象", description="团队成员查询参数")
|
||||||
|
public class TeamMemberQuery {
|
||||||
|
|
||||||
|
@ApiModelProperty("项目ID")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("姓名搜索")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位筛选")
|
||||||
|
private String position;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态筛选")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ApiModelProperty("当前页码")
|
||||||
|
private Integer pageNum = 1;
|
||||||
|
|
||||||
|
@ApiModelProperty("每页大小")
|
||||||
|
private Integer pageSize = 10;
|
||||||
|
|
||||||
|
@ApiModelProperty("排序列")
|
||||||
|
private String orderByColumn;
|
||||||
|
|
||||||
|
@ApiModelProperty("排序方向")
|
||||||
|
private String isAsc = "asc";
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 团队成员请求类(用于创建和更新)
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value="TeamMemberReq对象", description="团队成员请求类")
|
||||||
|
public class TeamMemberReq implements Serializable {
|
||||||
|
|
||||||
|
@NotBlank(message = "项目ID不能为空")
|
||||||
|
@ApiModelProperty("项目ID")
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("机组ID(可选)")
|
||||||
|
private String turbineId;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务组ID(可选)")
|
||||||
|
private String taskGroupId;
|
||||||
|
|
||||||
|
@ApiModelProperty("任务ID(可选)")
|
||||||
|
private String taskId;
|
||||||
|
|
||||||
|
@NotBlank(message = "用户ID不能为空")
|
||||||
|
@ApiModelProperty("用户ID")
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
@NotBlank(message = "角色类型不能为空")
|
||||||
|
@ApiModelProperty("项目角色类型:PROJECT_MANAGER-项目经理,SAFETY_OFFICER-安全员,QUALITY_OFFICER-质量员,CONSTRUCTOR-施工人员,TEAM_LEADER-施工组长")
|
||||||
|
private String roleType;
|
||||||
|
|
||||||
|
@ApiModelProperty("具体岗位代码(如:GROUND_SERVICE-地勤,DRIVER-司机,ASCENDING-登高等)")
|
||||||
|
private String jobCode;
|
||||||
|
|
||||||
|
@ApiModelProperty("岗位描述")
|
||||||
|
private String jobDesc;
|
||||||
|
|
||||||
|
@NotNull(message = "加入时间不能为空")
|
||||||
|
@ApiModelProperty("加入时间")
|
||||||
|
private LocalDate joinDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("离开时间")
|
||||||
|
private LocalDate leaveDate;
|
||||||
|
|
||||||
|
@ApiModelProperty("状态:ACTIVE-在职,INACTIVE-离职,PENDING-待入职")
|
||||||
|
private String status = "ACTIVE";
|
||||||
|
|
||||||
|
@ApiModelProperty("备注")
|
||||||
|
private String remark;
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
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;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:23
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("投标信息请求实体")
|
||||||
|
public class TenderInfoReq implements Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = -5653933337345116548L;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标信息id")
|
||||||
|
@NotBlank(message = "招标信息id不能为空")
|
||||||
|
private String biddingInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标金额")
|
||||||
|
private BigDecimal tenderAmount;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目地址")
|
||||||
|
@Size(max = 500, message = "项目地址不能超过500个字符")
|
||||||
|
private String projectAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty("项目类型,枚举:ProjectTypeEnum")
|
||||||
|
private String projectType;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标负责人")
|
||||||
|
@Size(min = 32, max = 32, message = "招标负责人长度必须为32个字符")
|
||||||
|
private String tenderManager;
|
||||||
|
|
||||||
|
@Size(min = 11, max = 11, message = "招标负责人联系方式长度必须为11个字符")
|
||||||
|
@ApiModelProperty("招标负责人联系方式")
|
||||||
|
private String tenderManagerPhone;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标文件")
|
||||||
|
private String tenderFileId;
|
||||||
|
|
||||||
|
@Size(max = 500, message = "项目描述不能超过500个字符")
|
||||||
|
@ApiModelProperty("项目描述")
|
||||||
|
private String projectDescription;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package com.dite.znpt.domain.vo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:50
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:49
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("投标信息响应实体")
|
||||||
|
public class TenderInfoResp extends TenderInfoReq implements Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = -8445413467535624096L;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标标信息ID")
|
||||||
|
private String tenderInfoId;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标项目")
|
||||||
|
private String biddingProject;
|
||||||
|
|
||||||
|
@ApiModelProperty("招标公司")
|
||||||
|
private String biddingCompany;
|
||||||
|
|
||||||
|
@ApiModelProperty("文件名称")
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标文件地址")
|
||||||
|
private String attachPath;
|
||||||
|
|
||||||
|
@ApiModelProperty("投标负责人姓名")
|
||||||
|
private String tenderManagerName;
|
||||||
|
|
||||||
|
}
|
|
@ -20,6 +20,9 @@ public enum AttachBusinessTypeEnum {
|
||||||
REPORT("report", "报告"),
|
REPORT("report", "报告"),
|
||||||
PROJECT_BUDGE("project_budge", "预算文件"),
|
PROJECT_BUDGE("project_budge", "预算文件"),
|
||||||
PROJECT_DAILY_REPORT("project_daily_report", "项目日报文件"),
|
PROJECT_DAILY_REPORT("project_daily_report", "项目日报文件"),
|
||||||
|
BIDDING_INFO("bidding_info", "招标信息"),
|
||||||
|
TENDER_INFO("tender_info", "投标信息"),
|
||||||
|
OUTBID_INFO("outbid_info", "中标信息"),
|
||||||
;
|
;
|
||||||
private final String code;
|
private final String code;
|
||||||
private final String desc;
|
private final String desc;
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
package com.dite.znpt.enums;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/5/27/周二 15:33
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum ContractStatusEnum {
|
||||||
|
|
||||||
|
UN_APPROVAL("UN_APPROVAL", "待审批"),
|
||||||
|
UN_SETTLED("UN_SETTLED", "待结算"),
|
||||||
|
UN_PAY("UN_PAY", "待收款"),
|
||||||
|
COMPLETE("COMPLETE", "已完成"),
|
||||||
|
;
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
ContractStatusEnum(String code, String desc){
|
||||||
|
this.code = code;
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ContractStatusEnum getByCode(String code){
|
||||||
|
for (ContractStatusEnum e : ContractStatusEnum.values() ) {
|
||||||
|
if(e.code.equals(code)){
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDescByCode(String code){
|
||||||
|
ContractStatusEnum e = getByCode(code);
|
||||||
|
return null == e ? null : e.desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<JSONObject> listAll(){
|
||||||
|
List<JSONObject> list = new ArrayList<>(ContractStatusEnum.values().length);
|
||||||
|
for (ContractStatusEnum e : ContractStatusEnum.values() ) {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.set(e.code, e.desc);
|
||||||
|
list.add(jsonObject);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package com.dite.znpt.enums;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/31/周四 15:30
|
||||||
|
* @description 设备健康状态枚举
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum HealthStatusEnum {
|
||||||
|
EXCELLENT("excellent", "优秀"),
|
||||||
|
GOOD("good", "良好"),
|
||||||
|
NORMAL("normal", "一般"),
|
||||||
|
POOR("poor", "较差"),
|
||||||
|
BAD("bad", "差");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
HealthStatusEnum(String code, String desc) {
|
||||||
|
this.code = code;
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HealthStatusEnum getByCode(String code) {
|
||||||
|
for (HealthStatusEnum e : HealthStatusEnum.values()) {
|
||||||
|
if (e.code.equals(code)) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDescByCode(String code) {
|
||||||
|
HealthStatusEnum e = getByCode(code);
|
||||||
|
return null == e ? null : e.desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<JSONObject> listAll() {
|
||||||
|
List<JSONObject> list = new ArrayList<>(HealthStatusEnum.values().length);
|
||||||
|
for (HealthStatusEnum e : HealthStatusEnum.values()) {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.set(e.code, e.desc);
|
||||||
|
list.add(jsonObject);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
package com.dite.znpt.enums;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/31/周四 15:30
|
||||||
|
* @description 设备位置状态枚举
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum LocationStatusEnum {
|
||||||
|
IN_STOCK("in_stock", "库存中"),
|
||||||
|
ALLOCATED("allocated", "已分配"),
|
||||||
|
REPAIR("repair", "维修中"),
|
||||||
|
SCRAP("scrap", "待报废"),
|
||||||
|
SCRAPPED("scrapped", "已报废"),
|
||||||
|
BORROWED("borrowed", "外借中"),
|
||||||
|
LOST("lost", "丢失");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
LocationStatusEnum(String code, String desc) {
|
||||||
|
this.code = code;
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LocationStatusEnum getByCode(String code) {
|
||||||
|
for (LocationStatusEnum e : LocationStatusEnum.values()) {
|
||||||
|
if (e.code.equals(code)) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDescByCode(String code) {
|
||||||
|
LocationStatusEnum e = getByCode(code);
|
||||||
|
return null == e ? null : e.desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<JSONObject> listAll() {
|
||||||
|
List<JSONObject> list = new ArrayList<>(LocationStatusEnum.values().length);
|
||||||
|
for (LocationStatusEnum e : LocationStatusEnum.values()) {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.set(e.code, e.desc);
|
||||||
|
list.add(jsonObject);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
package com.dite.znpt.enums;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 项目岗位代码枚举
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum ProjectJobCodeEnum {
|
||||||
|
|
||||||
|
// 地勤相关岗位
|
||||||
|
GROUND_SERVICE("GROUND_SERVICE", "地勤"),
|
||||||
|
GROUND_SERVICE_LEADER("GROUND_SERVICE_LEADER", "地勤组长"),
|
||||||
|
|
||||||
|
// 司机相关岗位
|
||||||
|
DRIVER("DRIVER", "司机"),
|
||||||
|
DRIVER_LEADER("DRIVER_LEADER", "司机组长"),
|
||||||
|
|
||||||
|
// 登高相关岗位
|
||||||
|
ASCENDING("ASCENDING", "登高"),
|
||||||
|
ASCENDING_LEADER("ASCENDING_LEADER", "登高组长"),
|
||||||
|
|
||||||
|
// 防雷相关岗位
|
||||||
|
ANTI_THUNDER("ANTI_THUNDER", "防雷"),
|
||||||
|
ANTI_THUNDER_LEADER("ANTI_THUNDER_LEADER", "防雷组长"),
|
||||||
|
|
||||||
|
// 外部工作相关岗位
|
||||||
|
OUT_WORK("OUT_WORK", "外部工作"),
|
||||||
|
OUT_WORK_LEADER("OUT_WORK_LEADER", "外部工作组长"),
|
||||||
|
|
||||||
|
// 管理岗位
|
||||||
|
PROJECT_MANAGER("PROJECT_MANAGER", "项目经理"),
|
||||||
|
SAFETY_MANAGER("SAFETY_MANAGER", "安全经理"),
|
||||||
|
QUALITY_MANAGER("QUALITY_MANAGER", "质量经理"),
|
||||||
|
SITE_MANAGER("SITE_MANAGER", "现场经理"),
|
||||||
|
|
||||||
|
// 其他岗位
|
||||||
|
TECHNICIAN("TECHNICIAN", "技术员"),
|
||||||
|
SUPERVISOR("SUPERVISOR", "监理"),
|
||||||
|
COORDINATOR("COORDINATOR", "协调员");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据代码获取描述
|
||||||
|
*/
|
||||||
|
public static String getDescByCode(String code) {
|
||||||
|
for (ProjectJobCodeEnum jobCode : values()) {
|
||||||
|
if (jobCode.getCode().equals(code)) {
|
||||||
|
return jobCode.getDesc();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据代码获取枚举
|
||||||
|
*/
|
||||||
|
public static ProjectJobCodeEnum getByCode(String code) {
|
||||||
|
for (ProjectJobCodeEnum jobCode : values()) {
|
||||||
|
if (jobCode.getCode().equals(code)) {
|
||||||
|
return jobCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package com.dite.znpt.enums;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 项目角色类型枚举
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum ProjectRoleTypeEnum {
|
||||||
|
|
||||||
|
PROJECT_MANAGER("PROJECT_MANAGER", "项目经理"),
|
||||||
|
SAFETY_OFFICER("SAFETY_OFFICER", "安全员"),
|
||||||
|
QUALITY_OFFICER("QUALITY_OFFICER", "质量员"),
|
||||||
|
CONSTRUCTOR("CONSTRUCTOR", "施工人员"),
|
||||||
|
TEAM_LEADER("TEAM_LEADER", "施工组长"),
|
||||||
|
SENIOR_PROJECT_MANAGER("SENIOR_PROJECT_MANAGER", "大项目经理"),
|
||||||
|
REMOTE_ADVISOR("REMOTE_ADVISOR", "项目远程顾问"),
|
||||||
|
EXTERNAL_COLLABORATOR("EXTERNAL_COLLABORATOR", "外部协作者"),
|
||||||
|
FINANCIAL_MANAGER("FINANCIAL_MANAGER", "财务经理"),
|
||||||
|
BUSINESS_MANAGER("BUSINESS_MANAGER", "商务经理"),
|
||||||
|
SITE_MANAGER("SITE_MANAGER", "现场经理");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据代码获取描述
|
||||||
|
*/
|
||||||
|
public static String getDescByCode(String code) {
|
||||||
|
for (ProjectRoleTypeEnum roleType : values()) {
|
||||||
|
if (roleType.getCode().equals(code)) {
|
||||||
|
return roleType.getDesc();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据代码获取枚举
|
||||||
|
*/
|
||||||
|
public static ProjectRoleTypeEnum getByCode(String code) {
|
||||||
|
for (ProjectRoleTypeEnum roleType : values()) {
|
||||||
|
if (roleType.getCode().equals(code)) {
|
||||||
|
return roleType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
package com.dite.znpt.enums;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:35
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum ProjectTypeEnum {
|
||||||
|
BLADE_CHECK("blade_check", "风电叶片检查"),
|
||||||
|
OPERATION("operation", "风电运维"),
|
||||||
|
INSTALL("install", "风电安装"),
|
||||||
|
OTHER("other", "其他");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
public static ProjectTypeEnum getByCode(String code){
|
||||||
|
for (ProjectTypeEnum e : ProjectTypeEnum.values() ) {
|
||||||
|
if(e.code.equals(code)){
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDescByCode(String code){
|
||||||
|
ProjectTypeEnum e = getByCode(code);
|
||||||
|
return null == e ? null : e.desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<JSONObject> listAll(){
|
||||||
|
List<JSONObject> list = new ArrayList<>(ProjectTypeEnum.values().length);
|
||||||
|
for (ProjectTypeEnum e : ProjectTypeEnum.values() ) {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.set(String.valueOf(e.code), e.desc);
|
||||||
|
list.add(jsonObject);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.dite.znpt.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.dite.znpt.domain.entity.BiddingInfoEntity;
|
||||||
|
import com.dite.znpt.domain.vo.BiddingInfoResp;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:06
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
public interface BiddingInfoMapper extends BaseMapper<BiddingInfoEntity> {
|
||||||
|
|
||||||
|
List<BiddingInfoResp> listBiddingInfoResp(@Param("projectName") String projectName);
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.dite.znpt.mapper;
|
||||||
|
|
||||||
|
import com.dite.znpt.domain.entity.BusinessDataFileEntity;
|
||||||
|
import com.dite.znpt.domain.entity.BusinessDataEntity;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@ApiOperation("商务资料文件对象")
|
||||||
|
@Mapper
|
||||||
|
public interface BusinessDataFileMapper {
|
||||||
|
|
||||||
|
// 新增文件预览方法
|
||||||
|
|
||||||
|
|
||||||
|
public List<BusinessDataFileEntity> List(@Param("folderId") Long folderId, @Param("fileName") String fileName);
|
||||||
|
void delete(@Param("fileId") Long fileId,@Param("folderId") Long folderId);
|
||||||
|
|
||||||
|
void add(BusinessDataFileEntity businessDataFileEntity);
|
||||||
|
|
||||||
|
String getPath(Long fileId);
|
||||||
|
|
||||||
|
// 在接口中添加重命名方法
|
||||||
|
void reName(@Param("fileId") Long fileId, @Param("newFileName") String newFileName, @Param("newFilePath") String newFilePath);
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.dite.znpt.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.injector.methods.SelectList;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.dite.znpt.domain.entity.BusinessDataEntity;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ApiOperation("商务资料文件夹对象")
|
||||||
|
@Mapper
|
||||||
|
public interface BusinessDataMapper {
|
||||||
|
public String getPath(Long parentId);
|
||||||
|
|
||||||
|
public List<BusinessDataEntity> List();
|
||||||
|
|
||||||
|
void insert(BusinessDataEntity businessDataEntity);
|
||||||
|
|
||||||
|
void delete(Long folderId);
|
||||||
|
|
||||||
|
void reName(BusinessDataEntity businessDataEntity);
|
||||||
|
|
||||||
|
public List<BusinessDataEntity> ListWithCondition(@Param("folderName") String folderName);
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.dite.znpt.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.dite.znpt.domain.entity.OutbidInfoEntity;
|
||||||
|
import com.dite.znpt.domain.vo.OutbidInfoResp;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:11
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
public interface OutbidInfoMapper extends BaseMapper<OutbidInfoEntity> {
|
||||||
|
List<OutbidInfoResp> listOutbidInfoResp(@Param("projectName") String projectName);
|
||||||
|
|
||||||
|
OutbidInfoResp getOutbidInfoResp(@Param("outbidInfoId") String outbidInfoId);
|
||||||
|
}
|
|
@ -2,6 +2,10 @@ package com.dite.znpt.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.dite.znpt.domain.entity.PostEntity;
|
import com.dite.znpt.domain.entity.PostEntity;
|
||||||
|
import com.dite.znpt.domain.vo.PostListReq;
|
||||||
|
import com.dite.znpt.domain.vo.PostResp;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bear.G
|
* @author Bear.G
|
||||||
|
@ -9,4 +13,6 @@ import com.dite.znpt.domain.entity.PostEntity;
|
||||||
* @description
|
* @description
|
||||||
*/
|
*/
|
||||||
public interface PostMapper extends BaseMapper<PostEntity> {
|
public interface PostMapper extends BaseMapper<PostEntity> {
|
||||||
|
|
||||||
|
List<PostResp> selectPostResp(PostListReq req);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.dite.znpt.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.dite.znpt.domain.entity.ProjectMemberEntity;
|
||||||
|
import com.dite.znpt.domain.vo.ProjectMemberResp;
|
||||||
|
import com.dite.znpt.domain.vo.TeamMemberQuery;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 项目人员关联表Mapper接口
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ProjectMemberMapper extends BaseMapper<ProjectMemberEntity> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目团队成员列表(支持筛选、分页、搜索)
|
||||||
|
*/
|
||||||
|
List<ProjectMemberResp> queryTeamMembers(TeamMemberQuery query);
|
||||||
|
}
|
|
@ -18,7 +18,7 @@ public interface RegulationTypeMapper extends BaseMapper<RegulationTypeEntity> {
|
||||||
* 分页查询制度类型列表(包含创建人姓名)
|
* 分页查询制度类型列表(包含创建人姓名)
|
||||||
* @param page 分页参数
|
* @param page 分页参数
|
||||||
* @param typeName 类型名称
|
* @param typeName 类型名称
|
||||||
* @param status 状态
|
* @param status 是否启用(1-启用,0-禁用)
|
||||||
* @param remark 备注
|
* @param remark 备注
|
||||||
* @return 分页结果
|
* @return 分页结果
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package com.dite.znpt.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.dite.znpt.domain.entity.TenderInfoEntity;
|
||||||
|
import com.dite.znpt.domain.vo.TenderInfoResp;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:08
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
public interface TenderInfoMapper extends BaseMapper<TenderInfoEntity> {
|
||||||
|
List<TenderInfoResp> listTenderInfoResp(@Param("projectName") String projectName);
|
||||||
|
|
||||||
|
TenderInfoResp getTenderInfoResp(@Param("tenderInfoId") String tenderInfoId);
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.dite.znpt.domain.Result;
|
||||||
|
import com.dite.znpt.domain.entity.BiddingInfoEntity;
|
||||||
|
import com.dite.znpt.domain.vo.BiddingInfoReq;
|
||||||
|
import com.dite.znpt.domain.vo.BiddingInfoResp;
|
||||||
|
import org.springframework.validation.BindingResult;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:06
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
public interface BiddingInfoService extends IService<BiddingInfoEntity> {
|
||||||
|
|
||||||
|
List<BiddingInfoResp> page(String projectName);
|
||||||
|
List<BiddingInfoResp> list(String projectName);
|
||||||
|
void save(BiddingInfoReq req);
|
||||||
|
void update(String biddingInfoId, BiddingInfoReq req);
|
||||||
|
void uploadBiddingInfoFile(String biddingInfoId, String biddingFileId);
|
||||||
|
void apply(String biddingInfoId);
|
||||||
|
Result<?> importData(List<BiddingInfoReq> dataList, BindingResult bindingResult);
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
|
import com.dite.znpt.domain.Result;
|
||||||
|
import com.dite.znpt.domain.entity.BusinessDataFileEntity;
|
||||||
|
import com.dite.znpt.domain.page.PageBean;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
@ApiOperation("商务资料文件service")
|
||||||
|
@Service
|
||||||
|
public interface BusinessDataFileService {
|
||||||
|
|
||||||
|
@ApiOperation("分页查询文件")
|
||||||
|
PageBean pageSelect(Integer page, Integer pageSize, Long folderId, String fileName);
|
||||||
|
|
||||||
|
@ApiOperation("删除文件")
|
||||||
|
Result delete(@RequestParam(value = "fileId", required = false) Long fileId,@RequestParam(value = "foldelId", required = false) Long folderId);
|
||||||
|
|
||||||
|
@ApiOperation("增加数据库文件信息")
|
||||||
|
void add(BusinessDataFileEntity businessDataFileEntity);
|
||||||
|
|
||||||
|
@ApiOperation("获取文件路径")
|
||||||
|
String getPath(Long fileId);
|
||||||
|
|
||||||
|
@ApiOperation("删除文件")
|
||||||
|
// 在接口中添加重命名方法
|
||||||
|
Result reName(Long fileId, String newFileName);
|
||||||
|
|
||||||
|
@ApiOperation("下载文件")
|
||||||
|
void upload(Long fileId, HttpServletResponse response);
|
||||||
|
|
||||||
|
@ApiOperation("上传文件")
|
||||||
|
Result addfile(MultipartFile file, Long folderId);
|
||||||
|
|
||||||
|
@ApiOperation("预览文件")
|
||||||
|
void preview(Long fileId, HttpServletResponse response);
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
|
import com.dite.znpt.domain.Result;
|
||||||
|
import com.dite.znpt.domain.page.PageBean;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
@ApiOperation("商务资料文件夹service")
|
||||||
|
public interface BusinessDataService {
|
||||||
|
|
||||||
|
PageBean pageSelect(Integer page, Integer pageSize, String folderName);
|
||||||
|
Result createFolder(String folderName, Long parentId);
|
||||||
|
String getPath(Long parentId);
|
||||||
|
Result delete(Long folderId);
|
||||||
|
Result reName(Long folderId, String newName);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
//package com.dite.znpt.service;
|
||||||
|
//
|
||||||
|
//import org.springframework.stereotype.Service;
|
||||||
|
//
|
||||||
|
//@Service
|
||||||
|
//public interface EmailService {
|
||||||
|
// /**
|
||||||
|
// * 发送邮箱验证码
|
||||||
|
// * @param email
|
||||||
|
// * @param code
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// public boolean sendVerificationCode(String email, String code);
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 生成验证码
|
||||||
|
// * @param email
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// public String generateCode(String email);
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 验证邮箱验证码
|
||||||
|
// * @param email
|
||||||
|
// * @param code
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// public boolean verifyCode(String email, String code);
|
||||||
|
//
|
||||||
|
//}
|
|
@ -0,0 +1,60 @@
|
||||||
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.dite.znpt.domain.vo.EquipmentApprovalListReq;
|
||||||
|
import com.dite.znpt.domain.vo.EquipmentApprovalReq;
|
||||||
|
import com.dite.znpt.domain.vo.EquipmentApprovalResp;
|
||||||
|
import com.dite.znpt.domain.vo.EquipmentProcurementApplyReq;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/1/8/周三 17:50
|
||||||
|
* @description 设备审批服务接口
|
||||||
|
*/
|
||||||
|
public interface EquipmentApprovalService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询待审批的设备采购申请
|
||||||
|
*/
|
||||||
|
IPage<EquipmentApprovalResp> getPendingApprovals(EquipmentApprovalListReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询已审批的设备采购申请
|
||||||
|
*/
|
||||||
|
IPage<EquipmentApprovalResp> getApprovedApprovals(EquipmentApprovalListReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批通过
|
||||||
|
*/
|
||||||
|
void approve(String approvalId, EquipmentApprovalReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批拒绝
|
||||||
|
*/
|
||||||
|
void reject(String approvalId, EquipmentApprovalReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取审批详情
|
||||||
|
*/
|
||||||
|
EquipmentApprovalResp getApprovalDetail(String approvalId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取审批统计信息
|
||||||
|
*/
|
||||||
|
Object getApprovalStats();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提交采购申请
|
||||||
|
*/
|
||||||
|
void submitProcurementApplication(EquipmentProcurementApplyReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取我的采购申请
|
||||||
|
*/
|
||||||
|
IPage<EquipmentApprovalResp> getMyProcurementApplications(EquipmentApprovalListReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤回采购申请
|
||||||
|
*/
|
||||||
|
void withdrawProcurementApplication(String approvalId);
|
||||||
|
}
|
|
@ -1,24 +1,75 @@
|
||||||
package com.dite.znpt.service;
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.dite.znpt.domain.entity.EquipmentEntity;
|
import com.dite.znpt.domain.entity.EquipmentEntity;
|
||||||
import com.dite.znpt.domain.vo.EquipmentListReq;
|
import com.dite.znpt.domain.vo.EquipmentListReq;
|
||||||
import com.dite.znpt.domain.vo.EquipmentReq;
|
import com.dite.znpt.domain.vo.EquipmentReq;
|
||||||
import com.dite.znpt.domain.vo.EquipmentResp;
|
import com.dite.znpt.domain.vo.EquipmentResp;
|
||||||
import com.dite.znpt.domain.vo.EquipmentUseRecordReq;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 设备服务接口
|
||||||
* @author Bear.G
|
* @author Bear.G
|
||||||
* @date 2025/7/23/周三 17:39
|
* @date 2025/7/23/周三 17:39
|
||||||
* @description
|
* @description
|
||||||
*/
|
*/
|
||||||
public interface EquipmentService extends IService<EquipmentEntity> {
|
public interface EquipmentService extends IService<EquipmentEntity> {
|
||||||
List<EquipmentResp> page(EquipmentListReq req);
|
|
||||||
List<EquipmentResp> list(EquipmentListReq req);
|
/**
|
||||||
|
* 分页查询设备信息
|
||||||
|
*/
|
||||||
|
IPage<EquipmentResp> page(EquipmentListReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询设备详情
|
||||||
|
*/
|
||||||
EquipmentResp detail(String equipmentId);
|
EquipmentResp detail(String equipmentId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增设备
|
||||||
|
*/
|
||||||
void save(EquipmentReq req);
|
void save(EquipmentReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改设备
|
||||||
|
*/
|
||||||
void update(String equipmentId, EquipmentReq req);
|
void update(String equipmentId, EquipmentReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除设备
|
||||||
|
*/
|
||||||
void deleteById(String equipmentId);
|
void deleteById(String equipmentId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除设备
|
||||||
|
*/
|
||||||
|
void batchDelete(List<String> equipmentIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取采购统计信息
|
||||||
|
*/
|
||||||
|
Object getProcurementStats();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出采购记录
|
||||||
|
*/
|
||||||
|
byte[] exportProcurement(EquipmentListReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询设备采购记录
|
||||||
|
*/
|
||||||
|
IPage<EquipmentResp> procurementPage(EquipmentListReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增设备采购记录
|
||||||
|
*/
|
||||||
|
void saveProcurement(EquipmentReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改设备采购记录
|
||||||
|
*/
|
||||||
|
void updateProcurement(String equipmentId, EquipmentReq req);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public interface ImageService extends IService<ImageEntity> {
|
||||||
|
|
||||||
List<ImageReq> batchUploadDefectImage(String partId, String imageSource, ImageCollectReq collectReq, MultipartFile[] files);
|
List<ImageReq> batchUploadDefectImage(String partId, String imageSource, ImageCollectReq collectReq, MultipartFile[] files);
|
||||||
|
|
||||||
List<ImageReq> uploadProjectBatch(String projectId, String imageSource, MultipartFile[] files);
|
List<ImageReq> uploadProjectBatch(String projectId, String imageSource, ImageCollectReq collectReq, MultipartFile[] files);
|
||||||
|
|
||||||
List<String> batchUploadCommonImage(String imageSource, ImageWorkReq imageWorkReq, MultipartFile[] file) throws IOException;
|
List<String> batchUploadCommonImage(String imageSource, ImageWorkReq imageWorkReq, MultipartFile[] file) throws IOException;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.dite.znpt.domain.entity.OutbidInfoEntity;
|
||||||
|
import com.dite.znpt.domain.vo.OutbidInfoReq;
|
||||||
|
import com.dite.znpt.domain.vo.OutbidInfoResp;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:11
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
public interface OutbidInfoService extends IService<OutbidInfoEntity> {
|
||||||
|
|
||||||
|
List<OutbidInfoResp> page(String projectName);
|
||||||
|
List<OutbidInfoResp> list(String projectName);
|
||||||
|
OutbidInfoResp detail(String outbidInfoId);
|
||||||
|
void save(OutbidInfoReq req);
|
||||||
|
void update(String outbidInfoId, OutbidInfoReq req);
|
||||||
|
void deleteById(String outbidInfoId);
|
||||||
|
void downLoadOutbidNoticeFile(String outbidFileId, HttpServletResponse response) throws Exception;
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ package com.dite.znpt.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.dite.znpt.domain.entity.PostEntity;
|
import com.dite.znpt.domain.entity.PostEntity;
|
||||||
|
import com.dite.znpt.domain.vo.PostListReq;
|
||||||
import com.dite.znpt.domain.vo.PostReq;
|
import com.dite.znpt.domain.vo.PostReq;
|
||||||
import com.dite.znpt.domain.vo.PostResp;
|
import com.dite.znpt.domain.vo.PostResp;
|
||||||
|
|
||||||
|
@ -14,9 +15,9 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public interface PostService extends IService<PostEntity> {
|
public interface PostService extends IService<PostEntity> {
|
||||||
|
|
||||||
List<PostResp> page(String postName);
|
List<PostResp> page(PostListReq req);
|
||||||
|
|
||||||
List<PostResp> list(String postName);
|
List<PostResp> list(PostListReq req);
|
||||||
|
|
||||||
PostResp detail(String postId);
|
PostResp detail(String postId);
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,11 @@ package com.dite.znpt.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity;
|
import com.dite.znpt.domain.entity.ProjectBudgetInfoEntity;
|
||||||
|
import com.dite.znpt.domain.vo.ProjectBudgetInfoDetailResp;
|
||||||
|
import com.dite.znpt.domain.vo.ProjectBudgetInfoImportReq;
|
||||||
import com.dite.znpt.domain.vo.ProjectBudgetInfoListReq;
|
import com.dite.znpt.domain.vo.ProjectBudgetInfoListReq;
|
||||||
import com.dite.znpt.domain.vo.ProjectBudgetInfoListResp;
|
import com.dite.znpt.domain.vo.ProjectBudgetInfoListResp;
|
||||||
import com.dite.znpt.domain.vo.ProjectBudgetInfoReq;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import com.dite.znpt.domain.vo.ProjectBudgetInfoResp;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -15,34 +16,16 @@ import java.util.List;
|
||||||
* @Description: 项目预算信息表服务接口
|
* @Description: 项目预算信息表服务接口
|
||||||
*/
|
*/
|
||||||
public interface ProjectBudgetInfoService extends IService<ProjectBudgetInfoEntity> {
|
public interface ProjectBudgetInfoService extends IService<ProjectBudgetInfoEntity> {
|
||||||
|
List<ProjectBudgetInfoListResp> list(ProjectBudgetInfoListReq projectBudgetInfoListReq);
|
||||||
|
|
||||||
/**
|
List<ProjectBudgetInfoListResp> page(ProjectBudgetInfoListReq projectBudgetInfoListReq);
|
||||||
* 功能描述:查询项目预算信息列表
|
|
||||||
*
|
|
||||||
* @param projectBudgetInfoReq 项目预算信息
|
|
||||||
* @return {@link List }<{@link ProjectBudgetInfoListResp }>
|
|
||||||
* @author huise23
|
|
||||||
* @date 2025/07/17 21:58
|
|
||||||
**/
|
|
||||||
List<ProjectBudgetInfoListResp> selectList(ProjectBudgetInfoListReq projectBudgetInfoReq);
|
|
||||||
|
|
||||||
/**
|
void saveData(ProjectBudgetInfoImportReq req);
|
||||||
* 功能描述:根据项目id获取项目预算信息列表
|
|
||||||
*
|
|
||||||
* @param projectId 项目id
|
|
||||||
* @return {@link List }<{@link ProjectBudgetInfoListResp }>
|
|
||||||
* @author huise23
|
|
||||||
* @date 2025/07/17 21:58
|
|
||||||
**/
|
|
||||||
List<ProjectBudgetInfoResp> detailByProjectId(String projectId);
|
|
||||||
|
|
||||||
/**
|
void saveData(ProjectBudgetInfoImportReq req, MultipartFile[] files);
|
||||||
* 功能描述:新增项目预算信息
|
|
||||||
*
|
ProjectBudgetInfoDetailResp detailByProjectId(String projectId);
|
||||||
* @param projectBudgetInfoReq 项目预算信息
|
|
||||||
* @author huise23
|
void delete(String budgetId);
|
||||||
* @date 2025/07/17 21:58
|
|
||||||
**/
|
|
||||||
void saveData(List<ProjectBudgetInfoReq> projectBudgetInfoReq);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.dite.znpt.domain.PageResult;
|
||||||
|
import com.dite.znpt.domain.entity.ProjectMemberEntity;
|
||||||
|
import com.dite.znpt.domain.vo.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangna
|
||||||
|
* @date 2025/08/05
|
||||||
|
* @Description: 项目人员关联表服务接口
|
||||||
|
*/
|
||||||
|
public interface ProjectMemberService extends IService<ProjectMemberEntity> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目团队成员列表(支持筛选、分页、搜索)
|
||||||
|
*/
|
||||||
|
PageResult<ProjectMemberResp> getProjectTeamMembers(TeamMemberQuery query);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建团队成员
|
||||||
|
*/
|
||||||
|
ProjectMemberResp createTeamMember(TeamMemberReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新团队成员信息
|
||||||
|
*/
|
||||||
|
ProjectMemberResp updateTeamMember(String memberId, TeamMemberReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除团队成员(支持单个或批量删除)
|
||||||
|
*/
|
||||||
|
boolean deleteTeamMembers(String... memberIds);
|
||||||
|
|
||||||
|
// ========================== 项目看板相关方法 ==========================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目看板统计数据
|
||||||
|
*/
|
||||||
|
ProjectKanbanStatsResp getProjectKanbanStats();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目看板数据
|
||||||
|
*/
|
||||||
|
ProjectKanbanDataResp getProjectKanbanData();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目详情
|
||||||
|
*/
|
||||||
|
ProjectDetailResp getProjectDetail(String projectId);
|
||||||
|
}
|
|
@ -89,5 +89,7 @@ public interface ProjectTaskService extends IService<ProjectTaskEntity> {
|
||||||
* @date 2025/06/25 21:16
|
* @date 2025/06/25 21:16
|
||||||
**/
|
**/
|
||||||
void endTask(ProjectTaskStartReq taskStartReq);
|
void endTask(ProjectTaskStartReq taskStartReq);
|
||||||
|
|
||||||
|
List<ProjectTaskResp> getTaskByProjectId(String projectId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.dite.znpt.domain.entity.TenderInfoEntity;
|
||||||
|
import com.dite.znpt.domain.vo.TenderInfoReq;
|
||||||
|
import com.dite.znpt.domain.vo.TenderInfoResp;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:09
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
public interface TenderInfoService extends IService<TenderInfoEntity> {
|
||||||
|
List<TenderInfoResp> page(String projectName);
|
||||||
|
List<TenderInfoResp> list(String projectName);
|
||||||
|
TenderInfoResp detail(String tenderInfoId);
|
||||||
|
void save(TenderInfoReq req);
|
||||||
|
void update(String tenderInfoId, TenderInfoReq req);
|
||||||
|
void deleteById(String tenderInfoId);
|
||||||
|
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
package com.dite.znpt.service;
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.dite.znpt.domain.entity.PostEntity;
|
|
||||||
import com.dite.znpt.domain.entity.UserPostEntity;
|
import com.dite.znpt.domain.entity.UserPostEntity;
|
||||||
import com.dite.znpt.domain.vo.PostResp;
|
import com.dite.znpt.domain.vo.PostResp;
|
||||||
|
import com.dite.znpt.domain.vo.UserResp;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -16,4 +16,5 @@ public interface UserPostService extends IService<UserPostEntity> {
|
||||||
List<PostResp> getPostsByUserId(String userId);
|
List<PostResp> getPostsByUserId(String userId);
|
||||||
void bindUserPost(String userId, List<String> postIds);
|
void bindUserPost(String userId, List<String> postIds);
|
||||||
void bindPostUser(String postId, List<String> userIds);
|
void bindPostUser(String postId, List<String> userIds);
|
||||||
|
List<UserResp> getUsersByPostId(String postId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package com.dite.znpt.service;
|
package com.dite.znpt.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.dite.znpt.domain.entity.UserEntity;
|
||||||
import com.dite.znpt.domain.entity.UserRoleEntity;
|
import com.dite.znpt.domain.entity.UserRoleEntity;
|
||||||
import com.dite.znpt.domain.vo.RoleResp;
|
import com.dite.znpt.domain.vo.RoleResp;
|
||||||
|
import com.dite.znpt.domain.vo.UserResp;
|
||||||
import com.dite.znpt.domain.vo.UserRoleReq;
|
import com.dite.znpt.domain.vo.UserRoleReq;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -19,4 +21,6 @@ public interface UserRoleService extends IService<UserRoleEntity> {
|
||||||
void bindUserRole(UserRoleReq req);
|
void bindUserRole(UserRoleReq req);
|
||||||
|
|
||||||
void bindRoleUser(String roleId, List<String> userIds);
|
void bindRoleUser(String roleId, List<String> userIds);
|
||||||
|
|
||||||
|
List<UserResp> getUsersByRoleId(String roleId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,9 +82,11 @@ public class AttachInfoServiceImpl extends ServiceImpl<FileInfoMapper, AttachInf
|
||||||
try {
|
try {
|
||||||
String path = temPathPrefix + file.getOriginalFilename();
|
String path = temPathPrefix + file.getOriginalFilename();
|
||||||
FileUtil.writeBytes(file.getBytes(),path);
|
FileUtil.writeBytes(file.getBytes(),path);
|
||||||
|
String fileName = StrUtil.isBlank(infoReq.getFileName()) ? file.getOriginalFilename() : infoReq.getFileName();
|
||||||
AttachInfoEntity attachInfo = AttachInfoEntity.builder()
|
AttachInfoEntity attachInfo = AttachInfoEntity.builder()
|
||||||
.attachPath(FilePathEnum.ATTACH.getFileDownPath(path))
|
.attachPath(FilePathEnum.ATTACH.getFileDownPath(path))
|
||||||
.businessType(businessType)
|
.businessType(businessType)
|
||||||
|
.fileName(fileName)
|
||||||
.fileType(infoReq.getFileType())
|
.fileType(infoReq.getFileType())
|
||||||
.remark(infoReq.getRemark())
|
.remark(infoReq.getRemark())
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -19,6 +19,7 @@ import com.dite.znpt.service.PartService;
|
||||||
import com.dite.znpt.util.PageUtil;
|
import com.dite.znpt.util.PageUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -98,6 +99,7 @@ public class AudioFileInfoServiceImpl extends ServiceImpl<AudioFileInfoMapper, A
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public List<AudioFileInfoResp> batchUpload(String imageId, MultipartFile[] files) {
|
public List<AudioFileInfoResp> batchUpload(String imageId, MultipartFile[] files) {
|
||||||
ImageEntity image = imageMapper.selectById(imageId);
|
ImageEntity image = imageMapper.selectById(imageId);
|
||||||
if(null == image){
|
if(null == image){
|
||||||
|
@ -120,7 +122,7 @@ public class AudioFileInfoServiceImpl extends ServiceImpl<AudioFileInfoMapper, A
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
baseMapper.insert(list);
|
saveBatch(list);
|
||||||
return BeanUtil.copyToList(list, AudioFileInfoResp.class);
|
return BeanUtil.copyToList(list, AudioFileInfoResp.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
package com.dite.znpt.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
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.Result;
|
||||||
|
import com.dite.znpt.domain.entity.AttachInfoEntity;
|
||||||
|
import com.dite.znpt.domain.entity.BiddingInfoEntity;
|
||||||
|
import com.dite.znpt.domain.vo.BiddingInfoReq;
|
||||||
|
import com.dite.znpt.domain.vo.BiddingInfoResp;
|
||||||
|
import com.dite.znpt.exception.ServiceException;
|
||||||
|
import com.dite.znpt.mapper.BiddingInfoMapper;
|
||||||
|
import com.dite.znpt.service.AttachInfoService;
|
||||||
|
import com.dite.znpt.service.BiddingInfoService;
|
||||||
|
import com.dite.znpt.util.PageUtil;
|
||||||
|
import com.pig4cloud.plugin.excel.vo.ErrorMessage;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.validation.BindingResult;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/7/28/周一 16:07
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class BiddingInfoServiceImpl extends ServiceImpl<BiddingInfoMapper, BiddingInfoEntity> implements BiddingInfoService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AttachInfoService attachInfoService;
|
||||||
|
@Override
|
||||||
|
public List<BiddingInfoResp> page(String projectName) {
|
||||||
|
PageUtil.startPage();
|
||||||
|
return this.list(projectName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BiddingInfoResp> list(String projectName) {
|
||||||
|
return this.baseMapper.listBiddingInfoResp(projectName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public void save(BiddingInfoReq req) {
|
||||||
|
BiddingInfoEntity entity = Converts.INSTANCE.toBiddingInfoReq(req);
|
||||||
|
this.save(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public void update(String biddingInfoId, BiddingInfoReq req) {
|
||||||
|
BiddingInfoEntity biddingInfo = this.getById(biddingInfoId);
|
||||||
|
if(null ==biddingInfo){
|
||||||
|
throw new ServiceException(Message.BIDDING_INFO_ID_IS_NOT_EXIST);
|
||||||
|
}
|
||||||
|
BiddingInfoEntity entity = Converts.INSTANCE.toBiddingInfoReq(req);
|
||||||
|
entity.setBiddingInfoId(biddingInfoId);
|
||||||
|
this.updateById(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public void uploadBiddingInfoFile(String biddingInfoId, String biddingFileId) {
|
||||||
|
BiddingInfoEntity entity = this.getById(biddingInfoId);
|
||||||
|
if(null ==entity){
|
||||||
|
throw new ServiceException(Message.BIDDING_INFO_ID_IS_NOT_EXIST);
|
||||||
|
}
|
||||||
|
AttachInfoEntity attachInfo = attachInfoService.getById(biddingFileId);
|
||||||
|
if(null == attachInfo || !Constants.DEL_FLAG_0.equals(attachInfo.getDelFlag())){
|
||||||
|
throw new ServiceException(Message.ATTACH_INFO_IS_NOT_EXIST);
|
||||||
|
}
|
||||||
|
entity.setBiddingFileId(biddingFileId);
|
||||||
|
this.updateById(entity);
|
||||||
|
|
||||||
|
attachInfo.setBusinessId(biddingInfoId);
|
||||||
|
attachInfoService.updateById(attachInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public void apply(String biddingInfoId) {
|
||||||
|
BiddingInfoEntity entity = this.getById(biddingInfoId);
|
||||||
|
if(null ==entity){
|
||||||
|
throw new ServiceException(Message.BIDDING_INFO_ID_IS_NOT_EXIST);
|
||||||
|
}
|
||||||
|
entity.setStatus("1");
|
||||||
|
this.updateById(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public Result<?> importData(List<BiddingInfoReq> dataList, BindingResult bindingResult) {
|
||||||
|
List<String> sourceWebsites = dataList.stream().map(BiddingInfoReq::getSourceWebsite).distinct().toList();
|
||||||
|
if(sourceWebsites.size() != dataList.size()){
|
||||||
|
return Result.error(Constants.SERVICE_EXCEPTION, "导入失败,存在重复数据");
|
||||||
|
}
|
||||||
|
List<String> existSourceWebsites = this.list().stream().map(BiddingInfoEntity::getSourceWebsite).toList();
|
||||||
|
if(CollUtil.containsAny(existSourceWebsites, sourceWebsites)){
|
||||||
|
return Result.error(Constants.SERVICE_EXCEPTION, "导入失败,存在重复数据");
|
||||||
|
}
|
||||||
|
this.saveBatch(Converts.INSTANCE.toBiddingInfoReq(dataList));
|
||||||
|
return Result.okM("导入"+ dataList.size()+"条数据");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,530 @@
|
||||||
|
package com.dite.znpt.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import org.springframework.util.MimeTypeUtils;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
//
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
import com.dite.znpt.domain.Result;
|
||||||
|
import com.dite.znpt.domain.entity.BusinessDataFileEntity;
|
||||||
|
import com.dite.znpt.domain.page.PageBean;
|
||||||
|
import com.dite.znpt.mapper.BusinessDataFileMapper;
|
||||||
|
import com.dite.znpt.mapper.BusinessDataMapper;
|
||||||
|
import com.dite.znpt.service.BusinessDataFileService;
|
||||||
|
import com.dite.znpt.service.BusinessDataService;
|
||||||
|
import com.github.pagehelper.Page;
|
||||||
|
import com.github.pagehelper.PageHelper;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static jodd.io.FileUtil.deleteFile;
|
||||||
|
import static org.apache.tomcat.util.http.fileupload.FileUtils.deleteDirectory;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Service
|
||||||
|
@ApiOperation("商务资料文件service实现类")
|
||||||
|
public class BusinessDataFileServiceImpl implements BusinessDataFileService {
|
||||||
|
@Resource
|
||||||
|
private BusinessDataFileMapper businessDataFileMapper;
|
||||||
|
@Resource
|
||||||
|
private BusinessDataService businessDataService;
|
||||||
|
|
||||||
|
|
||||||
|
@ApiOperation("分页查询文件")
|
||||||
|
@Override
|
||||||
|
public PageBean pageSelect(Integer page, Integer pageSize, Long folderId, String fileName) {
|
||||||
|
PageHelper.startPage(page, pageSize);
|
||||||
|
List<BusinessDataFileEntity> list = businessDataFileMapper.List(folderId, fileName);
|
||||||
|
Page<BusinessDataFileEntity> p = (Page<BusinessDataFileEntity>) list;
|
||||||
|
PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
|
||||||
|
return pageBean;
|
||||||
|
}
|
||||||
|
@ApiOperation("删除文件")
|
||||||
|
public Result delete(Long fileId, Long folderId) {
|
||||||
|
//删除数据库数据
|
||||||
|
if (folderId != null){
|
||||||
|
businessDataFileMapper.delete(null,folderId);
|
||||||
|
return Result.okM("删除成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
//删除文件
|
||||||
|
String sPath = businessDataFileMapper.getPath(fileId);
|
||||||
|
|
||||||
|
businessDataFileMapper.delete(fileId,null);
|
||||||
|
|
||||||
|
boolean flag = false;
|
||||||
|
File file = new File(sPath);
|
||||||
|
// 判断目录或文件是否存在
|
||||||
|
if (!file.exists()) { // 不存在返回 false
|
||||||
|
return Result.error("文件不存在");
|
||||||
|
} else {
|
||||||
|
// 判断是否为文件
|
||||||
|
if (file.isFile()) { // 为文件时调用删除文件方法
|
||||||
|
try {
|
||||||
|
deleteFile(file);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return Result.okM("删除成功");
|
||||||
|
} else { // 为目录时调用删除目录方法
|
||||||
|
try {
|
||||||
|
deleteDirectory(file);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return Result.okM("删除成功");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("增加文件")
|
||||||
|
public void add(BusinessDataFileEntity businessDataFileEntity) {
|
||||||
|
businessDataFileMapper.add(businessDataFileEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("获取文件路径")
|
||||||
|
public String getPath(Long fileId) {
|
||||||
|
return businessDataFileMapper.getPath(fileId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("重命名文件")
|
||||||
|
@Override
|
||||||
|
public Result reName(Long fileId, String newFileName) {
|
||||||
|
// 参数校验
|
||||||
|
if (fileId == null) {
|
||||||
|
return Result.error("文件ID不能为空");
|
||||||
|
}
|
||||||
|
if (newFileName == null || newFileName.trim().isEmpty()) {
|
||||||
|
return Result.error("新文件名不能为空");
|
||||||
|
}
|
||||||
|
if (newFileName.length() > 100) {
|
||||||
|
return Result.error("文件名过长");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 获取原文件信息
|
||||||
|
String oldFilePath = businessDataFileMapper.getPath(fileId);
|
||||||
|
if (oldFilePath == null) {
|
||||||
|
return Result.error("文件不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建原文件对象
|
||||||
|
File oldFile = new File(oldFilePath);
|
||||||
|
if (!oldFile.exists()) {
|
||||||
|
return Result.error("文件不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建新文件路径
|
||||||
|
String parentPath = oldFile.getParent();
|
||||||
|
String fileExtension = "";
|
||||||
|
String fileNameWithoutExt = newFileName;
|
||||||
|
|
||||||
|
// 获取原文件扩展名
|
||||||
|
int lastDotIndex = oldFile.getName().lastIndexOf('.');
|
||||||
|
if (lastDotIndex > 0) {
|
||||||
|
fileExtension = oldFile.getName().substring(lastDotIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果新文件名没有扩展名,则添加原文件扩展名
|
||||||
|
if (!newFileName.contains(".")) {
|
||||||
|
newFileName = newFileName + fileExtension;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建新文件路径
|
||||||
|
String newFilePath = parentPath + File.separator + newFileName;
|
||||||
|
File newFile = new File(newFilePath);
|
||||||
|
|
||||||
|
// 检查新文件名是否已存在
|
||||||
|
if (newFile.exists()) {
|
||||||
|
return Result.error("文件名已存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重命名实际文件
|
||||||
|
boolean renameSuccess = oldFile.renameTo(newFile);
|
||||||
|
if (!renameSuccess) {
|
||||||
|
return Result.error("文件重命名失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新数据库中的文件信息
|
||||||
|
businessDataFileMapper.reName(fileId, newFileName, newFilePath);
|
||||||
|
|
||||||
|
return Result.okM("文件重命名成功");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
return Result.error("文件重命名失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("下载文件")
|
||||||
|
@Override
|
||||||
|
public void upload(Long fileId, HttpServletResponse response) {
|
||||||
|
String path = getPath(fileId);
|
||||||
|
try {
|
||||||
|
// path是指想要下载的文件的路径
|
||||||
|
File file = new File(path);
|
||||||
|
// 获取文件名
|
||||||
|
String filename = file.getName();
|
||||||
|
// 获取文件后缀名
|
||||||
|
String ext = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
|
||||||
|
// 将文件写入输入流
|
||||||
|
FileInputStream fileInputStream = new FileInputStream(file);
|
||||||
|
InputStream fis = new BufferedInputStream(fileInputStream);
|
||||||
|
byte[] buffer = new byte[fis.available()];
|
||||||
|
fis.read(buffer);
|
||||||
|
fis.close();
|
||||||
|
|
||||||
|
// 清空response
|
||||||
|
response.reset();
|
||||||
|
// 设置response的Header
|
||||||
|
response.setCharacterEncoding("UTF-8");
|
||||||
|
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
|
||||||
|
// 告知浏览器文件的大小
|
||||||
|
response.addHeader("Content-Length", "" + file.length());
|
||||||
|
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
|
||||||
|
response.setContentType("application/octet-stream");
|
||||||
|
outputStream.write(buffer);
|
||||||
|
outputStream.flush();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("上传文件")
|
||||||
|
@Override
|
||||||
|
public Result addfile(MultipartFile file, Long folderId) {
|
||||||
|
String loginIdAsLong = "未登录用户";
|
||||||
|
if(StpUtil.isLogin()){
|
||||||
|
loginIdAsLong = StpUtil.getLoginIdAsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file.isEmpty()) {
|
||||||
|
return Result.error("上传文件为空");
|
||||||
|
}
|
||||||
|
// TODO 以后可以优化,就算文件名一样,加个(1),(2)这种
|
||||||
|
|
||||||
|
try {
|
||||||
|
byte[] bytes = file.getBytes();
|
||||||
|
String uploadDir = businessDataService.getPath(folderId);
|
||||||
|
|
||||||
|
File uploadedFile = new File(uploadDir + "\\" + file.getOriginalFilename());
|
||||||
|
if (uploadedFile.exists()) {
|
||||||
|
return Result.error("文件已存在");
|
||||||
|
}
|
||||||
|
file.transferTo(uploadedFile);
|
||||||
|
|
||||||
|
// 保存文件信息到数据
|
||||||
|
BusinessDataFileEntity fileEntity = new BusinessDataFileEntity();
|
||||||
|
fileEntity.setFolderId(folderId);
|
||||||
|
fileEntity.setFileName(file.getOriginalFilename());
|
||||||
|
fileEntity.setFilePath(uploadDir + "\\" + file.getOriginalFilename());
|
||||||
|
fileEntity.setFileType(file.getContentType());
|
||||||
|
fileEntity.setFileSize(file.getSize()/1024);
|
||||||
|
fileEntity.setUploadTime(new Date());
|
||||||
|
fileEntity.setUploaderId(loginIdAsLong);
|
||||||
|
System.out.println(uploadDir + "\\" + file.getOriginalFilename());
|
||||||
|
add(fileEntity);
|
||||||
|
|
||||||
|
return Result.okM("上传成功");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return Result.error("上传失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ApiOperation("文件预览")
|
||||||
|
public void preview(Long fileId, HttpServletResponse response) {
|
||||||
|
try {
|
||||||
|
// 获取文件路径
|
||||||
|
String filePath = businessDataFileMapper.getPath(fileId);
|
||||||
|
if (filePath == null || filePath.isEmpty()) {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"文件不存在\"}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = new File(filePath);
|
||||||
|
if (!file.exists()) {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"文件不存在\"}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取文件扩展名
|
||||||
|
String extension = getFileExtension(filePath);
|
||||||
|
// ... 后续 switch 语句
|
||||||
|
|
||||||
|
// 根据文件类型处理预览
|
||||||
|
switch (extension) {
|
||||||
|
case "pdf":
|
||||||
|
previewPdf(file, response);
|
||||||
|
break;
|
||||||
|
case "jpg":
|
||||||
|
case "jpeg":
|
||||||
|
case "png":
|
||||||
|
case "gif":
|
||||||
|
case "bmp":
|
||||||
|
case "webp":
|
||||||
|
previewImage(file, response);
|
||||||
|
break;
|
||||||
|
case "txt":
|
||||||
|
case "md":
|
||||||
|
case "log":
|
||||||
|
previewText(file, response);
|
||||||
|
break;
|
||||||
|
case "doc":
|
||||||
|
case "docx":
|
||||||
|
case "xls":
|
||||||
|
case "xlsx":
|
||||||
|
case "ppt":
|
||||||
|
case "pptx":
|
||||||
|
previewOffice(file, response);
|
||||||
|
break;
|
||||||
|
case "mp4":
|
||||||
|
case "avi":
|
||||||
|
case "mov":
|
||||||
|
case "wmv":
|
||||||
|
case "flv":
|
||||||
|
previewVideo(file, response);
|
||||||
|
break;
|
||||||
|
case "mp3":
|
||||||
|
case "wav":
|
||||||
|
case "flac":
|
||||||
|
case "aac":
|
||||||
|
previewAudio(file, response);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
try {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"暂不支持该文件类型的预览\"}");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
try {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"文件预览失败: " + e.getMessage() + "\"}");
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getFileExtension(String filePath) {
|
||||||
|
if (filePath == null || filePath.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
// 从路径中提取文件名
|
||||||
|
String fileName = new File(filePath).getName();
|
||||||
|
int lastDotIndex = fileName.lastIndexOf('.');
|
||||||
|
if (lastDotIndex == -1) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return fileName.substring(lastDotIndex + 1).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void previewPdf(File file, HttpServletResponse response) {
|
||||||
|
try {
|
||||||
|
response.setContentType("application/pdf");
|
||||||
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
||||||
|
|
||||||
|
try (FileInputStream fis = new FileInputStream(file);
|
||||||
|
OutputStream os = response.getOutputStream()) {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = fis.read(buffer)) != -1) {
|
||||||
|
os.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
try {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"PDF预览失败: " + e.getMessage() + "\"}");
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void previewImage(File file, HttpServletResponse response) {
|
||||||
|
try {
|
||||||
|
String contentType = getImageContentType(file.getName());
|
||||||
|
response.setContentType(contentType);
|
||||||
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
||||||
|
|
||||||
|
try (FileInputStream fis = new FileInputStream(file);
|
||||||
|
OutputStream os = response.getOutputStream()) {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = fis.read(buffer)) != -1) {
|
||||||
|
os.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
try {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"图片预览失败: " + e.getMessage() + "\"}");
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void previewText(File file, HttpServletResponse response) {
|
||||||
|
try {
|
||||||
|
response.setContentType("text/plain; charset=UTF-8");
|
||||||
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
||||||
|
|
||||||
|
try (FileInputStream fis = new FileInputStream(file);
|
||||||
|
OutputStream os = response.getOutputStream()) {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = fis.read(buffer)) != -1) {
|
||||||
|
os.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
try {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"文本预览失败: " + e.getMessage() + "\"}");
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void previewOffice(File file, HttpServletResponse response) {
|
||||||
|
try {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"Office文件预览功能暂未实现,请下载后查看\"}");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void previewVideo(File file, HttpServletResponse response) {
|
||||||
|
try {
|
||||||
|
String contentType = getVideoContentType(file.getName());
|
||||||
|
response.setContentType(contentType);
|
||||||
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
||||||
|
|
||||||
|
try (FileInputStream fis = new FileInputStream(file);
|
||||||
|
OutputStream os = response.getOutputStream()) {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = fis.read(buffer)) != -1) {
|
||||||
|
os.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
try {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"视频预览失败: " + e.getMessage() + "\"}");
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void previewAudio(File file, HttpServletResponse response) {
|
||||||
|
try {
|
||||||
|
String contentType = getAudioContentType(file.getName());
|
||||||
|
response.setContentType(contentType);
|
||||||
|
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
|
||||||
|
|
||||||
|
try (FileInputStream fis = new FileInputStream(file);
|
||||||
|
OutputStream os = response.getOutputStream()) {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = fis.read(buffer)) != -1) {
|
||||||
|
os.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
try {
|
||||||
|
response.setContentType("application/json; charset=UTF-8");
|
||||||
|
response.getWriter().write("{\"status\":500,\"msg\":\"音频预览失败: " + e.getMessage() + "\"}");
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getImageContentType(String fileName) {
|
||||||
|
String extension = getFileExtension(fileName);
|
||||||
|
switch (extension) {
|
||||||
|
case "jpg":
|
||||||
|
case "jpeg":
|
||||||
|
return "image/jpeg";
|
||||||
|
case "png":
|
||||||
|
return "image/png";
|
||||||
|
case "gif":
|
||||||
|
return "image/gif";
|
||||||
|
case "bmp":
|
||||||
|
return "image/bmp";
|
||||||
|
case "webp":
|
||||||
|
return "image/webp";
|
||||||
|
default:
|
||||||
|
return "application/octet-stream";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getVideoContentType(String fileName) {
|
||||||
|
String extension = getFileExtension(fileName);
|
||||||
|
switch (extension) {
|
||||||
|
case "mp4":
|
||||||
|
return "video/mp4";
|
||||||
|
case "avi":
|
||||||
|
return "video/x-msvideo";
|
||||||
|
case "mov":
|
||||||
|
return "video/quicktime";
|
||||||
|
case "wmv":
|
||||||
|
return "video/x-ms-wmv";
|
||||||
|
case "flv":
|
||||||
|
return "video/x-flv";
|
||||||
|
default:
|
||||||
|
return "application/octet-stream";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getAudioContentType(String fileName) {
|
||||||
|
String extension = getFileExtension(fileName);
|
||||||
|
switch (extension) {
|
||||||
|
case "mp3":
|
||||||
|
return "audio/mpeg";
|
||||||
|
case "wav":
|
||||||
|
return "audio/wav";
|
||||||
|
case "flac":
|
||||||
|
return "audio/flac";
|
||||||
|
case "aac":
|
||||||
|
return "audio/aac";
|
||||||
|
default:
|
||||||
|
return "application/octet-stream";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,179 @@
|
||||||
|
package com.dite.znpt.service.impl;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
import com.dite.znpt.domain.Result;
|
||||||
|
import com.dite.znpt.domain.entity.BusinessDataEntity;
|
||||||
|
import com.dite.znpt.domain.page.PageBean;
|
||||||
|
import com.dite.znpt.mapper.BusinessDataMapper;
|
||||||
|
import com.dite.znpt.service.BusinessDataFileService;
|
||||||
|
import com.dite.znpt.service.BusinessDataService;
|
||||||
|
import com.github.pagehelper.Page;
|
||||||
|
import com.github.pagehelper.PageHelper;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.io.File;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商务资料文件夹实现类
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@ApiOperation("商务资料文件夹service实现类")
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class BusinessDataServiceImpl implements BusinessDataService {
|
||||||
|
@Resource
|
||||||
|
private BusinessDataMapper businessDataMapper;
|
||||||
|
@Resource
|
||||||
|
private BusinessDataFileService businessDataFileService;
|
||||||
|
|
||||||
|
// 从配置文件中读取基础路径(默认值:D:/upload/businessData)
|
||||||
|
// ,新建文件夹的时候,如果没指定父文件夹Id,就用这个
|
||||||
|
@Value("${file.upload.businessDataPath:D:/upload/businessData}")
|
||||||
|
private String businessDataPath;
|
||||||
|
|
||||||
|
@ApiOperation(value = "分页查询")
|
||||||
|
@Override
|
||||||
|
public PageBean pageSelect(Integer page, Integer pageSize, String folderName) {
|
||||||
|
PageHelper.startPage(page, pageSize);
|
||||||
|
List<BusinessDataEntity> businessDataEntityList = businessDataMapper.ListWithCondition(folderName);
|
||||||
|
Page<BusinessDataEntity> p = (Page<BusinessDataEntity>) businessDataEntityList;
|
||||||
|
PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
|
||||||
|
return pageBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "创建文件夹")
|
||||||
|
@Override
|
||||||
|
public Result createFolder(String folderName, Long parentId) {
|
||||||
|
// 获取ID
|
||||||
|
String loginIdAsLong = "未登录用户";
|
||||||
|
if(StpUtil.isLogin()){
|
||||||
|
loginIdAsLong = StpUtil.getLoginIdAsString();
|
||||||
|
}
|
||||||
|
// 文件夹名称不能为空
|
||||||
|
// TODO: 添加文件夹名称校验,后续最好更规范些,写个工具类专门校验,用正则表达式
|
||||||
|
if (folderName == null || folderName.trim().isEmpty()) {
|
||||||
|
return Result.error("文件夹名称不能为空");
|
||||||
|
}
|
||||||
|
if (folderName.length() > 50) {
|
||||||
|
return Result.error("文件夹名称过长");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 文件夹名称前置一个/
|
||||||
|
String folderName1 = "/" + folderName;
|
||||||
|
// 目标文件夹
|
||||||
|
File targetDir = Paths.get(businessDataPath, folderName1).toFile();
|
||||||
|
if (parentId != 0L) {
|
||||||
|
// 获取父文件夹路径
|
||||||
|
targetDir = Paths.get(businessDataMapper.getPath(parentId), folderName1).toFile();
|
||||||
|
} else {
|
||||||
|
// 如果是根目录,检查默认路径是否存在,不存在则创建
|
||||||
|
File defaultPathDir = new File(businessDataPath);
|
||||||
|
if (!defaultPathDir.exists()) {
|
||||||
|
boolean created = defaultPathDir.mkdirs();
|
||||||
|
if (!created) {
|
||||||
|
return Result.error("默认路径创建失败: " + businessDataPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 创建文件夹和新增文件夹路径
|
||||||
|
if (!targetDir.exists()) {
|
||||||
|
// 创建文件夹
|
||||||
|
boolean created = targetDir.mkdirs();
|
||||||
|
if (!created) {
|
||||||
|
throw new RuntimeException("文件夹创建失败: " + targetDir.getAbsolutePath());
|
||||||
|
}
|
||||||
|
// 上面是新增文件夹功能,但没有往数据库插入文件夹相关数据,所以下面新增
|
||||||
|
// 创建BusinessDataEntity对象并设置属性
|
||||||
|
BusinessDataEntity businessDataEntity = new BusinessDataEntity(
|
||||||
|
null,
|
||||||
|
folderName,
|
||||||
|
parentId,
|
||||||
|
loginIdAsLong,
|
||||||
|
LocalDateTime.now(),
|
||||||
|
LocalDateTime.now(),
|
||||||
|
false,
|
||||||
|
targetDir.getAbsolutePath());
|
||||||
|
// 插入到数据库
|
||||||
|
businessDataMapper.insert(businessDataEntity);
|
||||||
|
return Result.okM("文件夹创建成功");
|
||||||
|
} else {
|
||||||
|
return Result.error("文件夹已存在: ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("获取文件夹路径")
|
||||||
|
public String getPath(Long parentId) {
|
||||||
|
return businessDataMapper.getPath(parentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("删除文件夹")
|
||||||
|
@Override
|
||||||
|
public Result delete(Long folderId) {
|
||||||
|
// 获取文件夹路径
|
||||||
|
String folderPath = businessDataMapper.getPath(folderId);
|
||||||
|
|
||||||
|
// 创建Path对象并删除文件夹
|
||||||
|
Path folder = Paths.get(folderPath);
|
||||||
|
if (Files.exists(folder)) {
|
||||||
|
try {
|
||||||
|
// 使用Files.walk获取所有文件和目录,按深度排序后删除
|
||||||
|
java.util.stream.Stream<Path> filePaths = Files.walk(folder);
|
||||||
|
filePaths.sorted(Comparator.reverseOrder())
|
||||||
|
.map(Path::toFile)
|
||||||
|
.forEach(File::delete);
|
||||||
|
filePaths.close();
|
||||||
|
|
||||||
|
// 删除数据库中文件夹的数据
|
||||||
|
businessDataMapper.delete(folderId);
|
||||||
|
// 删除文件夹下文件的数据
|
||||||
|
businessDataFileService.delete(null, folderId);
|
||||||
|
return Result.okM("删除成功");
|
||||||
|
} catch (Exception e) {
|
||||||
|
return Result.okM("删除成功");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return Result.error("文件夹不存在: " + folderPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("重命名文件夹")
|
||||||
|
@Override
|
||||||
|
public Result reName(Long folderId, String newName) {
|
||||||
|
// 获取文件夹路径
|
||||||
|
String folderPath = businessDataMapper.getPath(folderId);
|
||||||
|
String newPath = folderPath.substring(0, folderPath.lastIndexOf('\\')) + "\\" + newName;
|
||||||
|
//
|
||||||
|
// //想命名的原文件的路径
|
||||||
|
// File file = new File("f:/a/a.xlsx");
|
||||||
|
// //将原文件更改为f:\a\b.xlsx,其中路径是必要的。注意
|
||||||
|
// file.renameTo(new File("f:/a/b.xlsx"));
|
||||||
|
// 想命名的原文件夹的路径
|
||||||
|
File file1 = new File(folderPath);
|
||||||
|
// 将原文件夹更改为A,其中路径是必要的。注意
|
||||||
|
file1.renameTo(new File(newPath));
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
|
||||||
|
BusinessDataEntity businessDataEntity = new BusinessDataEntity(
|
||||||
|
folderId,
|
||||||
|
newName,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
now,
|
||||||
|
null,
|
||||||
|
newPath);
|
||||||
|
businessDataMapper.reName(businessDataEntity);
|
||||||
|
return Result.okM("重命名成功");
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,17 +1,21 @@
|
||||||
package com.dite.znpt.service.impl;
|
package com.dite.znpt.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.dite.znpt.domain.entity.ContractEntity;
|
import com.dite.znpt.domain.entity.ContractEntity;
|
||||||
|
import com.dite.znpt.domain.entity.ContractSettlementEntity;
|
||||||
import com.dite.znpt.domain.vo.ContractListReq;
|
import com.dite.znpt.domain.vo.ContractListReq;
|
||||||
import com.dite.znpt.domain.vo.ContractResp;
|
|
||||||
import com.dite.znpt.domain.vo.ContractReq;
|
import com.dite.znpt.domain.vo.ContractReq;
|
||||||
import com.dite.znpt.service.ContractService;
|
import com.dite.znpt.domain.vo.ContractResp;
|
||||||
|
import com.dite.znpt.enums.ContractStatusEnum;
|
||||||
import com.dite.znpt.mapper.ContractMapper;
|
import com.dite.znpt.mapper.ContractMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import com.dite.znpt.service.ContractService;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import com.dite.znpt.service.ContractSettlementService;
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import com.dite.znpt.util.PageUtil;
|
import com.dite.znpt.util.PageUtil;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -24,6 +28,8 @@ import java.util.List;
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ContractServiceImpl extends ServiceImpl<ContractMapper, ContractEntity> implements ContractService {
|
public class ContractServiceImpl extends ServiceImpl<ContractMapper, ContractEntity> implements ContractService {
|
||||||
|
|
||||||
|
private final ContractSettlementService contractSettlementService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 功能描述:查询合同列表
|
* 功能描述:查询合同列表
|
||||||
*
|
*
|
||||||
|
@ -37,7 +43,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, ContractEnt
|
||||||
PageUtil.startPage();
|
PageUtil.startPage();
|
||||||
List<ContractResp> contractList= this.baseMapper.queryBySelective(contractReq);
|
List<ContractResp> contractList= this.baseMapper.queryBySelective(contractReq);
|
||||||
contractList.forEach(resp -> {
|
contractList.forEach(resp -> {
|
||||||
|
resp.setContractStatusLabel(ContractStatusEnum.getDescByCode(resp.getContractStatus()));
|
||||||
});
|
});
|
||||||
return contractList;
|
return contractList;
|
||||||
}
|
}
|
||||||
|
@ -95,9 +101,10 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, ContractEnt
|
||||||
* @date 2025/07/21 20:29
|
* @date 2025/07/21 20:29
|
||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteById(String contractId) {
|
public void deleteById(String contractId) {
|
||||||
// todo 校验
|
|
||||||
removeById(contractId);
|
removeById(contractId);
|
||||||
|
contractSettlementService.lambdaUpdate().eq(ContractSettlementEntity::getContractId, contractId).remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
//package com.dite.znpt.service.impl;
|
||||||
|
//
|
||||||
|
//import com.dite.znpt.service.EmailService;
|
||||||
|
//import lombok.extern.slf4j.Slf4j;
|
||||||
|
//import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
//import org.springframework.beans.factory.annotation.Value;
|
||||||
|
//import org.springframework.http.HttpStatus;
|
||||||
|
//import org.springframework.mail.SimpleMailMessage;
|
||||||
|
//import org.springframework.mail.javamail.JavaMailSender;
|
||||||
|
//import org.springframework.stereotype.Service;
|
||||||
|
//import org.springframework.web.server.ResponseStatusException;
|
||||||
|
//
|
||||||
|
//import java.util.Random;
|
||||||
|
//
|
||||||
|
//@Slf4j
|
||||||
|
//@Service
|
||||||
|
//public class EmailServiceImpl implements EmailService {
|
||||||
|
//
|
||||||
|
// @Autowired
|
||||||
|
// private JavaMailSender mailSender;
|
||||||
|
//
|
||||||
|
// @Autowired
|
||||||
|
// private InMemoryVerificationCodeStore codeStore;
|
||||||
|
//
|
||||||
|
// @Value("${email.verification.from}")
|
||||||
|
// private String from;
|
||||||
|
// @Value("${email.verification.subject}")
|
||||||
|
// private String subject;
|
||||||
|
// @Value("${email.verification.template}")
|
||||||
|
// private String template;
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public boolean sendVerificationCode(String email, String code) {
|
||||||
|
// SimpleMailMessage message = new SimpleMailMessage();
|
||||||
|
// message.setFrom(from);
|
||||||
|
// message.setSubject(subject);
|
||||||
|
// message.setTo(email);
|
||||||
|
// message.setText(String.format(template,code));
|
||||||
|
// try{
|
||||||
|
// mailSender.send(message);
|
||||||
|
// return true;
|
||||||
|
// }catch (Exception e){
|
||||||
|
// log.error("发送邮件失败:",e);
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public String generateCode(String email) {
|
||||||
|
// if (!codeStore.canSend(email)) {
|
||||||
|
// throw new ResponseStatusException(
|
||||||
|
// HttpStatus.TOO_MANY_REQUESTS, // 429 状态码
|
||||||
|
// "验证码发送过于频繁,请稍后再试"
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// String code = String.format("%04d", new Random().nextInt(9999));
|
||||||
|
// codeStore.save(email, code);
|
||||||
|
// return code;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public boolean verifyCode(String email, String code) {
|
||||||
|
// return codeStore.validate(email, code);
|
||||||
|
// }
|
||||||
|
//}
|
|
@ -0,0 +1,363 @@
|
||||||
|
package com.dite.znpt.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.dite.znpt.domain.entity.EquipmentApprovalEntity;
|
||||||
|
import com.dite.znpt.domain.mapper.EquipmentApprovalMapper;
|
||||||
|
import com.dite.znpt.domain.vo.EquipmentApprovalListReq;
|
||||||
|
import com.dite.znpt.domain.vo.EquipmentApprovalReq;
|
||||||
|
import com.dite.znpt.domain.vo.EquipmentApprovalResp;
|
||||||
|
import com.dite.znpt.domain.vo.EquipmentProcurementApplyReq;
|
||||||
|
import com.dite.znpt.service.EquipmentApprovalService;
|
||||||
|
import com.dite.znpt.websocket.SimpleWebSocketHandler;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bear.G
|
||||||
|
* @date 2025/1/8/周三 17:55
|
||||||
|
* @description 设备审批服务实现类
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class EquipmentApprovalServiceImpl implements EquipmentApprovalService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private EquipmentApprovalMapper equipmentApprovalMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPage<EquipmentApprovalResp> getPendingApprovals(EquipmentApprovalListReq req) {
|
||||||
|
// 创建分页对象,处理null值
|
||||||
|
Integer pageNum = req.getPage() != null ? req.getPage() : 1;
|
||||||
|
Integer pageSize = req.getPageSize() != null ? req.getPageSize() : 10;
|
||||||
|
Page<EquipmentApprovalEntity> page = new Page<>(pageNum, pageSize);
|
||||||
|
|
||||||
|
LambdaQueryWrapper<EquipmentApprovalEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(EquipmentApprovalEntity::getApprovalStatus, "PENDING");
|
||||||
|
|
||||||
|
// 添加查询条件
|
||||||
|
addQueryConditions(wrapper, req);
|
||||||
|
|
||||||
|
IPage<EquipmentApprovalEntity> result = equipmentApprovalMapper.selectPage(page, wrapper);
|
||||||
|
|
||||||
|
return convertToRespPage(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPage<EquipmentApprovalResp> getApprovedApprovals(EquipmentApprovalListReq req) {
|
||||||
|
// 创建分页对象,处理null值
|
||||||
|
Integer pageNum = req.getPage() != null ? req.getPage() : 1;
|
||||||
|
Integer pageSize = req.getPageSize() != null ? req.getPageSize() : 10;
|
||||||
|
Page<EquipmentApprovalEntity> page = new Page<>(pageNum, pageSize);
|
||||||
|
|
||||||
|
LambdaQueryWrapper<EquipmentApprovalEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.in(EquipmentApprovalEntity::getApprovalStatus, "APPROVED", "REJECTED");
|
||||||
|
|
||||||
|
// 添加查询条件
|
||||||
|
addQueryConditions(wrapper, req);
|
||||||
|
|
||||||
|
IPage<EquipmentApprovalEntity> result = equipmentApprovalMapper.selectPage(page, wrapper);
|
||||||
|
|
||||||
|
return convertToRespPage(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void approve(String approvalId, EquipmentApprovalReq req) {
|
||||||
|
EquipmentApprovalEntity entity = equipmentApprovalMapper.selectById(approvalId);
|
||||||
|
if (entity == null) {
|
||||||
|
throw new RuntimeException("审批记录不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
entity.setApprovalStatus("APPROVED");
|
||||||
|
entity.setApproverName(req.getApproverName());
|
||||||
|
entity.setApproverId(req.getApproverId());
|
||||||
|
entity.setApprovalTime(LocalDateTime.now());
|
||||||
|
entity.setApprovalComment(req.getApprovalComment());
|
||||||
|
|
||||||
|
equipmentApprovalMapper.updateById(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reject(String approvalId, EquipmentApprovalReq req) {
|
||||||
|
EquipmentApprovalEntity entity = equipmentApprovalMapper.selectById(approvalId);
|
||||||
|
if (entity == null) {
|
||||||
|
throw new RuntimeException("审批记录不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
entity.setApprovalStatus("REJECTED");
|
||||||
|
entity.setApproverName(req.getApproverName());
|
||||||
|
entity.setApproverId(req.getApproverId());
|
||||||
|
entity.setApprovalTime(LocalDateTime.now());
|
||||||
|
entity.setApprovalComment(req.getApprovalComment());
|
||||||
|
|
||||||
|
equipmentApprovalMapper.updateById(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EquipmentApprovalResp getApprovalDetail(String approvalId) {
|
||||||
|
EquipmentApprovalEntity entity = equipmentApprovalMapper.selectById(approvalId);
|
||||||
|
if (entity == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return convertToResp(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getApprovalStats() {
|
||||||
|
Map<String, Object> stats = new HashMap<>();
|
||||||
|
|
||||||
|
// 待审批数量
|
||||||
|
LambdaQueryWrapper<EquipmentApprovalEntity> pendingWrapper = new LambdaQueryWrapper<>();
|
||||||
|
pendingWrapper.eq(EquipmentApprovalEntity::getApprovalStatus, "PENDING");
|
||||||
|
long pendingCount = equipmentApprovalMapper.selectCount(pendingWrapper);
|
||||||
|
stats.put("pendingCount", pendingCount);
|
||||||
|
|
||||||
|
// 已通过数量
|
||||||
|
LambdaQueryWrapper<EquipmentApprovalEntity> approvedWrapper = new LambdaQueryWrapper<>();
|
||||||
|
approvedWrapper.eq(EquipmentApprovalEntity::getApprovalStatus, "APPROVED");
|
||||||
|
long approvedCount = equipmentApprovalMapper.selectCount(approvedWrapper);
|
||||||
|
stats.put("approvedCount", approvedCount);
|
||||||
|
|
||||||
|
// 已拒绝数量
|
||||||
|
LambdaQueryWrapper<EquipmentApprovalEntity> rejectedWrapper = new LambdaQueryWrapper<>();
|
||||||
|
rejectedWrapper.eq(EquipmentApprovalEntity::getApprovalStatus, "REJECTED");
|
||||||
|
long rejectedCount = equipmentApprovalMapper.selectCount(rejectedWrapper);
|
||||||
|
stats.put("rejectedCount", rejectedCount);
|
||||||
|
|
||||||
|
return stats;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加查询条件
|
||||||
|
*/
|
||||||
|
private void addQueryConditions(LambdaQueryWrapper<EquipmentApprovalEntity> wrapper, EquipmentApprovalListReq req) {
|
||||||
|
log.info("开始构建查询条件,请求参数: {}", req);
|
||||||
|
|
||||||
|
// 添加搜索条件并记录日志
|
||||||
|
int conditionCount = 0;
|
||||||
|
|
||||||
|
if (StringUtils.hasText(req.getEquipmentName())) {
|
||||||
|
wrapper.like(EquipmentApprovalEntity::getEquipmentName, req.getEquipmentName());
|
||||||
|
log.info("添加设备名称查询条件: {}", req.getEquipmentName());
|
||||||
|
conditionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.hasText(req.getApplicantName())) {
|
||||||
|
wrapper.like(EquipmentApprovalEntity::getApplicantName, req.getApplicantName());
|
||||||
|
log.info("添加申请人查询条件: {}", req.getApplicantName());
|
||||||
|
conditionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.hasText(req.getBusinessType())) {
|
||||||
|
wrapper.eq(EquipmentApprovalEntity::getBusinessType, req.getBusinessType());
|
||||||
|
log.info("添加业务类型查询条件: {}", req.getBusinessType());
|
||||||
|
conditionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.hasText(req.getApprovalStatus())) {
|
||||||
|
wrapper.eq(EquipmentApprovalEntity::getApprovalStatus, req.getApprovalStatus());
|
||||||
|
log.info("添加审批状态查询条件: {}", req.getApprovalStatus());
|
||||||
|
conditionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.hasText(req.getApplyTimeStart())) {
|
||||||
|
wrapper.ge(EquipmentApprovalEntity::getApplyTime, req.getApplyTimeStart());
|
||||||
|
log.info("添加申请时间开始查询条件: {}", req.getApplyTimeStart());
|
||||||
|
conditionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.hasText(req.getApplyTimeEnd())) {
|
||||||
|
wrapper.le(EquipmentApprovalEntity::getApplyTime, req.getApplyTimeEnd());
|
||||||
|
log.info("添加申请时间结束查询条件: {}", req.getApplyTimeEnd());
|
||||||
|
conditionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.hasText(req.getApprovalTimeStart())) {
|
||||||
|
wrapper.ge(EquipmentApprovalEntity::getApprovalTime, req.getApprovalTimeStart());
|
||||||
|
log.info("添加审批时间开始查询条件: {}", req.getApprovalTimeStart());
|
||||||
|
conditionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.hasText(req.getApprovalTimeEnd())) {
|
||||||
|
wrapper.le(EquipmentApprovalEntity::getApprovalTime, req.getApprovalTimeEnd());
|
||||||
|
log.info("添加审批时间结束查询条件: {}", req.getApprovalTimeEnd());
|
||||||
|
conditionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("查询条件构建完成,共添加 {} 个条件", conditionCount);
|
||||||
|
|
||||||
|
// 排序
|
||||||
|
wrapper.orderByDesc(EquipmentApprovalEntity::getCreateTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转换为响应对象
|
||||||
|
*/
|
||||||
|
private EquipmentApprovalResp convertToResp(EquipmentApprovalEntity entity) {
|
||||||
|
EquipmentApprovalResp resp = new EquipmentApprovalResp();
|
||||||
|
BeanUtils.copyProperties(entity, resp);
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转换为响应分页对象
|
||||||
|
*/
|
||||||
|
private IPage<EquipmentApprovalResp> convertToRespPage(IPage<EquipmentApprovalEntity> page) {
|
||||||
|
List<EquipmentApprovalResp> records = page.getRecords().stream()
|
||||||
|
.map(this::convertToResp)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
Page<EquipmentApprovalResp> respPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
|
||||||
|
respPage.setRecords(records);
|
||||||
|
|
||||||
|
return respPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void submitProcurementApplication(EquipmentProcurementApplyReq req) {
|
||||||
|
log.info("开始提交采购申请,请求参数: {}", req);
|
||||||
|
|
||||||
|
// 创建审批实体
|
||||||
|
EquipmentApprovalEntity entity = new EquipmentApprovalEntity();
|
||||||
|
|
||||||
|
// 设置基本信息
|
||||||
|
entity.setEquipmentId(req.getEquipmentId()); // 添加设备ID
|
||||||
|
entity.setEquipmentName(req.getEquipmentName());
|
||||||
|
entity.setEquipmentType(req.getEquipmentType());
|
||||||
|
entity.setEquipmentModel(req.getEquipmentModel());
|
||||||
|
entity.setBrand(req.getBrand());
|
||||||
|
entity.setSupplierName(req.getSupplierName());
|
||||||
|
entity.setPurchasePrice(req.getBudgetAmount());
|
||||||
|
entity.setTotalPrice(req.getBudgetAmount().multiply(new java.math.BigDecimal(req.getQuantity())));
|
||||||
|
entity.setQuantity(req.getQuantity());
|
||||||
|
|
||||||
|
// 设置申请信息
|
||||||
|
entity.setApplicantName(getCurrentUserName()); // 获取当前用户名
|
||||||
|
entity.setApplicantId(getCurrentUserId()); // 获取当前用户ID
|
||||||
|
entity.setApplyTime(LocalDateTime.now());
|
||||||
|
entity.setApplyReason(req.getApplyReason());
|
||||||
|
|
||||||
|
// 设置业务类型和审批状态
|
||||||
|
entity.setBusinessType("PROCUREMENT");
|
||||||
|
entity.setApprovalStatus("PENDING");
|
||||||
|
|
||||||
|
// 设置扩展字段(如果有的话)
|
||||||
|
// entity.setProcurementType(req.getProcurementType());
|
||||||
|
// entity.setUrgencyLevel(req.getUrgencyLevel());
|
||||||
|
// entity.setTechnicalRequirements(req.getTechnicalRequirements());
|
||||||
|
// entity.setBusinessJustification(req.getBusinessJustification());
|
||||||
|
// entity.setExpectedDeliveryDate(req.getExpectedDeliveryDate());
|
||||||
|
|
||||||
|
// 保存到数据库
|
||||||
|
equipmentApprovalMapper.insert(entity);
|
||||||
|
|
||||||
|
// 发送通知 - 使用日志记录,后续可以扩展为WebSocket通知
|
||||||
|
log.info("采购申请提交成功,设备名称: {}, 申请人: {}",
|
||||||
|
req.getEquipmentName(), getCurrentUserName());
|
||||||
|
|
||||||
|
// 发送WebSocket通知
|
||||||
|
try {
|
||||||
|
SimpleWebSocketHandler.sendProcurementNotification(
|
||||||
|
req.getEquipmentName(),
|
||||||
|
getCurrentUserName()
|
||||||
|
);
|
||||||
|
log.info("WebSocket通知发送成功");
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("WebSocket通知发送失败", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("采购申请提交成功,审批ID: {}", entity.getApprovalId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPage<EquipmentApprovalResp> getMyProcurementApplications(EquipmentApprovalListReq req) {
|
||||||
|
log.info("开始获取我的采购申请,请求参数: {}", req);
|
||||||
|
|
||||||
|
// 创建分页对象
|
||||||
|
Integer pageNum = req.getPage() != null ? req.getPage() : 1;
|
||||||
|
Integer pageSize = req.getPageSize() != null ? req.getPageSize() : 10;
|
||||||
|
Page<EquipmentApprovalEntity> page = new Page<>(pageNum, pageSize);
|
||||||
|
|
||||||
|
LambdaQueryWrapper<EquipmentApprovalEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
|
||||||
|
// 只查询当前用户的申请
|
||||||
|
wrapper.eq(EquipmentApprovalEntity::getApplicantId, getCurrentUserId());
|
||||||
|
wrapper.eq(EquipmentApprovalEntity::getBusinessType, "PROCUREMENT");
|
||||||
|
|
||||||
|
// 添加查询条件
|
||||||
|
addQueryConditions(wrapper, req);
|
||||||
|
|
||||||
|
IPage<EquipmentApprovalEntity> result = equipmentApprovalMapper.selectPage(page, wrapper);
|
||||||
|
|
||||||
|
return convertToRespPage(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void withdrawProcurementApplication(String approvalId) {
|
||||||
|
log.info("开始撤回采购申请,审批ID: {}", approvalId);
|
||||||
|
|
||||||
|
EquipmentApprovalEntity entity = equipmentApprovalMapper.selectById(approvalId);
|
||||||
|
if (entity == null) {
|
||||||
|
throw new RuntimeException("审批记录不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否是当前用户的申请
|
||||||
|
if (!entity.getApplicantId().equals(getCurrentUserId())) {
|
||||||
|
throw new RuntimeException("只能撤回自己的申请");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查状态是否可以撤回
|
||||||
|
if (!"PENDING".equals(entity.getApprovalStatus())) {
|
||||||
|
throw new RuntimeException("只能撤回待审批状态的申请");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新状态为已撤回
|
||||||
|
entity.setApprovalStatus("WITHDRAWN");
|
||||||
|
equipmentApprovalMapper.updateById(entity);
|
||||||
|
|
||||||
|
log.info("采购申请撤回成功,审批ID: {}", approvalId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前用户名
|
||||||
|
*/
|
||||||
|
private String getCurrentUserName() {
|
||||||
|
try {
|
||||||
|
// 从Sa-Token上下文获取当前用户名
|
||||||
|
Object loginId = cn.dev33.satoken.stp.StpUtil.getLoginId();
|
||||||
|
if (loginId != null) {
|
||||||
|
return loginId.toString();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("获取当前用户名失败: {}", e.getMessage());
|
||||||
|
}
|
||||||
|
return "未知用户";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前用户ID
|
||||||
|
*/
|
||||||
|
private String getCurrentUserId() {
|
||||||
|
try {
|
||||||
|
// 从Sa-Token上下文获取当前用户ID
|
||||||
|
Object loginId = cn.dev33.satoken.stp.StpUtil.getLoginId();
|
||||||
|
if (loginId != null) {
|
||||||
|
return loginId.toString();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("获取当前用户ID失败: {}", e.getMessage());
|
||||||
|
}
|
||||||
|
return "unknown_user_id";
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue