| | |
| | | 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 org.quartz.Scheduler;
|
| | | import org.springframework.stereotype.Service;
|
| | | import org.springframework.transaction.annotation.Transactional;
|
| | |
|
| | | import com.yeshi.fanli.dao.mybatis.lable.BoutiqueAutoRuleMapper;
|
| | | import com.yeshi.fanli.entity.bus.lable.BoutiqueAutoRule;
|
| | | import com.yeshi.fanli.exception.goods.quality.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("小时", ""));
|
| | | }
|
| | | |
| | | }
|
| | | package com.yeshi.fanli.service.impl.lable; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import org.quartz.Scheduler; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import com.yeshi.fanli.dao.mybatis.lable.BoutiqueAutoRuleMapper; |
| | | import com.yeshi.fanli.entity.bus.lable.BoutiqueAutoRule; |
| | | import com.yeshi.fanli.exception.goods.quality.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; |
| | | |
| | | import net.sf.json.JSONObject; |
| | | |
| | | @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(rollbackFor=Exception.class) |
| | | public void deleteByPrimaryKey(Long id) throws BoutiqueAutoRuleException { |
| | | boutiqueAutoRuleMapper.deleteByPrimaryKey(id); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor=Exception.class) |
| | | 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; |
| | | |
| | | jsonTransformString(boutiqueAutoRule); |
| | | |
| | | // 任务名 |
| | | String JobName = "JOB_" + source + "_" + id; |
| | | try { |
| | | /* 新建任务 */ |
| | | if ("add".equalsIgnoreCase(type)) { |
| | | QuartzManager.addJob(scheduler,QualityFactoryJob.class, JobName, cronTime, boutiqueAutoRule); |
| | | } |
| | | |
| | | /* 修改任务 */ |
| | | if ("modify".equalsIgnoreCase(type)) { |
| | | QuartzManager.modifyJob(scheduler, QualityFactoryJob.class, JobName, cronTime, boutiqueAutoRule); |
| | | } |
| | | |
| | | /* 删除任务 */ |
| | | if ("delete".equalsIgnoreCase(type)) { |
| | | QuartzManager.removeJob(scheduler, JobName); |
| | | } |
| | | } catch (Exception e) { |
| | | LogHelper.errorDetailInfo(e); |
| | | } |
| | | |
| | | } |
| | | |
| | | @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) { |
| | | jsonTransformString(boutiqueAutoRule); |
| | | 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; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * json 转换未String |
| | | * @param boutiqueAutoRule |
| | | */ |
| | | public void jsonTransformString(BoutiqueAutoRule boutiqueAutoRule){ |
| | | String searchContent = boutiqueAutoRule.getSearchContent(); |
| | | if (StringUtil.isNullOrEmpty(searchContent)) { |
| | | return; |
| | | } |
| | | |
| | | JSONObject jsonData = JSONObject.fromObject(searchContent); |
| | | |
| | | if (jsonData.get("key") != null){ |
| | | // 搜索关键词 |
| | | boutiqueAutoRule.setKey(jsonData.get("key").toString()); |
| | | } |
| | | |
| | | if (jsonData.get("cateIds") != null){ |
| | | // 官方推荐商品库投放ID;淘宝类目id集合 |
| | | boutiqueAutoRule.setCateIds(jsonData.get("cateIds").toString()); |
| | | } |
| | | |
| | | if (jsonData.get("startTkRate") != null){ |
| | | // 佣金范围小值Double.valueOf(itoString()); |
| | | boutiqueAutoRule.setStartTkRate(Double.valueOf(jsonData.get("startTkRate").toString())); |
| | | } |
| | | |
| | | if (jsonData.get("endTkRate") != null){ |
| | | // 佣金范围大值 |
| | | boutiqueAutoRule.setEndTkRate(Double.valueOf(jsonData.get("endTkRate").toString())); |
| | | } |
| | | |
| | | if (jsonData.get("startSales") != null){ |
| | | // 销量小值 |
| | | boutiqueAutoRule.setStartSales((int)jsonData.get("startSales")); |
| | | } |
| | | |
| | | if (jsonData.get("endSales") != null){ |
| | | // 销量大值 |
| | | boutiqueAutoRule.setEndSales((int)jsonData.get("endSales")); |
| | | } |
| | | |
| | | if (jsonData.get("startZkPrice") != null){ |
| | | // 在售价范围小值 |
| | | boutiqueAutoRule.setStartZkPrice(Double.valueOf(jsonData.get("startZkPrice").toString())); |
| | | } |
| | | |
| | | if (jsonData.get("endZkPrice") != null){ |
| | | // 在售价范围大值 |
| | | boutiqueAutoRule.setEndZkPrice(Double.valueOf(jsonData.get("endZkPrice").toString())); |
| | | } |
| | | |
| | | if (jsonData.get("startPrice") != null){ |
| | | // 券后价范围小值 |
| | | boutiqueAutoRule.setStartPrice(Double.valueOf(jsonData.get("startPrice").toString())); |
| | | } |
| | | |
| | | if (jsonData.get("endPrice") != null){ |
| | | // 券后价范围大值 |
| | | boutiqueAutoRule.setEndPrice(Double.valueOf(jsonData.get("endPrice").toString())); |
| | | } |
| | | |
| | | if (jsonData.get("isTmall") != null){ |
| | | // 是否天猫 |
| | | boutiqueAutoRule.setIsTmall((int)jsonData.get("isTmall")); |
| | | } |
| | | |
| | | if (jsonData.get("hasCoupon") != null){ |
| | | // 是否有券:1 有 0 无 |
| | | boutiqueAutoRule.setHasCoupon((int)jsonData.get("hasCoupon")); |
| | | } |
| | | |
| | | if (jsonData.get("freeShipment") != null){ |
| | | // 是否包邮:1 有 0 无 |
| | | boutiqueAutoRule.setFreeShipment((int)jsonData.get("freeShipment")); |
| | | } |
| | | |
| | | if (jsonData.get("needPrepay") != null){ |
| | | // 是否消费保障:1有 0 无 |
| | | boutiqueAutoRule.setNeedPrepay((int)jsonData.get("needPrepay")); |
| | | } |
| | | |
| | | if (jsonData.get("npxLevel") != null){ |
| | | // 牛皮癣程度,取值:1:不限,2:无,3:轻微 |
| | | boutiqueAutoRule.setNpxLevel((int)jsonData.get("npxLevel")); |
| | | } |
| | | |
| | | if (jsonData.get("includePayRate30") != null){ |
| | | // 成交转化是否高于行业均值 1 有 0 无 |
| | | boutiqueAutoRule.setIncludePayRate30((int)jsonData.get("includePayRate30")); |
| | | } |
| | | |
| | | if (jsonData.get("includeGoodRate") != null){ |
| | | // 好评率是否高于行业均值 1 有 0 无 |
| | | boutiqueAutoRule.setIncludeGoodRate((int)jsonData.get("includeGoodRate")); |
| | | } |
| | | |
| | | if (jsonData.get("includeRfdRate") != null){ |
| | | // 退款率是否低于行业均值 1 有 0 无 |
| | | boutiqueAutoRule.setIncludeRfdRate((int)jsonData.get("includeRfdRate")); |
| | | } |
| | | |
| | | if (jsonData.get("lableNames") != null){ |
| | | boutiqueAutoRule.setLableNames(jsonData.get("lableNames").toString()); |
| | | } |
| | | |
| | | if (jsonData.get("maxPage") != null){ |
| | | // 是否包邮:1 有 0 无 |
| | | boutiqueAutoRule.setMaxPage((int)jsonData.get("maxPage")); |
| | | } |
| | | } |
| | | } |