package com.ks.lucky.service.impl.remote;
|
|
import com.ks.app.exception.AppException;
|
import com.ks.lucky.exception.LuckyActivityException;
|
import com.ks.lucky.exception.LuckyMQException;
|
import com.ks.lucky.mapper.LuckyActivityMapper;
|
import com.ks.lucky.pojo.DO.LuckyActivity;
|
import com.ks.lucky.pojo.DO.LuckyActivityAwards;
|
import com.ks.lucky.pojo.DO.LuckyActivityOpenInfo;
|
import com.ks.lucky.pojo.DO.LuckyActivitySponsorInfo;
|
import com.ks.lucky.query.ActivityDaoQuery;
|
import com.ks.lucky.remote.service.LuckyActivityService;
|
import com.ks.lucky.service.LuckyMQService;
|
import com.ks.lucky.service.impl.AppManager;
|
import com.ks.lucky.service.impl.LuckyActivityAwardManager;
|
import com.ks.lucky.service.impl.LuckyActivityOpenInfoManager;
|
import com.ks.lucky.service.impl.LuckyActivitySponsorInfoManager;
|
import com.ks.lucky.util.mq.LuckyMQFactory;
|
import org.apache.dubbo.config.annotation.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.validation.annotation.Validated;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
import java.util.List;
|
|
@Service(version = "1.0")
|
public class LuckyActivityServiceImpl implements LuckyActivityService {
|
|
@Resource
|
private LuckyActivityMapper luckyActivityMapper;
|
|
@Resource
|
private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager;
|
|
@Resource
|
private LuckyActivitySponsorInfoManager luckyActivitySponsorInfoManager;
|
|
@Resource
|
private LuckyActivityAwardManager luckyActivityAwardManager;
|
|
@Resource
|
private AppManager appManager;
|
|
@Resource
|
private LuckyMQService luckyMQService;
|
|
private Long getAppId(String appKey) throws AppException {
|
return appManager.getAppId(appKey);
|
}
|
|
@Override
|
public List<LuckyActivity> getActivityList(String appKey, Long sponsorId, List<Integer> stateList, String key, int page, int pageSize) {
|
ActivityDaoQuery query = new ActivityDaoQuery();
|
query.stateList = stateList;
|
query.key = key;
|
query.sponsorId = sponsorId;
|
|
try {
|
query.appId = getAppId(appKey);
|
} catch (AppException e) {
|
return null;
|
}
|
query.start = (page - 1) * pageSize;
|
query.count = pageSize;
|
query.sort = "start_time desc";
|
return luckyActivityMapper.list(query);
|
}
|
|
@Override
|
public long countActivity(String appKey, Long sponsorId, List<Integer> stateList, String key) {
|
ActivityDaoQuery query = new ActivityDaoQuery();
|
query.stateList = stateList;
|
query.key = key;
|
query.sponsorId = sponsorId;
|
try {
|
query.appId = getAppId(appKey);
|
} catch (AppException e) {
|
return 0L;
|
}
|
return luckyActivityMapper.count(query);
|
}
|
|
|
@Validated
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void createActivity(LuckyActivity activity) throws LuckyActivityException {
|
|
if (activity.getAwardsList() == null || activity.getAwardsList().size() == 0) {
|
throw new LuckyActivityException(LuckyActivityException.CODE_PARAMS_NOT_ENOUGH, "请设置奖项信息");
|
}
|
|
if (activity.getOpenInfo() == null) {
|
throw new LuckyActivityException(LuckyActivityException.CODE_PARAMS_NOT_ENOUGH, "请设置开奖信息");
|
}
|
if (activity.getSponsorInfo() == null) {
|
throw new LuckyActivityException(LuckyActivityException.CODE_PARAMS_NOT_ENOUGH, "请设置赞助信息");
|
}
|
|
|
// luckyActivityOpenInfoManager.addOpenInfo(activity.getOpenInfo());
|
//
|
//
|
// luckyActivitySponsorInfoManager.addOpenInfo();
|
|
//TODO 添加其他信息
|
|
|
}
|
|
|
/**
|
* 检查要发布的活动
|
*
|
* @param activity
|
*/
|
private void checkActivityForPublish(LuckyActivity activity) throws LuckyActivityException {
|
if (activity == null) {
|
throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在");
|
}
|
if (activity.getStartTime() == null) {
|
throw new LuckyActivityException(1, "活动开始时间未设置");
|
}
|
|
if (activity.getStartTime().getTime() < System.currentTimeMillis()) {
|
throw new LuckyActivityException(1, "活动开始时间不能小于当前时间");
|
}
|
|
if (activity.getFinishTime() != null && activity.getStartTime().getTime() >= activity.getFinishTime().getTime()) {
|
throw new LuckyActivityException(1, "活动开始结束时间不能小于开始时间");
|
}
|
|
//TODO 检查更多参数
|
|
|
//检查活动状态
|
if (activity.getState() != LuckyActivity.STATE_NOT_PUBLISH) {
|
throw new LuckyActivityException(1, "活动已发布");
|
}
|
//检查开奖信息
|
LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activity.getId());
|
if (openInfo == null) {
|
throw new LuckyActivityException(2, "不存在开奖信息");
|
}
|
|
LuckyActivitySponsorInfo sponsorInfo = luckyActivitySponsorInfoManager.getSponsorInfo(activity.getId());
|
if (sponsorInfo == null) {
|
throw new LuckyActivityException(2, "不存在赞助信息");
|
}
|
|
List<LuckyActivityAwards> awardsList = luckyActivityAwardManager.getAwardList(activity.getId());
|
if (awardsList == null || awardsList.size() == 0) {
|
throw new LuckyActivityException(2, "不存在奖项信息");
|
}
|
|
|
}
|
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void publishActivity(Long activityId) throws LuckyActivityException {
|
LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
|
checkActivityForPublish(activity);
|
|
LuckyActivity update = new LuckyActivity();
|
update.setId(activityId);
|
update.setState(LuckyActivity.STATE_NOT_STARTED);
|
update.setStateRemarks("已发布");
|
update.setUpdateTime(new Date());
|
|
//加入代发消息列表
|
try {
|
luckyMQService.addMQ(LuckyMQFactory.createStartUpActivity(activity));
|
} catch (LuckyMQException e) {
|
throw new LuckyActivityException(10, "消息投递失败");
|
}
|
}
|
|
@Override
|
public void verifyActivity(Long activityId, boolean pass, String remarks) throws LuckyActivityException {
|
|
}
|
|
@Override
|
public LuckyActivity getActivityDetail(Long id) {
|
return null;
|
}
|
|
@Override
|
public void updateActivity(LuckyActivity activity) throws LuckyActivityException {
|
|
}
|
|
|
}
|