package jnpf.limsService.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import jnpf.audit.sdk.annotation.AuditLog; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import jnpf.base.UserInfo; import jnpf.base.service.SuperServiceImpl; import jnpf.exception.DataException; import jnpf.limsEntity.LimsHuanjingCaiyangdianEntity; import jnpf.limsEntity.LimsHuanjingCaiyangdianZixiangEntity; import jnpf.limsEntity.LimsHuanjingCaiyangdianVo; import jnpf.limsEntity.LimsHuanjingJianceBaogaoEntity; import jnpf.limsEntity.LimsHuanjingJianceBaogaoZixiangEntity; import jnpf.limsEntity.LimsHuanjingJianceBiaozhunEntity; import jnpf.limsEntity.LimsHuanjingJianceJihuaEntity; import jnpf.limsEntity.LimsHuanjingJianceJihuaZhongzhiEntity; import jnpf.limsEntity.LimsHuanjingJianceJihuaZixiangEntity; import jnpf.limsEntity.LimsHuanjingJianceJiluEntity; import jnpf.limsEntity.LimsHuanjingJianceJiluZixiangEntity; import jnpf.limsEntity.LimsHuanjingJianceKanbanItemVo; import jnpf.limsEntity.LimsHuanjingJianceKanbanRowVo; import jnpf.limsEntity.LimsHuanjingJianceQushiDataVo; import jnpf.limsEntity.LimsHuanjingJianceQushiRecordVo; import jnpf.limsEntity.LimsHuanjingJianceQushiStandardVo; import jnpf.limsEntity.LimsHuanjingQuyuEntity; import jnpf.limsMapper.LimsHuanjingCaiyangdianMapper; import jnpf.limsMapper.LimsHuanjingCaiyangdianZixiangMapper; import jnpf.limsMapper.LimsHuanjingJianceBaogaoMapper; import jnpf.limsMapper.LimsHuanjingJianceBaogaoZixiangMapper; import jnpf.limsMapper.LimsHuanjingJianceBiaozhunMapper; import jnpf.limsMapper.LimsHuanjingJianceJihuaMapper; import jnpf.limsMapper.LimsHuanjingJianceJihuaZhongzhiMapper; import jnpf.limsMapper.LimsHuanjingJianceJihuaZixiangMapper; import jnpf.limsMapper.LimsHuanjingJianceJiluMapper; import jnpf.limsMapper.LimsHuanjingJianceJiluZixiangMapper; import jnpf.limsMapper.LimsHuanjingQuyuMapper; import jnpf.limsService.LimsHuanjingJianceService; import jnpf.util.JsonUtil; import jnpf.util.RandomUtil; import jnpf.util.UserProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @Service public class LimsHuanjingJianceServiceImpl extends SuperServiceImpl implements LimsHuanjingJianceService { private static final String STATUS_ENABLED = "enabled"; private static final String STATUS_DISABLED = "disabled"; private static final String STATUS_RECEIVED = "received"; private static final String STATUS_PENDING_AUDIT = "pending_audit"; private static final String STATUS_AUDITED = "audited"; private static final String PLAN_TYPE_TEMPORARY = "temporary"; private static final String PLAN_TYPE_YEARLY = "yearly"; private static final String ACTION_SUBMIT = "submit"; private static final String ACTION_ACCEPT = "accept"; private static final String ACTION_REJECT = "reject"; @Autowired private LimsHuanjingCaiyangdianMapper caiyangdianMapper; @Autowired private LimsHuanjingJianceJihuaMapper jihuaMapper; @Autowired private LimsHuanjingJianceJihuaZixiangMapper jihuaZixiangMapper; @Autowired private LimsHuanjingJianceJihuaZhongzhiMapper jihuaZhongzhiMapper; @Autowired private LimsHuanjingCaiyangdianZixiangMapper caiyangdianZixiangMapper; @Autowired private LimsHuanjingJianceJiluZixiangMapper jiluZixiangMapper; @Autowired private LimsHuanjingJianceBaogaoMapper baogaoMapper; @Autowired private LimsHuanjingJianceBaogaoZixiangMapper baogaoZixiangMapper; @Autowired private LimsHuanjingJianceBiaozhunMapper biaozhunMapper; @Autowired private LimsHuanjingQuyuMapper quyuMapper; @Override public List listCaiyangdian(String jianceQuyuId, String jiejingJibie) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.select( LimsHuanjingCaiyangdianEntity::getId, LimsHuanjingCaiyangdianEntity::getWeizhiBianhao, LimsHuanjingCaiyangdianEntity::getWeizhiMingcheng); wrapper.eq(LimsHuanjingCaiyangdianEntity::getJianceQuyu, jianceQuyuId); wrapper.eq(LimsHuanjingCaiyangdianEntity::getBizEnabled, STATUS_ENABLED); wrapper.eq(StringUtils.hasText(jiejingJibie), LimsHuanjingCaiyangdianEntity::getJiejingJibie, jiejingJibie); wrapper.and(item -> item.isNull(LimsHuanjingCaiyangdianEntity::getDeleteMark) .or().ne(LimsHuanjingCaiyangdianEntity::getDeleteMark, 1)); wrapper.orderByAsc( LimsHuanjingCaiyangdianEntity::getWeizhiBianhao, LimsHuanjingCaiyangdianEntity::getWeizhiMingcheng); List result = new ArrayList<>(); for (LimsHuanjingCaiyangdianEntity entity : caiyangdianMapper.selectList(wrapper)) { LimsHuanjingCaiyangdianVo vo = new LimsHuanjingCaiyangdianVo(); vo.setCaiyangdianId(entity.getId()); vo.setWeizhiBianhao(entity.getWeizhiBianhao()); vo.setWeizhiMingcheng(entity.getWeizhiMingcheng()); result.add(vo); } return result; } @Override public List listKanbanRows(String jianceQuyu, String weizhiBianhao, String jiejingJibie) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.select( LimsHuanjingCaiyangdianEntity::getId, LimsHuanjingCaiyangdianEntity::getJianceQuyu, LimsHuanjingCaiyangdianEntity::getWeizhiBianhao, LimsHuanjingCaiyangdianEntity::getWeizhiMingcheng, LimsHuanjingCaiyangdianEntity::getJiejingJibie); wrapper.eq(LimsHuanjingCaiyangdianEntity::getBizEnabled, STATUS_ENABLED); wrapper.eq(StringUtils.hasText(jianceQuyu), LimsHuanjingCaiyangdianEntity::getJianceQuyu, jianceQuyu); wrapper.eq(StringUtils.hasText(weizhiBianhao), LimsHuanjingCaiyangdianEntity::getWeizhiBianhao, weizhiBianhao); wrapper.eq(StringUtils.hasText(jiejingJibie), LimsHuanjingCaiyangdianEntity::getJiejingJibie, jiejingJibie); wrapper.and(item -> item.isNull(LimsHuanjingCaiyangdianEntity::getDeleteMark) .or().ne(LimsHuanjingCaiyangdianEntity::getDeleteMark, 1)); wrapper.orderByAsc( LimsHuanjingCaiyangdianEntity::getJianceQuyu, LimsHuanjingCaiyangdianEntity::getWeizhiBianhao, LimsHuanjingCaiyangdianEntity::getWeizhiMingcheng); List entityList = caiyangdianMapper.selectList(wrapper); Set quyuIds = new LinkedHashSet<>(); for (LimsHuanjingCaiyangdianEntity entity : entityList) { if (StringUtils.hasText(entity.getJianceQuyu())) { quyuIds.add(entity.getJianceQuyu()); } } Map quyuMap = getQuyuMap(quyuIds); List result = new ArrayList<>(); for (LimsHuanjingCaiyangdianEntity entity : entityList) { LimsHuanjingJianceKanbanRowVo vo = new LimsHuanjingJianceKanbanRowVo(); vo.setCaiyangdianId(entity.getId()); vo.setJianceQuyu(entity.getJianceQuyu()); vo.setJianceQuyuMingcheng(quyuMap.getOrDefault(entity.getJianceQuyu(), entity.getJianceQuyu())); vo.setWeizhiBianhao(entity.getWeizhiBianhao()); vo.setWeizhiMingcheng(entity.getWeizhiMingcheng()); vo.setJiejingJibie(entity.getJiejingJibie()); result.add(vo); } return result; } @Override public List listKanbanItems(Date startDate, Date endDate, String jianceQuyu, String weizhiBianhao, String jiejingJibie) { LambdaQueryWrapper jiluWrapper = new LambdaQueryWrapper<>(); jiluWrapper.select( LimsHuanjingJianceJiluEntity::getId, LimsHuanjingJianceJiluEntity::getJihuaId, LimsHuanjingJianceJiluEntity::getJihuaMingcheng, LimsHuanjingJianceJiluEntity::getJihuaLeixing, LimsHuanjingJianceJiluEntity::getJihuaRiqi, LimsHuanjingJianceJiluEntity::getJiejingJibie, LimsHuanjingJianceJiluEntity::getJianceQuyu, LimsHuanjingJianceJiluEntity::getJianceZhuangtai, LimsHuanjingJianceJiluEntity::getBizStatus); jiluWrapper.ge(startDate != null, LimsHuanjingJianceJiluEntity::getJihuaRiqi, startDate); jiluWrapper.le(endDate != null, LimsHuanjingJianceJiluEntity::getJihuaRiqi, endDate); jiluWrapper.ne(LimsHuanjingJianceJiluEntity::getBizStatus, STATUS_DISABLED); jiluWrapper.eq(StringUtils.hasText(jianceQuyu), LimsHuanjingJianceJiluEntity::getJianceQuyu, jianceQuyu); jiluWrapper.eq(StringUtils.hasText(jiejingJibie), LimsHuanjingJianceJiluEntity::getJiejingJibie, jiejingJibie); jiluWrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); jiluWrapper.orderByAsc(LimsHuanjingJianceJiluEntity::getJihuaRiqi); List jiluList = baseMapper.selectList(jiluWrapper); if (jiluList.isEmpty()) { return Collections.emptyList(); } Map jiluMap = new LinkedHashMap<>(); List jiluIds = new ArrayList<>(); Set quyuIds = new LinkedHashSet<>(); for (LimsHuanjingJianceJiluEntity jilu : jiluList) { jiluMap.put(jilu.getId(), jilu); jiluIds.add(jilu.getId()); if (StringUtils.hasText(jilu.getJianceQuyu())) { quyuIds.add(jilu.getJianceQuyu()); } } LambdaQueryWrapper zixiangWrapper = new LambdaQueryWrapper<>(); zixiangWrapper.select( LimsHuanjingJianceJiluZixiangEntity::getId, LimsHuanjingJianceJiluZixiangEntity::getForeignId, LimsHuanjingJianceJiluZixiangEntity::getWeizhiBianhao, LimsHuanjingJianceJiluZixiangEntity::getWeizhiMingcheng, LimsHuanjingJianceJiluZixiangEntity::getJianceXiangmu, LimsHuanjingJianceJiluZixiangEntity::getJianceQuyu, LimsHuanjingJianceJiluZixiangEntity::getJiejingJibie); zixiangWrapper.in(LimsHuanjingJianceJiluZixiangEntity::getForeignId, jiluIds); zixiangWrapper.eq(StringUtils.hasText(jianceQuyu), LimsHuanjingJianceJiluZixiangEntity::getJianceQuyu, jianceQuyu); zixiangWrapper.eq(StringUtils.hasText(weizhiBianhao), LimsHuanjingJianceJiluZixiangEntity::getWeizhiBianhao, weizhiBianhao); zixiangWrapper.eq(StringUtils.hasText(jiejingJibie), LimsHuanjingJianceJiluZixiangEntity::getJiejingJibie, jiejingJibie); zixiangWrapper.and(item -> item.isNull(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark, 1)); zixiangWrapper.orderByAsc( LimsHuanjingJianceJiluZixiangEntity::getWeizhiBianhao, LimsHuanjingJianceJiluZixiangEntity::getJianceXiangmu); List zixiangList = jiluZixiangMapper.selectList(zixiangWrapper); for (LimsHuanjingJianceJiluZixiangEntity zixiang : zixiangList) { if (StringUtils.hasText(zixiang.getJianceQuyu())) { quyuIds.add(zixiang.getJianceQuyu()); } } Map quyuMap = getQuyuMap(quyuIds); Map resultMap = new LinkedHashMap<>(); for (LimsHuanjingJianceJiluZixiangEntity zixiang : zixiangList) { LimsHuanjingJianceJiluEntity jilu = jiluMap.get(zixiang.getForeignId()); if (jilu == null) { continue; } LimsHuanjingJianceKanbanItemVo vo = new LimsHuanjingJianceKanbanItemVo(); vo.setZixiangId(zixiang.getId()); vo.setJiluId(jilu.getId()); vo.setJihuaId(jilu.getJihuaId()); vo.setJihuaMingcheng(jilu.getJihuaMingcheng()); vo.setJihuaLeixing(jilu.getJihuaLeixing()); vo.setJihuaRiqi(jilu.getJihuaRiqi()); vo.setJiejingJibie(StringUtils.hasText(zixiang.getJiejingJibie()) ? zixiang.getJiejingJibie() : jilu.getJiejingJibie()); vo.setJianceQuyu(StringUtils.hasText(zixiang.getJianceQuyu()) ? zixiang.getJianceQuyu() : jilu.getJianceQuyu()); vo.setJianceQuyuMingcheng(quyuMap.getOrDefault(vo.getJianceQuyu(), vo.getJianceQuyu())); vo.setWeizhiBianhao(zixiang.getWeizhiBianhao()); vo.setWeizhiMingcheng(zixiang.getWeizhiMingcheng()); vo.setJianceXiangmu(zixiang.getJianceXiangmu()); vo.setJianceZhuangtai(jilu.getJianceZhuangtai()); vo.setBizStatus(jilu.getBizStatus()); vo.setCanDelete(STATUS_ENABLED.equals(jilu.getBizStatus())); resultMap.putIfAbsent(getKanbanZixiangGroupKey(zixiang), vo); } return new ArrayList<>(resultMap.values()); } @Override public LimsHuanjingJianceQushiDataVo listQushiData(Date startDate, Date endDate, String jianceQuyu, String jiejingJibie, String weizhiBianhao, String jiancePinci, List jianceXiangmu, String jianceZhuangtai) { LimsHuanjingJianceQushiDataVo result = new LimsHuanjingJianceQushiDataVo(); result.setStandards(listQushiStandards(jianceXiangmu, jiejingJibie, jianceZhuangtai)); LambdaQueryWrapper baogaoWrapper = new LambdaQueryWrapper<>(); baogaoWrapper.select( LimsHuanjingJianceBaogaoEntity::getId, LimsHuanjingJianceBaogaoEntity::getJihuaRiqi, LimsHuanjingJianceBaogaoEntity::getJianceQuyu, LimsHuanjingJianceBaogaoEntity::getJiejingJibie, LimsHuanjingJianceBaogaoEntity::getJianceXiangmu); baogaoWrapper.ge(LimsHuanjingJianceBaogaoEntity::getJihuaRiqi, startDate); baogaoWrapper.le(LimsHuanjingJianceBaogaoEntity::getJihuaRiqi, endDate); baogaoWrapper.eq(LimsHuanjingJianceBaogaoEntity::getBizStatus, STATUS_AUDITED); baogaoWrapper.eq(LimsHuanjingJianceBaogaoEntity::getJianceQuyu, jianceQuyu); baogaoWrapper.eq(LimsHuanjingJianceBaogaoEntity::getJiejingJibie, jiejingJibie); baogaoWrapper.in(LimsHuanjingJianceBaogaoEntity::getJianceXiangmu, jianceXiangmu); if ("na".equals(jiancePinci)) { baogaoWrapper.and(item -> item.isNull(LimsHuanjingJianceBaogaoEntity::getJiancePinci) .or().eq(LimsHuanjingJianceBaogaoEntity::getJiancePinci, "na")); } else { baogaoWrapper.eq(LimsHuanjingJianceBaogaoEntity::getJiancePinci, jiancePinci); } baogaoWrapper.eq(LimsHuanjingJianceBaogaoEntity::getJianceZhuangtai, jianceZhuangtai); baogaoWrapper.and(item -> item.isNull(LimsHuanjingJianceBaogaoEntity::getDeleteMark) .or().ne(LimsHuanjingJianceBaogaoEntity::getDeleteMark, 1)); baogaoWrapper.orderByAsc(LimsHuanjingJianceBaogaoEntity::getJihuaRiqi); List baogaoList = baogaoMapper.selectList(baogaoWrapper); if (baogaoList.isEmpty()) { return result; } List baogaoIds = new ArrayList<>(); Map baogaoMap = new LinkedHashMap<>(); for (LimsHuanjingJianceBaogaoEntity baogao : baogaoList) { if (!StringUtils.hasText(baogao.getId())) { continue; } baogaoIds.add(baogao.getId()); baogaoMap.put(baogao.getId(), baogao); } if (baogaoIds.isEmpty()) { return result; } LambdaQueryWrapper zixiangWrapper = new LambdaQueryWrapper<>(); zixiangWrapper.select( LimsHuanjingJianceBaogaoZixiangEntity::getForeignId, LimsHuanjingJianceBaogaoZixiangEntity::getJianceQuyu, LimsHuanjingJianceBaogaoZixiangEntity::getJiejingJibie, LimsHuanjingJianceBaogaoZixiangEntity::getWeizhiBianhao, LimsHuanjingJianceBaogaoZixiangEntity::getWeizhiMingcheng, LimsHuanjingJianceBaogaoZixiangEntity::getQuyangdianMingcheng, LimsHuanjingJianceBaogaoZixiangEntity::getJianceXiangmu, LimsHuanjingJianceBaogaoZixiangEntity::getCeshiJieguo, LimsHuanjingJianceBaogaoZixiangEntity::getCeshiJieguoLijing); zixiangWrapper.in(LimsHuanjingJianceBaogaoZixiangEntity::getForeignId, baogaoIds); zixiangWrapper.eq(LimsHuanjingJianceBaogaoZixiangEntity::getWeizhiBianhao, weizhiBianhao); zixiangWrapper.and(item -> item.isNull(LimsHuanjingJianceBaogaoZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceBaogaoZixiangEntity::getDeleteMark, 1)); zixiangWrapper.orderByAsc( LimsHuanjingJianceBaogaoZixiangEntity::getJianceXiangmu, LimsHuanjingJianceBaogaoZixiangEntity::getQuyangdianMingcheng); List records = new ArrayList<>(); for (LimsHuanjingJianceBaogaoZixiangEntity zixiang : baogaoZixiangMapper.selectList(zixiangWrapper)) { LimsHuanjingJianceBaogaoEntity baogao = baogaoMap.get(zixiang.getForeignId()); if (baogao == null) { continue; } LimsHuanjingJianceQushiRecordVo vo = new LimsHuanjingJianceQushiRecordVo(); vo.setJianceRiqi(baogao.getJihuaRiqi()); vo.setJianceQuyu(StringUtils.hasText(zixiang.getJianceQuyu()) ? zixiang.getJianceQuyu() : baogao.getJianceQuyu()); vo.setJiejingJibie(StringUtils.hasText(zixiang.getJiejingJibie()) ? zixiang.getJiejingJibie() : baogao.getJiejingJibie()); vo.setWeizhiBianhao(zixiang.getWeizhiBianhao()); vo.setWeizhiMingcheng(zixiang.getWeizhiMingcheng()); vo.setQuyangdianMingcheng(zixiang.getQuyangdianMingcheng()); vo.setJianceXiangmu(StringUtils.hasText(zixiang.getJianceXiangmu()) ? zixiang.getJianceXiangmu() : baogao.getJianceXiangmu()); vo.setCeshiJieguo(zixiang.getCeshiJieguo()); vo.setCeshiJieguoLijing(zixiang.getCeshiJieguoLijing()); records.add(vo); } result.setRecords(records); return result; } private List listQushiStandards(List jianceXiangmu, String jiejingJibie, String jianceZhuangtai) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.select( LimsHuanjingJianceBiaozhunEntity::getJianceXiangmu, LimsHuanjingJianceBiaozhunEntity::getJiejingJibie, LimsHuanjingJianceBiaozhunEntity::getJianceZhuangtai, LimsHuanjingJianceBiaozhunEntity::getBiaozhunShangxian, LimsHuanjingJianceBiaozhunEntity::getMorenDanwei, LimsHuanjingJianceBiaozhunEntity::getLijing, LimsHuanjingJianceBiaozhunEntity::getBiaozhunGuiding); wrapper.in(LimsHuanjingJianceBiaozhunEntity::getJianceXiangmu, jianceXiangmu); wrapper.eq(LimsHuanjingJianceBiaozhunEntity::getJiejingJibie, jiejingJibie); wrapper.eq(LimsHuanjingJianceBiaozhunEntity::getJianceZhuangtai, jianceZhuangtai); wrapper.eq(LimsHuanjingJianceBiaozhunEntity::getBizEnabled, STATUS_ENABLED); wrapper.and(item -> item.isNull(LimsHuanjingJianceBiaozhunEntity::getDeleteMark) .or().ne(LimsHuanjingJianceBiaozhunEntity::getDeleteMark, 1)); wrapper.orderByAsc( LimsHuanjingJianceBiaozhunEntity::getJianceXiangmu, LimsHuanjingJianceBiaozhunEntity::getLijing); List result = new ArrayList<>(); for (LimsHuanjingJianceBiaozhunEntity entity : biaozhunMapper.selectList(wrapper)) { LimsHuanjingJianceQushiStandardVo vo = new LimsHuanjingJianceQushiStandardVo(); vo.setJianceXiangmu(entity.getJianceXiangmu()); vo.setJiejingJibie(entity.getJiejingJibie()); vo.setJianceZhuangtai(entity.getJianceZhuangtai()); vo.setBiaozhunShangxian(entity.getBiaozhunShangxian()); vo.setMorenDanwei(entity.getMorenDanwei()); vo.setLijing(entity.getLijing()); vo.setBiaozhunGuiding(entity.getBiaozhunGuiding()); result.add(vo); } return result; } @Override @Transactional(rollbackFor = Exception.class) @AuditLog(action = "DELETE", label = "删除环境监测计划看板子项", bizType = "HUANJING_JIANCE", bizCodeExpr = "#result > 0 ? #zixiangId : ''", targetTable = "lims_huanjing_jiance_jilu_zixiang", targetIdExpr = "#zixiangId", diff = true, entityClass = LimsHuanjingJianceJiluZixiangEntity.class) public int deleteKanbanZixiang(String zixiangId) { if (!StringUtils.hasText(zixiangId)) { throw new DataException("记录子项ID不能为空"); } LambdaQueryWrapper zixiangWrapper = new LambdaQueryWrapper<>(); zixiangWrapper.eq(LimsHuanjingJianceJiluZixiangEntity::getId, zixiangId); zixiangWrapper.and(item -> item.isNull(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark, 1)); List zixiangList = jiluZixiangMapper.selectList(zixiangWrapper); if (zixiangList.isEmpty()) { return 0; } LimsHuanjingJianceJiluZixiangEntity target = zixiangList.get(0); LimsHuanjingJianceJiluEntity jilu = findJiluById(target.getForeignId()); if (jilu == null) { return 0; } if (!STATUS_ENABLED.equals(jilu.getBizStatus())) { throw new DataException("仅已启用记录允许删除"); } LambdaUpdateWrapper deleteWrapper = new LambdaUpdateWrapper<>(); eqNullable(deleteWrapper, LimsHuanjingJianceJiluZixiangEntity::getForeignId, target.getForeignId()); eqNullable(deleteWrapper, LimsHuanjingJianceJiluZixiangEntity::getJianceQuyu, target.getJianceQuyu()); eqNullable(deleteWrapper, LimsHuanjingJianceJiluZixiangEntity::getWeizhiBianhao, target.getWeizhiBianhao()); eqNullable(deleteWrapper, LimsHuanjingJianceJiluZixiangEntity::getJiejingJibie, target.getJiejingJibie()); deleteWrapper.and(item -> item.isNull(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark, 1)); deleteWrapper.set(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark, 1); int affected = jiluZixiangMapper.update(null, deleteWrapper); if (affected > 0 && !hasActiveJiluZixiang(target.getForeignId())) { disableJilu(target.getForeignId()); } return affected; } private String getKanbanZixiangGroupKey(LimsHuanjingJianceJiluZixiangEntity zixiang) { return normalizeKeyPart(zixiang.getForeignId()) + "|" + normalizeKeyPart(zixiang.getJianceQuyu()) + "|" + normalizeKeyPart(zixiang.getWeizhiBianhao()) + "|" + normalizeKeyPart(zixiang.getJiejingJibie()); } private String normalizeKeyPart(String value) { return value == null ? "" : value; } private void eqNullable( LambdaUpdateWrapper wrapper, SFunction column, String value) { if (value == null) { wrapper.isNull(column); } else { wrapper.eq(column, value); } } private boolean hasActiveJiluZixiang(String jiluId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluZixiangEntity::getForeignId, jiluId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark, 1)); return jiluZixiangMapper.selectCount(wrapper) > 0; } private int disableJilu(String jiluId) { LimsHuanjingJianceJiluEntity update = new LimsHuanjingJianceJiluEntity(); update.setBizStatus(STATUS_DISABLED); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluEntity::getId, jiluId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); return baseMapper.update(update, wrapper); } @Override @Transactional(rollbackFor = Exception.class) @AuditLog(action = "ENABLE", label = "启用环境监测计划", bizType = "HUANJING_JIANCE", bizCodeExpr = "#result > 0 ? #flowId : ''", targetTable = "lims_huanjing_jiance_jihua", targetIdExpr = "T(jnpf.limsService.support.LimsAuditTargetIds).huanjingJihuaByFlow(#flowId, #taskId)", diff = true, entityClass = LimsHuanjingJianceJihuaEntity.class) public int acceptJianceJihua(String flowId, String taskId) { LimsHuanjingJianceJihuaEntity jihua = getJianceJihua(flowId, taskId); if (jihua == null) { return 0; } int updated = updateJianceJihuaStatus(flowId, taskId, STATUS_ENABLED); if (updated <= 0) { return 0; } if (!hasGeneratedJilu(jihua.getId())) { generateJiluAndZixiang(jihua); } else { syncJiancePinciToJilu(jihua); generateJiluZixiangByJihuaId(jihua.getId()); } return updated; } @Override @Transactional(rollbackFor = Exception.class) @AuditLog(action = "TERMINATE", label = "终止环境监测计划", bizType = "HUANJING_JIANCE", bizCodeExpr = "#result > 0 ? #flowId : ''", targetTable = "lims_huanjing_jiance_jihua", targetIdExpr = "T(jnpf.limsService.support.LimsAuditTargetIds).huanjingJihuaByTerminateFlow(#flowId, #taskId)", diff = true, entityClass = LimsHuanjingJianceJihuaEntity.class) public int terminateJianceJihua(String flowId, String taskId) { LimsHuanjingJianceJihuaZhongzhiEntity zhongzhi = getJihuaZhongzhi(flowId, taskId); if (zhongzhi == null || !StringUtils.hasText(zhongzhi.getJihuaId())) { return 0; } LimsHuanjingJianceJihuaEntity jihuaUpdate = new LimsHuanjingJianceJihuaEntity(); jihuaUpdate.setZhongzhiYuanyin(zhongzhi.getZhongzhiYuanyin()); jihuaUpdate.setZhongzhiRen(zhongzhi.getZhongzhiRen()); jihuaUpdate.setZhongzhiRiqi(zhongzhi.getZhongzhiRiqi()); jihuaUpdate.setZhongzhiPizhunRen(zhongzhi.getZhongzhiPizhunRen()); jihuaUpdate.setZhongzhiPizhunRiqi(zhongzhi.getZhongzhiPizhunRiqi()); jihuaUpdate.setBizStatus(STATUS_DISABLED); LambdaQueryWrapper jihuaWrapper = new LambdaQueryWrapper<>(); jihuaWrapper.eq(LimsHuanjingJianceJihuaEntity::getId, zhongzhi.getJihuaId()); jihuaWrapper.and(item -> item.isNull(LimsHuanjingJianceJihuaEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJihuaEntity::getDeleteMark, 1)); int updated = jihuaMapper.update(jihuaUpdate, jihuaWrapper); if (updated <= 0) { return 0; } disableEnabledJilu(zhongzhi.getJihuaId()); return updated; } @Override @Transactional(rollbackFor = Exception.class) @AuditLog(action = "SAMPLE", label = "环境监测记录取样", bizType = "HUANJING_JIANCE", bizCodeExpr = "#result > 0 ? #jiluId : ''", targetTable = "lims_huanjing_jiance_jilu", targetIdExpr = "#jiluId", diff = true, entityClass = LimsHuanjingJianceJiluEntity.class) public int quyangJilu(String jiluId, String bizSign) { UserInfo userInfo = UserProvider.getUser(); if (userInfo == null || !StringUtils.hasText(userInfo.getUserId())) { throw new DataException("当前未登录"); } LimsHuanjingJianceJiluEntity jilu = findJiluById(jiluId); if (jilu == null) { return 0; } Date quyangRiqi = new Date(); LimsHuanjingJianceJiluEntity update = new LimsHuanjingJianceJiluEntity(); update.setBizStatus(STATUS_RECEIVED); update.setQuyangRen(userInfo.getUserId()); update.setQuyangRiqi(quyangRiqi); update.setQuyangRenSign(bizSign); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluEntity::getId, jiluId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); int updated = baseMapper.update(update, wrapper); if (updated > 0) { updateJiluZixiangQuyangInfo(jiluId, userInfo.getUserId(), quyangRiqi); } return updated; } @Override @Transactional(rollbackFor = Exception.class) @AuditLog(action = "SAMPLE_TERMINATE", label = "环境监测记录终止取样", bizType = "HUANJING_JIANCE", bizCodeExpr = "#result > 0 ? #jiluId : ''", targetTable = "lims_huanjing_jiance_jilu", targetIdExpr = "#jiluId", diff = true, entityClass = LimsHuanjingJianceJiluEntity.class) public int terminateQuyangJilu(String jiluId, String bizSign) { UserInfo userInfo = UserProvider.getUser(); if (userInfo == null || !StringUtils.hasText(userInfo.getUserId())) { throw new DataException("当前未登录"); } LimsHuanjingJianceJiluEntity update = new LimsHuanjingJianceJiluEntity(); update.setBizStatus(STATUS_DISABLED); update.setZhongzhiQuyangRen(userInfo.getUserId()); update.setZhongzhiQuyangRiqi(new Date()); update.setZhongzhiQuyangRenSign(bizSign); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluEntity::getId, jiluId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); return baseMapper.update(update, wrapper); } @Override @Transactional(rollbackFor = Exception.class) @AuditLog(action = "REPORT_ACTION", label = "环境监测报告操作", bizType = "HUANJING_JIANCE", bizCodeExpr = "#result > 0 ? #flowId : ''", targetTable = "lims_huanjing_jiance_baogao", targetIdExpr = "T(jnpf.limsService.support.LimsAuditTargetIds).huanjingBaogaoByFlow(#flowId, #taskId)", extraExpr = "{'action': #action}", diff = true, entityClass = LimsHuanjingJianceBaogaoEntity.class) public int baogaoAction(String flowId, String taskId, String action) { LimsHuanjingJianceBaogaoEntity baogao = getBaogao(flowId, taskId); if (baogao == null) { return 0; } String status; if (ACTION_SUBMIT.equals(action)) { status = STATUS_PENDING_AUDIT; } else if (ACTION_ACCEPT.equals(action)) { status = STATUS_AUDITED; } else if (ACTION_REJECT.equals(action)) { status = STATUS_RECEIVED; } else { throw new DataException("不支持的操作: " + action); } int updated = updateBaogaoStatus(baogao.getId(), status); if (updated <= 0) { return 0; } if (ACTION_SUBMIT.equals(action)) { syncBaogaoZixiangFromBaogao(baogao); } if (updateJiluByBaogaoAction(baogao, action, status) <= 0) { throw new DataException("环境监测记录数据不存在"); } return updated; } private Map getQuyuMap(Set quyuIds) { if (quyuIds == null || quyuIds.isEmpty()) { return Collections.emptyMap(); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.select(LimsHuanjingQuyuEntity::getId, LimsHuanjingQuyuEntity::getJianceQuyu); wrapper.in(LimsHuanjingQuyuEntity::getId, quyuIds); wrapper.and(item -> item.isNull(LimsHuanjingQuyuEntity::getDeleteMark) .or().ne(LimsHuanjingQuyuEntity::getDeleteMark, 1)); Map result = new LinkedHashMap<>(); for (LimsHuanjingQuyuEntity entity : quyuMapper.selectList(wrapper)) { result.put(entity.getId(), entity.getJianceQuyu()); } return result; } private LimsHuanjingJianceJihuaEntity getJianceJihua(String flowId, String taskId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJihuaEntity::getFlowId, flowId); wrapper.eq(LimsHuanjingJianceJihuaEntity::getFlowTaskId, taskId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJihuaEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJihuaEntity::getDeleteMark, 1)); wrapper.orderByDesc(LimsHuanjingJianceJihuaEntity::getId); List list = jihuaMapper.selectList(wrapper); return list.isEmpty() ? null : list.get(0); } private LimsHuanjingJianceBaogaoEntity getBaogao(String flowId, String taskId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceBaogaoEntity::getFlowId, flowId); wrapper.eq(LimsHuanjingJianceBaogaoEntity::getFlowTaskId, taskId); wrapper.and(item -> item.isNull(LimsHuanjingJianceBaogaoEntity::getDeleteMark) .or().ne(LimsHuanjingJianceBaogaoEntity::getDeleteMark, 1)); wrapper.orderByDesc(LimsHuanjingJianceBaogaoEntity::getId); List list = baogaoMapper.selectList(wrapper); return list.isEmpty() ? null : list.get(0); } private int updateBaogaoStatus(String baogaoId, String status) { LimsHuanjingJianceBaogaoEntity update = new LimsHuanjingJianceBaogaoEntity(); update.setBizStatus(status); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceBaogaoEntity::getId, baogaoId); wrapper.and(item -> item.isNull(LimsHuanjingJianceBaogaoEntity::getDeleteMark) .or().ne(LimsHuanjingJianceBaogaoEntity::getDeleteMark, 1)); return baogaoMapper.update(update, wrapper); } private int syncBaogaoZixiangFromBaogao(LimsHuanjingJianceBaogaoEntity baogao) { if (baogao == null || !StringUtils.hasText(baogao.getId())) { return 0; } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(LimsHuanjingJianceBaogaoZixiangEntity::getForeignId, baogao.getId()); wrapper.and(item -> item.isNull(LimsHuanjingJianceBaogaoZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceBaogaoZixiangEntity::getDeleteMark, 1)); wrapper.set(LimsHuanjingJianceBaogaoZixiangEntity::getJianceQuyu, baogao.getJianceQuyu()); wrapper.set(LimsHuanjingJianceBaogaoZixiangEntity::getJianceXiangmu, baogao.getJianceXiangmu()); return baogaoZixiangMapper.update(null, wrapper); } private int updateJiluByBaogaoAction(LimsHuanjingJianceBaogaoEntity baogao, String action, String status) { if (baogao == null || !StringUtils.hasText(baogao.getJiluId())) { return 0; } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluEntity::getId, baogao.getJiluId()); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); wrapper.set(LimsHuanjingJianceJiluEntity::getBizStatus, status); if (ACTION_SUBMIT.equals(action)) { wrapper.set(LimsHuanjingJianceJiluEntity::getBaogaoId, baogao.getId()); wrapper.set(LimsHuanjingJianceJiluEntity::getJianceRen, baogao.getJianceRen()); wrapper.set(LimsHuanjingJianceJiluEntity::getJianceRiqi, baogao.getJianceRiqi()); wrapper.set(LimsHuanjingJianceJiluEntity::getBiaozhunGuiding, baogao.getBiaozhunGuiding()); } else if (ACTION_ACCEPT.equals(action)) { wrapper.set(LimsHuanjingJianceJiluEntity::getFuheRen, baogao.getFuheRen()); wrapper.set(LimsHuanjingJianceJiluEntity::getFuheRiqi, baogao.getFuheRiqi()); } return baseMapper.update(null, wrapper); } @Override public LimsHuanjingJianceJiluEntity findJiluById(String jiluId) { if (!StringUtils.hasText(jiluId)) { return null; } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluEntity::getId, jiluId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); List list = baseMapper.selectList(wrapper); return list.isEmpty() ? null : list.get(0); } private void generateJiluZixiang(LimsHuanjingJianceJiluEntity jilu) { if (jilu == null || !StringUtils.hasText(jilu.getId()) || !StringUtils.hasText(jilu.getJihuaId()) || !StringUtils.hasText(jilu.getJianceXiangmu())) { return; } if (hasJiluZixiang(jilu.getId())) { return; } LimsHuanjingJianceJihuaEntity jihua = getJianceJihuaById(jilu.getJihuaId()); if (jihua == null) { return; } List jihuaZixiangList = listMatchedJihuaZixiang(jilu.getJihuaId(), jilu.getJianceXiangmu()); if (jihuaZixiangList.isEmpty()) { return; } Map> quyangdianMap = listQuyangdianMap(jihuaZixiangList); if (quyangdianMap.isEmpty()) { return; } List insertList = new ArrayList<>(); for (LimsHuanjingJianceJihuaZixiangEntity jihuaZixiang : jihuaZixiangList) { List quyangdianList = quyangdianMap.get(jihuaZixiang.getCaiyangdianId()); if (quyangdianList == null || quyangdianList.isEmpty()) { continue; } for (LimsHuanjingCaiyangdianZixiangEntity quyangdian : quyangdianList) { insertList.add(buildJiluZixiang(jilu, jihua, jihuaZixiang, quyangdian)); } } for (LimsHuanjingJianceJiluZixiangEntity entity : insertList) { jiluZixiangMapper.insert(entity); } } private void updateJiluZixiangQuyangInfo(String jiluId, String quyangRen, Date quyangRiqi) { LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluZixiangEntity::getForeignId, jiluId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark, 1)); wrapper.set(LimsHuanjingJianceJiluZixiangEntity::getQuyangRen, quyangRen); wrapper.set(LimsHuanjingJianceJiluZixiangEntity::getQuyangRiqi, quyangRiqi); jiluZixiangMapper.update(null, wrapper); } private boolean hasJiluZixiang(String jiluId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluZixiangEntity::getForeignId, jiluId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluZixiangEntity::getDeleteMark, 1)); return jiluZixiangMapper.selectCount(wrapper) > 0; } private LimsHuanjingJianceJihuaEntity getJianceJihuaById(String jihuaId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJihuaEntity::getId, jihuaId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJihuaEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJihuaEntity::getDeleteMark, 1)); List list = jihuaMapper.selectList(wrapper); return list.isEmpty() ? null : list.get(0); } private List listMatchedJihuaZixiang(String jihuaId, String jianceXiangmu) { String targetJianceXiangmu = jianceXiangmu.trim(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJihuaZixiangEntity::getForeignId, jihuaId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJihuaZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJihuaZixiangEntity::getDeleteMark, 1)); wrapper.orderByAsc(LimsHuanjingJianceJihuaZixiangEntity::getId); List result = new ArrayList<>(); for (LimsHuanjingJianceJihuaZixiangEntity zixiang : jihuaZixiangMapper.selectList(wrapper)) { if (parseJianceXiangmu(zixiang.getJianceXiangmu()).contains(targetJianceXiangmu) && StringUtils.hasText(zixiang.getCaiyangdianId())) { result.add(zixiang); } } return result; } private Map> listQuyangdianMap( List jihuaZixiangList) { Set caiyangdianIds = new LinkedHashSet<>(); for (LimsHuanjingJianceJihuaZixiangEntity zixiang : jihuaZixiangList) { if (StringUtils.hasText(zixiang.getCaiyangdianId())) { caiyangdianIds.add(zixiang.getCaiyangdianId()); } } if (caiyangdianIds.isEmpty()) { return Collections.emptyMap(); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(LimsHuanjingCaiyangdianZixiangEntity::getForeignId, caiyangdianIds); wrapper.and(item -> item.isNull(LimsHuanjingCaiyangdianZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingCaiyangdianZixiangEntity::getDeleteMark, 1)); wrapper.orderByAsc( LimsHuanjingCaiyangdianZixiangEntity::getForeignId, LimsHuanjingCaiyangdianZixiangEntity::getId); Map> result = new LinkedHashMap<>(); for (LimsHuanjingCaiyangdianZixiangEntity quyangdian : caiyangdianZixiangMapper.selectList(wrapper)) { if (!StringUtils.hasText(quyangdian.getForeignId())) { continue; } if (!result.containsKey(quyangdian.getForeignId())) { result.put(quyangdian.getForeignId(), new ArrayList<>()); } result.get(quyangdian.getForeignId()).add(quyangdian); } return result; } private LimsHuanjingJianceJiluZixiangEntity buildJiluZixiang(LimsHuanjingJianceJiluEntity jilu, LimsHuanjingJianceJihuaEntity jihua, LimsHuanjingJianceJihuaZixiangEntity jihuaZixiang, LimsHuanjingCaiyangdianZixiangEntity quyangdian) { LimsHuanjingJianceJiluZixiangEntity entity = new LimsHuanjingJianceJiluZixiangEntity(); entity.setId(RandomUtil.uuId()); entity.setForeignId(jilu.getId()); entity.setTenantId(getTenantId(jilu.getTenantId(), jihua.getTenantId())); entity.setWeizhiBianhao(jihuaZixiang.getWeizhiBianhao()); entity.setWeizhiMingcheng(jihuaZixiang.getWeizhiMingcheng()); entity.setJianceXiangmu(jilu.getJianceXiangmu()); entity.setJiluId(jilu.getId()); entity.setQuyangdianId(quyangdian.getId()); entity.setQuyangdianMingcheng(quyangdian.getQuyangdianMingcheng()); entity.setJianceQuyu(jihua.getJianceQuyu()); entity.setJiejingJibie(jihua.getJiejingJibie()); entity.setQuyangRen(jilu.getQuyangRen()); entity.setQuyangRiqi(jilu.getQuyangRiqi()); return entity; } private String getTenantId(String first, String second) { if (StringUtils.hasText(first)) { return first; } if (StringUtils.hasText(second)) { return second; } return "0"; } private int updateJianceJihuaStatus(String flowId, String taskId, String status) { LimsHuanjingJianceJihuaEntity update = new LimsHuanjingJianceJihuaEntity(); update.setBizStatus(status); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJihuaEntity::getFlowId, flowId); wrapper.eq(LimsHuanjingJianceJihuaEntity::getFlowTaskId, taskId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJihuaEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJihuaEntity::getDeleteMark, 1)); return jihuaMapper.update(update, wrapper); } private LimsHuanjingJianceJihuaZhongzhiEntity getJihuaZhongzhi(String flowId, String taskId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJihuaZhongzhiEntity::getFlowId, flowId); wrapper.eq(LimsHuanjingJianceJihuaZhongzhiEntity::getFlowTaskId, taskId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJihuaZhongzhiEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJihuaZhongzhiEntity::getDeleteMark, 1)); wrapper.orderByDesc(LimsHuanjingJianceJihuaZhongzhiEntity::getId); List list = jihuaZhongzhiMapper.selectList(wrapper); return list.isEmpty() ? null : list.get(0); } private boolean hasGeneratedJilu(String jihuaId) { if (!StringUtils.hasText(jihuaId)) { return false; } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluEntity::getJihuaId, jihuaId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); return baseMapper.selectCount(wrapper) > 0; } private void generateJiluAndZixiang(LimsHuanjingJianceJihuaEntity jihua) { List jianceXiangmuList = getJianceXiangmuUnion(jihua.getId()); List jihuaRiqiList = buildJihuaRiqiList(jihua); if (jianceXiangmuList.isEmpty() || jihuaRiqiList.isEmpty()) { return; } List jiluList = new ArrayList<>(); for (String jianceXiangmu : jianceXiangmuList) { for (Date jihuaRiqi : jihuaRiqiList) { jiluList.add(buildJilu(jihua, jianceXiangmu, jihuaRiqi)); } } saveBatch(jiluList); for (LimsHuanjingJianceJiluEntity jilu : jiluList) { generateJiluZixiang(jilu); } } private void generateJiluZixiangByJihuaId(String jihuaId) { if (!StringUtils.hasText(jihuaId)) { return; } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluEntity::getJihuaId, jihuaId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); wrapper.orderByAsc(LimsHuanjingJianceJiluEntity::getId); for (LimsHuanjingJianceJiluEntity jilu : baseMapper.selectList(wrapper)) { generateJiluZixiang(jilu); } } private List getJianceXiangmuUnion(String jihuaId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.select(LimsHuanjingJianceJihuaZixiangEntity::getJianceXiangmu); wrapper.eq(LimsHuanjingJianceJihuaZixiangEntity::getForeignId, jihuaId); wrapper.and(item -> item.isNull(LimsHuanjingJianceJihuaZixiangEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJihuaZixiangEntity::getDeleteMark, 1)); wrapper.orderByAsc(LimsHuanjingJianceJihuaZixiangEntity::getId); Set result = new LinkedHashSet<>(); for (LimsHuanjingJianceJihuaZixiangEntity zixiang : jihuaZixiangMapper.selectList(wrapper)) { result.addAll(parseJianceXiangmu(zixiang.getJianceXiangmu())); } return new ArrayList<>(result); } private List parseJianceXiangmu(String raw) { if (!StringUtils.hasText(raw)) { return Collections.emptyList(); } String value = raw.trim(); try { List list = JsonUtil.getJsonToList(value, String.class); if (list == null) { return Collections.emptyList(); } return trimNonEmptyItems(list); } catch (Exception ignored) { List items = new ArrayList<>(); Collections.addAll(items, value.split(",")); return trimNonEmptyItems(items); } } private List trimNonEmptyItems(List items) { List result = new ArrayList<>(); for (String item : items) { if (StringUtils.hasText(item)) { result.add(item.trim()); } } return result; } private List buildJihuaRiqiList(LimsHuanjingJianceJihuaEntity jihua) { Date start = jihua.getJihuaRiqi(); if (start == null) { return Collections.emptyList(); } if (PLAN_TYPE_TEMPORARY.equals(jihua.getJihuaLeixing())) { return Collections.singletonList(start); } if (!PLAN_TYPE_YEARLY.equals(jihua.getJihuaLeixing())) { return Collections.emptyList(); } LocalDateTime current = LocalDateTime.ofInstant(start.toInstant(), ZoneId.systemDefault()); LocalDateTime endExclusive = current.plusYears(1); List result = new ArrayList<>(); while (current.isBefore(endExclusive)) { result.add(Date.from(current.atZone(ZoneId.systemDefault()).toInstant())); LocalDateTime next = nextJihuaRiqi(current, jihua.getJiancePinci()); if (next == null) { return Collections.emptyList(); } current = next; } return result; } private LocalDateTime nextJihuaRiqi(LocalDateTime current, String jiancePinci) { if ("weekly".equals(jiancePinci)) { return current.plusWeeks(1); } if ("monthly".equals(jiancePinci)) { return current.plusMonths(1); } if ("bimonthly".equals(jiancePinci)) { return current.plusMonths(2); } if ("quarterly".equals(jiancePinci)) { return current.plusMonths(3); } if ("semiannual".equals(jiancePinci)) { return current.plusMonths(6); } if ("annual".equals(jiancePinci)) { return current.plusYears(1); } return null; } private LimsHuanjingJianceJiluEntity buildJilu(LimsHuanjingJianceJihuaEntity jihua, String jianceXiangmu, Date jihuaRiqi) { LimsHuanjingJianceJiluEntity jilu = new LimsHuanjingJianceJiluEntity(); jilu.setId(RandomUtil.uuId()); jilu.setTenantId(StringUtils.hasText(jihua.getTenantId()) ? jihua.getTenantId() : "0"); jilu.setJihuaId(jihua.getId()); jilu.setJihuaMingcheng(jihua.getJihuaMingcheng()); jilu.setJihuaRiqi(jihuaRiqi); jilu.setJihuaLeixing(jihua.getJihuaLeixing()); jilu.setJiejingJibie(jihua.getJiejingJibie()); jilu.setJianceQuyu(jihua.getJianceQuyu()); jilu.setJianceZhuangtai(jihua.getJianceZhuangtai()); jilu.setJianceXiangmu(jianceXiangmu); jilu.setJiancePinci(jihua.getJiancePinci()); jilu.setBizStatus(STATUS_ENABLED); return jilu; } private void syncJiancePinciToJilu(LimsHuanjingJianceJihuaEntity jihua) { if (jihua == null || !StringUtils.hasText(jihua.getId())) { return; } LimsHuanjingJianceJiluEntity update = new LimsHuanjingJianceJiluEntity(); update.setJiancePinci(jihua.getJiancePinci()); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluEntity::getJihuaId, jihua.getId()); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); baseMapper.update(update, wrapper); } private void disableEnabledJilu(String jihuaId) { LimsHuanjingJianceJiluEntity update = new LimsHuanjingJianceJiluEntity(); update.setBizStatus(STATUS_DISABLED); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(LimsHuanjingJianceJiluEntity::getJihuaId, jihuaId); wrapper.eq(LimsHuanjingJianceJiluEntity::getBizStatus, STATUS_ENABLED); wrapper.and(item -> item.isNull(LimsHuanjingJianceJiluEntity::getDeleteMark) .or().ne(LimsHuanjingJianceJiluEntity::getDeleteMark, 1)); baseMapper.update(update, wrapper); } }