CheckIsLaidOffQuartz.java 12.5 KB
package com.xiniunet.quartz;

import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.xiniunet.foundation.service.FoundationService;
import com.xiniunet.framework.log.LogUtil;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.framework.util.SettingUtil;
import com.xiniunet.railway.domain.EscortAttendance;
import com.xiniunet.railway.domain.EscortAttendanceLog;
import com.xiniunet.railway.domain.SafetyEscort;
import com.xiniunet.railway.enumication.LaidTypeEnum;
import com.xiniunet.railway.request.*;
import com.xiniunet.railway.response.*;
import com.xiniunet.railway.service.RailwayService;
import com.xiniunet.service.railway.Constant;
import com.xiniunet.service.railway.dal.EscortAttendanceMapper;
import com.xiniunet.service.railway.dal.SafetyEscortMapper;
import com.xiniunet.service.railway.dal.UserAttendanceMapper;
import com.xiniunet.service.railway.po.EscortAttendancePO;
import com.xiniunet.service.railway.po.SafetyEscortPO;
import com.xiniunet.service.railway.po.UserAttendancePO;
import com.xiniunet.service.railway.util.RailwayThirdTools;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * Created by 胡 on 2016/12/30.
 * 检查护行员是否离岗
 */
@Component
@EnableScheduling
// @Transactional
public class CheckIsLaidOffQuartz {

    private static Logger logger = LoggerFactory.getLogger(RailwayThirdTools.class);
    @Autowired
    private RailwayService railwayService;

