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;
}
}