package jnpf.limsService; import jnpf.limsEntity.LimsFenjianItem; import jnpf.limsEntity.LimsJianceTaskAcceptParam; import jnpf.limsEntity.LimsJianyanAssignParam; import jnpf.limsEntity.LimsJianyanAuditFailParam; import jnpf.limsEntity.LimsJianyanAuditOutcome; import jnpf.limsEntity.LimsJianyanAuditParam; import jnpf.limsEntity.LimsJianyanResultParam; import jnpf.limsEntity.LimsSignUsageTarget; import jnpf.limsEntity.LimsSubmitResultOutcome; import java.util.List; /** * LIMS 检测任务服务:分检 → 分配检验员 → 录入结果 → 审核 / 退回。 */ public interface LimsJianceTaskService { /** * 样品分检:把请验单 submit 时创建的检验项(jianyan_zhuangtai=created + * fenjian_zhuangtai=wei_fenjian)推进到 pending_assign,并标记 fenjian_zhuangtai=fenjian, * 同时回写操作员录入的 4 个分检字段(分检量 / 分检单位 / 分装容器 / 分检后保存条件)。 * *

按 lims_jianyan_xiang.f_id 逐条 UPDATE,带状态 / 软删过滤:仅 created 行被推进, * 其余状态自动跳过;4 个分检字段行级必填(缺失抛 DataException)。 * * @param param 分检入参(共享 bizSign + data 列表,见 {@link LimsFenjianItem}) * @return 实际被推进的业务目标(非 created / 已软删 / 不存在 的行不计入) */ List fenjianSamples(LimsJianceTaskAcceptParam param); /** * 分配(含改派)检验任务:每行可指定不同的检验员 / 要求完成日期, * bizSign 共享(一次操作只签一次名)。按 id 逐条 UPDATE。 * *

每条 SQL 带状态 / 软删过滤:允许 pending_assign(初次分配)或 * pending_test(改派)的行被更新,pending_audit / audited 禁止直接改派 * (需走退回流程),软删行跳过。 * * @param param 分配入参(bizSign + data 列表) * @return 实际被更新的业务目标(可能小于 data.size(),表示部分行被跳过) */ List assignJianyanXiang(LimsJianyanAssignParam param); /** * 批量录入检验结果:把 pending_test 且属于当前登录检验员的行置为 pending_audit, * 写入 jianyan_jieguo / jianyan_jielun / biz_files(签名仅审计在 lims_sign)。 * *

每行结果各异,按 id 逐条 UPDATE;每条 SQL 都带 3 个过滤条件: * 状态 pending_test + jiancha_ren = 当前用户 + 未软删, * 状态不对 / 非本人任务 / 被软删的行自动跳过。 * * @param param 录入入参(共享 bizSign + data 列表) * @return 执行结果(含实际更新行数 + 异常调查流程发起失败的流水号列表) */ LimsSubmitResultOutcome submitJianyanResult(LimsJianyanResultParam param); /** * 批量审核通过检验结果:把选中的 pending_audit 行置为 audited, * 写入 renwu_shenheren(当前登录用户);签名仅审计在 lims_sign。 * *

业务校验(每行独立判断,不满足的行被跳过): *

* * @param param 审核入参(共享 bizSign + data 列表) * @return 执行结果明细(含未通过行按原因分桶,便于 controller 给出针对性错误) */ LimsJianyanAuditOutcome passJianyanAudit(LimsJianyanAuditParam param); /** * 批量项目退回:把选中的 audited 行置为 audit_rejected, * 每行写入退回原因(note → tuihui_yuanyin),并写入退回人 / 签名。 * *

业务校验(同 passJianyanAudit): *

* * @param param 退回入参(共享 bizSign + data 每行 id + note) * @return 执行结果明细(含未通过行按原因分桶,便于 controller 给出针对性错误) */ LimsJianyanAuditOutcome failJianyanAudit(LimsJianyanAuditFailParam param); }