fanli/src/main/java/com/yeshi/fanli/controller/admin/BoutiqueAutoRuleAdminController.java
@@ -338,7 +338,6 @@ @RequestMapping(value = "delete") public void delete(String callback, Long id, PrintWriter out) { try { if (id == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确参数")); return; @@ -372,11 +371,8 @@ */ @RequestMapping(value = "shutdownJobs") public void shutdownJobs(String callback, PrintWriter out) { try { boutiqueAutoRuleService.shutdownJobs(); } catch (Exception e) { e.printStackTrace(); } @@ -388,16 +384,12 @@ * @param boutiqueAutoRule */ public void transformJsonString(BoutiqueAutoRule boutiqueAutoRule){ JSONObject data = new JSONObject(); Integer source = boutiqueAutoRule.getSource(); if (source.equals(BoutiqueAutoRule.TB_OPTIONAL)) { // 类目id if (source.equals(BoutiqueAutoRule.TB_OPTIONAL)) { data.put("systemCid", boutiqueAutoRule.getClassName()); } if (boutiqueAutoRule.getKey() != null){ // 搜索关键词 @@ -445,8 +437,6 @@ // 在售价范围大值 data.put("endZkPrice", boutiqueAutoRule.getEndZkPrice()); } if ( boutiqueAutoRule.getStartPrice() != null){ // 券后价范围小值 @@ -509,24 +499,24 @@ // 请求最大页码 if (boutiqueAutoRule.getClassName() != null){ if (source.equals(BoutiqueAutoRule.TB_OPTIONAL) || source== BoutiqueAutoRule.TB_OPTIONAL) { String classId = boutiqueAutoRule.getClassName(); if (!StringUtil.isNullOrEmpty(classId)){ GoodsClass rb = goodsClassService.getGoodsClass(Long.parseLong(classId)); if (rb != null) { data.put("sourceCalss", rb.getName()); boutiqueAutoRule.setSourceCalss(rb.getName()); } } } else if (source.equals(BoutiqueAutoRule.TB_MATERIAL) || source == BoutiqueAutoRule.TB_MATERIAL) { String subName = boutiqueAutoRule.getSubclassName(); String superName = boutiqueAutoRule.getClassName(); if (StringUtil.isNullOrEmpty(subName)) { data.put("sourceCalss", superName); boutiqueAutoRule.setSourceCalss(superName); } else { data.put("sourceCalss", superName +" "+ subName); boutiqueAutoRule.setSourceCalss(superName +" "+ subName); } } } @@ -541,7 +531,6 @@ * @param boutiqueAutoRule */ public void jsonTransformString(BoutiqueAutoRule boutiqueAutoRule){ String searchContent = boutiqueAutoRule.getSearchContent(); if (StringUtil.isNullOrEmpty(searchContent)) { return; @@ -647,7 +636,6 @@ // 是否包邮:1 有 0 无 boutiqueAutoRule.setMaxPage((int)jsonData.get("maxPage")); } } /** @@ -758,12 +746,9 @@ // 生效时间 Date startTime = boutiqueAutoRule.getStartTime(); // 失效时间 Date endTime = boutiqueAutoRule.getEndTime(); if (endTime != null) { if (startTime != null && startTime.getTime() > endTime.getTime()){ JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("生效时间不能大于失效时间")); return false; @@ -774,26 +759,13 @@ calendar.set(Calendar.HOUR, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); boutiqueAutoRule.setEndTime(calendar.getTime()); } if (startTime == null) { boutiqueAutoRule.setStartTime(new Date()); } return true; } public static void main(String[] args) { String s = "abacada"; if (s.contains("a")) { System.out.println(1); } else { System.out.println(0); } } } fanli/src/main/java/com/yeshi/fanli/job/QualityFactoryJob.java
@@ -30,8 +30,6 @@ import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import net.sf.json.JSONObject; /** * 精选商品自动入库 * @@ -69,63 +67,22 @@ public void searchGoods(JobExecutionContext context) { try { JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); BoutiqueAutoRule autoRule = new BoutiqueAutoRule(); /* 规则id */ if (jobDataMap.get("ruleId") != null && !StringUtil.isNullOrEmpty(jobDataMap.get("ruleId").toString())) { Long ruleId = Long.parseLong(jobDataMap.get("ruleId").toString()); autoRule.setId(ruleId); Object object = jobDataMap.get("key"); if (object == null) { return; } /* 筛选条件 */ JSONObject jsonData = null; if (jobDataMap.get("searchContent") != null) { String jsonContent = jobDataMap.get("searchContent").toString(); jsonData = JSONObject.fromObject(jsonContent); } if (jsonData == null) { jsonData = new JSONObject(); } /* 来源名称 */ if (jsonData.get("sourceCalss") != null && !StringUtil.isNullOrEmpty(jsonData.get("sourceCalss").toString())) { String sourceCalss = jsonData.get("sourceCalss").toString(); autoRule.setSourceCalss(sourceCalss); } /* 规则名称 */ String title = ""; if (jsonData.get("title") != null && !StringUtil.isNullOrEmpty(jsonData.get("title").toString())) { title = jsonData.get("title").toString(); } autoRule.setTitle(title); /* 系统类目id */ String systemCid = ""; if (jsonData.get("systemCid") != null && !StringUtil.isNullOrEmpty(jsonData.get("systemCid").toString())) { systemCid = jsonData.get("systemCid").toString(); } autoRule.setSystemCid(systemCid); BoutiqueAutoRule autoRule = (BoutiqueAutoRule) object; /* 操作人: 开发账号 */ AdminUser admin = new AdminUser(2L); autoRule.setAdminUser(admin); /* 标签列表 */ List<Label> listLabs = new ArrayList<Label>(); if (jsonData.get("lableNames") != null && !StringUtil.isNullOrEmpty(jsonData.get("lableNames").toString())) { // 空格隔开 String[] arrtitles = jsonData.get("lableNames").toString().split("\\s+"); // 获取标签属性 String lableNames = autoRule.getLableNames(); if (!StringUtil.isNullOrEmpty(lableNames)) { String[] arrtitles = lableNames.split("\\s+"); // 空格隔开 for (String name : arrtitles) { Label label = labelService.getByTitleCache("labKey", name.trim()); if (label == null) { @@ -135,19 +92,12 @@ } } int source = Integer.parseInt(jobDataMap.get("source").toString()); autoRule.setSource(QualityFactory.SOURCE_TAOBAO); // 1、来源淘宝普通接口 if (BoutiqueAutoRule.TB_OPTIONAL == source) { if (BoutiqueAutoRule.TB_OPTIONAL == autoRule.getSource()) { // 1、来源淘宝普通接口 autoRule.setGoodsSource(QualityFactory.SOURCE_TAOBAO); searchTaoBao(jsonData, listLabs, autoRule); } // 2、淘宝推荐 if (BoutiqueAutoRule.TB_MATERIAL == source) { searchTaoBao(listLabs, autoRule); } else if (BoutiqueAutoRule.TB_MATERIAL == autoRule.getSource()) { // 2、淘宝推荐 autoRule.setGoodsSource(QualityFactory.SOURCE_TAOBAO_MATERIAL); searchMaterial(jsonData, listLabs, autoRule); searchMaterial(listLabs, autoRule); } } catch (Exception e) { @@ -166,13 +116,9 @@ * * @param jobDataMap */ private void searchTaoBao(JSONObject jsonData, List<Label> listLabs, BoutiqueAutoRule autoRule) { private void searchTaoBao(List<Label> listLabs, BoutiqueAutoRule autoRule) { try { String formatDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()); // 页大小,默认100条 int pageSize = 100; boolean isCrawl = true; // 权重起始 int startWeight = 0; @@ -189,14 +135,13 @@ // 最多爬取页码 int pageMax = 200; if (jsonData.get("maxPage") != null) { pageMax = Integer.parseInt(jsonData.get("maxPage").toString()); if (autoRule.getMaxPage() != null) { pageMax = autoRule.getMaxPage(); } /* 参数处理 */ SearchFilter filter = getSearchFilter(jsonData); // 展示条目 filter.setPageSize(pageSize); SearchFilter filter = getSearchFilter(autoRule); filter.setPageSize(100); for (int page = 1; page <= pageMax; page++) { filter.setPage(page); @@ -228,25 +173,22 @@ autoRule.setEndWeight(endWeight); // 筛选入库 screen(listGoods, jsonData, filter, listLabs, autoRule); screen(listGoods, filter, listLabs, autoRule); /* 销售量小值 */ int minSales = 0; if (jsonData.get("startSales") != null) { minSales = (int) jsonData.get("startSales"); if (autoRule.getStartSales() != null) { minSales = autoRule.getStartSales(); } /* 销售量大值 */ int maxSales = 0; if (jsonData.get("endSales") != null) { maxSales = (int) jsonData.get("endSales"); if (autoRule.getEndSales() != null) { maxSales = autoRule.getEndSales(); } // 销量控制 for (TaoBaoGoodsBrief goodsBrief : listGoods) { int biz30day = goodsBrief.getBiz30day(); /* 验证销售量 -- 结束爬取数据 */ if (maxSales > 0 && minSales > 0 && (biz30day < minSales || biz30day > maxSales)) { @@ -279,8 +221,8 @@ } /* 更新完成后清理之前创建的数据 */ if (jsonData.get("systemCid") != null && !StringUtil.isNullOrEmpty(jsonData.get("systemCid").toString())) { Long systemCid = Long.parseLong(jsonData.get("systemCid").toString()); if (!StringUtil.isNullOrEmpty(autoRule.getSystemCid())) { Long systemCid = Long.parseLong(autoRule.getSystemCid()); qualityFactoryService.deleteNotUpdateGoods(systemCid, formatDate, autoRule.getGoodsSource()); } @@ -299,7 +241,7 @@ * * @param jobDataMap */ private void searchMaterial(JSONObject jsonData, List<Label> listLabs, BoutiqueAutoRule autoRule) { private void searchMaterial(List<Label> listLabs, BoutiqueAutoRule autoRule) { try { String formatDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()); @@ -324,12 +266,11 @@ // 最多爬取页码 int pageMax = 200; if (jsonData.get("maxPage") != null) { pageMax = Integer.parseInt(jsonData.get("maxPage").toString()); } if (autoRule.getMaxPage() != null) pageMax = autoRule.getMaxPage(); /* 参数处理 */ SearchFilter filter = getSearchFilter(jsonData); SearchFilter filter = getSearchFilter(autoRule); for (int page = 1; page <= pageMax; page++) { @@ -356,7 +297,7 @@ } // 筛选入库 screen(listGoods, jsonData, filter, listLabs, autoRule); screen(listGoods, filter, listLabs, autoRule); // 总页数爬取完成 @@ -380,8 +321,8 @@ } /* 更新完成后清理之前创建的数据 */ if (jsonData.get("systemCid") != null && !StringUtil.isNullOrEmpty(jsonData.get("systemCid").toString())) { Long systemCid = Long.parseLong(jsonData.get("systemCid").toString()); if (!StringUtil.isNullOrEmpty(autoRule.getSystemCid())) { Long systemCid = Long.parseLong(autoRule.getSystemCid()); qualityFactoryService.deleteNotUpdateGoods(systemCid, formatDate, autoRule.getGoodsSource()); } @@ -401,93 +342,79 @@ * @param jobDataMap * @return */ public SearchFilter getSearchFilter(JSONObject jsonData) { public SearchFilter getSearchFilter(BoutiqueAutoRule autoRule) { SearchFilter filter = new SearchFilter(); // 排序字段 销量高到低(默认) filter.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW); if (jsonData.get("key") != null) { String key = jsonData.get("key").toString(); if (!StringUtil.isNullOrEmpty(key)) { // 搜索关键词 filter.setKey(key); } } if (jsonData.get("cateIds") != null) { filter.setKey(autoRule.getKey()); // 官方推荐商品库投放ID;淘宝类目id集合 filter.setCateIds(jsonData.get("cateIds").toString()); } filter.setCateIds(autoRule.getCateIds()); if (jsonData.get("startZkPrice") != null) { // 在售价范围小值 Double startZkPrice = Double.valueOf(jsonData.get("startZkPrice").toString()); filter.setStartPrice(new BigDecimal(startZkPrice)); if (autoRule.getStartZkPrice() != null) { filter.setStartPrice(new BigDecimal(autoRule.getStartPrice())); } if (jsonData.get("endZkPrice") != null) { // 在售价范围大值 Double endZxPrice = Double.valueOf(jsonData.get("endZkPrice").toString()); filter.setEndPrice(new BigDecimal(endZxPrice)); if (autoRule.getEndZkPrice() != null) { filter.setEndPrice(new BigDecimal(autoRule.getEndZkPrice())); } if (jsonData.get("startTkRate") != null) { // 佣金范围小值 BigDecimal b = new BigDecimal(jsonData.get("startTkRate").toString()); if (autoRule.getStartTkRate() != null) { BigDecimal b = new BigDecimal(autoRule.getStartTkRate()); double df = b.setScale(2, BigDecimal.ROUND_FLOOR).doubleValue(); int tkRate = (int) (df * 100); filter.setStartTkRate(tkRate); } if (jsonData.get("endTkRate") != null) { // 佣金范围大值 BigDecimal b = new BigDecimal(jsonData.get("endTkRate").toString()); if (autoRule.getEndTkRate() != null) { BigDecimal b = new BigDecimal(autoRule.getEndTkRate()); double df = b.setScale(2, BigDecimal.ROUND_FLOOR).doubleValue(); int tkRate = (int) (df * 100); filter.setEndTkRate(tkRate); } if (jsonData.get("isTmall") != null && jsonData.get("isTmall").toString().equals("1")) { // 是否天猫if ("1".equals(isTmall)) { // 是否天猫 if (autoRule.getIsTmall() != null && autoRule.getIsTmall() == 1) { filter.setTmall(true); } if (jsonData.get("hasCoupon") != null && jsonData.get("hasCoupon").toString().equals("1")) { // 是否有券:1 有 0 无 if (autoRule.getHasCoupon() != null && autoRule.getHasCoupon() == 1) { filter.setQuan(1); } if (jsonData.get("freeShipment") != null && jsonData.get("freeShipment").toString().equals("1")) { // 是否包邮:1 有 0 无 if (autoRule.getFreeShipment() != null && autoRule.getFreeShipment() == 1) { filter.setBaoYou(true); // ip地址 // filter.setIp("113.251.22.10");// 重庆 filter.setIp("218.72.111.105");// 杭州 } if (jsonData.get("needPrepay") != null && jsonData.get("needPrepay").toString().equals("1")) { // 是否消费保障:1有 0 无 if (autoRule.getNeedPrepay() != null && autoRule.getNeedPrepay() == 1) { filter.setNeedPrepay(true); } if (jsonData.get("npxLevel") != null) { // 牛皮癣程度,取值:1:不限,2:无,3:轻微 filter.setNpxLevel((int) jsonData.get("npxLevel")); if (autoRule.getNpxLevel() != null && autoRule.getNpxLevel() == 1) { filter.setNpxLevel(autoRule.getNpxLevel()); } if (jsonData.get("includePayRate30") != null && jsonData.get("includePayRate30").toString().equals("1")) { // 成交转化是否高于行业均值 if (autoRule.getIncludePayRate30() != null && autoRule.getIncludePayRate30() == 1) { filter.setIncludePayRate30(true); } if (jsonData.get("includeGoodRate") != null && jsonData.get("includeGoodRate").toString().equals("1")) { // 好评率是否高于行业均值 1 有 0 无 if (autoRule.getIncludeGoodRate() != null && autoRule.getIncludeGoodRate() == 1) { filter.setIncludeGoodRate(true); } if (jsonData.get("includeRfdRate") != null && jsonData.get("includeRfdRate").toString().equals("1")) { // 退款率是否低于行业均值 1 有 0 无 if (autoRule.getIncludeRfdRate() != null && autoRule.getIncludeRfdRate() == 1) { filter.setIncludeRfdRate(true); } return filter; @@ -505,13 +432,13 @@ * @param autoRule * @throws Exception */ public void screen(List<TaoBaoGoodsBrief> taoBaoGoodsBriefs, JSONObject jsonData, SearchFilter filter, public void screen(List<TaoBaoGoodsBrief> taoBaoGoodsBriefs, SearchFilter filter, List<Label> listLabs, BoutiqueAutoRule autoRule) { try { List<TaoBaoGoodsBrief> listGoods = new ArrayList<TaoBaoGoodsBrief>(); for (TaoBaoGoodsBrief goodsBrief : taoBaoGoodsBriefs) { // 验证是否符合要求 if (validate(filter, jsonData, goodsBrief, 1)) { if (validate(filter, autoRule, goodsBrief, 1)) { listGoods.add(goodsBrief); } } @@ -527,22 +454,20 @@ * * @return */ public boolean validate(SearchFilter filter, JSONObject jsonData, TaoBaoGoodsBrief goodsBrief, int source) { /* 销售量小值 */ public boolean validate(SearchFilter filter, BoutiqueAutoRule autoRule, TaoBaoGoodsBrief goodsBrief, int source) { int minSales = 0; if (jsonData.get("startSales") != null) { minSales = (int) jsonData.get("startSales"); } if (autoRule.getStartSales() != null) minSales = autoRule.getStartSales(); /* 销售量大值 */ int maxSales = 0; if (jsonData.get("endSales") != null) { maxSales = (int) jsonData.get("endSales"); } int biz30day = goodsBrief.getBiz30day(); if (autoRule.getEndSales() != null) maxSales = autoRule.getEndSales(); /* 验证销售量 */ if (maxSales == 0 && minSales ==0) { } else { int biz30day = goodsBrief.getBiz30day(); if (maxSales > 0 && minSales > 0 && (biz30day < minSales || biz30day > maxSales)) { return false; } else if (maxSales > 0 && biz30day > maxSales) { @@ -550,15 +475,13 @@ } else if (minSales > 0 && biz30day < minSales) { return false; } } /* 验证比例 */ if (BoutiqueAutoRule.TB_MATERIAL == source) { int startTkRate = filter.getStartTkRate(); int endTkRate = filter.getEndTkRate(); BigDecimal tkRate = goodsBrief.getTkRate(); if (startTkRate > 0 && endTkRate > 0 && (tkRate.compareTo(new BigDecimal(startTkRate / 100)) < 0 || tkRate.compareTo(new BigDecimal(endTkRate / 100)) > 0)) { return false; @@ -571,20 +494,17 @@ /* 券后价范围下限 */ BigDecimal startPrice = null; if (jsonData.get("startPrice") != null) { startPrice = new BigDecimal(jsonData.get("startPrice").toString()); } if (autoRule.getStartPrice() != null) startPrice = new BigDecimal(autoRule.getStartPrice().toString()); /* 券后价范围上限 */ BigDecimal endPrice = null; if (jsonData.get("endPrice") != null) { endPrice = new BigDecimal(jsonData.get("endPrice").toString()); } if (autoRule.getEndPrice() != null) endPrice = new BigDecimal(autoRule.getEndPrice().toString()); /* 券后价--计算 */ if (startPrice == null && endPrice == null) { } else { BigDecimal couponPrice = TaoBaoUtil.getAfterUseCouplePrice(goodsBrief); /* 验证在券后价 */ if (startPrice != null && endPrice != null && (couponPrice.compareTo(startPrice) < 0 || couponPrice.compareTo(endPrice) > 0)) { return false; @@ -593,15 +513,14 @@ } else if (startPrice != null && couponPrice.compareTo(startPrice) < 0) { return false; } } /* 验证在是否有券 */ if (filter.getQuan() > 0) { String couponInfo = goodsBrief.getCouponInfo(); if (StringUtil.isNullOrEmpty(couponInfo)) { if (StringUtil.isNullOrEmpty(couponInfo)) return false; } } return true; } fanli/src/main/java/com/yeshi/fanli/job/QuartzManager.java
@@ -1,10 +1,8 @@ package com.yeshi.fanli.job; import java.util.Iterator; import java.util.Map; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.Job; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; @@ -29,8 +27,8 @@ * @param params * @param cls */ public static void addJob(Scheduler sched, @SuppressWarnings("rawtypes") Class cls, String jobName, String time, Map<String, String> params) { public static void addJob(Scheduler sched, Class <? extends Job> jobClass, String jobName, String time, Object obj) { try { TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME); @@ -38,13 +36,9 @@ if (trigger == null) { LogHelper.test("------addJob---任务创建-----" + jobName + "------- "); JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(jobName, JOB_GROUP_NAME).build(); if (params != null) { Iterator<String> its = params.keySet().iterator(); while (its.hasNext()) { String key = its.next(); jobDetail.getJobDataMap().put(key, params.get(key)); } JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, JOB_GROUP_NAME).build(); if (obj != null) { jobDetail.getJobDataMap().put("key", obj); } CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time); trigger = TriggerBuilder.newTrigger().withIdentity(jobName, TRIGGER_GROUP_NAME) @@ -72,27 +66,20 @@ * @param params * @param cls */ @SuppressWarnings("rawtypes") public static void modifyJob(Scheduler sched, Class cls, String jobName, String time, Map<String, String> params ) { public static void modifyJob(Scheduler sched, Class <? extends Job> jobClass, String jobName, String time, Object obj) { try { LogHelper.test("------modifyJob---任务修改-----" + jobName + "------- "); TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME); CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey); if (trigger == null) { if (trigger == null) return; } // 删除原任务 removeJob(sched, jobName); // 新建任务 addJob(sched, QualityFactoryJob.class, jobName, time, params); addJob(sched, jobClass, jobName, time, obj); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); fanli/src/main/java/com/yeshi/fanli/service/impl/lable/BoutiqueAutoRuleServiceImpl.java
@@ -1,9 +1,7 @@ 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; @@ -19,6 +17,8 @@ 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 { @@ -56,7 +56,6 @@ @Transactional public void deleteBatchByPrimaryKey(List<Long> ids) throws BoutiqueAutoRuleException { for (Long id : ids) { // 删除 boutiqueAutoRuleMapper.deleteByPrimaryKey(id); } } @@ -100,61 +99,41 @@ Integer source = boutiqueAutoRule.getSource(); String cronTime = boutiqueAutoRule.getCronTime(); // 不能为空: 触发时间、请求源、类目 if (source == null || StringUtil.isNullOrEmpty(cronTime)) { 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()+""); jsonTransformString(boutiqueAutoRule); // 任务名 String JobName = "JOB_" + source + "_" + id; try { /* 新建任务 */ if ("add".equalsIgnoreCase(type)) { QuartzManager.addJob(scheduler,QualityFactoryJob.class, JobName, cronTime, params); QuartzManager.addJob(scheduler,QualityFactoryJob.class, JobName, cronTime, boutiqueAutoRule); } /* 修改任务 */ if ("modify".equalsIgnoreCase(type)) { QuartzManager.modifyJob(scheduler, QualityFactoryJob.class, JobName, cronTime, params); QuartzManager.modifyJob(scheduler, QualityFactoryJob.class, JobName, cronTime, boutiqueAutoRule); } /* 删除任务 */ 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(":"); @@ -174,44 +153,31 @@ 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; } @@ -220,13 +186,12 @@ */ @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"); } } @@ -238,7 +203,6 @@ */ @Override public void shutdownJobs() throws Exception { /* 停止任务 */ QuartzManager.shutdownJobs(scheduler); @@ -246,25 +210,127 @@ @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("小时", "")); /** * 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")); } } }