刘光辉
15 小时以前 34981c30a78e8bbd7791131059a9210f9928b62c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package jnpf.limsService;
 
import jnpf.base.service.SuperService;
import jnpf.exception.DataException;
import jnpf.limsEntity.LimsHaocaiChukuEntity;
import jnpf.limsEntity.LimsHaocaiChukuShenqingZixiangEntity;
import jnpf.limsEntity.LimsHaocaiJiechuEntity;
import jnpf.limsEntity.LimsHaocaiRukuEntity;
import jnpf.limsEntity.LimsHaocaiRukuSubmitResult;
import jnpf.limsEntity.LimsHaocaiRukuZixiangEntity;
 
import java.util.List;
 
/**
 * 耗材业务服务:出入库等耗材相关逻辑统一放这里(按需要再拆分)。
 * 主表挂 lims_haocai_ruku,子表 lims_haocai_ruku_zixiang 经 Mapper 直接读写。
 */
public interface LimsHaocaiService extends SuperService<LimsHaocaiRukuEntity> {
 
    /**
     * 入库提交:按主表数据取条码号并批量生成子表记录。
     *
     * <p>是否一个条码 = yes:插 1 条,总量 = 入库数量 × 容量;
     * 否则整数数量部分每单位插 1 条,小数部分按容量比例插入最后 1 条。编号 = 条码编码-序号。
     * 不防重:重复调用会生成新条码的新一批记录。
     *
     * @param ruku 已查出的主表记录
     * @return 本批条码与编号列表
     * @throws DataException 主表数据无效(数量/容量解析失败)或条码取号失败
     */
    LimsHaocaiRukuSubmitResult submitRuku(LimsHaocaiRukuEntity ruku) throws DataException;
 
    /**
     * 耗材借出:按条码编码标记入库批次为已出库,并写入耗材借出日志。
     *
     * <p>不写入 lims_haocai_jiechu,在线表单提交会自动保存借出单。
     *
     * @param jiechu 借出表单数据
     * @throws DataException 条码为空、批次不存在或已出库时抛出
     */
    void submitJiechu(LimsHaocaiJiechuEntity jiechu) throws DataException;
 
    /**
     * 耗材归还:按条码编码找到已借出的借出单,标记为已归还;
     * 同步将入库批次状态恢复为未出库,并写入耗材归还日志。
     *
     * @param guihuan 归还表单数据
     * @throws DataException 条码为空、无已借出记录或批次不存在时抛出
     */
    void submitGuihuan(LimsHaocaiJiechuEntity guihuan) throws DataException;
 
    /**
     * 耗材出库:按表单子表条码扣减入库批次剩余量,标记申领子项已出库并写日志。
     *
     * <p>不写入 lims_haocai_chuku / lims_haocai_chuku_zixiang,在线表单提交会自动保存出库单。
     *
     * @param chuku 出库表单数据
     * @throws DataException 表单数据为空、条码/数量无效或库存状态不满足时抛出
     */
    void submitChuku(LimsHaocaiChukuEntity chuku) throws DataException;
 
    /**
     * 耗材销毁:按销毁单号读取申请与子表条码,销毁对应入库批次并写日志。
     *
     * @param xiaohuiDanhao 销毁单号
     * @throws DataException 单号为空、申请不存在、子表为空或条码无效时抛出
     */
    void submitXiaohui(String xiaohuiDanhao) throws DataException;
 
    /**
     * 批量转待销毁:按入库主表主键批量查关联子项,仅将剩余量大于 0 的子项改为待销毁。
     *
     * @param rukuIds 入库主表主键列表(lims_haocai_ruku.f_id)
     * @return 实际更新的子项记录数
     * @throws DataException 主键列表为空时抛出
     */
    int batchMarkRukuZixiangDaixiaohui(List<String> rukuIds) throws DataException;
 
    /**
     * 耗材销毁申请发起:按流程参数读取销毁申请主表与子表条码,
     * 将对应入库子项标记为待销毁并写入销毁单号。
     *
     * @param flowId 流程 id(lims_haocai_xiaohui_shenqing.f_flow_id)
     * @param taskId 流程任务 id(lims_haocai_xiaohui_shenqing.f_flow_task_id)
     * @return 实际更新的入库子项记录数
     * @throws DataException 流程参数为空、申请不存在、子表为空或条码无效时抛出
     */
    int startXiaohuiShenqing(String flowId, String taskId) throws DataException;
 
    /**
     * 按条码编码查询入库子项记录。
     *
     * @param tiaomaBianma 条码编码
     * @return 未删除的匹配子项;条码编码应唯一
     */
    List<LimsHaocaiRukuZixiangEntity> listRukuZixiangByTiaomaBianma(String tiaomaBianma);
 
    /**
     * 根据申领单号和条码编码查询可出库的申领子项。
     *
     * @param shenlingDanhao 申领单号
     * @param tiaomaBianma 条码编码
     * @return 已校验可出库且属于该申领单的申领子项
     * @throws DataException 条码不存在、状态/剩余量不满足、申领单不存在或未通过时抛出
     */
    LimsHaocaiChukuShenqingZixiangEntity getChukuShenqingZixiangForChuku(String shenlingDanhao,
                                                                         String tiaomaBianma) throws DataException;
 
    /**
     * 耗材入库验收提交:按流程定位验收记录,并将其主键回写至关联验收申请。
     *
     * @param flowId 验收记录流程 id(lims_haocai_ruku_yanshou.f_flow_id)
     * @param taskId 验收记录流程任务 id(lims_haocai_ruku_yanshou.f_flow_task_id)
     * @throws DataException 流程参数为空、验收记录或关联申请不存在时抛出
     */
    void submitRukuYanshou(String flowId, String taskId) throws DataException;
 
    /**
     * 耗材入库验收完成:根据验收记录流程状态更新或重置关联验收申请。
     *
     * @param flowId 验收记录流程 id(lims_haocai_ruku_yanshou.f_flow_id)
     * @param taskId 验收记录流程任务 id(lims_haocai_ruku_yanshou.f_flow_task_id)
     * @throws DataException 流程参数为空、验收记录或关联申请不存在时抛出
     */
    void finishRukuYanshou(String flowId, String taskId) throws DataException;
 
    /**
     * 领取待验收的耗材验收申请,并将其置为验收中。
     *
     * @param shenqingId 耗材验收申请主键(lims_haocai_yanshou_shenqing.f_id)
     * @throws DataException 申请不存在、已删除或当前不是待验收状态时抛出
     */
    void lingquYanshouShenqing(String shenqingId) throws DataException;
}