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 listKanbanRows(String yangpinLeixing, String suoshuChejian, String quyangDidian, String quyangdianBianhao) { return kanbanMapper.selectRows(dangqianZuhuId(), yangpinLeixing, suoshuChejian, quyangDidian, quyangdianBianhao); } @Override public List 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 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 chaxunRenwu(LocalDate kaishiRiqi, LocalDate jieshuRiqi, String yangpinLeixing, String suoshuChejian, String quyangDidian, String quyangdianBianhao) { QueryWrapper 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(); } }