SignReportServerImpl.java 6.07 KB
package com.ruoyi.service.impl;

import cn.hutool.core.convert.Convert;
import com.ruoyi.domain.dss.app.entity.SignReportGroupByDay;
import com.ruoyi.domain.dss.app.vo.SignEquipmentVo;
import com.ruoyi.domain.dss.app.vo.SignReportGroupByVo;
import com.ruoyi.domain.dss.app.vo.SignReportVo;
import com.ruoyi.equipment.domain.Equipment;
import com.ruoyi.equipment.service.IEquipmentService;
import com.ruoyi.mapper.SignReportMappper;
import com.ruoyi.service.SignReportServer;
import com.ruoyi.utils.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;

import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;

@Service
public class SignReportServerImpl implements SignReportServer {
    @Autowired
    private IEquipmentService iEquipmentService;
    @Autowired
    private SignReportMappper signReportMappper;

    @Override
    public SignReportVo querySignReportVo(String dateStr) {
        SignReportVo reportVo = signReportMappper.querySignReport(dateStr);
        List<Equipment> equipmentList = iEquipmentService.list();
        if (CollectionUtils.isNotEmpty(equipmentList)) {
            List<SignEquipmentVo> vos = equipmentList.stream().map(e -> {
                SignEquipmentVo equipmentVo = new SignEquipmentVo();
                equipmentVo.setDeviceId(e.getDeviceId());
                equipmentVo.setStatus(e.getStatus());
                return equipmentVo;
            }).collect(Collectors.toList());

            reportVo.setSignEquipmentVos(vos);
        }
        return reportVo;
    }

    @Override
    public List<SignReportGroupByVo> querySignReportGroupByDateStrVo(String dateStr) throws ParseException {
        //酒驾
        List<SignReportGroupByDay> alcoholList = signReportMappper.querySignReportAlcoholGroupByDay(dateStr);
        List<SignReportGroupByDay> lateSigningList = signReportMappper.querySignReportGroupByDayOfError(dateStr, 30, 39, 33);
        List<SignReportGroupByDay> earlySigningList = signReportMappper.querySignReportGroupByDayOfError(dateStr, 20, 29, 23);
        List<SignReportGroupByDay> normalSigningList = signReportMappper.querySignReportGroupByDayOfError(dateStr, 0, 0, 3);

        int alcoholSize = CollectionUtils.size(alcoholList);
        int lastSignSize = CollectionUtils.size(lateSigningList);
        int earlySignSize = CollectionUtils.size(earlySigningList);
        int normalSignSize = CollectionUtils.size(normalSigningList);

        if (earlySignSize > 0) {
            earlySigningList = earlySigningList.stream().filter(l -> !equals(l, alcoholList, alcoholSize)).collect(Collectors.toList());
            earlySignSize = CollectionUtils.size(earlySigningList);
        }

        int esSize = earlySignSize;
        List<SignReportGroupByDay> esList = earlySigningList;

        if (lastSignSize > 0) {
            lateSigningList = lateSigningList.stream().filter(l -> !equals(l, alcoholList, alcoholSize)).collect(Collectors.toList());
            lateSigningList = lateSigningList.stream().filter(l -> !equals(l, esList, esSize)).collect(Collectors.toList());
            lastSignSize = CollectionUtils.size(lateSigningList);
        }

        int lsSize = lastSignSize;
        List<SignReportGroupByDay> lsList = lateSigningList;
        if (normalSignSize > 0) {
            normalSigningList = normalSigningList.stream().filter(l -> !equals(l, alcoholList, alcoholSize)).collect(Collectors.toList());
            normalSigningList = normalSigningList.stream().filter(l -> !equals(l, esList, esSize)).collect(Collectors.toList());
            normalSigningList = normalSigningList.stream().filter(l -> !equals(l, lsList, lsSize)).collect(Collectors.toList());

            normalSignSize = CollectionUtils.size(normalSigningList);
        }

        String dateStr1 = dateStr + "-01";
        Date date = DateUtil.YYYY_MM_DD_LINK.parse(dateStr1);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        List<SignReportGroupByVo> signReportGroupByVos = new ArrayList<>();
        for (int i = 1; i <= last; i++) {
            if (i < 10) {
                dateStr1 = StringUtils.join(dateStr, "-0", i);
            } else {
                dateStr1 = StringUtils.join(dateStr, "-", i);
            }

            SignReportGroupByVo vo = new SignReportGroupByVo();
            vo.setDateStr(dateStr1);


            if (esSize > 0) {
                long count = esList.stream().filter(el -> Objects.equals(el.getDateStr(), vo.getDateStr())).count();
                vo.setEarlySigning(Convert.toInt(count));
            }

            if (lsSize > 0) {
                long count = lsList.stream().filter(ls -> Objects.equals(ls.getDateStr(), vo.getDateStr())).count();
                vo.setLateSigning(Convert.toInt(count));
            }

            if (alcoholSize > 0) {
                long count = alcoholList.stream().filter(al -> Objects.equals(al.getDateStr(), vo.getDateStr())).count();
                vo.setAlcoholNum(Convert.toInt(count));
            }

            if (normalSignSize > 0) {
                long count = normalSigningList.stream().filter(nl -> Objects.equals(nl.getDateStr(), vo.getDateStr())).count();
                vo.setNormalSigning(Convert.toInt(count));
            }
            signReportGroupByVos.add(vo);

        }

        return signReportGroupByVos;
    }

    @Override
    public List<SignReportGroupByVo> querySignReportGroupMonthByDateStr(Collection<String> dateStrs) {
        if (CollectionUtils.isEmpty(dateStrs)) {
            return Collections.emptyList();
        }
        return signReportMappper.querySignReportAlcoholMonthGroupByDay(dateStrs);
    }

    private boolean equals(SignReportGroupByDay srd, List<SignReportGroupByDay> list, int listSize) {
        if (0 == listSize) {
            return true;
        }
        return list.stream().anyMatch(l -> (Objects.equals(srd.getJobCode(), l.getJobCode()) && Objects.equals(srd.getDateStr(), l.getDateStr())));
    }
}