刘光辉
昨天 bb638871a7fb692d80f1b7a758f991dc0879002c
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
package jnpf.limsService.impl;
 
import jnpf.audit.sdk.annotation.AuditLog;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jnpf.base.UserInfo;
import jnpf.limsEntity.LimsSxtKanbanItemVo;
import jnpf.limsEntity.LimsSxtKanbanOptionsVo;
import jnpf.limsEntity.LimsSxtKanbanRowVo;
import jnpf.limsEntity.LimsSxtQuyangJihuaRenwuEntity;
import jnpf.limsMapper.LimsSxtKanbanMapper;
import jnpf.limsMapper.LimsSxtQuyangJihuaRenwuMapper;
import jnpf.limsService.LimsSxtKanbanService;
import jnpf.limsService.LimsSxtQuyangJihuaRenwuService;
import jnpf.limsService.support.LimsSxtQuyangJihuaRenwuStatus;
import jnpf.util.UserProvider;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
 
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 水系统计划看板行读取当前有效点位,日历项读取 Renwu 历史快照。
 */
@Service
public class LimsSxtKanbanServiceImpl implements LimsSxtKanbanService {
 
    @Autowired
    private LimsSxtKanbanMapper kanbanMapper;
    @Autowired
    private LimsSxtQuyangJihuaRenwuMapper renwuMapper;
    @Autowired
    private LimsSxtQuyangJihuaRenwuService renwuService;
 
    @Override
    public LimsSxtKanbanOptionsVo listKanbanOptions(String yangpinLeixing, String suoshuChejian,
                                                     String quyangDidian) {
        String tenantId = dangqianZuhuId();
        LimsSxtKanbanOptionsVo result = new LimsSxtKanbanOptionsVo();
        result.setYangpinLeixingList(kanbanMapper.selectSampleTypes(tenantId));
        if (!StringUtils.hasText(yangpinLeixing)) {
            return result;
        }
        result.setChejianList(kanbanMapper.selectWorkshops(tenantId, yangpinLeixing));
        if (!StringUtils.hasText(suoshuChejian)) {
            return result;
        }
        result.setQuyangDidianList(kanbanMapper.selectPlaces(tenantId, yangpinLeixing, suoshuChejian));
        if (!StringUtils.hasText(quyangDidian)) {
            return result;
        }
        result.setQuyangdianList(kanbanMapper.selectPoints(
                tenantId, yangpinLeixing, suoshuChejian, quyangDidian));
        return result;
    }
 
    @Override
    public List<LimsSxtKanbanRowVo> listKanbanRows(String yangpinLeixing, String suoshuChejian,
                                                    String quyangDidian, String quyangdianBianhao) {
        return kanbanMapper.selectRows(dangqianZuhuId(), yangpinLeixing, suoshuChejian,
                quyangDidian, quyangdianBianhao);
    }
 
    @Override
    public List<LimsSxtKanbanItemVo> listKanbanItems(LocalDate kaishiRiqi, LocalDate jieshuRiqi,
                                                      String yangpinLeixing, String suoshuChejian,
                                                      String quyangDidian, String quyangdianBianhao) {
        if (kaishiRiqi == null || jieshuRiqi == null || kaishiRiqi.isAfter(jieshuRiqi)) {
            throw new jnpf.exception.DataException("日期范围不正确");
        }
        List<LimsSxtKanbanItemVo> result = new ArrayList<>();
        for (LimsSxtQuyangJihuaRenwuEntity renwu : chaxunRenwu(
                kaishiRiqi, jieshuRiqi, yangpinLeixing, suoshuChejian, quyangDidian, quyangdianBianhao)) {
            result.add(toItem(renwu));
        }
        return result;
    }
 
    @Override
    @AuditLog(action = "DELETE", label = "取消水系统未来计划任务", bizType = "SXT",
            bizCodeExpr = "#renwuId", bizCodeRequired = false,
            targetTable = "lims_sxt_quyang_jihua_renwu", targetIdExpr = "#renwuId",
            diff = true, entityClass = LimsSxtQuyangJihuaRenwuEntity.class)
    public void quxiaoWeilaiRenwu(String renwuId) {
        renwuService.quxiaoWeishengchengWeilaiRenwu(renwuId, dangqianZuhuId(), "manual_cancelled");
    }
 
