KQJob.java 15.9 KB
package com.sincere.quartz.job;

import com.sincere.common.dto.smartCampus.*;
import com.sincere.common.util.DateUtils;
import com.sincere.quartz.enums.KqTypeEnums;
import com.sincere.quartz.enums.TypeEnums;
import com.sincere.quartz.feign.ScFeign;
import com.sincere.quartz.mapper.SmsMapper;
import com.sincere.quartz.model.DingSms;
import com.sincere.quartz.model.WeChatSms;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * 考勤任务推送调用
 * 主要推送盯盯以及企业号
 * @author chen
 * @version 1.0
 * @date 2019/11/27 0027 17:05
 */
@Service
public class KQJob {

    private Logger logger = LoggerFactory.getLogger(KQJob.class);

    @Autowired
    ScFeign scFeign ;

    @Autowired
    SmsMapper smsMapper;

    private static String date ;
    private static Map<String , String> map = new HashMap<>();

    @Scheduled(cron = "* 0/1 * * * ?")
    public void kaoQing() {
         String now = DateUtils.date2String(new Date(),DateUtils.format1) ;
        if(StringUtils.isBlank(date)){
            initMap();
            date = now ;
        }
        if(!DateUtils.date2String(new Date(),DateUtils.format1).equals(date)){
            initMap();
            date = DateUtils.date2String(new Date(),DateUtils.format1) ;
        }
        //开始过滤数据  推送
        List<String> keyList = new ArrayList<>();
        for(Map.Entry<String, String> entity : map.entrySet()){
            String endTime = entity.getValue().split("_")[1];
            if(DateUtils.getDateDifference(new Date(),DateUtils.string2Date(now+" "+endTime+":00",DateUtils.format2),"m")>=2
               && DateUtils.getDateDifference(new Date(),DateUtils.string2Date(now+" "+endTime+":00",DateUtils.format2),"m") < 5 ){
                String key = entity.getKey();
                String[] messageArray = key.split("_");
                if(messageArray[2].contains("5")){
                    logger.info("企业号推送:" + messageArray[0] + "__" + messageArray[1]);
                    weChatBatchPush(messageArray[0],Integer.valueOf(messageArray[1]),entity.getValue());
                }
                if(messageArray[2].contains("4")){
                    logger.info(("盯盯推送:" + messageArray[0] + "__" + messageArray[1]));
                    dingBatchPush(messageArray[0],Integer.valueOf(messageArray[1]),entity.getValue());
                }
                keyList.add(key);
            }
        }
        for(String key : keyList){
            map.remove(key);
        }
    }

