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<WarnData> 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<String> 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<MWarnConf> 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<Object> 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();
|
}
|
|
}
|