    /**
     * 执行定时器,每20s执行一次
     */
    public void execute() {
        logger.warn("检查护行员是否离岗开始==========================");
        String quartzTask = SettingUtil.getProperty("", "enable.quartz.task");
        if (StringUtils.isEmpty(quartzTask) || quartzTask.toLowerCase().equals("false")) {
            logger.warn("定时任务CheckIsLaidOffQuartz错误,该服务器未设置自动同步定时任务!");
            return;
        }
        Passport passport = new Passport();
        passport.setTenantId(Constant.RAILWAY_TENANT_ID);
        passport.setUserId(Constant.RAILWAY_USER_ID);
        //用户id集合
        List<Long > userIdList = new ArrayList<>();
        //查询护行员信息,判断是否已离岗
        EscortAttendanceFindDistinctRequest escortAttendanceFindDistinctRequest = new EscortAttendanceFindDistinctRequest();
        /*escortAttendanceFindDistinctRequest.setUserIdList(userIdList);*/
        escortAttendanceFindDistinctRequest.setPageSize(0);
        //EscortAttendanceFindResponse escortAttendanceFindResponse = railwayService.findDistinctEscortAttendance(escortAttendanceFindDistinctRequest);
        EscortAttendanceFindResponse escortAttendanceFindResponse = railwayService.findDistinctEscortUserAttendance(escortAttendanceFindDistinctRequest);
        if(escortAttendanceFindResponse.hasError()){
            logger.warn("定时任务escortAttendanceFindResponse:"+ JSONObject.toJSONString(escortAttendanceFindResponse));
            return;
        }
        List<EscortAttendance> escortAttendances = escortAttendanceFindResponse.getResult();
        if(escortAttendances == null || escortAttendances.size() == 0){
            logger.warn("escortAttendances为空");
            return;
        }
        //获取未离岗的护行员
//        Map<Long,EscortAttendance> userIdEscortAttendanceMap = new HashMap<>();
        for(EscortAttendance escortAttendance : escortAttendances){
            if(escortAttendance.getType() != null && LaidTypeEnum.LAID_ON.toString().equals(escortAttendance.getType())){
                userIdList.add(escortAttendance.getUserId());
//                userIdEscortAttendanceMap.put(escortAttendance.getUserId(),escortAttendance);
            }
        }
        /*EscortAttendanceLogFindRequest escortAttendanceLogFindRequest = new EscortAttendanceLogFindRequest();
        escortAttendanceLogFindRequest.setPageSize(0);
        escortAttendanceLogFindRequest.setUserIdList(userIdList);
        EscortAttendanceLogFindResponse escortAttendanceLogFindResponse = railwayService.findMaxEscortAttendanceLog(escortAttendanceLogFindRequest,passport);
        if(escortAttendanceLogFindResponse.hasError()){
            logger.warn("定时任务escortAttendanceFindResponse:"+ JSONObject.toJSONString(escortAttendanceLogFindResponse));
            return;
        }
        List<EscortAttendanceLog> escortAttendanceLogs = escortAttendanceLogFindResponse.getResult();
        if(escortAttendanceLogs == null || escortAttendanceLogs.size() == 0){
            logger.warn("escortAttendanceLogs为空");
            return;
        }*/
        //查找护行员信息,更新护行员信息
        SafetyEscortFindRequest safetyEscortFindRequest = new SafetyEscortFindRequest();
        safetyEscortFindRequest.setPageSize(0);
        safetyEscortFindRequest.setUserIdList(userIdList);
        SafetyEscortFindResponse safetyEscortFindResponse = railwayService.findSafetyEscort(safetyEscortFindRequest,passport);
        if(safetyEscortFindResponse.hasError()){
            logger.warn("safetyEscortFindResponse:"+ JSONObject.toJSONString(safetyEscortFindResponse));
            return;
        }
        List<SafetyEscort> safetyEscortList = safetyEscortFindResponse.getResult();
        if(safetyEscortList == null || safetyEscortList.size() == 0){
            logger.warn("safetyEscortList为空:");
            return;
        }
        //userId和SafetyEscort 关系
        Map<Long,SafetyEscort> userIdSafetyEscortMap = new HashMap<>();
        //获取未离岗的护行员
        for(SafetyEscort safetyEscort : safetyEscortList){
            userIdSafetyEscortMap.put(safetyEscort.getUserId(),safetyEscort);
        }
        //组装
        //循环遍历判断(当前时间-最后上岗时间) 是否大于2分钟,并判断是否在列车上
        Date now = new Date();
        /*for (EscortAttendanceLog escortAttendanceLog :escortAttendanceLogs ){
            if (escortAttendanceLog.getPositionType() == null){
                escortAttendanceLog.setPositionType(0L);
            }*/
        for (EscortAttendance escortAttendanceLog :escortAttendances ){
            if (escortAttendanceLog.getPositionType() == null){
                escortAttendanceLog.setPositionType(0L);
            }
            if((now.getTime() - escortAttendanceLog.getLogTime().getTime()) >= 2*60*1000 || escortAttendanceLog.getPositionType() == 1 || escortAttendanceLog.getPositionType() == 2){
                //修改状态为已离岗
                EscortAttendanceCreateRequest escortAttendanceCreateRequest = new EscortAttendanceCreateRequest();
                escortAttendanceCreateRequest.setUserId(escortAttendanceLog.getUserId());
                escortAttendanceCreateRequest.setLaidTime(now);
                escortAttendanceCreateRequest.setType(LaidTypeEnum.LAID_OFF.toString());
                //当前日期(yyyymmdd)
                SimpleDateFormat myFmt1=new SimpleDateFormat("yyyyMMdd");
                String dateId=myFmt1.format(now);
                escortAttendanceCreateRequest.setDateId(Long.valueOf(dateId));
                logger.warn("==============参数:escortAttendanceCreateRequest:"+ JSONObject.toJSONString(escortAttendanceCreateRequest));
                EscortAttendanceCreateResponse escortAttendanceCreateResponse = railwayService.createEscortAttendance(escortAttendanceCreateRequest);
                if(escortAttendanceCreateResponse.hasError()){
                    logger.warn("定时任务escortAttendanceCreateResponse:"+ JSONObject.toJSONString(escortAttendanceCreateResponse));
                    continue;
                }
                SafetyEscortUpdateRequest safetyEscortUpdateRequest = new SafetyEscortUpdateRequest();
                safetyEscortUpdateRequest.setId(userIdSafetyEscortMap.get(escortAttendanceLog.getUserId()).getId());
                safetyEscortUpdateRequest.setIsLaid(false);
                safetyEscortUpdateRequest.setLaidOffId(escortAttendanceCreateResponse.getId());
                SafetyEscortUpdateResponse safetyEscortUpdateResponse =  railwayService.updateSafetyEscort(safetyEscortUpdateRequest);
                if(safetyEscortUpdateResponse.hasError()){
                    logger.warn("定时任务safetyEscortUpdateResponse:"+ JSONObject.toJSONString(safetyEscortUpdateResponse));
                }
            }

        }
        logger.warn("检查护行员是否离岗结束====================");
    }


