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"));
|
}
|
}
|
}
|