package com.yeshi.fanli.service.impl.lable;
|
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
import javax.transaction.Transactional;
|
|
import org.quartz.Scheduler;
|
import org.springframework.stereotype.Service;
|
|
import com.yeshi.fanli.dao.mybatis.lable.BoutiqueAutoRuleMapper;
|
import com.yeshi.fanli.entity.bus.lable.BoutiqueAutoRule;
|
import com.yeshi.fanli.exception.BoutiqueAutoRuleException;
|
import com.yeshi.fanli.job.QualityFactoryJob;
|
import com.yeshi.fanli.job.QuartzManager;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.lable.BoutiqueAutoRuleService;
|
import com.yeshi.fanli.util.StringUtil;
|
|
@Service
|
public class BoutiqueAutoRuleServiceImpl implements BoutiqueAutoRuleService {
|
|
@Resource
|
private BoutiqueAutoRuleService boutiqueAutoRuleService;
|
@Resource
|
private BoutiqueAutoRuleMapper boutiqueAutoRuleMapper;
|
|
@Resource
|
private Scheduler scheduler;
|
|
@Override
|
public int insertSelective(BoutiqueAutoRule record) throws BoutiqueAutoRuleException {
|
return boutiqueAutoRuleMapper.insertSelective(record);
|
}
|
|
@Override
|
public int updateByPrimaryKey(BoutiqueAutoRule record) throws BoutiqueAutoRuleException {
|
return boutiqueAutoRuleMapper.updateByPrimaryKey(record);
|
}
|
|
@Override
|
public int updateByPrimaryKeySelective(BoutiqueAutoRule record) throws BoutiqueAutoRuleException {
|
return boutiqueAutoRuleMapper.updateByPrimaryKeySelective(record);
|
}
|
|
@Override
|
@Transactional
|
public void deleteByPrimaryKey(Long id) throws BoutiqueAutoRuleException {
|
boutiqueAutoRuleMapper.deleteByPrimaryKey(id);
|
}
|
|
@Override
|
@Transactional
|
public void deleteBatchByPrimaryKey(List<Long> ids) throws BoutiqueAutoRuleException {
|
for (Long id : ids) {
|
// 删除
|
boutiqueAutoRuleMapper.deleteByPrimaryKey(id);
|
}
|
}
|
|
@Override
|
public BoutiqueAutoRule selectByPrimaryKey(Long id) throws BoutiqueAutoRuleException {
|
return boutiqueAutoRuleMapper.selectByPrimaryKey(id);
|
}
|
|
@Override
|
public List<BoutiqueAutoRule> query(int pageIndex, int pageSize, Integer source, String key,
|
Integer state,Integer sort) throws BoutiqueAutoRuleException {
|
return boutiqueAutoRuleMapper.query(pageIndex, pageSize, source, key, state, sort);
|
}
|
|
@Override
|
public long queryCount(Integer source, String key, Integer state) throws BoutiqueAutoRuleException {
|
return boutiqueAutoRuleMapper.queryCount(source, key, state);
|
}
|
|
@Override
|
public List<BoutiqueAutoRule> queryStart() throws BoutiqueAutoRuleException {
|
return boutiqueAutoRuleMapper.queryStart();
|
}
|
|
/**
|
* 设置出发器
|
*
|
* @param boutiqueAutoRule
|
*/
|
@Override
|
public void setScheduler(BoutiqueAutoRule boutiqueAutoRule, String type) {
|
|
if (boutiqueAutoRule == null) {
|
return;
|
}
|
|
Long id = boutiqueAutoRule.getId();
|
if (id == null)
|
return;
|
|
Integer source = boutiqueAutoRule.getSource();
|
String cronTime = boutiqueAutoRule.getCronTime();
|
|
// 不能为空: 触发时间、请求源、类目
|
if (source == null || StringUtil.isNullOrEmpty(cronTime)) {
|
return;
|
}
|
|
|
Map<String, String> params = new HashMap<String, String>();
|
params.put("source", source+"");
|
params.put("searchContent", boutiqueAutoRule.getSearchContent());
|
params.put("ruleId", boutiqueAutoRule.getId()+"");
|
|
// 任务名
|
String JobName = "JOB_" + source + "_" + id;
|
|
try {
|
|
/* 新建任务 */
|
if ("add".equalsIgnoreCase(type)) {
|
QuartzManager.addJob(scheduler,QualityFactoryJob.class, JobName, cronTime, params);
|
}
|
|
/* 修改任务 */
|
if ("modify".equalsIgnoreCase(type)) {
|
QuartzManager.modifyJob(scheduler, QualityFactoryJob.class, JobName, cronTime, params);
|
}
|
|
/* 删除任务 */
|
if ("delete".equalsIgnoreCase(type)) {
|
QuartzManager.removeJob(scheduler, JobName);
|
}
|
|
} catch (Exception e) {
|
|
try {
|
LogHelper.errorDetailInfo(e);
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
e.printStackTrace();
|
}
|
|
}
|
|
@Override
|
public String setCronTime(String day, String time) {
|
|
if (StringUtil.isNullOrEmpty(day) || StringUtil.isNullOrEmpty(time)) {
|
return null;
|
}
|
|
String cronTime = null;
|
|
|
|
if (day.contains("小时")) {
|
|
String[] sts = time.split(":");
|
// 小时
|
String hour = sts[0];
|
// 分
|
String minute = sts[1];
|
|
// 清除前面的0
|
String hourNumOne = hour.substring(0, 1);
|
if ("0".equals(hourNumOne)) {
|
hour = hour.substring(1, 2);
|
}
|
|
// 清除前面的0
|
String minNumOne = minute.substring(0, 1);
|
if ("0".equals(minNumOne)) {
|
minute = minute.substring(1, 2);
|
}
|
|
// 0 11 2/12 * * ?
|
cronTime = 0 + " " + minute + " " + hour + "/" + day.replace("小时", "") + " * * ? ";
|
|
}
|
|
|
|
if (day.contains("天")) {
|
|
String[] sts = time.split(":");
|
// 小时
|
String hour = sts[0];
|
// 分
|
String minute = sts[1];
|
|
// 清除前面的0
|
String hourNumOne = hour.substring(0, 1);
|
if ("0".equals(hourNumOne)) {
|
hour = hour.substring(1, 2);
|
}
|
|
// 清除前面的0
|
String minNumOne = minute.substring(0, 1);
|
if ("0".equals(minNumOne)) {
|
minute = minute.substring(1, 2);
|
}
|
|
|
|
// 0 34 3 1/5 * ?
|
// 秒 小时 分 相隔天数
|
cronTime = 0 + " " + minute + " " + hour + " " + "1/" + day.replace("天", "") + " * ?";
|
|
}
|
|
|
|
return cronTime;
|
}
|
|
/**
|
* 系统启动时,添加任务到Scheduler
|
*/
|
@Override
|
public void startScheduler() {
|
|
List<BoutiqueAutoRule> listStart = boutiqueAutoRuleMapper.queryStart();
|
|
if (listStart != null && listStart.size() > 0) {
|
for (BoutiqueAutoRule boutiqueAutoRule : listStart) {
|
boolean validateDate = boutiqueAutoRuleService.validateDate(boutiqueAutoRule);
|
if (validateDate) {
|
boutiqueAutoRuleService.setScheduler(boutiqueAutoRule, "add");
|
}
|
}
|
}
|
}
|
|
/**
|
* 关闭所有任务
|
*/
|
@Override
|
public void shutdownJobs() throws Exception {
|
|
/* 停止任务 */
|
QuartzManager.shutdownJobs(scheduler);
|
|
}
|
|
@Override
|
public boolean validateDate(BoutiqueAutoRule boutiqueAutoRule) {
|
|
long nowTime = new Date().getTime();
|
|
Date endTime = boutiqueAutoRule.getEndTime();
|
if (endTime != null) {
|
|
long end = endTime.getTime();
|
if (end - nowTime <= 0) {
|
return false; // 结束时间已过
|
}
|
}
|
|
return true;
|
|
}
|
|
public static void main(String[] args) {
|
String t = "3小时";
|
System.out.println(t.replace("小时", ""));
|
}
|
|
}
|