    @Autowired
    private SafetyEscortMapper safetyEscortMapper;
    @Autowired
    private UserAttendanceMapper userAttendanceMapper;
    @Autowired
    private EscortAttendanceMapper escortAttendanceMapper;
    @Autowired
    private FoundationService foundationService;

    // @Scheduled(cron="0 58 14 5 6 ?")
    public void jobDataRestoration() {
        //查询护行员信息,判断是否已离岗
        EscortAttendanceFindDistinctRequest escortAttendanceFindDistinctRequest = new EscortAttendanceFindDistinctRequest();
        escortAttendanceFindDistinctRequest.setPageSize(0);
        EscortAttendanceFindResponse escortAttendanceFindResponse = railwayService.findDistinctEscortUserAttendance(escortAttendanceFindDistinctRequest);
        List<EscortAttendance> escortAttendances = escortAttendanceFindResponse.getResult();
        Date now = new Date();
        for(EscortAttendance ea:escortAttendances){
            if((now.getTime() - ea.getLogTime().getTime()) >= 2*60*1000 || ea.getPositionType() == 1 || ea.getPositionType() == 2) {
                try{
                    //更新rw_safety_escort表 状态改为离岗
                    Passport passport = new Passport();
                    passport.setTenantId(973848199737774088L);
                    passport.setUserId(0L);
                    SafetyEscortPO request_SafetyEscortPO  = new SafetyEscortPO();
                    request_SafetyEscortPO.setId(ea.getUserId());
                    request_SafetyEscortPO.setIsLaid(false);
                    SafetyEscortPO find_SafetyEscortPO = safetyEscortMapper.getById(ea.getUserId(),passport);
                    request_SafetyEscortPO.setRowVersion(find_SafetyEscortPO.getRowVersion());
                    safetyEscortMapper.update(request_SafetyEscortPO,passport);
                    //更新rw_user_attendance表 状态改为离岗
                    UserAttendancePO request_UserAttendancePO = new UserAttendancePO();
                    request_UserAttendancePO.setType(LaidTypeEnum.LAID_OFF.toString());
                    request_UserAttendancePO.setId(ea.getUserId());
                    UserAttendancePO find_UserAttendancePO = userAttendanceMapper.getById(ea.getUserId(),passport);
                    request_UserAttendancePO.setRowVersion(find_UserAttendancePO.getRowVersion());
                    userAttendanceMapper.update(request_UserAttendancePO,passport);
                    //插入rw_escort_attendance 数据肯定存在
                    EscortAttendanceFindRequest find_EscortAttendanceFindRequest = new EscortAttendanceFindRequest();
                    find_EscortAttendanceFindRequest.setUserId(ea.getUserId());
                    find_EscortAttendanceFindRequest.setPageNumber(1);
                    find_EscortAttendanceFindRequest.setPageSize(2);
                    List<EscortAttendancePO> escortAttendancePOList = escortAttendanceMapper.find(find_EscortAttendanceFindRequest,passport);
                    EscortAttendancePO escortAttendance = new EscortAttendancePO();
                    BeanUtils.copyProperties(escortAttendancePOList.get(0),escortAttendance);
                    escortAttendance.setId(foundationService.getNewId());
                    escortAttendance.setType(LaidTypeEnum.LAID_OFF.toString());
                    escortAttendance.setEscortTime(escortAttendance.getEscortTime()==null?0:escortAttendance.getEscortTime()+10);
                    escortAttendanceMapper.insert(escortAttendance,passport);
                }catch (Exception e){
                    logger.warn("定时任务safetyEscortUpdateResponse:"+ JSONObject.toJSONString(ea));
                    e.printStackTrace();
                    // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                }
            }
        }
    }

}