This commit is contained in:
2025-12-30 13:47:53 +08:00
parent f1637501b2
commit a623c5673f
137 changed files with 11031 additions and 4043 deletions

View File

@@ -16,11 +16,13 @@ public class HrmEmpOrgPositionBo extends BaseEntity {
@NotNull(message = "员工不能为空")
private Long empId;
@NotNull(message = "组织不能为空")
private Long orgId;
@NotNull(message = "部门不能为空")
/** 部门ID引用 sys_dept.dept_id */
private Long deptId;
@NotNull(message = "岗位不能为空")
private Long positionId;
/** 岗位ID引用 sys_post.post_id */
private Long postId;
private Integer isPrimary;

View File

@@ -39,11 +39,11 @@ public class HrmEmployeeBo extends BaseEntity {
private String status;
private Long gradeId;
/** 主部门ID引用 sys_dept.dept_id */
private Long deptId;
private Long mainOrgId;
private Long mainPositionId;
/** 主岗位ID引用 sys_post.post_id */
private Long postId;
private String remark;
}

View File

@@ -0,0 +1,33 @@
package com.klp.hrm.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
public class HrmFlowCcBo extends BaseEntity {
private Long ccId;
private Long instId;
private String bizType;
private Long bizId;
/** 业务类型名称(列表展示用,可选条件) */
private String bizTypeName;
/** 业务标题/摘要(列表展示用,可选条件) */
private String bizTitle;
private Long nodeId;
private String nodeName;
private Integer readFlag;
private Long ccUserId;
/** 手动抄送:支持批量被抄送用户 */
private List<Long> ccUserIds;
private Long fromUserId;
private String remark;
}

View File

@@ -7,12 +7,19 @@ import javax.validation.constraints.NotNull;
@Data
public class HrmFlowStartBo {
@NotNull(message = "模板ID不能为空")
// 模板ID存在则按模板启动为空则走“自选审批人一次性审批”
private Long tplId;
// 无模板时:自选审批人 userId一次性审批审批完成即结束流程
private Long manualAssigneeUserId;
@NotBlank(message = "业务类型不能为空")
private String bizType;
@NotNull(message = "业务ID不能为空")
private Long bizId;
private Long startUserId;
private String contentJson;
}

View File

@@ -0,0 +1,17 @@
package com.klp.hrm.domain.bo;
import lombok.Data;
/**
* 流程任务审批请求体
*/
@Data
public class HrmFlowTaskApproveBo {
/** 审批意见 */
private String remark;
/** 盖章参数(仅用于用印业务) */
private HrmSealStampBo stampBo;
}

View File

@@ -20,4 +20,10 @@ public class HrmFlowTaskBo extends BaseEntity {
private String status;
private Date expireTime;
private String remark;
/** 业务类型leave/travel/seal */
private String bizType;
/** 业务ID对应请假/出差/用印的 bizId */
private Long bizId;
}

View File

@@ -1,24 +0,0 @@
package com.klp.hrm.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
@Data
@EqualsAndHashCode(callSuper = true)
public class HrmGradeBo extends BaseEntity {
private Long gradeId;
@NotBlank(message = "职级编码不能为空")
private String gradeCode;
@NotBlank(message = "职级名称不能为空")
private String gradeName;
private Integer levelNo;
private String remark;
}

View File

@@ -12,11 +12,13 @@ public class HrmHeadcountPlanBo extends BaseEntity {
private Long planId;
@NotNull(message = "组织不能为空")
private Long orgId;
@NotNull(message = "部门不能为空")
/** 部门ID引用 sys_dept.dept_id */
private Long deptId;
@NotNull(message = "岗位不能为空")
private Long positionId;
/** 岗位ID引用 sys_post.post_id */
private Long postId;
@NotNull(message = "年份不能为空")
private Integer year;

View File

@@ -1,5 +1,6 @@
package com.klp.hrm.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -21,9 +22,11 @@ public class HrmLeaveReqBo extends BaseEntity {
private String leaveType;
@NotNull(message = "开始时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8")
private Date startTime;
@NotNull(message = "结束时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8")
private Date endTime;
@NotNull(message = "时长不能为空")
@@ -31,6 +34,18 @@ public class HrmLeaveReqBo extends BaseEntity {
private String reason;
private String status;
/**
* 流程模板ID前端选择模板流程时传入
*
* 不传则后端按 bizType 自动选择启用的最新版本模板;
* 若也未配置模板,则可通过 manualAssigneeUserId 走一次性审批。
*/
private Long tplId;
// 无模板时,自选审批人 userId
private Long manualAssigneeUserId;
private String accessoryApplyIds;
private String accessoryReceiptIds;
private String remark;

View File

@@ -1,39 +0,0 @@
package com.klp.hrm.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 组织 Bo
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class HrmOrgBo extends BaseEntity {
/** 组织ID */
private Long orgId;
/** 父级组织ID */
private Long parentId;
@NotBlank(message = "组织编码不能为空")
private String orgCode;
@NotBlank(message = "组织名称不能为空")
private String orgName;
@NotBlank(message = "组织类型不能为空")
private String orgType;
private Long leaderUserId;
private Integer orderNum;
private Integer status;
private String remark;
}

View File

@@ -1,28 +0,0 @@
package com.klp.hrm.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
@Data
@EqualsAndHashCode(callSuper = true)
public class HrmPositionBo extends BaseEntity {
private Long positionId;
@NotBlank(message = "岗位编码不能为空")
private String positionCode;
@NotBlank(message = "岗位名称不能为空")
private String positionName;
private Long gradeId;
private Integer orderNum;
private Integer status;
private String remark;
}

View File

@@ -5,31 +5,35 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.math.BigDecimal;
@Data
@EqualsAndHashCode(callSuper = true)
public class HrmOvertimeReqBo extends BaseEntity {
public class HrmReimburseReqBo extends BaseEntity {
private Long bizId;
@NotNull(message = "员工ID不能为空")
private Long empId;
private String otType;
private String reimburseType;
@NotNull(message = "开始时间不能为空")
private Date startTime;
@NotNull(message = "结束时间不能为空")
private Date endTime;
@NotNull(message = "时长不能为空")
private java.math.BigDecimal hours;
@NotNull(message = "报销总金额不能为空")
private BigDecimal totalAmount;
private String reason;
private String status;
// 无模板时自选审批人 userId
private Long manualAssigneeUserId;
/** 报销单据附件oss_id列表(CSV) */
private String accessoryApplyIds;
/** 回执附件oss_id列表(CSV) */
private String accessoryReceiptIds;
private String remark;
}

View File

@@ -40,9 +40,20 @@ public class HrmSealReqBo extends BaseEntity {
/** 状态 draft/running/approved/rejected/canceled */
private String status;
/** 关联流程模板ID提交时可选,存在则自动发起审批 */
/** 关联流程模板ID旧字段,兼容历史前端/代码 */
private Long flowTplId;
/**
* 流程模板ID新字段前端选择模板流程时传入
* 优先级高于 flowTplId。
*/
private Long tplId;
/**
* 手动选择的审批人ID前端选择手动审批时传入
*/
private Long manualAssigneeUserId;
/** 流程发起人ID可选不填可由服务侧取当前登录人 */
private Long startUserId;

View File

@@ -1,6 +1,13 @@
package com.klp.hrm.domain.bo;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
@@ -9,37 +16,83 @@ import javax.validation.constraints.NotNull;
/**
* 盖章命令Java/Python 坐标统一使用 px
*/
@Data
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.ALWAYS)
public class HrmSealStampBo {
/** 待盖章 PDF 的 OSS 完整 URL */
@NotBlank(message = "待盖章文件地址不能为空")
@JsonProperty("targetFileUrl")
private String targetFileUrl;
/** 章图片 OSS 完整 URL透明 PNG/JPG */
@NotBlank(message = "章图片地址不能为空")
@JsonProperty("stampImageUrl")
private String stampImageUrl;
/** 页码从1开始 */
@NotNull
@Min(1)
@JsonProperty("pageNo")
private Integer pageNo;
/** 左下角 X 坐标px */
@NotNull
@Min(0)
@JsonProperty("xPx")
@JsonInclude(JsonInclude.Include.ALWAYS)
@Setter(lombok.AccessLevel.NONE) // 禁用 Lombok 生成 setter使用手动 setter
private Integer xPx;
/** 左下角 Y 坐标px */
@NotNull
@Min(0)
@JsonProperty("yPx")
@JsonInclude(JsonInclude.Include.ALWAYS)
@Setter(lombok.AccessLevel.NONE) // 禁用 Lombok 生成 setter使用手动 setter
private Integer yPx;
/** 盖章宽度px可选 */
@Min(1)
@JsonProperty("widthPx")
private Integer widthPx;
/** 盖章高度px可选 */
@Min(1)
@JsonProperty("heightPx")
private Integer heightPx;
/**
* 前端渲染的 viewport 宽度(像素):用于把前端点击坐标换算成 PDFBox 坐标pt
* 注意:这不是 PDF 页面原始宽度,而是 pdf.js 按 scale 渲染到 canvas 的宽度。
*/
@Min(1)
@JsonProperty("viewportWidth")
private Integer viewportWidth;
/** 前端渲染的 viewport 高度(像素):用于坐标换算 */
@Min(1)
@JsonProperty("viewportHeight")
private Integer viewportHeight;
/**
* 手动添加 setter 方法,确保 Jackson 能够正确映射 yPx 字段
* Lombok 生成的 setYPx() 可能与 Jackson 的字段名映射不匹配
*/
@JsonSetter("yPx")
public void setYPx(Integer yPx) {
this.yPx = yPx;
}
/**
* 手动添加 setter 方法,确保 Jackson 能够正确映射 xPx 字段
*/
@JsonSetter("xPx")
public void setXPx(Integer xPx) {
this.xPx = xPx;
}
}

View File

@@ -1,5 +1,6 @@
package com.klp.hrm.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -17,15 +18,26 @@ public class HrmTravelReqBo extends BaseEntity {
private Long empId;
@NotNull(message = "开始时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8")
private Date startTime;
@NotNull(message = "结束时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX", timezone = "GMT+8")
private Date endTime;
private String travelType;
private String destination;
private String reason;
private String status;
// 无模板时,自选审批人 userId
private Long manualAssigneeUserId;
private String accessoryApplyIds;
private String accessoryReceiptIds;
private String payeeName;
private Double estimatedCost;
private String bankName;
private String bankAccount;
private String remark;
}