| | |
| | | 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 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.BoutiqueAutoRuleException;
|
| | | 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 {
|
| | |
| | | }
|
| | |
|
| | | @Override
|
| | | @Transactional
|
| | | @Transactional(rollbackFor=Exception.class)
|
| | | public void deleteByPrimaryKey(Long id) throws BoutiqueAutoRuleException {
|
| | | boutiqueAutoRuleMapper.deleteByPrimaryKey(id);
|
| | | }
|
| | |
|
| | | @Override
|
| | | @Transactional
|
| | | @Transactional(rollbackFor=Exception.class)
|
| | | public void deleteBatchByPrimaryKey(List<Long> ids) throws BoutiqueAutoRuleException {
|
| | | for (Long id : ids) {
|
| | | // 删除
|
| | | boutiqueAutoRuleMapper.deleteByPrimaryKey(id);
|
| | | }
|
| | | }
|
| | |
| | |
|
| | | 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();
|
| | | 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(":");
|
| | |
| | | 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);
|
| | | }
|
| | |
|
| | | 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("天", "") + " * ?";
|
| | | |
| | | // 0 34 3 1/5 * ?
|
| | | // 秒 小时 分 相隔天数
|
| | | cronTime = 0 + " " + minute + " " + hour + " " + "1/" + day.replace("天", "") + " * ?";
|
| | | }
|
| | | |
| | | |
| | | |
| | | return cronTime;
|
| | | }
|
| | |
|
| | |
| | | */
|
| | | @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")); |
| | | }
|
| | | }
|
| | | |
| | | public static void main(String[] args) {
|
| | | String t = "3小时";
|
| | | System.out.println(t.replace("小时", ""));
|
| | | }
|
| | | |
| | | }
|