@@ -69,4 +69,14 @@ public class ZsOperationWarnresult { | |||
*/ | |||
private String snapshotUrl; | |||
/** | |||
* 平台 | |||
*/ | |||
private String platform; | |||
/** | |||
* 比对状态 | |||
*/ | |||
private Integer compareStatus; | |||
} |
@@ -82,8 +82,18 @@ public class ZsOperationWarnresultBo extends BaseEntity { | |||
/** | |||
* 图片快照 | |||
*/ | |||
@NotBlank(message = "图片快照不能为空", groups = { AddGroup.class, EditGroup.class }) | |||
// @NotBlank(message = "图片快照不能为空", groups = { AddGroup.class, EditGroup.class }) | |||
private String snapshotUrl; | |||
/** | |||
* 平台 | |||
*/ | |||
private String platform; | |||
/** | |||
* 比对状态 | |||
*/ | |||
private Integer compareStatus; | |||
} |
@@ -98,5 +98,18 @@ public class ZsOperationWarnresultVo { | |||
@ExcelProperty(value = "图片快照") | |||
private String snapshotUrl; | |||
/** | |||
* 平台 | |||
*/ | |||
@ExcelProperty(value = "平台", converter = ExcelDictConvert.class) | |||
@ExcelDictFormat(dictType = "zs_operation_platform") | |||
private String platform; | |||
/** | |||
* 比对状态 | |||
*/ | |||
@ExcelProperty(value = "比对状态") | |||
@ExcelDictFormat(dictType = "zs_operation_compare_status") | |||
private Integer compareStatus; | |||
} |
@@ -73,6 +73,7 @@ public class ZsOperationWarnresultServiceImpl implements IZsOperationWarnresultS | |||
lqw.like(StringUtils.isNotBlank(bo.getGoodsSkuName()), ZsOperationWarnresult::getGoodsSkuName, bo.getGoodsSkuName()); | |||
lqw.eq(StringUtils.isNotBlank(bo.getGoodsSkuSn()), ZsOperationWarnresult::getGoodsSkuSn, bo.getGoodsSkuSn()); | |||
lqw.eq(bo.getStatus() != null, ZsOperationWarnresult::getStatus, bo.getStatus()); | |||
lqw.eq(bo.getCompareStatus() != null, ZsOperationWarnresult::getCompareStatus, bo.getCompareStatus()); | |||
return lqw; | |||
} | |||
@@ -21,6 +21,7 @@ import org.springframework.stereotype.Component; | |||
import javax.annotation.PostConstruct; | |||
import java.math.BigDecimal; | |||
import java.math.RoundingMode; | |||
import java.text.SimpleDateFormat; | |||
import java.time.LocalTime; | |||
import java.util.Date; | |||
import java.util.List; | |||
@@ -149,11 +150,23 @@ public class MonitorTaskScheduler { | |||
zsOperationWarnresult.setCurPrice(newPrice); | |||
zsOperationWarnresult.setPriceChangeRatio(percentageChange.toString()); | |||
zsOperationWarnresult.setWarnTypes(warnTypes); | |||
String warnContent = "商品编号:"+newSn+"价格发生变动!"+ | |||
"原价格=:"+initPrice+"新价格=:"+newPrice.doubleValue(); | |||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |||
String warnDate = sdf.format(zsOperationWarnresult.getWarnTime()); | |||
String warnContent = "<html>" + | |||
"<h2>商品价格发生变动!</h2>"+ | |||
"<p>商品名称=:"+zsOperationGoods.getGoodsSkuName()+"</p>"+ | |||
"<p>商品编号=:"+newSn+"</p>"+ | |||
"<p>商品url=:"+curUrl+"</p>"+ | |||
"<p>原价格=:"+initPrice+"</p>"+ | |||
"<p>新价格=:"+newPrice.doubleValue()+"</p>"+ | |||
"<p>预警时间=:"+warnDate+"</p>"+ | |||
"<p>图片=:"+"<img src=\""+dataMap.get("screenshotUrl")+"\" ></p>"+ | |||
"</html>"; | |||
zsOperationWarnresult.setWarnContent(warnContent); | |||
zsOperationWarnresult.setSnapshotUrl((String)dataMap.get("screenshotUrl")); | |||
zsOperationWarnresult.setStatus(0); | |||
zsOperationWarnresult.setPlatform(zsOperationGoods.getPlatform()); | |||
zsOperationWarnresult.setCompareStatus(1); | |||
zsOperationWarnresultMapper.insert(zsOperationWarnresult); | |||
//8.发送邮件 | |||
@@ -170,10 +183,10 @@ public class MonitorTaskScheduler { | |||
//发送数据 1立刻发送 0 9:00-18:00 发送 | |||
String warnTimeRange = zsOperationWarnconfig.getWarnTimeRange(); | |||
if ("1".equals(warnTimeRange)) { | |||
emailUtils.sendMailByTransport(zsOperationSendconfig.getSendEmail(),receiveEmail,"商品价格变化预警",warnContent,zsOperationSendconfig.getSmtpId()); | |||
emailUtils.sendMailByTransportHtml(zsOperationSendconfig.getSendEmail(),receiveEmail,"商品价格变化预警 商品名=:"+zsOperationGoods.getGoodsSkuName(),warnContent,zsOperationSendconfig.getSmtpId()); | |||
} else { | |||
if (isBetween9And18()) { | |||
emailUtils.sendMailByTransport(zsOperationSendconfig.getSendEmail(),receiveEmail,"商品价格变化预警",warnContent,zsOperationSendconfig.getSmtpId()); | |||
emailUtils.sendMailByTransportHtml(zsOperationSendconfig.getSendEmail(),receiveEmail,"商品价格变化预警 商品名=:"+zsOperationGoods.getGoodsSkuName(),warnContent,zsOperationSendconfig.getSmtpId()); | |||
} | |||
} | |||
} | |||
@@ -205,6 +218,8 @@ public class MonitorTaskScheduler { | |||
String warnContent = "商品编号:"+zsOperationGoods.getGoodsSkuSn()+"抓取失败!"; | |||
zsOperationWarnresult.setWarnContent(warnContent); | |||
zsOperationWarnresult.setStatus(0); | |||
zsOperationWarnresult.setPlatform(zsOperationGoods.getPlatform()); | |||
zsOperationWarnresult.setCompareStatus(0); | |||
zsOperationWarnresultMapper.insert(zsOperationWarnresult); | |||
} | |||
} |
@@ -5,9 +5,12 @@ import com.ruoyi.system.mapper.ZsOperationSmtpMapper; | |||
import com.sun.mail.util.MailSSLSocketFactory; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.mail.javamail.JavaMailSender; | |||
import org.springframework.mail.javamail.MimeMessageHelper; | |||
import org.springframework.scheduling.annotation.Async; | |||
import org.springframework.stereotype.Component; | |||
import javax.annotation.Resource; | |||
import javax.mail.*; | |||
import javax.mail.internet.InternetAddress; | |||
import javax.mail.internet.MimeMessage; | |||
@@ -58,4 +61,38 @@ public class EmailUtils { | |||
log.error("邮件发送失败",e); | |||
} | |||
} | |||
// @Resource | |||
// private JavaMailSender javaMailSender; | |||
public void sendMailByTransportHtml(String sendEmail ,String receiveEmail,String title,String content,Long smtpId) { | |||
try { | |||
ZsOperationSmtp smtp = zsOperationSmtpMapper.selectById(smtpId); | |||
Properties props = new Properties(); | |||
props.put("mail.smtp.host", smtp.getHost()); | |||
props.put("mail.smtp.socketFactory.port", String.valueOf(smtp.getPort())); | |||
MailSSLSocketFactory sf = new MailSSLSocketFactory(); | |||
sf.setTrustAllHosts(true); | |||
props.put("mail.smtp.ssl.enable", "true"); | |||
props.put("mail.smtp.ssl.socketFactory", sf); | |||
props.put("mail.smtp.auth", "true"); | |||
props.put("mail.smtp.port", String.valueOf(smtp.getPort())); | |||
final String username = smtp.getUsername().trim(); | |||
final String password = smtp.getPassword().trim(); | |||
Session session = Session.getInstance(props, | |||
new Authenticator() { | |||
@Override | |||
protected PasswordAuthentication getPasswordAuthentication() { | |||
return new PasswordAuthentication(username,password); | |||
} | |||
}); | |||
MimeMessage message = new MimeMessage(session); | |||
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message,true,"utf-8"); | |||
mimeMessageHelper.setFrom(new InternetAddress(sendEmail)); | |||
mimeMessageHelper.setTo(InternetAddress.parse(receiveEmail)); | |||
mimeMessageHelper.setSubject(title); | |||
mimeMessageHelper.setText(content,true); | |||
Transport.send(message); | |||
} catch (Exception e) { | |||
log.error("邮件发送失败",e); | |||
} | |||
} | |||
} |