package com.ld.igds.warn.service; import com.ld.igds.constant.RedisConst; import com.ld.igds.constant.WarnLevel; import com.ld.igds.constant.WarnType; import com.ld.igds.data.ConfigData; import com.ld.igds.inout.dto.InoutData; import com.ld.igds.models.MWarnConf; import com.ld.igds.util.ContextUtil; import com.ld.igds.util.RedisUtil; import com.ld.igds.warn.WarnUtils; import com.ld.igds.warn.data.MsgRequest; import com.ld.igds.warn.data.MsgResponse; import com.ld.igds.warn.data.WarnData; import com.ld.igds.warn.data.WarnParam; import com.ld.igds.warn.mapper.WarnMapper; import com.ld.igds.work.dto.ApplyOrderParam; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import java.util.Date; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; /** * @author chen */ @Slf4j @Component public class CoreWarnServiceImpl implements CoreWarnService { @Autowired private ConfigData configData; @Autowired private RestTemplate restTemplate; @Autowired private WarnMapper warnMapper; @Autowired private RedisUtil redisUtil; @Autowired private WarnUtils warnUtils; @Override public List queryWarn(WarnParam param) { return warnMapper.queryWarn(param); } @Override public void addWarn(WarnData param) { warnMapper.saveWarn(param); } @Override public String addWarnAndNotice(WarnData param) { if (null == param) { return "警告信息为空,执行失败"; } if (null == param.getCompanyId()) { return "参数组织编码为空,执行失败"; } //启动子任务执行通知 FutureTask futureTask = new FutureTask<>(new WarnNoticeTask(this, param, WarnUtils.WECHAT_WARN_1008, param.getBizType(), warnUtils)); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(futureTask); executorService.shutdown(); return null; } @Override public String noticeTestWarn(String phone, String warnType, String warnLevel, String bizType) { if (StringUtils.isEmpty(phone)) { return "手机号为空,请输入手机号!"; } String msg = "微信推送失败!"; try { //设置警告信息 WarnData warn = new WarnData(); warn.setPhone(phone); warn.setCompanyId(ContextUtil.getCompanyId()); if (StringUtils.isEmpty(warnType)) { warnType = WarnType.TYPE_01.getCode(); } warn.setType(warnType); warn.setInfo("您好,此为测试警告信息!"); if (StringUtils.isEmpty(warnLevel)) { warnLevel = WarnLevel.LEVEL_01.getCode(); } warn.setLevel(warnLevel); warn.setBizType(bizType); warn.setName("测试警告"); warn.setDepotName("测试仓库"); sendByWeChat(warn, WarnUtils.WECHAT_WARN_1008, warn.getCompanyId()); return "微信推送成功"; } catch (Exception e) { log.error("-----后台异常:{}-----", e); return msg; } } @Override public String noticeInout(InoutData inout) { if (null == inout) { return "警告信息为空,不推送!"; } try { //推送到微信平台 return sendByWeChat(inout, WarnUtils.WECHAT_WARN_1007, inout.getCompanyId()); } catch (Exception e) { log.error("-----后台异常:{}-----", e); return null; } } @Override public String noticeOrder(ApplyOrderParam order) { try { if (StringUtils.isEmpty(order.getPhone())) { return "微信推送失败!"; } return sendByWeChat(order, WarnUtils.WECHAT_WARN_1011, order.getCompanyId()); } catch (Exception e) { log.error("-----后台异常:{}-----", e); return null; } } @Override public void setCacheWarnConf(List list) { if (null == list) { return; } String key; for (MWarnConf warnConf : list) { key = RedisConst.buildKey(warnConf.getCompanyId(), warnConf.getDeptId(), RedisConst.KEY_WARN_CONF); redisUtil.set(key, warnConf); } } @Override public MWarnConf getCacheWarnConf(String companyId, String deptId) { if (StringUtils.isEmpty(deptId)) { return null; } if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } String key = RedisConst.buildKey(companyId, deptId, RedisConst.KEY_WARN_CONF); MWarnConf warnConf = (MWarnConf) redisUtil.get(key); //若缓存获取为空,则从数据库获取 if (null == warnConf) { warnConf = warnMapper.getWarnConf(companyId, deptId); redisUtil.set(key, warnConf); } return warnConf; } /** * 推送信息到微信平台 * * @param data * @param interfaceId * @param companyId * @return */ public String sendByWeChat(Object data, String interfaceId, String companyId) { MsgRequest param = new MsgRequest<>(); param.setInterfaceId(interfaceId); param.setSign(companyId); param.setOutId(companyId); param.setReqDateTime(DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")); param.setData(data); MsgResponse msgResponse = restTemplate.postForObject(configData.getWarnPath(), param, MsgResponse.class); return msgResponse.getMsg(); } }