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