//package com.yeejoin.amos.boot.module.jxiop.biz.service.impl;
//
//import com.alibaba.fastjson.JSON;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
//import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
//import com.yeejoin.amos.boot.biz.common.feign.AmosFeignService;
//import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
//import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
//import com.yeejoin.amos.boot.module.jxiop.api.Enum.QrcodeColorEnum;
//import com.yeejoin.amos.boot.module.jxiop.api.dto.BizMessage;
//import com.yeejoin.amos.boot.module.jxiop.api.dto.RiskBizInfoVo;
//import com.yeejoin.amos.boot.module.jxiop.api.entity.PersonAccount;
//import com.yeejoin.amos.boot.module.jxiop.api.entity.PersonBasic;
//import com.yeejoin.amos.boot.module.jxiop.api.entity.PersonCertificate;
//import com.yeejoin.amos.boot.module.jxiop.api.entity.StationQrCodeStatistics;
//import com.yeejoin.amos.boot.module.jxiop.api.mapper.PersonAccountMapper;
//import com.yeejoin.amos.boot.module.jxiop.api.mapper.PersonBasicMapper;
//import com.yeejoin.amos.boot.module.jxiop.api.mapper.PersonCertificateMapper;
//import com.yeejoin.amos.boot.module.jxiop.api.mapper.StationQrCodeStatisticsMapper;
//import com.yeejoin.amos.boot.module.jxiop.api.util.Constants;
//import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.eclipse.paho.client.mqttv3.MqttException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//import org.typroject.tyboot.component.emq.EmqKeeper;
//
//import java.nio.charset.StandardCharsets;
//import java.text.ParseException;
//import java.util.*;
//import java.util.stream.Collectors;
//
//@Slf4j
//@Component
//public class PersonYardTimeTask {
//
//    @Autowired
//    PersonBasicMapper personBasicMapper;
//
//    @Autowired
//    PersonBasicServiceImpl personBasicService;
//
//    //人员资质信息service
//    @Autowired
//    PersonCertificateMapper personCertificateMapper;
//
//    @Autowired
//    private AmosFeignService amosFeignService;
//
//    @Autowired
//    private RedisUtils redisUtils;
//
//    @Autowired
//    private PersonAccountMapper personAccountMapper;
//
//    @Autowired
//    protected EmqKeeper emqKeeper;
//
//    @Autowired
//    private StationQrCodeStatisticsMapper stationQrCodeStatisticsMapper;
//
//    @Autowired
//    private StationQrCodeStatisticsServiceImpl stationQrCodeStatisticsService;
//
//
//
////    @Scheduled(cron = "0 0 0 1/1 * ? ")
//// 已迁移至大屏服务
//    public void timeYardTimeTask() {
//        if (!redisUtils.hasKey(Constants.JXIOP_DICT_POST) || !redisUtils.hasKey(Constants.JXIOP_DICT_CERTIFICATES)) {
//            personBasicService.addRedisPostAndCerInfo();
//        }
//        // 岗位所需证书信息
//        Map<String, String> postNameMap = (Map<String, String>) redisUtils.get(Constants.JXIOP_DICT_POST);
//        // 证书临期信息
//        Map<String, String> certificatesMap = (Map<String, String>) redisUtils.get(Constants.JXIOP_DICT_CERTIFICATES);
//        List<PersonBasic> personBasicList = personBasicMapper.selectList(null);
//
//        List<PersonCertificate> personCertificates = personCertificateMapper.selectList(null);
//
//        List<PersonAccount> personAccounts = personAccountMapper.selectList(null);
//        Map<Long, PersonAccount> personAccountMap = personAccounts.stream().collect(Collectors.toMap(PersonAccount::getPersonId, t -> t));
//        Map<Long, List<PersonCertificate>> perCertificateMap = personCertificates.stream().filter(item -> ObjectUtils.isNotEmpty(item.getPersonId())).collect(Collectors.groupingBy(PersonCertificate::getPersonId));
//
//        List<PersonBasic> personBasics = new ArrayList<>();
//        personBasicList.forEach(personBasic -> {
//            PersonAccount personAccount = personAccountMap.get(personBasic.getSequenceNbr());
//
//            List<PersonCertificate> personCertificateList = perCertificateMap.get(personBasic.getSequenceNbr());
//            //默认红码
//            personBasic.setQrcodeColor(QrcodeColorEnum.RED.getCode());
//            // 该岗位应获得的证书
//            List<String> list2 = new ArrayList<>();
//            if (StringUtils.isNotEmpty(personBasic.getPostName())) {
//                String certificates = String.valueOf(postNameMap.get(personBasic.getPostName()));
//                if (!StringUtils.isEmpty(certificates)) {
//                    list2 = Arrays.asList(certificates.split(","));
//                }
//            }
//            List<String> list = new ArrayList(list2);
//            //人员资质信息
//            Integer isInMonth = 0;
//            Integer isOver = 0;
//
//            if (CollectionUtils.isNotEmpty(personCertificateList)) {
//                for (PersonCertificate item : personCertificateList) {
//                    int validPeriod = StringUtils.isEmpty(item.getValidPeriod()) ? 3 : Integer.parseInt(item.getValidPeriod());
//                    Date date = DateUtils.dateAddYears(item.getCertificateTime(), validPeriod);
//                    if (list.contains(item.getCertificateName()) &&
//                            DateUtils.dateCompare(date, new Date()) == -1) {
//                        isOver = 1;
//                    }
//                    try {
//                        if (list.contains(item.getCertificateName()) &&
//                                DateUtils.dateBetweenIncludeToday(new Date(), date) < Integer.valueOf(certificatesMap.get(item.getCertificateName())) &&
//                                DateUtils.dateCompare(date, new Date()) == 1) {
//                            isInMonth = 1;
//                        }
//                    } catch (ParseException e) {
//                        e.printStackTrace();
//                    }
//                    list.remove(item.getCertificateName());
//                }
//            }
//            String qrcodeDescOld = personBasic.getQrcodeDesc();
//            String qrcodeColorOld = personBasic.getQrcodeColor();
//            if (CollectionUtils.isEmpty(list) && isInMonth == 0 && isOver == 0) {
//                personBasic.setQrcodeColor(QrcodeColorEnum.GREEN.getCode());
//                personBasic.setQrcodeDesc("证书齐全");
//            } else if (CollectionUtils.isEmpty(list) && isOver == 1) {
//                personBasic.setQrcodeDesc("证书不全");
//            } else if (CollectionUtils.isEmpty(list) && isOver == 0 && isInMonth == 1) {
//                personBasic.setQrcodeDesc("证书临期");
//            }
//
//            if (!qrcodeDescOld.equals(personBasic.getQrcodeDesc())) {
//                personBasic.setRecDate(new Date());
//                personBasicService.updateById(personBasic);
//                if (("证书不全".equals(personBasic.getQrcodeDesc()) ||
//                        "证书临期".equals(personBasic.getQrcodeDesc()))) {
//                    BizMessage bizMessage = new BizMessage();
//                    bizMessage.setIndexKey("RYFM");
//                    bizMessage.setIndexValue(personBasic.getPostName() + personBasic.getQrcodeDesc());
//                    RiskBizInfoVo riskBizInfoVo = personBasicService.fetchData(personBasic, personAccount);
//                    bizMessage.setBizInfo(riskBizInfoVo);
//                    try {
//                        emqKeeper.getMqttClient().publish(PersonBasicServiceImpl.RYFM_DATA_MQTT_TOPIC, JSON.toJSONString(bizMessage).getBytes(StandardCharsets.UTF_8), 2, false);
//                    } catch (MqttException e) {
//                        e.printStackTrace();
//                    }
//                }
//            } else if ("证书齐全".equals(personBasic.getQrcodeDesc())) {
//                HashMap<String, String> personMap = new HashMap<>();
//                personMap.put("objectId", String.valueOf(personBasic.getSequenceNbr()));
//                personMap.put("qrCodeColor", qrcodeColorOld);
//                personMap.put("warningObjectType", "RYFM");
//                personMap.put("sourceAttribution", personBasic.getProjectOrgCode());
//                personMap.put("sourceAttributionDesc", personAccount.getProjectName());
//                try {
//                    emqKeeper.getMqttClient().publish(PersonBasicServiceImpl.RYFM_GREEN, JSON.toJSONString(personMap).getBytes(StandardCharsets.UTF_8), 2, false);
//                } catch (MqttException e) {
//                    e.printStackTrace();
//                }
//            }
//        });
//    }
//
//
////    @Scheduled(cron = "0 55 23 1/1 * ? ")
////    @Scheduled(cron = "0 0/30 * * * ? ")
//    // 已迁移至大屏服务
//    public void stationQrCodeStatisticsData() {
//        LambdaQueryWrapper<StationQrCodeStatistics> qw = new LambdaQueryWrapper<>();
//        qw.eq(StationQrCodeStatistics::getRecordDate, DateUtils.getDateNowShortStr());
//        Integer integer = stationQrCodeStatisticsMapper.selectCount(qw);
//        if (integer <= 0) {
//            List<StationQrCodeStatistics> personStatistics = personBasicMapper.getPersonStatistics();
//            stationQrCodeStatisticsService.saveBatch(personStatistics);
//        }
//    }
//
//
//}
