parent
b3d5670012
commit
11aba15e73
24 changed files with 1678 additions and 0 deletions
@ -0,0 +1,81 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.pojo.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField; |
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import io.swagger.v3.oas.annotations.media.Schema; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import org.springblade.core.mp.base.BaseEntity; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyDVO; |
||||
|
||||
import java.io.Serial; |
||||
import java.time.LocalDateTime; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整] 实体类 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
@Data |
||||
@TableName("BS_PLAN_ASSIGN_STEER_MODIFY") |
||||
@Schema(description = "PlanAssignSteerModify Entity对象") |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class PlanAssignSteerModify extends BaseEntity { |
||||
|
||||
@Serial |
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
public static final String COL_PASM_ID = "PASM_ID"; |
||||
public static final String COL_PASM_MEMO = "PASM_MEMO"; |
||||
public static final String COL_PLATING_ID = "PLATING_ID"; |
||||
public static final String COL_CREATE_MAN = "CREATE_MAN"; |
||||
public static final String COL_CREATE_TIME = "CREATE_TIME"; |
||||
public static final String COL_APPROVAL_STATUS = "APPROVAL_STATUS"; |
||||
|
||||
/** |
||||
* 审批状态常量定义 |
||||
*/ |
||||
public interface ApprovalStatus { |
||||
/** |
||||
* 草稿(待提交) |
||||
*/ |
||||
Integer DRAFT = 0; |
||||
|
||||
/** |
||||
* 一级审批 |
||||
*/ |
||||
Integer LEVEL1_APPROVING = 1; |
||||
|
||||
/** |
||||
* 审批通过 |
||||
*/ |
||||
Integer PASS = 2; |
||||
|
||||
/** |
||||
* 审批驳回 |
||||
*/ |
||||
Integer REJECT = 3; |
||||
|
||||
/** |
||||
* 二级审批 |
||||
*/ |
||||
Integer LEVEL2_APPROVING = 4; |
||||
} |
||||
|
||||
@Schema(description = "工艺能力ID") |
||||
private Long platingId; |
||||
|
||||
@Schema(description = "备注") |
||||
private String pasmMemo; |
||||
|
||||
@Schema(description = "申请人") |
||||
private Long createMan; |
||||
|
||||
@Schema(description = "审批状态: 0-草稿, 1-一级审批中, 2-审批通过, 3-审批驳回, 4-二级审批中") |
||||
private Integer approvalStatus = ApprovalStatus.DRAFT; |
||||
} |
||||
@ -0,0 +1,62 @@ |
||||
/** |
||||
* Author: AI Assistant |
||||
*/ |
||||
package org.springblade.desk.basic.pojo.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import io.swagger.v3.oas.annotations.media.Schema; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import org.springblade.core.mp.base.BaseEntity; |
||||
|
||||
import java.io.Serial; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* [分派控制调整审批记录] 实体类 |
||||
* |
||||
* @author AI Assistant |
||||
* @since 2026-05-22 |
||||
*/ |
||||
@Data |
||||
@TableName("BS_PASM_APPRV") |
||||
@Schema(description = "PlanAssignSteerModifyApproval Entity对象") |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class PlanAssignSteerModifyApproval extends BaseEntity { |
||||
|
||||
@Serial |
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
public static final String COL_PASM_ID = "PASM_ID"; |
||||
public static final String COL_APPROVAL_NODE = "APPROVAL_NODE"; |
||||
public static final String COL_APPROVAL_NODE_NAME = "APPROVAL_NODE_NAME"; |
||||
public static final String COL_AUDITOR_ID = "AUDITOR_ID"; |
||||
public static final String COL_AUDITOR_NAME = "AUDITOR_NAME"; |
||||
public static final String COL_AUDIT_RESULT = "AUDIT_RESULT"; |
||||
public static final String COL_AUDIT_REMARK = "AUDIT_REMARK"; |
||||
public static final String COL_AUDIT_TIME = "AUDIT_TIME"; |
||||
|
||||
@Schema(description = "调整单ID") |
||||
private Long pasmId; |
||||
|
||||
@Schema(description = "审批节点:1-一级审批,2-二级审批") |
||||
private Integer approvalNode; |
||||
|
||||
@Schema(description = "审批节点名称") |
||||
private String approvalNodeName; |
||||
|
||||
@Schema(description = "审批人ID") |
||||
private Long auditorId; |
||||
|
||||
@Schema(description = "审批人姓名") |
||||
private String auditorName; |
||||
|
||||
@Schema(description = "审批结果:1-通过,2-驳回") |
||||
private Integer auditResult; |
||||
|
||||
@Schema(description = "审批意见") |
||||
private String auditRemark; |
||||
|
||||
@Schema(description = "审批时间") |
||||
private Date auditTime; |
||||
} |
||||
@ -0,0 +1,51 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.pojo.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import io.swagger.v3.oas.annotations.media.Schema; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import org.springblade.core.mp.base.BaseEntity; |
||||
|
||||
import java.io.Serial; |
||||
import java.math.BigDecimal; |
||||
|
||||
/** |
||||
* [分派控制调整明细] 实体类 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
@Data |
||||
@TableName("BS_PLAN_ASSIGN_STEER_MODIFYD") |
||||
@Schema(description = "PlanAssignSteerModifyD Entity对象") |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class PlanAssignSteerModifyD extends BaseEntity { |
||||
|
||||
@Serial |
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
public static final String COL_PASMD_ID = "PASMD_ID"; |
||||
public static final String COL_PASM_ID = "PASM_ID"; |
||||
public static final String COL_OEM_ID = "OEM_ID"; |
||||
public static final String COL_PLATING_ID = "PLATING_ID"; |
||||
public static final String COL_ASSIGN_SCALE = "ASSIGN_SCALE"; |
||||
public static final String COL_PAS_ID = "PAS_ID"; |
||||
|
||||
@Schema(description = "分派控制调整单ID") |
||||
private Long pasmId; |
||||
|
||||
@Schema(description = "供应商ID") |
||||
private Long oemId; |
||||
|
||||
@Schema(description = "工艺能力ID") |
||||
private Long platingId; |
||||
|
||||
@Schema(description = "分派比例") |
||||
private BigDecimal assignScale; |
||||
|
||||
@Schema(description = "计划分派控制ID") |
||||
private Long pasId; |
||||
} |
||||
@ -0,0 +1,38 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.pojo.vo; |
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD; |
||||
|
||||
import java.io.Serial; |
||||
import java.math.BigDecimal; |
||||
|
||||
/** |
||||
* [分派控制调整明细] 视图实体类 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class PlanAssignSteerModifyDVO extends PlanAssignSteerModifyD { |
||||
@Serial |
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
@Schema(description = "供应商名称") |
||||
private String oemName; |
||||
|
||||
@Schema(description = "工艺能力名称") |
||||
private String platingName; |
||||
@Schema(description = "供应商ID") |
||||
private Long oemId; |
||||
|
||||
@Schema(description = "工艺能力ID") |
||||
private Long platingId; |
||||
@Schema(description = "分派比例") |
||||
private BigDecimal assignScale; |
||||
} |
||||
@ -0,0 +1,45 @@ |
||||
|
||||
package org.springblade.desk.basic.pojo.vo; |
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema; |
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整审批时间线数据] VO |
||||
* |
||||
* @author AI Assistant |
||||
* @since 2026-05-22 |
||||
*/ |
||||
@Data |
||||
@Schema(description = "分派控制调整审批时间线数据VO") |
||||
public class PlanAssignSteerModifyTimelineVO implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
@Schema(description = "类型: submit-提交, audit-审核") |
||||
private String type; |
||||
|
||||
@Schema(description = "标签: 提交人/审核人") |
||||
private String label; |
||||
|
||||
@Schema(description = "值: 人员姓名") |
||||
private String value; |
||||
|
||||
@Schema(description = "时间") |
||||
private String time; |
||||
|
||||
@Schema(description = "状态: false-待处理, success-已完成") |
||||
private String status; |
||||
|
||||
@Schema(description = "审批节点:1-室主任审批,2-领导审批") |
||||
private Integer approvalNode; |
||||
|
||||
@Schema(description = "审批意见") |
||||
private String remark; |
||||
|
||||
@Schema(description = "子节点列表") |
||||
private List<PlanAssignSteerModifyTimelineVO> children; |
||||
} |
||||
@ -0,0 +1,35 @@ |
||||
package org.springblade.desk.basic.pojo.vo; |
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModify; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD; |
||||
|
||||
import java.io.Serial; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整] 视图实体类 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
@Data |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class PlanAssignSteerModifyVO extends PlanAssignSteerModify { |
||||
@Serial |
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
@Schema(description = "当前状态描述") |
||||
private String approvalStatusDesc; |
||||
|
||||
@Schema(description = "明细列表") |
||||
private List<PlanAssignSteerModifyDVO> modifyLst; |
||||
|
||||
@Schema(description = "工艺能力名称") |
||||
private String platingName; |
||||
|
||||
@Schema(description = "申请人名称") |
||||
private String createManName; |
||||
} |
||||
@ -0,0 +1,91 @@ |
||||
package org.springblade.desk.oem.enums; |
||||
|
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Getter; |
||||
|
||||
/** |
||||
* 外协结算异常原因枚举 |
||||
* |
||||
* @author qyl |
||||
* @since 2026-05-13 |
||||
*/ |
||||
@Getter |
||||
@AllArgsConstructor |
||||
public enum SettlementErrorReasonEnum { |
||||
|
||||
/** |
||||
* 未找到报价单 |
||||
*/ |
||||
NO_QUOTATION("NO_QUOTATION", "未找到报价单"), |
||||
|
||||
/** |
||||
* 订单数据错误 |
||||
*/ |
||||
ORDER_DATA_ERROR("ORDER_DATA_ERROR", "订单数据错误"), |
||||
|
||||
/** |
||||
* MES结算审核不通过 |
||||
*/ |
||||
MES_APPROVAL_REJECTED("MES_APPROVAL_REJECTED", "MES结算审核不通过"), |
||||
|
||||
/** |
||||
* ERP结算审核不通过 |
||||
*/ |
||||
ERP_APPROVAL_REJECTED("ERP_APPROVAL_REJECTED", "ERP结算审核不通过"), |
||||
|
||||
/** |
||||
* 无需结算 |
||||
*/ |
||||
NO_SETTLEMENT_NEEDED("NO_SETTLEMENT_NEEDED", "无需结算"), |
||||
|
||||
/** |
||||
* 重复镀后入库 |
||||
*/ |
||||
DUPLICATE_PUT_STORE("DUPLICATE_PUT_STORE", "重复镀后入库"); |
||||
|
||||
/** |
||||
* 异常原因编码 |
||||
*/ |
||||
private final String code; |
||||
|
||||
/** |
||||
* 异常原因描述 |
||||
*/ |
||||
private final String description; |
||||
|
||||
/** |
||||
* 根据编码获取枚举 |
||||
* |
||||
* @param code 异常原因编码 |
||||
* @return 枚举对象 |
||||
*/ |
||||
public static SettlementErrorReasonEnum getByCode(String code) { |
||||
if (code == null) { |
||||
return null; |
||||
} |
||||
for (SettlementErrorReasonEnum reason : values()) { |
||||
if (reason.getCode().equals(code)) { |
||||
return reason; |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 根据描述获取枚举 |
||||
* |
||||
* @param description 异常原因描述 |
||||
* @return 枚举对象 |
||||
*/ |
||||
public static SettlementErrorReasonEnum getByDescription(String description) { |
||||
if (description == null) { |
||||
return null; |
||||
} |
||||
for (SettlementErrorReasonEnum reason : values()) { |
||||
if (reason.getDescription().equals(description)) { |
||||
return reason; |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
} |
||||
@ -0,0 +1,43 @@ |
||||
package org.springblade.desk.oem.pojo.request; |
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema; |
||||
import lombok.Data; |
||||
|
||||
import jakarta.validation.constraints.NotEmpty; |
||||
import jakarta.validation.constraints.NotNull; |
||||
import java.io.Serializable; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 结算确认请求 |
||||
* |
||||
* @author qyl |
||||
* @since 2026-05-12 |
||||
*/ |
||||
@Data |
||||
@Schema(description = "结算确认请求") |
||||
public class SettlementConfirmRequest implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
/** |
||||
* 结算单ID列表 |
||||
*/ |
||||
@NotEmpty(message = "结算单ID不能为空") |
||||
@Schema(description = "结算单ID列表", required = true) |
||||
private List<Long> ids; |
||||
|
||||
/** |
||||
* 确认结果:true-结算正确,false-结算异常 |
||||
*/ |
||||
@NotNull(message = "确认结果不能为空") |
||||
@Schema(description = "确认结果:true-结算正确,false-结算异常", required = true) |
||||
private Boolean confirmResult; |
||||
|
||||
/** |
||||
* 异常原因(结算异常时必填) |
||||
* 可选值:订单数据错误、无需结算 |
||||
*/ |
||||
@Schema(description = "异常原因(结算异常时必填),可选值:订单数据错误、无需结算") |
||||
private String errorReason; |
||||
} |
||||
@ -0,0 +1,24 @@ |
||||
/** |
||||
* Author: AI Assistant |
||||
*/ |
||||
package org.springblade.desk.basic.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyApproval; |
||||
|
||||
/** |
||||
* [分派控制调整审批记录] Mapper接口 |
||||
* |
||||
* @author AI Assistant |
||||
* @since 2026-05-22 |
||||
*/ |
||||
@Mapper |
||||
public interface PlanAssignSteerModifyApprovalMapper extends BaseMapper<PlanAssignSteerModifyApproval> { |
||||
|
||||
/** |
||||
* 根据调整单ID删除审批记录 |
||||
*/ |
||||
void deleteByPasmId(@Param("pasmId") Long pasmId); |
||||
} |
||||
@ -0,0 +1,13 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="org.springblade.desk.basic.mapper.PlanAssignSteerModifyApprovalMapper"> |
||||
|
||||
<!-- 驳回时清空审批记录:物理删除该调整单的所有审批记录,支持重新发起审批 --> |
||||
<delete id="deleteByPasmId"> |
||||
UPDATE BS_PASM_APPRV |
||||
SET IS_DELETED = 1 |
||||
WHERE PASM_ID = #{pasmId} |
||||
AND IS_DELETED = 0 |
||||
</delete> |
||||
|
||||
</mapper> |
||||
@ -0,0 +1,23 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整明细] Mapper 接口 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
public interface PlanAssignSteerModifyDMapper extends BaseMapper<PlanAssignSteerModifyD> { |
||||
|
||||
List<PlanAssignSteerModifyD> findByPasmId(@Param("pasmId") Long pasmId); |
||||
|
||||
void deleteByPasmId(@Param("pasmId") Long pasmId); |
||||
} |
||||
@ -0,0 +1,31 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="org.springblade.desk.basic.mapper.PlanAssignSteerModifyDMapper"> |
||||
|
||||
<resultMap id="planAssignSteerModifyDResultMap" type="org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD"> |
||||
<result column="ID" property="id"/> |
||||
<result column="PASM_ID" property="pasmId"/> |
||||
<result column="OEM_ID" property="oemId"/> |
||||
<result column="PLATING_ID" property="platingId"/> |
||||
<result column="ASSIGN_SCALE" property="assignScale"/> |
||||
</resultMap> |
||||
|
||||
<select id="findByPasmId" resultMap="planAssignSteerModifyDResultMap"> |
||||
SELECT |
||||
d.ID, |
||||
d.PASM_ID, |
||||
d.OEM_ID, |
||||
d.PLATING_ID, |
||||
d.ASSIGN_SCALE |
||||
FROM |
||||
BS_PLAN_ASSIGN_STEER_MODIFYD d |
||||
WHERE |
||||
d.PASM_ID = #{pasmId} |
||||
AND d.IS_DELETED = 0 |
||||
ORDER BY d.ID |
||||
</select> |
||||
|
||||
<delete id="deleteByPasmId"> |
||||
DELETE FROM BS_PLAN_ASSIGN_STEER_MODIFYD WHERE PASM_ID = #{pasmId} |
||||
</delete> |
||||
</mapper> |
||||
@ -0,0 +1,32 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.mapper; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import org.apache.ibatis.annotations.Param; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModify; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyVO; |
||||
import org.springblade.system.pojo.entity.UserInfo; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整] Mapper 接口 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
public interface PlanAssignSteerModifyMapper extends BaseMapper<PlanAssignSteerModify> { |
||||
|
||||
List<PlanAssignSteerModifyVO> selectPlanAssignSteerModifyPage(IPage page, PlanAssignSteerModify planAssignSteerModify); |
||||
|
||||
List<PlanAssignSteerModifyVO> exportPlanAssignSteerModify(PlanAssignSteerModifyVO planAssignSteerModify); |
||||
|
||||
List<PlanAssignSteerModifyVO> findByPasmId(@Param("pasmId") Long pasmId); |
||||
|
||||
|
||||
List<Long> getLevel2AuditorIds(); |
||||
|
||||
} |
||||
@ -0,0 +1,88 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="org.springblade.desk.basic.mapper.PlanAssignSteerModifyMapper"> |
||||
|
||||
<resultMap id="planAssignSteerModifyResultMap" type="org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyVO"> |
||||
<result column="ID" property="id"/> |
||||
<result column="PLATING_ID" property="platingId"/> |
||||
<result column="PASM_MEMO" property="pasmMemo"/> |
||||
<result column="CREATE_MAN" property="createMan"/> |
||||
<result column="CREATE_TIME" property="createTime"/> |
||||
<result column="APPROVAL_STATUS" property="approvalStatus"/> |
||||
<result column="PLATING_NAME" property="platingName"/> |
||||
<result column="CREATE_MAN_NAME" property="createManName"/> |
||||
</resultMap> |
||||
|
||||
<select id="selectPlanAssignSteerModifyPage" resultMap="planAssignSteerModifyResultMap"> |
||||
SELECT |
||||
m.ID, |
||||
m.PLATING_ID, |
||||
m.PASM_MEMO, |
||||
m.CREATE_MAN, |
||||
m.CREATE_TIME, |
||||
m.APPROVAL_STATUS, |
||||
c.CA_NAME AS PLATING_NAME, |
||||
u.REAL_NAME AS CREATE_MAN_NAME |
||||
FROM |
||||
BS_PLAN_ASSIGN_STEER_MODIFY m |
||||
LEFT JOIN BS_CRAFT_ABILITY c ON m.PLATING_ID = c.ID |
||||
LEFT JOIN BLADE_USER u ON m.CREATE_MAN = u.ID |
||||
WHERE |
||||
m.IS_DELETED = 0 |
||||
<if test="planAssignSteerModify.platingId != null"> |
||||
AND m.PLATING_ID = #{planAssignSteerModify.platingId} |
||||
</if> |
||||
<if test="planAssignSteerModify.approvalStatus != null"> |
||||
AND m.APPROVAL_STATUS = #{planAssignSteerModify.approvalStatus} |
||||
</if> |
||||
ORDER BY m.CREATE_TIME DESC |
||||
</select> |
||||
|
||||
<select id="exportPlanAssignSteerModify" resultMap="planAssignSteerModifyResultMap"> |
||||
SELECT |
||||
m.ID, |
||||
m.PLATING_ID, |
||||
m.PASM_MEMO, |
||||
m.CREATE_MAN, |
||||
m.CREATE_TIME, |
||||
m.APPROVAL_STATUS, |
||||
c.CA_NAME AS PLATING_NAME, |
||||
u.REAL_NAME AS CREATE_MAN_NAME |
||||
FROM |
||||
BS_PLAN_ASSIGN_STEER_MODIFY m |
||||
LEFT JOIN BS_CRAFT_ABILITY c ON m.PLATING_ID = c.ID |
||||
LEFT JOIN BLADE_USER u ON m.CREATE_MAN = u.ID |
||||
WHERE |
||||
m.IS_DELETED = 0 |
||||
</select> |
||||
|
||||
<select id="findByPasmId" resultMap="planAssignSteerModifyResultMap"> |
||||
SELECT |
||||
m.ID, |
||||
m.PLATING_ID, |
||||
m.PASM_MEMO, |
||||
m.CREATE_MAN, |
||||
m.CREATE_TIME, |
||||
m.APPROVAL_STATUS, |
||||
c.CA_NAME AS PLATING_NAME, |
||||
u.REAL_NAME AS CREATE_MAN_NAME |
||||
FROM |
||||
BS_PLAN_ASSIGN_STEER_MODIFY m |
||||
LEFT JOIN BS_CRAFT_ABILITY c ON m.PLATING_ID = c.ID |
||||
LEFT JOIN BLADE_USER u ON m.CREATE_MAN = u.ID |
||||
WHERE |
||||
m.ID = #{pasmId} |
||||
AND m.IS_DELETED = 0 |
||||
</select> |
||||
|
||||
<select id="getLevel2AuditorIds" resultType="java.lang.Long"> |
||||
SELECT DISTINCT |
||||
u.ID |
||||
FROM BLADE_USER u |
||||
INNER JOIN BLADE_ROLE r ON INSTR(',' || u.ROLE_ID || ',', ',' || r.ID || ',') > 0 |
||||
WHERE r.ROLE_ALIAS IN ('rb_manager') |
||||
AND u.IS_DELETED = 0 |
||||
AND r.IS_DELETED = 0 |
||||
</select> |
||||
|
||||
</mapper> |
||||
@ -0,0 +1,33 @@ |
||||
/** |
||||
* Author: AI Assistant |
||||
*/ |
||||
package org.springblade.desk.basic.service; |
||||
|
||||
import org.springblade.core.mp.base.BaseService; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyApproval; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整审批记录] 服务类 |
||||
* |
||||
* @author AI Assistant |
||||
* @since 2026-05-22 |
||||
*/ |
||||
public interface IPlanAssignSteerModifyApprovalService extends BaseService<PlanAssignSteerModifyApproval> { |
||||
|
||||
/** |
||||
* 根据调整单ID查询审批记录列表 |
||||
* |
||||
* @param pasmId 调整单ID |
||||
* @return 审批记录列表 |
||||
*/ |
||||
List<PlanAssignSteerModifyApproval> findByPasmId(Long pasmId); |
||||
|
||||
/** |
||||
* 根据调整单ID删除审批记录 |
||||
* |
||||
* @param pasmId 调整单ID |
||||
*/ |
||||
void deleteByPasmId(Long pasmId); |
||||
} |
||||
@ -0,0 +1,33 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.service; |
||||
|
||||
import org.springblade.core.mp.base.BaseService; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整明细] 服务类 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
public interface IPlanAssignSteerModifyDService extends BaseService<PlanAssignSteerModifyD> { |
||||
|
||||
/** |
||||
* 根据主表ID查询明细列表 |
||||
* |
||||
* @param pasmId 主表ID |
||||
* @return 明细列表 |
||||
*/ |
||||
List<PlanAssignSteerModifyD> findByPasmId(Long pasmId); |
||||
|
||||
/** |
||||
* 根据主表ID删除明细 |
||||
* |
||||
* @param pasmId 主表ID |
||||
*/ |
||||
void deleteByPasmId(Long pasmId); |
||||
} |
||||
@ -0,0 +1,44 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.service; |
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModify; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyDVO; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyTimelineVO; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyVO; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整] 服务类 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
public interface IPlanAssignSteerModifyService extends BaseService<PlanAssignSteerModify> { |
||||
|
||||
IPage<PlanAssignSteerModifyVO> selectPlanAssignSteerModifyPage(IPage<PlanAssignSteerModifyVO> page, PlanAssignSteerModify planAssignSteerModify); |
||||
|
||||
List<PlanAssignSteerModifyVO> exportPlanAssignSteerModify(PlanAssignSteerModifyVO planAssignSteerModify); |
||||
|
||||
R saveOrUpdateModify(PlanAssignSteerModifyVO modify, List<PlanAssignSteerModifyDVO> modifyLst); |
||||
|
||||
R submitApproval(Long id); |
||||
|
||||
R audit(Long id, Integer result, String remark); |
||||
|
||||
/** |
||||
* 查询审批时间线 |
||||
* |
||||
* @param id 主键ID |
||||
* @return 审批时间线数据列表 |
||||
*/ |
||||
List<PlanAssignSteerModifyTimelineVO> getAuditTimeline(Long id); |
||||
|
||||
PlanAssignSteerModifyVO getDetail(Long pasmId, Long caId); |
||||
} |
||||
@ -0,0 +1,47 @@ |
||||
/** |
||||
* Author: AI Assistant |
||||
*/ |
||||
package org.springblade.desk.basic.service.impl; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springblade.desk.basic.mapper.PlanAssignSteerModifyApprovalMapper; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyApproval; |
||||
import org.springblade.desk.basic.service.IPlanAssignSteerModifyApprovalService; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整审批记录] 服务实现类 |
||||
* |
||||
* @author AI Assistant |
||||
* @since 2026-05-22 |
||||
*/ |
||||
@Service |
||||
@Data |
||||
@AllArgsConstructor |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class PlanAssignSteerModifyApprovalServiceImpl extends BaseServiceImpl<PlanAssignSteerModifyApprovalMapper, PlanAssignSteerModifyApproval> implements IPlanAssignSteerModifyApprovalService { |
||||
|
||||
|
||||
@Override |
||||
public List<PlanAssignSteerModifyApproval> findByPasmId(Long pasmId) { |
||||
QueryWrapper<PlanAssignSteerModifyApproval> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("PASM_ID", pasmId) |
||||
.eq("IS_DELETED", 0) |
||||
.orderByAsc("APPROVAL_NODE", "AUDIT_TIME"); |
||||
return baseMapper.selectList(queryWrapper); |
||||
} |
||||
|
||||
@Override |
||||
public void deleteByPasmId(Long pasmId) { |
||||
//planAssignSteerModifyApprovalMapper.deleteByPasmId(pasmId);
|
||||
remove(Wrappers.lambdaQuery(PlanAssignSteerModifyApproval.class) |
||||
.eq(PlanAssignSteerModifyApproval::getPasmId, pasmId)); |
||||
} |
||||
} |
||||
@ -0,0 +1,44 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.service.impl; |
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import jakarta.annotation.Resource; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springblade.desk.basic.mapper.PlanAssignSteerModifyDMapper; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD; |
||||
import org.springblade.desk.basic.service.IPlanAssignSteerModifyDService; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* [分派控制调整明细] 服务实现类 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
@Service |
||||
@Data |
||||
@AllArgsConstructor |
||||
@EqualsAndHashCode(callSuper = true) |
||||
public class PlanAssignSteerModifyDServiceImpl extends BaseServiceImpl<PlanAssignSteerModifyDMapper, PlanAssignSteerModifyD> implements IPlanAssignSteerModifyDService { |
||||
|
||||
@Resource |
||||
private PlanAssignSteerModifyDMapper planAssignSteerModifyDMapper; |
||||
|
||||
@Override |
||||
public List<PlanAssignSteerModifyD> findByPasmId(Long pasmId) { |
||||
return planAssignSteerModifyDMapper.findByPasmId(pasmId); |
||||
} |
||||
|
||||
@Override |
||||
public void deleteByPasmId(Long pasmId) { |
||||
remove(Wrappers.lambdaQuery(PlanAssignSteerModifyD.class) |
||||
.eq(PlanAssignSteerModifyD::getPasmId,pasmId)); |
||||
} |
||||
} |
||||
@ -0,0 +1,522 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.service.impl; |
||||
|
||||
import cn.hutool.core.bean.BeanUtil; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import jakarta.annotation.Resource; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springblade.core.secure.utils.AuthUtil; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.core.tool.utils.Func; |
||||
import org.springblade.desk.basic.mapper.PlanAssignSteerModifyApprovalMapper; |
||||
import org.springblade.desk.basic.mapper.PlanAssignSteerModifyMapper; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteer; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModify; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyApproval; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyDVO; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyTimelineVO; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyVO; |
||||
import org.springblade.desk.basic.service.*; |
||||
import org.springblade.system.feign.IUserClient; |
||||
import org.springblade.system.pojo.entity.User; |
||||
import org.springblade.system.pojo.entity.UserInfo; |
||||
import org.springframework.stereotype.Service; |
||||
import org.springframework.transaction.annotation.Transactional; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.util.*; |
||||
import java.util.stream.Collectors; |
||||
|
||||
import cn.hutool.core.date.DateUtil; |
||||
|
||||
/** |
||||
* [分派控制调整] 服务实现类 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
@Service |
||||
@Data |
||||
@AllArgsConstructor |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@Slf4j |
||||
public class PlanAssignSteerModifyServiceImpl extends BaseServiceImpl<PlanAssignSteerModifyMapper, PlanAssignSteerModify> implements IPlanAssignSteerModifyService { |
||||
|
||||
@Resource |
||||
private IPlanAssignSteerModifyDService planAssignSteerModifyDService; |
||||
|
||||
|
||||
@Resource |
||||
private IPlanAssignSteerModifyApprovalService planAssignSteerModifyApprovalService; |
||||
|
||||
@Resource |
||||
private IPlanAssignSteerService planAssignSteerService; |
||||
|
||||
@Resource |
||||
private IBsAssignService bsAssignService; |
||||
|
||||
@Resource |
||||
IUserClient userClient; |
||||
|
||||
@Override |
||||
public IPage<PlanAssignSteerModifyVO> selectPlanAssignSteerModifyPage(IPage<PlanAssignSteerModifyVO> page, PlanAssignSteerModify planAssignSteerModify) { |
||||
return page.setRecords(baseMapper.selectPlanAssignSteerModifyPage(page, planAssignSteerModify)); |
||||
} |
||||
|
||||
@Override |
||||
public List<PlanAssignSteerModifyVO> exportPlanAssignSteerModify(PlanAssignSteerModifyVO planAssignSteerModify) { |
||||
return baseMapper.exportPlanAssignSteerModify(planAssignSteerModify); |
||||
} |
||||
|
||||
@Override |
||||
@Transactional(rollbackFor = Exception.class) |
||||
public R saveOrUpdateModify(PlanAssignSteerModifyVO modify, List<PlanAssignSteerModifyDVO> modifyLst) { |
||||
// 校验明细列表不能为空
|
||||
if (modifyLst == null || modifyLst.isEmpty()) { |
||||
return R.fail("明细列表不能为空"); |
||||
} |
||||
|
||||
// 计算分派比例总和
|
||||
BigDecimal totalScale = BigDecimal.ZERO; |
||||
for (PlanAssignSteerModifyDVO modifyD : modifyLst) { |
||||
if (modifyD.getAssignScale() != null) { |
||||
totalScale = totalScale.add(modifyD.getAssignScale()); |
||||
} |
||||
} |
||||
|
||||
if (totalScale.compareTo(new BigDecimal("100")) != 0) { |
||||
return R.fail("分派比例总和必须等于100"); |
||||
} |
||||
|
||||
PlanAssignSteerModify entity = new PlanAssignSteerModify(); |
||||
BeanUtil.copyProperties(modify, entity); |
||||
|
||||
if (Objects.isNull(entity.getId())) { |
||||
save(entity); |
||||
for (PlanAssignSteerModifyDVO detail : modifyLst) { |
||||
PlanAssignSteerModifyD d = new PlanAssignSteerModifyD(); |
||||
BeanUtil.copyProperties(detail, d); |
||||
d.setPasmId(entity.getId()); |
||||
planAssignSteerModifyDService.save(d); |
||||
} |
||||
} else { |
||||
updateById(entity); |
||||
planAssignSteerModifyDService.remove(Wrappers.lambdaQuery(PlanAssignSteerModifyD.class) |
||||
.eq(PlanAssignSteerModifyD::getPasmId,entity.getId())); |
||||
for (PlanAssignSteerModifyDVO detail : modifyLst) { |
||||
PlanAssignSteerModifyD d = new PlanAssignSteerModifyD(); |
||||
BeanUtil.copyProperties(detail, d); |
||||
d.setId(null); |
||||
d.setPasmId(entity.getId()); |
||||
planAssignSteerModifyDService.save(d); |
||||
} |
||||
} |
||||
return R.success(); |
||||
} |
||||
|
||||
@Override |
||||
public R submitApproval(Long id) { |
||||
PlanAssignSteerModify modify = getById(id); |
||||
if (modify == null) { |
||||
return R.fail("记录不存在"); |
||||
} |
||||
|
||||
Integer status = modify.getApprovalStatus(); |
||||
if (status == null || |
||||
(!PlanAssignSteerModify.ApprovalStatus.DRAFT.equals(status) |
||||
&& !PlanAssignSteerModify.ApprovalStatus.REJECT.equals(status))) { |
||||
return R.fail("只有草稿状态或驳回状态的记录才能发起审批"); |
||||
} |
||||
|
||||
// 重新发起审批时清空历史记录
|
||||
planAssignSteerModifyApprovalService.deleteByPasmId(id); |
||||
|
||||
modify.setApprovalStatus(PlanAssignSteerModify.ApprovalStatus.LEVEL1_APPROVING); |
||||
updateById(modify); |
||||
|
||||
log.info("重新发起审批,清空历史记录,申请单ID:{}", id); |
||||
return R.success("已提交至一级审批(室主任审批)"); |
||||
} |
||||
|
||||
@Override |
||||
@Transactional(rollbackFor = Exception.class) |
||||
public R audit(Long id, Integer result, String remark) { |
||||
PlanAssignSteerModify modify = auditAndGetModify(id, result, remark); |
||||
|
||||
Long currentUserId = AuthUtil.getUserId(); |
||||
String currentUserName = AuthUtil.getUserName(); |
||||
String userAccount = AuthUtil.getUserAccount(); |
||||
Date now = new Date(); |
||||
|
||||
// 根据当前状态判断审批节点
|
||||
Integer currentNode = PlanAssignSteerModify.ApprovalStatus.LEVEL1_APPROVING.equals(modify.getApprovalStatus()) ? 1 : 2; |
||||
String currentNodeName = currentNode == 1 ? "一级审批" : "二级审批"; |
||||
|
||||
// 执行审批
|
||||
if (currentNode == 1) { |
||||
return auditLevel1(id, modify, userAccount, currentUserId, currentUserName, currentNode, currentNodeName, result, remark, now); |
||||
} else { |
||||
return auditLevel2(id, modify, currentUserId, currentUserName, currentNode, currentNodeName, result, remark, now); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 一级审批处理 |
||||
*/ |
||||
private R auditLevel1(Long id, PlanAssignSteerModify modify, String userAccount, |
||||
Long currentUserId, String currentUserName, Integer currentNode, |
||||
String currentNodeName, Integer result, String remark, Date now) { |
||||
// 验证审批人
|
||||
if (!"lixiangyu".equals(userAccount)) { |
||||
return R.fail("您不是当前审批节点的审批人(需要李相宇审批)"); |
||||
} |
||||
|
||||
// 检查重复审批
|
||||
if (checkDuplicateApproval(id, currentNode, currentUserId)) { |
||||
return R.fail("您已经完成审批,不能重复审批"); |
||||
} |
||||
|
||||
// 创建审批记录
|
||||
createApprovalRecord(id, currentNode, currentNodeName, currentUserId, currentUserName, result, remark, now); |
||||
|
||||
// 处理审批结果
|
||||
if (PlanAssignSteerModify.ApprovalStatus.REJECT.equals(result)) { |
||||
// 驳回:保留审批记录供查看
|
||||
modify.setApprovalStatus(PlanAssignSteerModify.ApprovalStatus.REJECT); |
||||
modify.setUpdateTime(now); |
||||
updateById(modify); |
||||
return R.success("审批已驳回"); |
||||
} else { |
||||
// 通过:进入二级审批
|
||||
modify.setApprovalStatus(PlanAssignSteerModify.ApprovalStatus.LEVEL2_APPROVING); |
||||
modify.setUpdateTime(now); |
||||
updateById(modify); |
||||
log.info("一级审批通过,进入二级审批,申请单ID:{}", id); |
||||
return R.success("审批成功"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 二级审批处理 |
||||
*/ |
||||
private R auditLevel2(Long id, PlanAssignSteerModify modify, Long currentUserId, |
||||
String currentUserName, Integer currentNode, String currentNodeName, |
||||
Integer result, String remark, Date now) { |
||||
List<Long> level2AuditorIds = getLevel2AuditorIds(); |
||||
|
||||
if (level2AuditorIds.isEmpty()) { |
||||
return R.fail("二级审批节点没有审批人"); |
||||
} |
||||
|
||||
if (!level2AuditorIds.contains(currentUserId)) { |
||||
return R.fail("您不是当前审批节点的审批人"); |
||||
} |
||||
|
||||
if (checkDuplicateApproval(id, currentNode, currentUserId)) { |
||||
return R.fail("您已经完成审批,不能重复审批"); |
||||
} |
||||
|
||||
// 创建审批记录
|
||||
createApprovalRecord(id, currentNode, currentNodeName, currentUserId, currentUserName, result, remark, now); |
||||
|
||||
// 处理审批结果
|
||||
if (PlanAssignSteerModify.ApprovalStatus.REJECT.equals(result)) { |
||||
// 驳回:保留审批记录供查看
|
||||
modify.setApprovalStatus(PlanAssignSteerModify.ApprovalStatus.REJECT); |
||||
modify.setUpdateTime(now); |
||||
updateById(modify); |
||||
return R.success("审批已驳回"); |
||||
} else { |
||||
// 通过:检查是否所有人都已通过
|
||||
List<PlanAssignSteerModifyApproval> planAssignSteerModifyApprovals = planAssignSteerModifyApprovalService.list( |
||||
new QueryWrapper<PlanAssignSteerModifyApproval>() |
||||
.eq("PASM_ID", id) |
||||
.eq("APPROVAL_NODE", currentNode) |
||||
.eq("AUDIT_RESULT", PlanAssignSteerModify.ApprovalStatus.PASS) |
||||
.eq("IS_DELETED", 0) |
||||
); |
||||
Set<Long> auditorIds = |
||||
planAssignSteerModifyApprovals.stream().map(PlanAssignSteerModifyApproval::getAuditorId).collect(Collectors.toSet()); |
||||
|
||||
if (auditorIds.containsAll(level2AuditorIds)) { |
||||
// 全部通过:更新状态并同步数据
|
||||
modify.setApprovalStatus(PlanAssignSteerModify.ApprovalStatus.PASS); |
||||
modify.setUpdateTime(now); |
||||
updateById(modify); |
||||
updatePlanAssignSteerFromModify(id); |
||||
} |
||||
|
||||
return R.success("审批成功"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 检查是否已经审批过 |
||||
*/ |
||||
private boolean checkDuplicateApproval(Long pasmId, Integer approvalNode, Long auditorId) { |
||||
QueryWrapper<PlanAssignSteerModifyApproval> recordQuery = new QueryWrapper<>(); |
||||
recordQuery.eq("PASM_ID", pasmId) |
||||
.eq("APPROVAL_NODE", approvalNode) |
||||
.eq("AUDITOR_ID", auditorId) |
||||
.eq("IS_DELETED", 0); |
||||
return planAssignSteerModifyApprovalService.getOne(recordQuery) != null; |
||||
} |
||||
|
||||
/** |
||||
* 创建审批记录 |
||||
*/ |
||||
private void createApprovalRecord(Long pasmId, Integer approvalNode, String approvalNodeName, |
||||
Long auditorId, String auditorName, Integer auditResult, |
||||
String auditRemark, Date auditTime) { |
||||
PlanAssignSteerModifyApproval approvalRecord = new PlanAssignSteerModifyApproval(); |
||||
approvalRecord.setPasmId(pasmId); |
||||
approvalRecord.setApprovalNode(approvalNode); |
||||
approvalRecord.setApprovalNodeName(approvalNodeName); |
||||
approvalRecord.setAuditorId(auditorId); |
||||
approvalRecord.setAuditorName(auditorName); |
||||
approvalRecord.setAuditResult(auditResult); |
||||
approvalRecord.setAuditRemark(auditRemark); |
||||
approvalRecord.setAuditTime(auditTime); |
||||
|
||||
approvalRecord.setCreateTime(auditTime); |
||||
approvalRecord.setCreateUser(auditorId); |
||||
approvalRecord.setUpdateTime(auditTime); |
||||
approvalRecord.setUpdateUser(auditorId); |
||||
planAssignSteerModifyApprovalService.save(approvalRecord); |
||||
} |
||||
|
||||
private PlanAssignSteerModify auditAndGetModify(Long id, Integer result, String remark) { |
||||
PlanAssignSteerModify modify = getById(id); |
||||
if (modify == null) { |
||||
throw new RuntimeException("记录不存在"); |
||||
} |
||||
|
||||
// 只有审批中状态才能审批(一级或二级)
|
||||
if (!PlanAssignSteerModify.ApprovalStatus.LEVEL1_APPROVING.equals(modify.getApprovalStatus()) |
||||
&& !PlanAssignSteerModify.ApprovalStatus.LEVEL2_APPROVING.equals(modify.getApprovalStatus())) { |
||||
throw new RuntimeException("只有审批中的记录才能进行审批"); |
||||
} |
||||
|
||||
// 校验审批结果
|
||||
if (result == null || (!PlanAssignSteerModify.ApprovalStatus.PASS.equals(result) && !PlanAssignSteerModify.ApprovalStatus.REJECT.equals(result))) { |
||||
throw new RuntimeException("审批结果错误,1-通过,2-驳回"); |
||||
} |
||||
|
||||
// 审批不通过时,意见必填
|
||||
if (PlanAssignSteerModify.ApprovalStatus.REJECT.equals(result) && Func.isEmpty(remark)) { |
||||
throw new RuntimeException("审批不通过时,必须填写审批意见"); |
||||
} |
||||
|
||||
return modify; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 获取二级审批人列表(角色:热表-主任) |
||||
*/ |
||||
private List<Long> getLevel2AuditorIds() { |
||||
return baseMapper.getLevel2AuditorIds(); |
||||
} |
||||
|
||||
/** |
||||
* 根据审批通过的调整单更新分外协分派管理列表 |
||||
*/ |
||||
private void updatePlanAssignSteerFromModify(Long pasmId) { |
||||
//List<PlanAssignSteerModifyD> modifyDLst = planAssignSteerModifyDMapper.findByPasmId(pasmId);
|
||||
//if (modifyDLst == null || modifyDLst.isEmpty()) {
|
||||
// return;
|
||||
//}
|
||||
//
|
||||
//PlanAssignSteerModify modify = getById(pasmId);
|
||||
//if (modify == null) {
|
||||
// return;
|
||||
//}
|
||||
//
|
||||
//for (PlanAssignSteerModifyD modifyD : modifyDLst) {
|
||||
// // 根据工艺能力和外协厂商查找现有分派规则
|
||||
// QueryWrapper<BsAssignEntity> queryWrapper = new QueryWrapper<>();
|
||||
// queryWrapper.eq("CRAFT_ABILITY_ID", modifyD.getPlatingId())
|
||||
// .eq("OEM_ID", modifyD.getOemId());
|
||||
// BsAssignEntity assign = bsAssignService.getOne(queryWrapper);
|
||||
//
|
||||
// if (assign == null) {
|
||||
// // 不存在则创建新记录
|
||||
// assign = new BsAssignEntity();
|
||||
// assign.setCraftAbilityId(modifyD.getPlatingId());
|
||||
// assign.setOemId(modifyD.getOemId());
|
||||
// log.warn("分派规则不存在,创建新记录:工艺能力ID={},外协厂商ID={}",
|
||||
// modifyD.getPlatingId(), modifyD.getOemId());
|
||||
// }
|
||||
//
|
||||
// // 更新备注信息(记录来源)
|
||||
// String remark = "分派控制调整单ID:" + pasmId;
|
||||
// if (Func.isNotEmpty(assign.getRemark())) {
|
||||
// remark = assign.getRemark() + "; " + remark;
|
||||
// }
|
||||
// assign.setRemark(remark);
|
||||
//
|
||||
// // 保存或更新
|
||||
// if (assign.getId() == null || assign.getId() == 0) {
|
||||
// bsAssignService.save(assign);
|
||||
// } else {
|
||||
// bsAssignService.updateById(assign);
|
||||
// }
|
||||
//}
|
||||
|
||||
} |
||||
|
||||
@Override |
||||
public PlanAssignSteerModifyVO getDetail(Long pasmId, Long caId) { |
||||
// 参数校验:pasmId为空直接返回null
|
||||
if (pasmId == null) { |
||||
return null; |
||||
} |
||||
|
||||
// 查询主表信息
|
||||
List<PlanAssignSteerModifyVO> list = baseMapper.findByPasmId(pasmId); |
||||
if (list.isEmpty()) { |
||||
return null; |
||||
} |
||||
|
||||
PlanAssignSteerModifyVO modifyVO = list.get(0); |
||||
|
||||
// 判断是否需要查询明细:caId为空 或 caId与主表的platingId匹配
|
||||
// // TODO: 2026/5/22 caId根据工艺能力查询计划分派控制
|
||||
boolean shouldQueryDetail = caId == null || caId.equals(modifyVO.getPlatingId()); |
||||
|
||||
List<PlanAssignSteerModifyDVO> modifyLst = null; |
||||
if (shouldQueryDetail) { |
||||
List<PlanAssignSteerModifyD> detailList = planAssignSteerModifyDService.findByPasmId(pasmId); |
||||
if (!detailList.isEmpty()) { |
||||
modifyLst = detailList.stream() |
||||
.map(d -> { |
||||
PlanAssignSteerModifyDVO vo = new PlanAssignSteerModifyDVO(); |
||||
BeanUtil.copyProperties(d, vo); |
||||
return vo; |
||||
}) |
||||
.collect(Collectors.toList()); |
||||
} |
||||
} |
||||
|
||||
modifyVO.setModifyLst(modifyLst); |
||||
return modifyVO; |
||||
} |
||||
|
||||
@Override |
||||
public List<PlanAssignSteerModifyTimelineVO> getAuditTimeline(Long id) { |
||||
PlanAssignSteerModify entity = getById(id); |
||||
if (entity == null) { |
||||
return new ArrayList<>(); |
||||
} |
||||
|
||||
List<PlanAssignSteerModifyTimelineVO> timelineList = new ArrayList<>(); |
||||
|
||||
// 1. 添加提交记录
|
||||
PlanAssignSteerModifyTimelineVO submitNode = new PlanAssignSteerModifyTimelineVO(); |
||||
submitNode.setType("submit"); |
||||
submitNode.setLabel("提交人"); |
||||
|
||||
// 查询申请人姓名
|
||||
String applicantName = "-"; |
||||
if (entity.getCreateMan() != null) { |
||||
R<User> userR = userClient.userInfoById(entity.getCreateMan()); |
||||
if (userR.isSuccess()) { |
||||
User user = userR.getData(); |
||||
if (user != null) { |
||||
applicantName = user.getRealName(); |
||||
} |
||||
} |
||||
} |
||||
submitNode.setValue(applicantName); |
||||
submitNode.setTime(entity.getCreateTime() != null ? DateUtil.format(entity.getCreateTime(), "yyyy-MM-dd HH:mm:ss") : ""); |
||||
submitNode.setStatus("success"); |
||||
submitNode.setApprovalNode(0); |
||||
PlanAssignSteerModifyTimelineVO planAssignSteerModifyTimelineVO = |
||||
BeanUtil.copyProperties(submitNode, PlanAssignSteerModifyTimelineVO.class); |
||||
submitNode.setChildren(List.of(planAssignSteerModifyTimelineVO)); |
||||
timelineList.add(submitNode); |
||||
|
||||
// 2. 查询所有审批记录并按节点分组
|
||||
QueryWrapper<PlanAssignSteerModifyApproval> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("PASM_ID", id) |
||||
.eq("IS_DELETED", 0) |
||||
.orderByAsc("APPROVAL_NODE") |
||||
.orderByAsc("AUDIT_TIME"); |
||||
List<PlanAssignSteerModifyApproval> allRecords = planAssignSteerModifyApprovalService.list(queryWrapper); |
||||
Map<Integer, List<PlanAssignSteerModifyApproval>> nodeMap = allRecords.stream() |
||||
.collect(Collectors.groupingBy(PlanAssignSteerModifyApproval::getApprovalNode)); |
||||
|
||||
// 3. 处理一级审批节点
|
||||
buildApprovalNodes(nodeMap.get(1), 1, timelineList, entity); |
||||
|
||||
// 4. 处理二级审批节点
|
||||
buildApprovalNodes(nodeMap.get(2), 2, timelineList, entity); |
||||
|
||||
return timelineList; |
||||
} |
||||
|
||||
/** |
||||
* 构建审批节点时间线记录 |
||||
* |
||||
* @param records 审批记录列表 |
||||
* @param approvalNode 审批节点(1-一级审批,2-二级审批) |
||||
* @param timelineList 时间线结果集 |
||||
* @param entity 主表实体 |
||||
*/ |
||||
private void buildApprovalNodes(List<PlanAssignSteerModifyApproval> records, |
||||
Integer approvalNode, |
||||
List<PlanAssignSteerModifyTimelineVO> timelineList, |
||||
PlanAssignSteerModify entity) { |
||||
if (records == null || records.isEmpty()) { |
||||
return; |
||||
} |
||||
|
||||
String status = "false"; |
||||
if (approvalNode == 1 && PlanAssignSteerModify.ApprovalStatus.LEVEL2_APPROVING.equals(entity.getApprovalStatus())) { |
||||
status = "success"; |
||||
} |
||||
if (approvalNode == 2 && PlanAssignSteerModify.ApprovalStatus.PASS.equals(entity.getApprovalStatus())) { |
||||
status = "success"; |
||||
} |
||||
|
||||
PlanAssignSteerModifyTimelineVO submitNode = new PlanAssignSteerModifyTimelineVO(); |
||||
submitNode.setType("audit"); |
||||
submitNode.setStatus(status); |
||||
submitNode.setApprovalNode(approvalNode); |
||||
|
||||
List<PlanAssignSteerModifyTimelineVO> childRecords = records.stream().map(record -> { |
||||
PlanAssignSteerModifyTimelineVO node = new PlanAssignSteerModifyTimelineVO(); |
||||
node.setType("audit"); |
||||
node.setLabel("审批人"); |
||||
|
||||
// 根据审批结果设置状态和值
|
||||
if (PlanAssignSteerModify.ApprovalStatus.PASS.equals(record.getAuditResult())) { |
||||
node.setValue(record.getAuditorName() != null ? record.getAuditorName() : "未知"); |
||||
node.setStatus("success"); |
||||
} |
||||
if (PlanAssignSteerModify.ApprovalStatus.REJECT.equals(record.getAuditResult())) { |
||||
node.setValue(record.getAuditorName() != null ? record.getAuditorName() : "未知"); |
||||
node.setStatus("false"); |
||||
} |
||||
|
||||
node.setTime(record.getAuditTime() != null ? DateUtil.format(record.getAuditTime(), "yyyy-MM-dd HH:mm:ss") : ""); |
||||
node.setApprovalNode(approvalNode); |
||||
node.setRemark(record.getAuditRemark()); |
||||
return node; |
||||
}).sorted(Comparator.comparing(PlanAssignSteerModifyTimelineVO::getTime, Comparator.nullsLast(Comparator.naturalOrder()))) |
||||
.collect(Collectors.toList()); |
||||
|
||||
submitNode.setChildren(childRecords); |
||||
|
||||
timelineList.add(submitNode); |
||||
} |
||||
} |
||||
@ -0,0 +1,44 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.basic.wrapper; |
||||
|
||||
import org.springblade.core.mp.support.BaseEntityWrapper; |
||||
import org.springblade.core.tool.utils.BeanUtil; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModify; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyVO; |
||||
|
||||
import java.util.Objects; |
||||
|
||||
/** |
||||
* [分派控制调整] 包装类,返回视图层所需的字段 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
public class PlanAssignSteerModifyWrapper extends BaseEntityWrapper<PlanAssignSteerModify, PlanAssignSteerModifyVO> { |
||||
|
||||
public static PlanAssignSteerModifyWrapper build() { |
||||
return new PlanAssignSteerModifyWrapper(); |
||||
} |
||||
|
||||
@Override |
||||
public PlanAssignSteerModifyVO entityVO(PlanAssignSteerModify entity) { |
||||
PlanAssignSteerModifyVO vo = Objects.requireNonNull(BeanUtil.copy(entity, PlanAssignSteerModifyVO.class)); |
||||
vo.setApprovalStatusDesc(getApprovalStatusDesc(entity.getApprovalStatus())); |
||||
return vo; |
||||
} |
||||
|
||||
private String getApprovalStatusDesc(Integer status) { |
||||
if (status == null) { |
||||
return "未知"; |
||||
} |
||||
return switch (status) { |
||||
case -1 -> "待提交"; |
||||
case 0 -> "待审核"; |
||||
case 1 -> "审核通过"; |
||||
case 2 -> "审核失败"; |
||||
default -> "未知"; |
||||
}; |
||||
} |
||||
} |
||||
@ -0,0 +1,163 @@ |
||||
/** |
||||
* Author: Tom Shuo |
||||
*/ |
||||
package org.springblade.desk.quality.controller; |
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
||||
import io.swagger.v3.oas.annotations.Operation; |
||||
import io.swagger.v3.oas.annotations.Parameter; |
||||
import io.swagger.v3.oas.annotations.tags.Tag; |
||||
import jakarta.annotation.Resource; |
||||
import jakarta.servlet.http.HttpServletResponse; |
||||
import jakarta.validation.Valid; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Data; |
||||
import lombok.EqualsAndHashCode; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.boot.ctrl.BladeController; |
||||
import org.springblade.core.excel.util.ExcelUtil; |
||||
import org.springblade.core.log.annotation.ApiLog; |
||||
import org.springblade.core.mp.support.Condition; |
||||
import org.springblade.core.mp.support.Query; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.core.tool.utils.BeanUtil; |
||||
import org.springblade.core.tool.utils.DateUtil; |
||||
import org.springblade.core.tool.utils.Func; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModify; |
||||
import org.springblade.desk.basic.pojo.entity.PlanAssignSteerModifyD; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyTimelineVO; |
||||
import org.springblade.desk.basic.pojo.vo.PlanAssignSteerModifyVO; |
||||
import org.springblade.desk.basic.service.IPlanAssignSteerModifyService; |
||||
import org.springframework.web.bind.annotation.*; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* [分派控制调整] 控制器 |
||||
* |
||||
* @author Tom Shuo |
||||
* @since 2026-05-20 |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/quality/planAssignSteerModify") |
||||
@Data |
||||
@AllArgsConstructor |
||||
@EqualsAndHashCode(callSuper = true) |
||||
@Slf4j |
||||
@Tag(name = "[分派控制调整]", description = "[分派控制调整]接口") |
||||
public class PlanAssignSteerModifyController extends BladeController { |
||||
|
||||
@Resource |
||||
private IPlanAssignSteerModifyService service; |
||||
|
||||
@GetMapping("/detail") |
||||
@ApiOperationSupport(order = 10) |
||||
@Operation(summary = "详情", description = "传入pasmId和caId") |
||||
public R<PlanAssignSteerModifyVO> detail( |
||||
@Parameter(description = "调整单ID") @RequestParam(required = false) Long pasmId, |
||||
@Parameter(description = "工艺能力ID") @RequestParam(required = false) Long caId) { |
||||
PlanAssignSteerModifyVO detail = service.getDetail(pasmId, caId); |
||||
return R.data(detail); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* [分派控制调整] page分页 |
||||
*/ |
||||
@GetMapping("/page") |
||||
@ApiOperationSupport(order = 21) |
||||
@Operation(summary = "page分页", description = "传入PlanAssignSteerModifyVO Obj") |
||||
public R<IPage<PlanAssignSteerModifyVO>> page(PlanAssignSteerModifyVO planAssignSteerModify, Query query) { |
||||
IPage<PlanAssignSteerModifyVO> pages = service.selectPlanAssignSteerModifyPage( |
||||
Condition.getPage(query), planAssignSteerModify |
||||
); |
||||
return R.data(pages); |
||||
} |
||||
|
||||
/** |
||||
* [分派控制调整] 新增一条 |
||||
*/ |
||||
@PostMapping("/save") |
||||
@ApiOperationSupport(order = 30) |
||||
@ApiLog("分派控制调整新增") |
||||
@Operation(summary = "新增一条", description = "传入PlanAssignSteerModifyVO Obj") |
||||
public R save(@Valid @RequestBody PlanAssignSteerModifyVO vo) { |
||||
vo.setId(null); |
||||
return service.saveOrUpdateModify(vo, vo.getModifyLst()); |
||||
} |
||||
|
||||
/** |
||||
* [分派控制调整] 修改一条 |
||||
*/ |
||||
@PostMapping("/update") |
||||
@ApiOperationSupport(order = 40) |
||||
@ApiLog("分派控制调整修改") |
||||
@Operation(summary = "修改一条", description = "传入PlanAssignSteerModifyVO Obj") |
||||
public R update(@Valid @RequestBody PlanAssignSteerModifyVO vo) { |
||||
return service.saveOrUpdateModify(vo, vo.getModifyLst()); |
||||
} |
||||
|
||||
/** |
||||
* [分派控制调整] 逻辑删除 |
||||
*/ |
||||
@PostMapping("/remove") |
||||
@ApiOperationSupport(order = 61) |
||||
@ApiLog("分派控制调整删除") |
||||
@Operation(summary = "逻辑删除", description = "传入ids") |
||||
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { |
||||
return R.status(service.removeByIds(Func.toLongList(ids))); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* [分派控制调整] 导出Excel |
||||
*/ |
||||
@GetMapping("/exportExcel") |
||||
@ApiOperationSupport(order = 70) |
||||
@Operation(summary = "导出Excel", description = "传入PlanAssignSteerModify") |
||||
public void exportExcel(@Parameter(hidden = true) @RequestParam Map<String, Object> planAssignSteerModify, |
||||
HttpServletResponse response) { |
||||
List<PlanAssignSteerModifyVO> list = service.exportPlanAssignSteerModify( |
||||
BeanUtil.copyProperties(planAssignSteerModify, PlanAssignSteerModifyVO.class) |
||||
); |
||||
ExcelUtil.export(response, "[分派控制调整]数据" + DateUtil.time(), |
||||
"[分派控制调整]数据表", list, PlanAssignSteerModifyVO.class); |
||||
} |
||||
|
||||
/** |
||||
* [分派控制调整] 发起审批 |
||||
*/ |
||||
@PostMapping("/submitApproval") |
||||
@ApiOperationSupport(order = 90) |
||||
@ApiLog("发起审批") |
||||
@Operation(summary = "发起审批", description = "传入id") |
||||
public R submitApproval(@Parameter(description = "主键ID", required = true) @RequestParam Long id) { |
||||
return service.submitApproval(id); |
||||
} |
||||
|
||||
/** |
||||
* [分派控制调整] 审批 |
||||
*/ |
||||
@PostMapping("/audit") |
||||
@ApiOperationSupport(order = 91) |
||||
@ApiLog("审批") |
||||
@Operation(summary = "审批", description = "传入id, result, remark") |
||||
public R audit( |
||||
@Parameter(description = "主键ID", required = true) @RequestParam Long id, |
||||
@Parameter(description = "审批结果: 1-通过, 2-驳回", required = true) @RequestParam Integer result, |
||||
@Parameter(description = "审批意见") @RequestParam(required = false) String remark) { |
||||
return service.audit(id, result, remark); |
||||
} |
||||
|
||||
/** |
||||
* [分派控制调整] 查询审批时间线 |
||||
*/ |
||||
@GetMapping("/auditHistory/{id}") |
||||
@ApiOperationSupport(order = 100) |
||||
@Operation(summary = "查询审批时间线", description = "传入主键ID") |
||||
public R<List<PlanAssignSteerModifyTimelineVO>> getAuditTimeline(@Parameter(description = "主键ID", required = true) @PathVariable Long id) { |
||||
return R.data(service.getAuditTimeline(id)); |
||||
} |
||||
} |
||||
@ -0,0 +1,42 @@ |
||||
-- 分派控制调整主表 |
||||
CREATE TABLE BS_PLAN_ASSIGN_STEER_MODIFY ( |
||||
ID NUMBER(19) NOT NULL, |
||||
PLATING_ID NUMBER(19), |
||||
PASM_MEMO VARCHAR2(2000), |
||||
CREATE_MAN NUMBER(19), |
||||
CREATE_TIME DATE, |
||||
APPROVAL_STATUS NUMBER(3) DEFAULT -1, |
||||
STATUS NUMBER(1,0) DEFAULT 0, |
||||
IS_DELETED NUMBER(1) DEFAULT 0, |
||||
CREATE_BY NUMBER(19), |
||||
CREATE_DATE DATE, |
||||
UPDATE_BY NUMBER(19), |
||||
UPDATE_DATE DATE, |
||||
PRIMARY KEY (ID) |
||||
); |
||||
|
||||
-- 分派控制调整明细表 |
||||
CREATE TABLE BS_PLAN_ASSIGN_STEER_MODIFYD ( |
||||
ID NUMBER(19) NOT NULL, |
||||
PASM_ID NUMBER(19), |
||||
OEM_ID NUMBER(19), |
||||
PLATING_ID NUMBER(19), |
||||
ASSIGN_SCALE NUMBER(10,2), |
||||
PAS_ID NUMBER(19), |
||||
IS_DELETED NUMBER(1) DEFAULT 0, |
||||
STATUS NUMBER(1,0) DEFAULT 0, |
||||
CREATE_BY NUMBER(19), |
||||
CREATE_DATE DATE, |
||||
UPDATE_BY NUMBER(19), |
||||
UPDATE_DATE DATE, |
||||
PRIMARY KEY (ID) |
||||
); |
||||
|
||||
-- 创建序列 |
||||
CREATE SEQUENCE SEQ_ASSIGN_STEER_MODIFY MINVALUE 1 MAXVALUE 9999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE NOORDER NOCYCLE; |
||||
CREATE SEQUENCE SEQ_ASSIGN_STEER_MODIFYD MINVALUE 1 MAXVALUE 9999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE NOORDER NOCYCLE; |
||||
|
||||
-- 创建索引 |
||||
CREATE INDEX IDX_MODIFY_PLATING_ID ON BS_PLAN_ASSIGN_STEER_MODIFY(PLATING_ID); |
||||
CREATE INDEX IDX_MODIFY_APPROVAL_STATUS ON BS_PLAN_ASSIGN_STEER_MODIFY(APPROVAL_STATUS); |
||||
CREATE INDEX IDX_MODIFYD_PASM_ID ON BS_PLAN_ASSIGN_STEER_MODIFYD(PASM_ID); |
||||
@ -0,0 +1,49 @@ |
||||
-- 分派控制调整审批记录表 |
||||
CREATE TABLE BS_PASM_APPRV ( |
||||
ID NUMBER(20) NOT NULL, |
||||
PASM_ID NUMBER(20) NOT NULL, |
||||
APPROVAL_NODE NUMBER(10) NOT NULL, |
||||
APPROVAL_NODE_NAME VARCHAR2(100), |
||||
AUDITOR_ID NUMBER(20) NOT NULL, |
||||
AUDITOR_NAME VARCHAR2(100), |
||||
AUDIT_RESULT NUMBER(10) NOT NULL, |
||||
AUDIT_REMARK VARCHAR2(500), |
||||
AUDIT_TIME DATE, |
||||
IS_DELETED NUMBER(10) DEFAULT 0, |
||||
STATUS NUMBER(1,0) DEFAULT 0, |
||||
CREATE_USER NUMBER(20), |
||||
CREATE_TIME DATE, |
||||
UPDATE_USER NUMBER(20), |
||||
UPDATE_TIME DATE, |
||||
CONSTRAINT PK_PASM_APPRV PRIMARY KEY (ID) |
||||
); |
||||
|
||||
-- 添加表注释 |
||||
COMMENT ON TABLE BS_PASM_APPRV IS '分派控制调整审批记录表'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.ID IS '主键ID'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.PASM_ID IS '调整单ID'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.APPROVAL_NODE IS '审批节点:1-一级审批,2-二级审批'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.APPROVAL_NODE_NAME IS '审批节点名称'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.AUDITOR_ID IS '审批人ID'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.AUDITOR_NAME IS '审批人姓名'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.AUDIT_RESULT IS '审批结果:1-通过,2-驳回'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.AUDIT_REMARK IS '审批意见'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.AUDIT_TIME IS '审批时间'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.IS_DELETED IS '是否删除:0-未删除,1-已删除'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.STATUS IS '状态'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.CREATE_USER IS '创建人'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.CREATE_TIME IS '创建时间'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.UPDATE_USER IS '更新人'; |
||||
COMMENT ON COLUMN BS_PASM_APPRV.UPDATE_TIME IS '更新时间'; |
||||
|
||||
-- 创建索引(标识符不超过30字符) |
||||
CREATE INDEX IDX_PASM_APPRV_PID ON BS_PASM_APPRV(PASM_ID); |
||||
CREATE INDEX IDX_PASM_APPRV_AID ON BS_PASM_APPRV(AUDITOR_ID); |
||||
CREATE INDEX IDX_PASM_APPRV_NODE ON BS_PASM_APPRV(APPROVAL_NODE); |
||||
|
||||
-- 创建序列(标识符不超过30字符) |
||||
CREATE SEQUENCE SEQ_PASM_APPRV_ID |
||||
START WITH 1 |
||||
INCREMENT BY 1 |
||||
NOCACHE |
||||
NOCYCLE; |
||||
Loading…
Reference in new issue