    private void initMap(){
        map = new HashMap<>();
        List<TemplateDto> list = scFeign.getAllTemplate();
        logger.info(("------需要推送的考勤模板------"));
        for(TemplateDto templateDto : list){
            String config = templateDto.getConfig();
            String[] array = config.split("<Template");
            for(int i = 1 ; i<array.length ;i++){
                try{
                    String msg = array[i];
                    String beginTime = msg.substring(msg.indexOf("BeginTime")+11,msg.indexOf("BeginTime")+16);
                    String endTime = msg.substring(msg.indexOf("EndTime")+9,msg.indexOf("EndTime")+14);
                    String templateId = msg.substring(msg.indexOf("TemplateID")+12,msg.indexOf("TemplateID")+22);
                    String Week = msg.substring(msg.indexOf("Week")+6,msg.indexOf("Week")+19);
                    String type = msg.substring(msg.indexOf("Type")+6,msg.indexOf("Type")+8);
                    type = type.replace("\"","");
                    int nowWeek = DateUtils.getWeek() ;
                    if(Week.contains(nowWeek+"")){
                        logger.info((templateId+"_"+templateDto.getSchoolId()+templateDto.getType()+"------"+beginTime+"_"+endTime));
                        map.put(templateId+"_"+templateDto.getSchoolId()+"_"+templateDto.getType() , beginTime+"_"+endTime+"_"+type);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }

    private void dingBatchPush(String templateId , int schoolId , String key){
        String[] times = key.split("_");
        AppDto appDto = scFeign.getApp(schoolId,1);
        if(Integer.valueOf(times[2])  < 7){
            //出入校   推班主任
            List<KqTeacherDto> list = scFeign.getTeacherList(schoolId);
            for(KqTeacherDto teacher : list){
                if(teacher.getName().equals("倪任佳")){
                    dingSchoolPush(templateId,teacher,key,appDto);
                }
            }
        }else {
            //出入寝  推班主任
            List<KqTeacherDto> list = scFeign.getTeacherList(schoolId);
            for(KqTeacherDto teacher : list){
                if(teacher.getName().equals("倪任佳")) {
                    dingSchoolPush(templateId,teacher, key, appDto);
                }
            }
            //推宿管
            List<KqTeacherDto> chamberList = scFeign.selectChamberTeacher(schoolId);
            for(KqTeacherDto teacher : chamberList){
                if(teacher.getName().equals("倪任佳")) {
                    dingChamberPush(templateId,teacher, key, appDto);
                }
            }
        }
    }

    private void weChatBatchPush(String templateId , int schoolId , String key){
        String[] times = key.split("_");
        AppDto appDto = scFeign.getApp(schoolId, 0);
        if(Integer.valueOf(times[2])  < 7) {
            //出入校   推班主任
            List<KqTeacherDto> list = scFeign.getTeacherList(schoolId);
            for (KqTeacherDto teacher : list) {
               weChatSchoolPush(templateId,teacher, key, appDto);
            }
        }else {
            //出入寝  推班主任
            List<KqTeacherDto> list = scFeign.getTeacherList(schoolId);
            for (KqTeacherDto teacher : list) {
                weChatSchoolPush(templateId,teacher, key, appDto);
            }
            //推宿管
            List<KqTeacherDto> chamberList = scFeign.selectChamberTeacher(schoolId);
            for(KqTeacherDto teacher : chamberList){
                weChatChamberPush(templateId,teacher, key, appDto);
            }
        }
    }

    private void dingSchoolPush(String templateId ,KqTeacherDto teacher , String key , AppDto appDto){
        String[] times = key.split("_");
        String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format);
        if(StringUtils.isNotBlank(teacher.getDingUserId())){
            KqDto dto = new KqDto();
            dto.setEndTime(times[1]);
            dto.setTemplateId(templateId);
            dto.setType(times[2]);
            dto.setUserId(teacher.getUserId());
            List<CensusKqDto> censusKqDtos = scFeign.getCensusKq(dto);
            if(censusKqDtos != null &&censusKqDtos.size() > 0){
                String message = "";
                for(CensusKqDto censusKqDto : censusKqDtos){
                    int number = censusKqDto.getAllT() - censusKqDto.getKqT() ;
                    message += "[" + censusKqDto.getClassName() + "]未考勤" + number + "人;";
                }
                DingSms dingSms = new DingSms();
                dingSms.setName(teacher.getName());
                dingSms.setTableName("DingSmsNew"+tableSuffix);
                dingSms.setMsg("报告类型:"+KqTypeEnums.getName(Integer.valueOf(times[2])) + "出勤报告 \n - "+
                        "签到日期:"+DateUtils.date2String(new Date(),DateUtils.format1)+ "("+DateUtils.getWeekName()+") \n - "+
                        "签到时间:"+times[0]+"-"+ times[1] +" \n - "+
                        "整体数据:" + message.substring(0,message.length()-1));
                String wapUrl = "http://campus.myjxt.com/studentRecord/znxwwebapp/index.html?" +
                        "schoolid="+teacher.getSchoolId()+"&userId="+teacher.getUserId()+"&name="+teacher.getName()+
                        "&data="+teacher.getDingUserId()+"&type=1&stype=4&mobile="+teacher.getMobile()+"&pass="+teacher.getPass()+
                        "&face=&sourcetype=16&soutype=3&timestamp="+ DateUtils.getDate()+"&time="+DateUtils.date2String(new Date(),DateUtils.format1) ;
                dingSms.setSchoolId(teacher.getSchoolId());
                dingSms.setDingUserId(teacher.getDingUserId());
                dingSms.setAgentId(appDto.getAgentId());
                dingSms.setWapUrl(wapUrl);
                dingSms.setReceiveUserId(teacher.getUserId());
                dingSms.setTdType(TypeEnums.kaoqing.getType());
                smsMapper.insertDing(dingSms);
            }
        }
    }

    private void dingChamberPush(String templateId, KqTeacherDto teacher , String key , AppDto appDto){
        String[] times = key.split("_");
        String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format);
        if(StringUtils.isNotBlank(teacher.getDingUserId())){
            List<CensusKqDto> censusKqDtos ;
            KqDto dto = new KqDto();
            dto.setEndTime(times[1]);
            dto.setTemplateId(templateId);
            dto.setType(times[2]);
            dto.setUserId(teacher.getUserId());
            censusKqDtos = scFeign.selectCensusChamberKq(dto);
            if(censusKqDtos != null &&censusKqDtos.size() > 0){
                String message = "";
                for(CensusKqDto censusKqDto : censusKqDtos){
                    int number = censusKqDto.getAllT() - censusKqDto.getKqT() ;
                    message += "[" + censusKqDto.getClassName() + "]未考勤" + number + "人;";
                }
                DingSms dingSms = new DingSms();
                dingSms.setName(teacher.getName());
                dingSms.setTableName("DingSmsNew"+tableSuffix);
                dingSms.setMsg("报告类型:"+KqTypeEnums.getName(Integer.valueOf(times[2])) + "出勤报告 \n - "+
                        "签到日期:"+DateUtils.date2String(new Date(),DateUtils.format1)+ "("+DateUtils.getWeekName()+") \n - "+
                        "签到时间:"+times[0]+"-"+ times[1] +" \n - "+
                        "整体数据:" + message.substring(0,message.length()-1));
                String msgUrl = "http://campus.myjxt.com/studentRecord/znxwwebapp/index.html?" +
                        "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() +
                        "&pass=" + teacher.getPass() + "&type=4&soutype=3&time="+DateUtils.date2String(new Date(),DateUtils.format1);
                dingSms.setSchoolId(teacher.getSchoolId());
                dingSms.setDingUserId(teacher.getDingUserId());
                dingSms.setAgentId(appDto.getAgentId());
                dingSms.setWapUrl(msgUrl);
                dingSms.setReceiveUserId(teacher.getUserId());
                dingSms.setTdType(TypeEnums.kaoqing.getType());
                smsMapper.insertDing(dingSms);
            }
        }
    }

    private void weChatSchoolPush(String templateId, KqTeacherDto teacher , String key , AppDto appDto){
        String[] times = key.split("_");
        String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format);
        if (StringUtils.isNotBlank(teacher.getOpenId())) {
            KqDto dto = new KqDto();
            dto.setEndTime(times[1]);
            dto.setTemplateId(templateId);
            dto.setType(times[2]);
            dto.setUserId(teacher.getUserId());
            List<CensusKqDto> censusKqDtos = scFeign.getCensusKq(dto);
            if (censusKqDtos != null && censusKqDtos.size() > 0) {
                String message = "";
                for (CensusKqDto censusKqDto : censusKqDtos) {
                    int number = censusKqDto.getAllT() - censusKqDto.getKqT();
                    message += "[" + censusKqDto.getClassName() + "]未考勤" + number + "人;";
                }
                WeChatSms weChatSms = new WeChatSms();
                weChatSms.setTableName("qyhSmsNew" + tableSuffix);
                weChatSms.setMsg("报告类型:" + KqTypeEnums.getName(Integer.valueOf(times[2])) + "出勤报告 \n - " +
                        "签到日期:" + DateUtils.date2String(new Date(), DateUtils.format1) + "(" + DateUtils.getWeekName() + ") \n - " +
                        "签到时间:" + times[0] + "-" + times[1] + " \n - " +
                        "整体数据:" + message.substring(0, message.length() - 1));
                weChatSms.setSchoolId(teacher.getSchoolId());
                weChatSms.setName(teacher.getName());
                weChatSms.setQiYeHaoUserId(teacher.getWeChatUserId());
                weChatSms.setReceiveUserId(teacher.getUserId());
                weChatSms.setAppId(appDto.getAgentId());
                weChatSms.setSecret(appDto.getAgentSecret());
                String msgUrl = "http://campus.myjxt.com/studentRecord/znxwwebapp/index.html?" +
                        "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() +
                        "&data=" + teacher.getWeChatUserId() + "&type=1&stype=3&mobile=" + teacher.getMobile() + "&pass=" + teacher.getPass() +
                        "&face=" + teacher.getFace() + "&sourcetype=16&soutype=2&timestamp=" + DateUtils.getDate()+"&time="+DateUtils.date2String(new Date(),DateUtils.format1);
                weChatSms.setMsgUrl(msgUrl);
                weChatSms.setTdType(TypeEnums.kaoqing.getType());
                smsMapper.insertWeChat(weChatSms);
            }
        }
    }

    private void weChatChamberPush(String templateId, KqTeacherDto teacher , String key , AppDto appDto){
        String[] times = key.split("_");
        String tableSuffix = DateUtils.date2String(new Date(), DateUtils.format);
        if (StringUtils.isNotBlank(teacher.getOpenId())) {
            List<CensusKqDto> censusKqDtos ;
            KqDto dto = new KqDto();
            dto.setEndTime(times[1]);
            dto.setTemplateId(templateId);
            dto.setType(times[2]);
            dto.setUserId(teacher.getUserId());
            censusKqDtos = scFeign.selectCensusChamberKq(dto);
            if (censusKqDtos != null && censusKqDtos.size() > 0) {
                String message = "";
                for (CensusKqDto censusKqDto : censusKqDtos) {
                    int number = censusKqDto.getAllT() - censusKqDto.getKqT();
                    message += "[" + censusKqDto.getClassName() + "]未考勤" + number + "人;";
                }
                WeChatSms weChatSms = new WeChatSms();
                weChatSms.setTableName("qyhSmsNew" + tableSuffix);
                weChatSms.setMsg("报告类型:" + KqTypeEnums.getName(Integer.valueOf(times[2])) + "出勤报告 \n - " +
                        "签到日期:" + DateUtils.date2String(new Date(), DateUtils.format1) + "(" + DateUtils.getWeekName() + ") \n - " +
                        "签到时间:" + times[0] + "-" + times[1] + " \n - " +
                        "整体数据:" + message.substring(0, message.length() - 1));
                weChatSms.setSchoolId(teacher.getSchoolId());
                weChatSms.setName(teacher.getName());
                weChatSms.setQiYeHaoUserId(teacher.getWeChatUserId());
                weChatSms.setReceiveUserId(teacher.getUserId());
                weChatSms.setAppId(appDto.getAgentId());
                weChatSms.setSecret(appDto.getAgentSecret());
                String msgUrl = "http://campus.myjxt.com/studentRecord/znxwwebapp/index.html?" +
                        "schoolid=" + teacher.getSchoolId() + "&userId=" + teacher.getUserId() + "&name=" + teacher.getName() +
                        "&pass=" + teacher.getPass() + "&type=4&soutype=2&time="+DateUtils.date2String(new Date(),DateUtils.format1);
                weChatSms.setMsgUrl(msgUrl);
                weChatSms.setTdType(TypeEnums.kaoqing.getType());
                smsMapper.insertWeChat(weChatSms);
            }
        }
    }
}