    private List<LimsSxtQuyangJihuaRenwuEntity> chaxunRenwu(LocalDate kaishiRiqi, LocalDate jieshuRiqi,
                                                              String yangpinLeixing, String suoshuChejian,
                                                              String quyangDidian, String quyangdianBianhao) {
        QueryWrapper<LimsSxtQuyangJihuaRenwuEntity> query = new QueryWrapper<>();
        query.eq("f_tenant_id", dangqianZuhuId()).eq("f_delete_mark", 0)
                .ge(kaishiRiqi != null, "jihua_riqi", kaishiRiqi)
                .le(jieshuRiqi != null, "jihua_riqi", jieshuRiqi)
                .eq(StringUtils.hasText(yangpinLeixing), "yangpin_leixing", yangpinLeixing)
                .eq(StringUtils.hasText(suoshuChejian), "suoshu_chejian_id", suoshuChejian)
                .eq(StringUtils.hasText(quyangDidian), "quyang_didian", quyangDidian)
                .eq(StringUtils.hasText(quyangdianBianhao), "quyangdian_bianhao", quyangdianBianhao)
                .notIn("renwu_zhuangtai", LimsSxtQuyangJihuaRenwuStatus.CANCELLED,
                        LimsSxtQuyangJihuaRenwuStatus.INVALIDATED)
                .orderByAsc("yangpin_leixing", "suoshu_chejian", "quyang_didian", "quyangdian_bianhao", "jihua_riqi");
        return renwuMapper.selectList(query);
    }
 
    private LimsSxtKanbanRowVo toRow(LimsSxtQuyangJihuaRenwuEntity renwu) {
        LimsSxtKanbanRowVo row = new LimsSxtKanbanRowVo();
        row.setQuyangdianId(renwu.getQuyangdianId());
        row.setYangpinLeixing(renwu.getYangpinLeixing());
        row.setYangpinLeixingMingcheng(renwu.getYangpinLeixingMingcheng());
        row.setSuoshuChejian(renwu.getSuoshuChejian());
        row.setQuyangDidian(renwu.getQuyangDidian());
        row.setQuyangdianBianhao(renwu.getQuyangdianBianhao());
        return row;
    }
 
    private LimsSxtKanbanItemVo toItem(LimsSxtQuyangJihuaRenwuEntity renwu) {
        LimsSxtKanbanItemVo item = new LimsSxtKanbanItemVo();
        BeanUtils.copyProperties(toRow(renwu), item);
        item.setRenwuId(renwu.getId());
        item.setJihuaId(renwu.getJihuaId());
        item.setJihuaMingcheng(renwu.getJihuaMingcheng());
        item.setJihuaRiqi(renwu.getJihuaRiqi());
        item.setRenwuZhuangtai(renwu.getRenwuZhuangtai());
        item.setRenwuZhuangtaiYuanyinDaima(renwu.getRenwuZhuangtaiYuanyinDaima());
        item.setRenwuZhuangtaiYuanyin(renwu.getRenwuZhuangtaiYuanyin());
        item.setJianyanXiangmu(renwu.getJianyanXiangmu());
        item.setJianyanXiangmuMingcheng(renwu.getJianyanXiangmuMingcheng());
        item.setQingyandanId(renwu.getQingyandanId());
        item.setQingyandanLiushuihao(renwu.getQingyandanLiushuihao());
        item.setQingyandanZhuangtai(renwu.getQingyandanZhuangtai());
        item.setCanDelete(isKeQuxiao(renwu));
        return item;
    }
 
    private boolean isKeQuxiao(LimsSxtQuyangJihuaRenwuEntity renwu) {
        LocalDate jihuaRiqi = renwu.getJihuaRiqi().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        return jihuaRiqi.isAfter(LocalDate.now()) && !StringUtils.hasText(renwu.getQingyandanId())
                && (LimsSxtQuyangJihuaRenwuStatus.PENDING.equals(renwu.getRenwuZhuangtai())
                || LimsSxtQuyangJihuaRenwuStatus.BLOCKED_CONFIG_INVALID.equals(renwu.getRenwuZhuangtai()));
    }
 
    private String dangqianZuhuId() {
        UserInfo user = UserProvider.getUser();
        return user == null || !StringUtils.hasText(user.getTenantId()) ? "0" : user.getTenantId();
    }
}