Prechádzať zdrojové kódy

安全生产目标定时任务(按季度生成指标的考核结果)增加唯一性判断及过滤

sucheng 1 rok pred
rodič
commit
b8e54b4a9f

+ 16 - 2
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspSafetyProductObjectiveServiceImpl.java

@@ -2,6 +2,7 @@ package com.rongwei.sfcommon.sys.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwe.scentity.domian.AspSafetyProductObjective;
@@ -37,12 +38,25 @@ public class AspSafetyProductObjectiveServiceImpl extends ServiceImpl<AspSafetyP
     @Override
     public void safetyResult() {
         //==============查询所有需要生成的目标
-        //查询今年的所有目标数据
-        List<AspSafetyProductObjective> aspSafetyProductObjectives = this.baseMapper.selectList(new QueryWrapper<AspSafetyProductObjective>().lambda().like(AspSafetyProductObjective::getYear, DateUtil.thisYear()));
         //获取当前季度(1,2,3,4)
         int quarter = DateUtil.quarter(DateUtil.date());
+        //查询考核主表今年、当前季度,是否有已经生成的数据
+        List<AspSafetyProductObjectiveResult> aspSafetyProductObjectiveResults = objectiveResultService.getBaseMapper().selectList(new QueryWrapper<AspSafetyProductObjectiveResult>().lambda()
+                .like(AspSafetyProductObjectiveResult::getYear, DateUtil.thisYear())
+                .eq(AspSafetyProductObjectiveResult::getQuerter, quarter));
+        //获取mainID
+        List<String> hadMainIDList = aspSafetyProductObjectiveResults.stream().map(AspSafetyProductObjectiveResult::getMainid).collect(Collectors.toList());
+
+        //查询今年的所有目标数据
+        List<AspSafetyProductObjective> aspSafetyProductObjectiveList = this.baseMapper.selectList(new QueryWrapper<AspSafetyProductObjective>().lambda().like(AspSafetyProductObjective::getYear, DateUtil.thisYear()));
+        //过滤掉已经生成考核的数据
+        List<AspSafetyProductObjective> aspSafetyProductObjectives = aspSafetyProductObjectiveList.stream().filter(item -> !hadMainIDList.contains(item.getId())).collect(Collectors.toList());
+
         //遍历目标获取所有目标的ID集合
         List<String> collectIds = aspSafetyProductObjectives.stream().map(AspSafetyProductObjective::getId).collect(Collectors.toList());
+        if (ObjectUtil.isEmpty(collectIds)){
+            return;
+        }
         //查询出所有目标的子表数据
         List<AspSafetyProductObjectiveScoreDetail> scoreDetails = scoreDetailService.getBaseMapper().selectList(new QueryWrapper<AspSafetyProductObjectiveScoreDetail>().lambda().in(AspSafetyProductObjectiveScoreDetail::getMainid, collectIds));