陈昶聿
6 天以前 839e23b23b2bfb13282e9e5f621d32a1c55186ea
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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} 在 <b>本模块(ruoyi-task)</b>的实现 ——
 * {@code service_subtask_preachform} 的<b>唯一</b>数据访问出口。
 *
 * <h3>2026-11 归属调整</h3>
 * 该表原先归 {@code ruoyi-inhospvisit},实现是它的 {@code DefaultPreachformApi};
 * 按"表跟随业务域"的口径,表的 SQL / Mapper / 实体都划到本模块,于是本类接管契约实现。
 * 仍然保留这个契约的原因只有一个:{@code ruoyi-inhospvisit} 需要写这张表(宣教明细),
 * 而依赖方向是 {@code ruoyi-task → ruoyi-inhospvisit},反向不成立(否则成环),
 * 所以它只能经 {@code ruoyi-common} 里的契约在运行期取到本实现。
 *
 * <h3>⚠️ 纯数据访问</h3>
 * 本类只做「契约行 ↔ 实体」的逐字段搬运 + 调 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<VisitPreachformRow> findList(VisitPreachformRow query) {
        List<ServiceSubtaskPreachform> rows =
                serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(toEntity(query));
        return toRows(rows);
    }
 
    @Override
    public List<VisitPreachformRow> 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<VisitPreachformRow> toRows(List<ServiceSubtaskPreachform> rows) {
        if (rows == null || rows.isEmpty()) {
            return Collections.emptyList();
        }
        List<VisitPreachformRow> out = new ArrayList<>(rows.size());
        for (ServiceSubtaskPreachform e : rows) {
            out.add(toRow(e));
        }
        return out;
    }
}