admin
2022-04-21 2464548977f4720bc8fceeb5d999c1a3852c2d10
app/src/main/java/com/yeshi/makemoney/app/service/impl/goldcorn/GoldCornGetRecordServiceImpl.java
@@ -3,9 +3,11 @@
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.entity.goldcorn.GoldCornGetType;
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 com.yeshi.makemoney.app.utils.goldcorn.GoldCornUtil;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
@@ -14,6 +16,7 @@
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.yeshi.utils.TimeUtil;
import javax.annotation.Resource;
import java.util.*;
@@ -29,6 +32,10 @@
        DaoQuery daoQuery = new DaoQuery();
        daoQuery.type = goldCornGetRecordQuery.getType();
        daoQuery.uid = goldCornGetRecordQuery.getUid();
        daoQuery.day=goldCornGetRecordQuery.getDay();
        daoQuery.dayList=goldCornGetRecordQuery.getDayList();
        daoQuery.minCreateTime = goldCornGetRecordQuery.toStartTime();
        daoQuery.maxCreateTime = goldCornGetRecordQuery.toEndTime();
@@ -43,6 +50,8 @@
        DaoQuery daoQuery = new DaoQuery();
        daoQuery.type = goldCornGetRecordQuery.getType();
        daoQuery.uid = goldCornGetRecordQuery.getUid();
        daoQuery.day=goldCornGetRecordQuery.getDay();
        daoQuery.dayList=goldCornGetRecordQuery.getDayList();
        daoQuery.minCreateTime = goldCornGetRecordQuery.toStartTime();
        daoQuery.maxCreateTime = goldCornGetRecordQuery.toEndTime();
        return goldCornGetRecordDao.count(daoQuery);
@@ -84,13 +93,14 @@
    }
    @Override
    public Long getGoldCornByDay(Long uid, String day) {
    public Long getGoldCornByDay(Long uid, Date 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));
            andList.add(Criteria.where("day").is(GoldCornUtil.getFormatDay(day)));
        }
        Criteria[] ands = new Criteria[andList.size()];
@@ -135,6 +145,9 @@
    @Override
    public Map<Long, Integer> sumGoldCornByFromUids(Long uid, List<Long> fromUidList, String day) {
        if (fromUidList == null || fromUidList.size() == 0) {
            return new HashMap<>();
        }
        Criteria[] ands = new Criteria[3];
        ands[0] = Criteria.where("day").is(day);
        ands[1] = Criteria.where("uid").is(uid);
@@ -143,7 +156,7 @@
        for (int i = 0; i < ors.length; i++) {
            ors[i] = Criteria.where("fromUid").is(fromUidList.get(i));
        }
        ands[3] = new Criteria().orOperator(ors);
        ands[2] = new Criteria().orOperator(ors);
        List<AggregationOperation> list = new ArrayList<>();
        list.add(Aggregation.match(new Criteria().andOperator(ands)));
@@ -159,5 +172,33 @@
        return map;
    }
    @Override
    public int getContinueDay(Long uid, GoldCornGetType type, Date deadDate) {
        List<AggregationOperation> list = new ArrayList<>();
        list.add(Aggregation.match(Criteria.where("uid").is(uid).and("type").is(type).and("createTime").lte(deadDate)));
        list.add(Aggregation.group("day").max("createTime").as("createTime"));
        list.add(Aggregation.sort(Sort.Direction.DESC, "createTime"));
        //最大限制为365天
        list.add(Aggregation.limit(365));
        list.add(Aggregation.project("day"));
        AggregationResults<Map<String,String>> results = goldCornGetRecordDao.aggregate(list, Map.class);
        List<Map<String,String>> resultList = results.getMappedResults();
        //获取连续的天数
        String format="yyyy-MM-dd";
        Date lastDay = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(deadDate.getTime(), format), format));
        int continueDay = 0;
        for (Map<String,String> day : resultList) {
            Long timestamp = TimeUtil.convertToTimeTemp(day.get("_id"), format);
            long cha = lastDay.getTime() - timestamp;
            if (cha <= 1000 * 60 * 60 * 24L) {
                continueDay++;
            } else {
                break;
            }
            lastDay = new Date(timestamp);
        }
        return continueDay;
    }
}