package com.ruoyi.task.api.contract; import com.ruoyi.common.core.service.PreachformApi; import com.ruoyi.common.core.service.dto.VisitPreachformRow; import com.ruoyi.task.domain.ServiceSubtask; import com.ruoyi.task.domain.ServiceSubtaskPreachform; import com.ruoyi.task.mapper.ServiceSubtaskPreachformMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * {@link PreachformApi} 在 本模块(ruoyi-task)的实现 —— * {@code service_subtask_preachform} 的唯一数据访问出口。 * *

2026-11 归属调整

* 该表原先归 {@code ruoyi-inhospvisit},实现是它的 {@code DefaultPreachformApi}; * 按"表跟随业务域"的口径,表的 SQL / Mapper / 实体都划到本模块,于是本类接管契约实现。 * 仍然保留这个契约的原因只有一个:{@code ruoyi-inhospvisit} 需要写这张表(宣教明细), * 而依赖方向是 {@code ruoyi-task → ruoyi-inhospvisit},反向不成立(否则成环), * 所以它只能经 {@code ruoyi-common} 里的契约在运行期取到本实现。 * *

⚠️ 纯数据访问

* 本类只做「契约行 ↔ 实体」的逐字段搬运 + 调 Mapper,不含任何业务判断: * 什么时候该插一条、该置什么状态,都属于调用方。 * 15 个字段逐个照抄(少搬一个 = 该列静默不写/不读)。 */ @Slf4j @Component public class PreachformApiImpl implements PreachformApi { @Autowired private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; @Override public VisitPreachformRow findById(Long id) { return toRow(serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformById(id)); } @Override public List findList(VisitPreachformRow query) { List rows = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(toEntity(query)); return toRows(rows); } @Override public List findByTaskidAndOrgid(Long taskid, String orgid) { ServiceSubtask query = new ServiceSubtask(); query.setTaskid(taskid); query.setOrgid(orgid); return toRows(serviceSubtaskPreachformMapper.selectBySubtask(query)); } @Override public boolean insert(VisitPreachformRow row) { ServiceSubtaskPreachform entity = toEntity(row); int n = serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(entity); // 原 XML 用 useGeneratedKeys 把自增主键回填到入参对象;这里同样回填, // 保证"先 insert 再拿 id"的调用方行为不变。 if (row != null && entity != null) { row.setId(entity.getId()); } return n == 1; } @Override public boolean updateById(VisitPreachformRow row) { return serviceSubtaskPreachformMapper .updateServiceSubtaskPreachform(toEntity(row)) == 1; } @Override public boolean updateByCondition(VisitPreachformRow row) { return serviceSubtaskPreachformMapper.updateSSPByCondition(toEntity(row)) >= 1; } @Override public boolean softDeleteById(Long id) { return serviceSubtaskPreachformMapper.deleteServiceSubtaskPreachformById(id) >= 1; } @Override public boolean softDeleteByIds(Long[] ids) { return serviceSubtaskPreachformMapper.deleteServiceSubtaskPreachformByIds(ids) >= 1; } @Override public boolean softDeleteBySubid(Long subid) { return serviceSubtaskPreachformMapper.deleteServiceSubtaskPreachformBySubid(subid) >= 1; } // ========================================================================== // 字段搬运(契约行 ↔ 本模块实体)。两侧字段名与类型完全一致(15 个), // 逐字段照抄,不做"顺手精简"。 // ========================================================================== private ServiceSubtaskPreachform toEntity(VisitPreachformRow r) { if (r == null) { return null; } ServiceSubtaskPreachform e = new ServiceSubtaskPreachform(); e.setId(r.getId()); e.setSubid(r.getSubid()); e.setTaskid(r.getTaskid()); e.setPreachform(r.getPreachform()); e.setSendstate(r.getSendstate()); e.setCurrentSendTime(r.getCurrentSendTime()); e.setOrgid(r.getOrgid()); e.setDelFlag(r.getDelFlag()); e.setSort(r.getSort()); e.setCompensateTime(r.getCompensateTime()); e.setRemark(r.getRemark()); e.setCreateBy(r.getCreateBy()); e.setCreateTime(r.getCreateTime()); e.setUpdateBy(r.getUpdateBy()); e.setUpdateTime(r.getUpdateTime()); return e; } private VisitPreachformRow toRow(ServiceSubtaskPreachform e) { if (e == null) { return null; } VisitPreachformRow r = new VisitPreachformRow(); r.setId(e.getId()); r.setSubid(e.getSubid()); r.setTaskid(e.getTaskid()); r.setPreachform(e.getPreachform()); r.setSendstate(e.getSendstate()); r.setCurrentSendTime(e.getCurrentSendTime()); r.setOrgid(e.getOrgid()); r.setDelFlag(e.getDelFlag()); r.setSort(e.getSort()); r.setCompensateTime(e.getCompensateTime()); r.setRemark(e.getRemark()); r.setCreateBy(e.getCreateBy()); r.setCreateTime(e.getCreateTime()); r.setUpdateBy(e.getUpdateBy()); r.setUpdateTime(e.getUpdateTime()); return r; } private List toRows(List rows) { if (rows == null || rows.isEmpty()) { return Collections.emptyList(); } List out = new ArrayList<>(rows.size()); for (ServiceSubtaskPreachform e : rows) { out.add(toRow(e)); } return out; } }