//package com.zteits.park.configuration.schedule;
//
//import java.util.List;
//import java.util.concurrent.TimeUnit;
//
//import org.apache.curator.framework.CuratorFramework;
//import org.apache.curator.framework.recipes.locks.InterProcessMutex;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Conditional;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import org.apache.commons.collections4.CollectionUtils;
//import org.apache.commons.lang3.StringUtils;
//import com.clouds.common.cache.sys.SysCodeValueCacheUtil;
//import com.clouds.common.constants.CodeValKindEnum;
//import com.clouds.common.constants.ParkConstant;
//import com.zteits.park.configuration.mail.MailService;
//import com.zteits.park.configuration.zookeeper.ZkClientFactory;
//import com.zteits.park.constant.ZKConstant;
//import com.zteits.park.domain.TpPExceptionLogExample;
//import com.zteits.park.domain.TpPExceptionLogWithBLOBs;
//import com.zteits.park.mapper.TpPExceptionLogMapper;
//
///**
// * 显示异常信息
// *
// * Copyright: Copyright (c) 2017 zteits
// *
// * @ClassName: ParkingLotHeatMapHourJob.java
// * @Description:
// * @version: v1.0.0
// * @author: wangfs
// * @date: 2017年7月10日 下午5:24:36
// * Modification History:
// * Date Author Version Description
// *---------------------------------------------------------*
// * 2017年7月10日 wangfs v1.0.0 创建
// */
//@Conditional(GetExceptionMsgCondition.class)
//@Component("com.zteits.park.configuration.schedule.GetExceptionMsgSchedule")
//public class GetExceptionMsgSchedule{
// private static final Logger logger = LoggerFactory.getLogger(GetExceptionMsgSchedule.class);
//
// @Autowired
// private TpPExceptionLogMapper exceptionLogMapper;
// @Autowired
// private MailService mailService;
// @Autowired
// private ZkClientFactory zkClientFactory;
// /**
// * 30分钟一次
// * @throws Exception
// * 2017年9月15日 zhaowg
// */
// @Scheduled(cron="0 30 * * * ?")
// public void execute() throws Exception {
// logger.info("============================开始查询异常表==============================");
// CuratorFramework client = zkClientFactory.getZKClient();
// InterProcessMutex lock = new InterProcessMutex(client, ZKConstant.GETEXCEPTION_LOCK_PATH);
// try {
// if (lock.acquire(10 * 1000, TimeUnit.SECONDS)) {
// logger.info("============================获取锁成功,开始查询异常表==============================");
// this.getExceptionMsg();
// }else{
// logger.info("============================获取锁失败,不查询异常表==============================");
// }
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// try {
// lock.release();
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// logger.info("============================查询异常表结束==============================");
// }
//
// private void getExceptionMsg() {
// //获取要发送的邮箱
// String mailAddrs = SysCodeValueCacheUtil.queryCodeValue(CodeValKindEnum.PARK_SEND_MAIL_ADDRS);
// if(StringUtils.isBlank(mailAddrs)){
// logger.info("查询异常表,邮件地址为空,不发送邮件");
// return;
// }
//
// TpPExceptionLogExample example = new TpPExceptionLogExample();
// //example.createCriteria()
// //.andDealStatusEqualTo(ParkConstant.TpPException.NO_DEALED);
// example.setOrderByClause("create_time desc");
// List list = exceptionLogMapper.selectByExampleWithBLOBs(example );
// if(CollectionUtils.isEmpty(list)){
// logger.info("异常表数据为空,直接返回成功");
// return;
// }
// StringBuilder content = new StringBuilder();
// content.append("发现异常信息条数为:"+list.size()+",请及时查看,具体详细信息请到PARK->Tp_p_Exception表中查看。");
// content.append("最新的两条堆栈信息为:");
// TpPExceptionLogWithBLOBs e;
// //最多只发送最新的前2条异常信息,防止内容过多
// for (int i=0;i<(2>list.size()?list.size():2);i++) {
// e = list.get(i);
// content.append("业务描述:"+e.getBusiDesc());
// content.append("堆栈信息:"+e.getErrorMsg());
// //更新该异常信息状态为-未处理-已告警
// TpPExceptionLogWithBLOBs record = new TpPExceptionLogWithBLOBs();
// record.setId(e.getId());
// //record.setDealStatus(ParkConstant.TpPException.ALARM);
// exceptionLogMapper.updateByPrimaryKeySelective(record);
// }
//
// String[] address = mailAddrs.split(",");
// for (String addr : address) {
// //暂时没有开启线程,因为该任务30分钟执行一次,不存在高并发阻塞等待
// //TODO 后期修改为MQ
// mailService.sendSimpleMail(addr, "扫描PARK域异常表获取的异常信息", content.toString());
// }
// }
//}