package com.ruoyi.common.core.service.dto; import java.io.Serializable; import java.util.Date; /** * 一条待落库随访子任务的草稿({@link VisitTaskCreateApi#createSubtask} 的入参)。 *

* 字段是逐个对照迁移前 {@code PatMedInhospServiceImpl#boxedServiceSubtask}(L1108-1222) * 与 {@code #boxedServiceSubtaskForOp}(L1225-1300)的 setter 调用倒推出来的。 * 该方法是出入院随访唯一可能改变线上行为的地方,所以这里刻意不做字段精简: * 少一个字段 → 对应 setter 静默失效 → 线上子任务内容变化,且不报错。 * *

迁移时的对应关系(逐条核对用)

*
 * 原 patMedInhosp1/patArchive/serviceTask getter  →  本 DTO 字段
 * 
* * @see com.ruoyi.common.core.service.VisitTaskCreateApi#createSubtask(VisitSubtaskDraft) */ public class VisitSubtaskDraft implements Serializable { private static final long serialVersionUID = 1L; // ==================== 任务来源(原 serviceTask) ==================== /** * 子任务ID。 *

* 只有"先 insert、再补字段回写"那条链路(原 L776-793)才需要; * 新增时留空。{@code insertServiceSubtask} 用的是 {@code useGeneratedKeys}, * 落库后这个字段会被回填到实体上,调用方据此再 update。 */ private Long id; /** 任务ID(原 taskid) */ private Long taskid; /** 机构ID(原 serviceTask.orgid) */ private String orgid; /** 院区ID(原 serviceTask.campusid,后被 patMedInhosp.campusid 覆盖) */ private String campusid; // ==================== 患者(原 patArchive) ==================== /** 患者档案ID(原 patArchive.id) */ private Long patid; /** 接收人姓名(原 patArchive.name) */ private String sendname; /** 身份证号(原 patArchive.idcardno) */ private String sfzh; /** 手机号(原 patArchive.telcode,空则取 relativetelcode) */ private String phone; /** 性别(原 patArchive.sex) */ private Long sex; /** 年龄(原 patArchive.age) */ private Long age; // ==================== 出入院关联(原 patMedInhosp) ==================== /** 出入院记录ID(原 inhospid) */ private Long inhospid; /** 住院流水号 */ private String serialnum; /** * 就诊编号 —— 落库到 {@code service_subtask.hospno}("对应的 outhospno、inhospno")。 *

* 出院链路的取值是 {@code pat_med_inhosp.inhospno}(门诊链路是 * {@code pat_med_outhosp.outhospno},见 {@link OuthospSubtaskDraft})。 *

* ⚠️ 这个字段原先只存在于 {@link OuthospSubtaskDraft},而出院的 * {@code addSubTaskByRule} 链路从不设它 → {@code service_subtask.hospno} 一直落空。 * 现在提到父类,两条链路共用同一个载体。 */ private String hospno; // ==================== 医护(原 patMedInhosp) ==================== /** 责任护士ID */ private String nurseId; /** 责任护士姓名 */ private String nurseName; /** 医生编码 */ private String drcode; /** 医生姓名 */ private String drname; /** 管理医生姓名 */ private String managementDoctor; /** 管理医生编码 */ private String managementDoctorCode; // ==================== 科室/病区(原 patMedInhosp,type 4/5 会改写) ==================== /** 科室编码(type 1/2/3 取 leave 维度;type 4/5 取入院维度) */ private String deptcode; /** 科室名称 */ private String deptname; /** 离院病区编码(type 4/5 取入院病区) */ private String leavehospitaldistrictcode; /** 离院病区名称 */ private String leavehospitaldistrictname; // ==================== 诊断(原 patMedInhosp) ==================== /** 离院 ICD10 编码 */ private String leaveicd10code; /** 离院诊断名称 */ private String leavediagname; /** 诊断名称 */ private String diagname; // ==================== 模板(原 serviceTask) ==================== /** 问卷模板ID */ private Long templateid; /** 问卷模板名称 */ private String templatename; /** 语音模板ID */ private Long libtemplateid; // ==================== 时间 ==================== /** 入院时间(原 patMedInhosp.starttime) */ private Date starttime; /** 出院时间(原 patMedInhosp.endtime) */ private Date endtime; /** 长期任务发送时间(原 longSendTime) */ private Date longSendTime; /** 随访时间(原 visitTime) */ private Date visitTime; // ==================== 状态/类型 ==================== /** 发送状态(原 sendstate) */ private Long sendstate; /** * 提交标记(原 {@code submit},实体里是 {@code Long})。 *

* ⚠️ 迁移前 {@code writeInSubTask} 里对它的写法是 {@code serviceSubtask.setSubmit(1)} —— * 一个 int 字面量被自动装箱/加宽成 {@code Long},历史上编译能过。 * 搬迁时若把它写成 {@code Integer} 就会静默丢字段,故此处保持 {@code Long}。 */ private Long submit; /** 服务类型(原 serviceType) */ private String serviceType; /** 疾病类型(原 diagType) */ private String diagType; /** 住院类型(原 hospType,"2" 普通 / "6" 入院) */ private String hospType; /** 执行方式(原 preachform) */ private String preachform; // ==================== 随访标记(原 writeInSubTask 在入库前设置的几个) ==================== /** 就诊次数(原 visitCount) */ private Integer visitCount; /** 是否再次随访(原 isVisitAgain) */ private Integer isVisitAgain; /** 就诊科室编码(原 visitDeptCode,由 type 分派决定) */ private String visitDeptCode; /** 就诊科室名称(原 visitDeptName) */ private String visitDeptName; /** 任务状态(原 taskSituation;宣教=7,被过滤患者=6) */ private Integer taskSituation; /** 结果(原 result,"error" 表示不执行) */ private String result; /** 备注(原 remark) */ private String remark; // ==================== 手术(原 patMedOperationItem,仅手术随访用) ==================== /** 手术明细ID(原 operationItemId) */ private Long operationItemId; // ==================== 审计 ==================== /** 创建人(原 createBy) */ private String createBy; /** 更新人(原 updateBy) */ private String updateBy; // ==================== 兜底 ==================== /** * 长期任务失败原因(原 {@code patMedInhosp.longTaskReason})。 *

* 【注意】这不是子任务的字段。它在迁移前是 {@code writeInSubTask} 从入参实体上读出来、 * 拼上错误文案后再写回 {@code pat_med_inhosp} 的。放在这里是为了让 * {@code VisitTaskCreateApi} 的实现能拿到它去写 B7 标记; * 过渡实现不会把它写入 service_subtask。 */ private String longTaskReason; // ========================================================================== // DtoConversionUtils 拷入、但未被显式覆盖的 18 个字段 // ========================================================================== /** * ⚠️ 这一批字段的来源必须说清楚(踩过的坑) *

* 迁移前 {@code boxedServiceSubtask} / {@code boxedServiceSubtaskForOp} 的第一行是: *

     * ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class);
     * 
