package com.yeshi.makemoney.app.service.impl.goldcorn;
|
|
import com.yeshi.makemoney.app.dao.goldcorn.GoldCornGetRecordDao;
|
import com.yeshi.makemoney.app.dao.goldcorn.GoldCornGetRecordDao.DaoQuery;
|
import com.yeshi.makemoney.app.entity.goldcorn.GoldCornGetRecord;
|
import com.yeshi.makemoney.app.exception.goldcorn.GoldCornGetRecordException;
|
import com.yeshi.makemoney.app.service.inter.goldcorn.GoldCornGetRecordService;
|
import com.yeshi.makemoney.app.service.query.goldcorn.GoldCornGetRecordQuery;
|
import org.springframework.data.domain.Sort;
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
import org.springframework.data.mongodb.core.aggregation.Aggregation;
|
import org.springframework.data.mongodb.core.aggregation.AggregationOperation;
|
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
|
import org.springframework.data.mongodb.core.query.Criteria;
|
import org.springframework.data.mongodb.core.query.Query;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.*;
|
|
@Service
|
public class GoldCornGetRecordServiceImpl implements GoldCornGetRecordService {
|
|
@Resource
|
private GoldCornGetRecordDao goldCornGetRecordDao;
|
|
@Override
|
public List<GoldCornGetRecord> list(GoldCornGetRecordQuery goldCornGetRecordQuery, int page, int pageSize) {
|
DaoQuery daoQuery = new DaoQuery();
|
daoQuery.type = goldCornGetRecordQuery.getType();
|
daoQuery.uid = goldCornGetRecordQuery.getUid();
|
daoQuery.minCreateTime = goldCornGetRecordQuery.toStartTime();
|
daoQuery.maxCreateTime = goldCornGetRecordQuery.toEndTime();
|
|
daoQuery.start = (page - 1) * pageSize;
|
daoQuery.count = pageSize;
|
daoQuery.sortList = Arrays.asList(new Sort.Order[]{Sort.Order.desc("createTime")});
|
return goldCornGetRecordDao.list(daoQuery);
|
}
|
|
@Override
|
public long count(GoldCornGetRecordQuery goldCornGetRecordQuery) {
|
DaoQuery daoQuery = new DaoQuery();
|
daoQuery.type = goldCornGetRecordQuery.getType();
|
daoQuery.uid = goldCornGetRecordQuery.getUid();
|
daoQuery.minCreateTime = goldCornGetRecordQuery.toStartTime();
|
daoQuery.maxCreateTime = goldCornGetRecordQuery.toEndTime();
|
return goldCornGetRecordDao.count(daoQuery);
|
}
|
|
@Override
|
public GoldCornGetRecord get(String id) {
|
Query query = new Query();
|
query.addCriteria(Criteria.where("_id").is(id));
|
return goldCornGetRecordDao.findOne(query);
|
}
|
|
@Override
|
public void add(GoldCornGetRecord goldCornGetRecord) throws GoldCornGetRecordException {
|
|
if (goldCornGetRecord.getCreateTime() == null) {
|
goldCornGetRecord.setCreateTime(new Date());
|
}
|
|
goldCornGetRecord.setId(goldCornGetRecord.toId());
|
|
//查询主键ID是否存在
|
if (goldCornGetRecordDao.get(goldCornGetRecord.getId()) != null) {
|
throw new GoldCornGetRecordException(GoldCornGetRecordException.CODE_EXIST, "已存在");
|
}
|
|
|
//保存
|
goldCornGetRecordDao.save(goldCornGetRecord);
|
}
|
|
@Override
|
public void update(GoldCornGetRecord goldCornGetRecord) {
|
if (goldCornGetRecord.getUpdateTime() == null) {
|
goldCornGetRecord.setUpdateTime(new Date());
|
}
|
//更新
|
goldCornGetRecordDao.updateSelective(goldCornGetRecord);
|
}
|
|
@Override
|
public Long getGoldCornByDay(Long uid, String day) {
|
List<Criteria> andList = new ArrayList<>();
|
if (uid != null) {
|
andList.add(Criteria.where("uid").is(uid));
|
}
|
if (day != null) {
|
andList.add(Criteria.where("day").is(day));
|
}
|
|
Criteria[] ands = new Criteria[andList.size()];
|
andList.toArray(ands);
|
List<AggregationOperation> list = new ArrayList<>();
|
if (ands.length > 0) {
|
list.add(Aggregation.match(new Criteria().andOperator(ands)));
|
}
|
list.add(Aggregation.group().sum("cornNum").as("goldcorn"));
|
AggregationResults<Map> results = goldCornGetRecordDao.aggregate(list, Map.class);
|
return results.getUniqueMappedResult() == null ? 0L : Long.parseLong(results.getUniqueMappedResult().get("goldcorn") + "");
|
}
|
|
@Override
|
public List<Long> getUidsByDay(String day, int page, int pageSize) {
|
List<Long> uidList = new ArrayList<>();
|
List<AggregationOperation> list = new ArrayList<>();
|
list.add(Aggregation.match(Criteria.where("day").is(day)));
|
list.add(Aggregation.group("uid"));
|
list.add(Aggregation.project("uid"));
|
list.add(Aggregation.skip((long) ((page - 1) * pageSize)));
|
list.add(Aggregation.limit((long) pageSize));
|
AggregationResults<Map> results = goldCornGetRecordDao.aggregate(list, Map.class);
|
List<Map> resultList = results.getMappedResults();
|
if (resultList != null) {
|
for (Map map : resultList) {
|
uidList.add(Long.parseLong(map.get("_id") + ""));
|
}
|
}
|
return uidList;
|
}
|
|
@Override
|
public long countUidsByDay(String day) {
|
List<AggregationOperation> list = new ArrayList<>();
|
list.add(Aggregation.match(Criteria.where("day").is(day)));
|
list.add(Aggregation.group("uid"));
|
list.add(Aggregation.group().count().as("count"));
|
AggregationResults<Map> results = goldCornGetRecordDao.aggregate(list, Map.class);
|
return results.getUniqueMappedResult() == null ? 0L : Long.parseLong(results.getUniqueMappedResult().get("count") + "");
|
}
|
|
|
}
|