package com.yeshi.makemoney.app.service.impl.goldcorn;
|
|
import java.lang.Exception;
|
import javax.annotation.Resource;
|
|
import com.google.gson.Gson;
|
import com.google.gson.reflect.TypeToken;
|
import com.yeshi.makemoney.app.entity.SystemEnum;
|
import com.yeshi.makemoney.app.entity.config.SystemConfigKey;
|
import com.yeshi.makemoney.app.entity.goldcorn.GoldCornGetType;
|
import com.yeshi.makemoney.app.entity.user.UserInfo;
|
import com.yeshi.makemoney.app.exception.goldcorn.GoldCornGetPriceException;
|
import com.yeshi.makemoney.app.service.inter.config.SystemConfigService;
|
import com.yeshi.makemoney.app.service.inter.team.TeamInviteRelationService;
|
import org.springframework.data.domain.Sort;
|
import org.springframework.stereotype.Service;
|
|
import java.lang.reflect.Type;
|
import java.math.BigDecimal;
|
import java.util.Arrays;
|
import java.util.Date;
|
|
import org.yeshi.utils.StringUtil;
|
import org.yeshi.utils.TimeUtil;
|
import org.yeshi.utils.bean.BeanUtil;
|
|
import java.util.List;
|
|
import com.yeshi.makemoney.app.dao.goldcorn.GoldCornGetPriceDao;
|
import com.yeshi.makemoney.app.entity.goldcorn.GoldCornGetPrice;
|
import com.yeshi.makemoney.app.service.inter.goldcorn.GoldCornGetPriceService;
|
import com.yeshi.makemoney.app.service.query.goldcorn.GoldCornGetPriceQuery;
|
import com.yeshi.makemoney.app.dao.goldcorn.GoldCornGetPriceDao.DaoQuery;
|
|
import org.springframework.data.mongodb.core.query.Criteria;
|
import org.springframework.data.mongodb.core.query.Query;
|
|
@Service
|
public class GoldCornGetPriceServiceImpl implements GoldCornGetPriceService {
|
|
@Resource
|
private GoldCornGetPriceDao goldCornGetPriceDao;
|
|
@Resource
|
private SystemConfigService systemConfigService;
|
|
@Resource
|
private TeamInviteRelationService teamInviteRelationService;
|
|
@Override
|
public List<GoldCornGetPrice> list(GoldCornGetPriceQuery goldCornGetPriceQuery, int page, int pageSize) {
|
DaoQuery daoQuery = new DaoQuery();
|
daoQuery.type = goldCornGetPriceQuery.getType();
|
daoQuery.minValidateTime = goldCornGetPriceQuery.toStartTime();
|
daoQuery.maxValidateTime = goldCornGetPriceQuery.toEndTime();
|
|
|
daoQuery.start = (page - 1) * pageSize;
|
daoQuery.count = pageSize;
|
return goldCornGetPriceDao.list(daoQuery);
|
}
|
|
@Override
|
public long count(GoldCornGetPriceQuery goldCornGetPriceQuery) {
|
DaoQuery daoQuery = new DaoQuery();
|
daoQuery.type = goldCornGetPriceQuery.getType();
|
daoQuery.minValidateTime = goldCornGetPriceQuery.toStartTime();
|
daoQuery.maxValidateTime = goldCornGetPriceQuery.toEndTime();
|
return goldCornGetPriceDao.count(daoQuery);
|
}
|
|
@Override
|
public GoldCornGetPrice get(String id) {
|
Query query = new Query();
|
query.addCriteria(Criteria.where("_id").is(id));
|
return goldCornGetPriceDao.findOne(query);
|
}
|
|
@Override
|
public void add(GoldCornGetPrice goldCornGetPrice) throws Exception {
|
|
|
if (goldCornGetPrice.getCreateTime() == null) {
|
goldCornGetPrice.setCreateTime(new Date());
|
}
|
|
if (goldCornGetPrice.getId() == null) {
|
goldCornGetPrice.setId(goldCornGetPrice.toId());
|
}
|
//查询主键ID是否存在
|
if (goldCornGetPriceDao.get(goldCornGetPrice.getId()) != null) {
|
throw new Exception("已存在");
|
}
|
|
//保存
|
goldCornGetPriceDao.save(goldCornGetPrice);
|
}
|
|
@Override
|
public void update(GoldCornGetPrice goldCornGetPrice) {
|
if (goldCornGetPrice.getUpdateTime() == null) {
|
goldCornGetPrice.setUpdateTime(new Date());
|
}
|
//更新
|
goldCornGetPriceDao.updateSelective(goldCornGetPrice);
|
}
|
|
@Override
|
public void delete(List<String> idList) {
|
for (String id : idList) {
|
goldCornGetPriceDao.delete(id);
|
}
|
}
|
|
@Override
|
public GoldCornGetPrice getPrice(SystemEnum system, GoldCornGetType type, Date date) {
|
DaoQuery daoQuery = new DaoQuery();
|
daoQuery.maxValidateTime = date;
|
daoQuery.system = system;
|
daoQuery.type = type;
|
daoQuery.sortList = Arrays.asList(new Sort.Order[]{Sort.Order.desc("validateTime")});
|
daoQuery.count = 1;
|
|
List<GoldCornGetPrice> list = goldCornGetPriceDao.list(daoQuery);
|
if (list != null && list.size() > 0) {
|
return list.get(0);
|
}
|
return null;
|
}
|
|
@Override
|
public Integer getPriceCornNum(SystemEnum system, GoldCornGetType type, Date date, boolean hasBoss) {
|
GoldCornGetPrice price = getPrice(system, type, date);
|
if (price == null) {
|
return null;
|
}
|
return new BigDecimal(price.getCornNum()).multiply(new BigDecimal(1).add(price.getTeamGainRate())).intValue();
|
}
|
|
@Override
|
public Integer getSingInPrice(SystemEnum system, int continueDay) {
|
List<Integer> list = getSingInPriceList(system);
|
if (list == null) {
|
return null;
|
}
|
|
if (continueDay >= list.size()) {
|
return list.get(list.size() - 1);
|
}
|
|
if (continueDay <= 0) {
|
return list.get(0);
|
}
|
|
return list.get(continueDay - 1);
|
}
|
|
@Override
|
public List<Integer> getSingInPriceList(SystemEnum system) {
|
String value = systemConfigService.getValueCache(system, SystemConfigKey.signInGoldCorn);
|
if (StringUtil.isNullOrEmpty(value)) {
|
return null;
|
}
|
Type type = new TypeToken<List<Integer>>() {
|
}.getType();
|
return new Gson().fromJson(value, type);
|
}
|
|
@Override
|
public Integer getWatchVideoPrice(UserInfo user, Date date, int timeSeconds) throws GoldCornGetPriceException {
|
|
//获取价格
|
GoldCornGetPrice getPrice = getPrice(user.getSystem(), GoldCornGetType.watchVideo, date);
|
if (getPrice == null) {
|
throw new GoldCornGetPriceException(GoldCornGetPriceException.CODE_NOT_EXIST, "价格信息缺失");
|
}
|
|
int goldCorn = (int) (timeSeconds * getPrice.getCornNum() / 60.0f);
|
|
//加上团队增益比例
|
if (teamInviteRelationService.getBossUid(user.getId()) != null) {
|
goldCorn = new BigDecimal(goldCorn).multiply(new BigDecimal(1).add(getPrice.getTeamGainRate())).intValue();
|
}
|
|
return goldCorn;
|
}
|
|
@Override
|
public Integer getReadNovelPrice(UserInfo user, Date date, int timeSeconds) throws GoldCornGetPriceException {
|
|
//获取价格
|
GoldCornGetPrice getPrice = getPrice(user.getSystem(), GoldCornGetType.readNovel, date);
|
if (getPrice == null) {
|
throw new GoldCornGetPriceException(GoldCornGetPriceException.CODE_NOT_EXIST, "价格信息缺失");
|
}
|
|
int goldCorn = (int) (timeSeconds * getPrice.getCornNum() / 60.0f);
|
|
//加上团队增益比例
|
if (teamInviteRelationService.getBossUid(user.getId()) != null) {
|
goldCorn = new BigDecimal(goldCorn).multiply(new BigDecimal(1).add(getPrice.getTeamGainRate())).intValue();
|
}
|
|
return goldCorn;
|
}
|
|
@Override
|
public Integer getScanNewsPrice(UserInfo user, Date date, int num) throws GoldCornGetPriceException {
|
//获取价格
|
GoldCornGetPrice getPrice = getPrice(user.getSystem(), GoldCornGetType.scanNews, date);
|
if (getPrice == null) {
|
throw new GoldCornGetPriceException(GoldCornGetPriceException.CODE_NOT_EXIST, "价格信息缺失");
|
}
|
|
int goldCorn = num * getPrice.getCornNum();
|
|
//加上团队增益比例
|
if (teamInviteRelationService.getBossUid(user.getId()) != null) {
|
goldCorn = new BigDecimal(goldCorn).multiply(new BigDecimal(1).add(getPrice.getTeamGainRate())).intValue();
|
}
|
|
return goldCorn;
|
}
|
|
|
}
|