* 它把 {@code ServiceTask} 与 {@code ServiceSubtask} 同名的 33 个字段整批拷了过来, * 其中 18 个之后再也没被显式 set 覆盖 —— 也就是说,这 18 个值是 * 靠"拷贝"带进子任务并落库的。 *

* 逐字段核对过,这 18 个里还有类型不一致的: * {@code pid}({@code Integer → Long})、{@code sendType}({@code Long → String}), * 说明 {@code sourceToTarget} 内部做了类型转换,不是简单的同名赋值。 *

* 如果不把它们显式带过去,这些值就会丢 → 落库的子任务内容与迁移前不一致,而且不会报错。 * 所以这里全部显式列出,让"每个字段是怎么进子任务的"完全可见, * 并由 {@code sql/_probe/verify_inhospvisit_semantics.py} 逐条断言。 *

* 对应的原实现位置:{@code PatMedInhospServiceImpl} L1113(boxed)与 L1226(boxedForOp)。 */ /** 删除标记(原 serviceTask.delFlag) */ private String delFlag; /* * 注意:diagType 已经在上面"状态/类型"那一组里声明过了(同名字段不能重复声明), * 这里刻意不再重复。它同样属于"DtoConversionUtils 拷入但未被显式覆盖"的那一批, * 生成脚本当时没查重,导致过一次编译失败 —— 已由 sql/_probe/_check_draft_duplicates.py 兜住。 */ /** 出院时间区间终点(原 serviceTask.endOutHospTime) */ private java.util.Date endOutHospTime; /** GUID(原 serviceTask.guid) */ private String guid; /** 是否已上传(原 serviceTask.isupload) */ private Long isupload; /** 离院病区编码列表(原 serviceTask.leavehospitaldistrictcodes) */ private java.util.List leavehospitaldistrictcodes; /** 离院科室编码列表(原 serviceTask.leaveldeptcodes) */ private java.util.List leaveldeptcodes; /** 语音模板名称(原 serviceTask.libtemplatename) */ private String libtemplatename; /** 分页页码(原 serviceTask.pageNum) */ private Integer pageNum; /** 分页页长(原 serviceTask.pageSize) */ private Integer pageSize; /** pid(原 serviceTask.pid 是 Integer,目标是 Long —— sourceToTarget 做了转换) */ private Long pid; /** 发送类型(原 serviceTask.sendType 是 Long,目标是 String —— 同样做了转换) */ private String sendType; /** 出院时间区间起点(原 serviceTask.startOutHospTime) */ private java.util.Date startOutHospTime; /** 任务描述(原 serviceTask.taskDesc) */ private String taskDesc; /** 任务名称(原 serviceTask.taskName) */ private String taskName; /** 文本参数(原 serviceTask.textParam) */ private String textParam; /** 任务类型(原 serviceTask.type) */ private String type; /** 上传时间(原 serviceTask.uploadTime) */ private java.util.Date uploadTime; // ---------- 补齐的字段 ---------- /** 创建时间(原 L1157 setCreateTime(new Date())) */ private java.util.Date createTime; /** 更新时间(原 L1158/L1163 setUpdateTime(new Date())) */ private java.util.Date updateTime; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getTaskid() { return taskid; } public void setTaskid(Long taskid) { this.taskid = taskid; } public String getOrgid() { return orgid; } public void setOrgid(String orgid) { this.orgid = orgid; } public String getCampusid() { return campusid; } public void setCampusid(String campusid) { this.campusid = campusid; } public Long getPatid() { return patid; } public void setPatid(Long patid) { this.patid = patid; } public String getSendname() { return sendname; } public void setSendname(String sendname) { this.sendname = sendname; } public String getSfzh() { return sfzh; } public void setSfzh(String sfzh) { this.sfzh = sfzh; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public Long getSex() { return sex; } public void setSex(Long sex) { this.sex = sex; } public Long getAge() { return age; } public void setAge(Long age) { this.age = age; } public Long getInhospid() { return inhospid; } public void setInhospid(Long inhospid) { this.inhospid = inhospid; } public String getSerialnum() { return serialnum; } public void setSerialnum(String serialnum) { this.serialnum = serialnum; } public String getHospno() { return hospno; } public void setHospno(String hospno) { this.hospno = hospno; } public String getNurseId() { return nurseId; } public void setNurseId(String nurseId) { this.nurseId = nurseId; } public String getNurseName() { return nurseName; } public void setNurseName(String nurseName) { this.nurseName = nurseName; } public String getDrcode() { return drcode; } public void setDrcode(String drcode) { this.drcode = drcode; } public String getDrname() { return drname; } public void setDrname(String drname) { this.drname = drname; } public String getManagementDoctor() { return managementDoctor; } public void setManagementDoctor(String managementDoctor) { this.managementDoctor = managementDoctor; } public String getManagementDoctorCode() { return managementDoctorCode; } public void setManagementDoctorCode(String managementDoctorCode) { this.managementDoctorCode = managementDoctorCode; } public String getDeptcode() { return deptcode; } public void setDeptcode(String deptcode) { this.deptcode = deptcode; } public String getDeptname() { return deptname; } public void setDeptname(String deptname) { this.deptname = deptname; } public String getLeavehospitaldistrictcode() { return leavehospitaldistrictcode; } public void setLeavehospitaldistrictcode(String leavehospitaldistrictcode) { this.leavehospitaldistrictcode = leavehospitaldistrictcode; } public String getLeavehospitaldistrictname() { return leavehospitaldistrictname; } public void setLeavehospitaldistrictname(String leavehospitaldistrictname) { this.leavehospitaldistrictname = leavehospitaldistrictname; } public String getLeaveicd10code() { return leaveicd10code; } public void setLeaveicd10code(String leaveicd10code) { this.leaveicd10code = leaveicd10code; } public String getLeavediagname() { return leavediagname; } public void setLeavediagname(String leavediagname) { this.leavediagname = leavediagname; } public String getDiagname() { return diagname; } public void setDiagname(String diagname) { this.diagname = diagname; } public Long getTemplateid() { return templateid; } public void setTemplateid(Long templateid) { this.templateid = templateid; } public String getTemplatename() { return templatename; } public void setTemplatename(String templatename) { this.templatename = templatename; } public Long getLibtemplateid() { return libtemplateid; } public void setLibtemplateid(Long libtemplateid) { this.libtemplateid = libtemplateid; } public Date getStarttime() { return starttime; } public void setStarttime(Date starttime) { this.starttime = starttime; } public Date getEndtime() { return endtime; } public void setEndtime(Date endtime) { this.endtime = endtime; } public Date getLongSendTime() { return longSendTime; } public void setLongSendTime(Date longSendTime) { this.longSendTime = longSendTime; } public Date getVisitTime() { return visitTime; } public void setVisitTime(Date visitTime) { this.visitTime = visitTime; } public Long getSendstate() { return sendstate; } public void setSendstate(Long sendstate) { this.sendstate = sendstate; } public Long getSubmit() { return submit; } public void setSubmit(Long submit) { this.submit = submit; } public String getDiagType() { return diagType; } public void setDiagType(String diagType) { this.diagType = diagType; } public Integer getVisitCount() { return visitCount; } public void setVisitCount(Integer visitCount) { this.visitCount = visitCount; } public Integer getIsVisitAgain() { return isVisitAgain; } public void setIsVisitAgain(Integer isVisitAgain) { this.isVisitAgain = isVisitAgain; } public String getVisitDeptCode() { return visitDeptCode; } public void setVisitDeptCode(String visitDeptCode) { this.visitDeptCode = visitDeptCode; } public String getVisitDeptName() { return visitDeptName; } public void setVisitDeptName(String visitDeptName) { this.visitDeptName = visitDeptName; } public String getServiceType() { return serviceType; } public void setServiceType(String serviceType) { this.serviceType = serviceType; } public String getHospType() { return hospType; } public void setHospType(String hospType) { this.hospType = hospType; } public String getPreachform() { return preachform; } public void setPreachform(String preachform) { this.preachform = preachform; } public Integer getTaskSituation() { return taskSituation; } public void setTaskSituation(Integer taskSituation) { this.taskSituation = taskSituation; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Long getOperationItemId() { return operationItemId; } public void setOperationItemId(Long operationItemId) { this.operationItemId = operationItemId; } public String getCreateBy() { return createBy; } public void setCreateBy(String createBy) { this.createBy = createBy; } public String getUpdateBy() { return updateBy; } public void setUpdateBy(String updateBy) { this.updateBy = updateBy; } public String getLongTaskReason() { return longTaskReason; } public void setLongTaskReason(String longTaskReason) { this.longTaskReason = longTaskReason; } // ---------- 上述 18 个承载字段的访问器 ---------- public String getDelFlag() { return delFlag; } public void setDelFlag(String delFlag) { this.delFlag = delFlag; } public java.util.Date getEndOutHospTime() { return endOutHospTime; } public void setEndOutHospTime(java.util.Date endOutHospTime) { this.endOutHospTime = endOutHospTime; } public String getGuid() { return guid; } public void setGuid(String guid) { this.guid = guid; } public Long getIsupload() { return isupload; } public void setIsupload(Long isupload) { this.isupload = isupload; } public java.util.List getLeavehospitaldistrictcodes() { return leavehospitaldistrictcodes; } public void setLeavehospitaldistrictcodes(java.util.List leavehospitaldistrictcodes) { this.leavehospitaldistrictcodes = leavehospitaldistrictcodes; } public java.util.List getLeaveldeptcodes() { return leaveldeptcodes; } public void setLeaveldeptcodes(java.util.List leaveldeptcodes) { this.leaveldeptcodes = leaveldeptcodes; } public String getLibtemplatename() { return libtemplatename; } public void setLibtemplatename(String libtemplatename) { this.libtemplatename = libtemplatename; } public Integer getPageNum() { return pageNum; } public void setPageNum(Integer pageNum) { this.pageNum = pageNum; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Long getPid() { return pid; } public void setPid(Long pid) { this.pid = pid; } public String getSendType() { return sendType; } public void setSendType(String sendType) { this.sendType = sendType; } public java.util.Date getStartOutHospTime() { return startOutHospTime; } public void setStartOutHospTime(java.util.Date startOutHospTime) { this.startOutHospTime = startOutHospTime; } public String getTaskDesc() { return taskDesc; } public void setTaskDesc(String taskDesc) { this.taskDesc = taskDesc; } public String getTaskName() { return taskName; } public void setTaskName(String taskName) { this.taskName = taskName; } public String getTextParam() { return textParam; } public void setTextParam(String textParam) { this.textParam = textParam; } public String getType() { return type; } public void setType(String type) { this.type = type; } public java.util.Date getUploadTime() { return uploadTime; } public void setUploadTime(java.util.Date uploadTime) { this.uploadTime = uploadTime; } // ---------- 补齐字段的访问器 ---------- public java.util.Date getCreateTime() { return createTime; } public void setCreateTime(java.util.Date createTime) { this.createTime = createTime; } public java.util.Date getUpdateTime() { return updateTime; } public void setUpdateTime(java.util.Date updateTime) { this.updateTime = updateTime; } }