package com.gzzn.omms.msgexchangeapi.service; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.gzzn.omms.msgexchangeapi.dao.CminmsgDao; import com.gzzn.omms.msgexchangeapi.entity.Cminmsg; import com.gzzn.omms.msgexchangeapi.entity.msg.Msg; @Service("cminmsgService") public class CminmsgServiceImpl implements ICminmsgService { private static Logger logger = LoggerFactory.getLogger(CminmsgServiceImpl.class); @Autowired private CminmsgDao cminmsgDao; @Autowired IExchangeService exchangeService; @Override public Cminmsg sendXmlMsg(String xmlMsg) { Cminmsg cminmsg = new Cminmsg(); cminmsg.setCminmsgsClobMsg(xmlMsg); cminmsg.setCminmsgsDateReceived(new Date()); Cminmsg rt = cminmsgDao.save(cminmsg); return rt; } @Override public List getNewMsgsAfterDate(Date afterdate) { List lsCminmsgs = cminmsgDao.findByCminmsgsDateReceivedAfterOrderByCminmsgsDateReceived(afterdate); if(null == lsCminmsgs) { return Collections.emptyList(); } return lsCminmsgs; } //end function @Override public List getNewMsgsAfterId(Long id) { List lsCminmsgs = cminmsgDao.findByCminmsgsIdGreaterThanAndCminmsgsDateProcessedIsNull(id); if(null == lsCminmsgs) { return Collections.emptyList(); } return lsCminmsgs; } @Override public Optional getRespSchdCminmsg(Date date,Integer tryTimes,Long intervalMs) { Optional opCminmsg = Optional.empty(); Integer currentTimes=0;//当前尝试次数 while (currentTimes < tryTimes) { currentTimes++; List lsCminmsgs = getNewMsgsAfterDate(date); opCminmsg = lsCminmsgs .stream() .filter(x->{ String msgBlob = x.getCminmsgsClobMsg(); Msg msg = exchangeService.xmlstrToObject(msgBlob, Msg.class); String type = msg.getMeta().getType(); String subType = msg.getMeta().getStyp(); return type.equals("SCHD") && subType.equals("RESP"); }) .findFirst(); // if(opCminmsg.isPresent()) { break; } //等待xx秒继续循环过程 try { Thread.sleep(intervalMs); } catch (InterruptedException e) { logger.warn("Thread.sleep:暂停线程异常"); } }//end while return opCminmsg; }//end function @Override public List updateBatchProcessed(List lsCminmsgs) { // List ids = lsCminmsgs.stream().map(node->{ return node.getCminmsgsId(); }).collect(Collectors.toList()); List lsCmins = (List) cminmsgDao.findAll(ids); List lsCminsProcessed = lsCmins.stream().map(node->{ node.setCminmsgsDateProcessed(new Date()); return node; }).collect(Collectors.toList()); return (List) cminmsgDao.save(lsCminsProcessed); }//end function }