LiteOrderDaoImpl.java 3.9 KB
package com.myproject.dao.mongo.impl;

import com.google.common.collect.Lists;
import com.myproject.bean.json.ChartItem;
import com.myproject.bean.json.LiteOrder;
import com.myproject.bean.json.LiteOrderItem;
import com.myproject.dao.mongo.AbstractMongoDao;
import com.myproject.dao.mongo.ILiteOrderDao;
import com.myproject.dao.mongo.ILiteOrderItemDao;
import com.myproject.util.DateUtil;
import com.myproject.util.StorageConstants;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
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.Repository;

import java.util.*;

/**
 * Created by kangmor on 2015/10/15.
 */
@Repository
public class LiteOrderDaoImpl extends AbstractMongoDao implements ILiteOrderDao {

    @Autowired
    private ILiteOrderItemDao liteOrderItemDao;

    @Override
    public LiteOrder findByOrderNo(String orderNo) {
        if (StringUtils.isEmpty(orderNo))
            return null;
        else return findOneByCondition(new String[] {"orderNo"}, new String[] {orderNo});
    }

    @Override
    public LiteOrder createWithItems(LiteOrder liteOrder){
        List<LiteOrderItem> items = Lists.newArrayList();
        for (LiteOrderItem liteOrderItem : liteOrder.getOrderItems()) {
            liteOrderItem.setOrderNo(liteOrder.getOrderNo());
            liteOrderItem = liteOrderItemDao.save(liteOrderItem);
            items.add(liteOrderItem);
        }
        liteOrder  = save(liteOrder);
        liteOrder.setOrderItems(items);
        return liteOrder;
    }

    @Override
    public LiteOrder findWithItemsByOrderNo(String orderNo){
        LiteOrder order = findByOrderNo(orderNo);
        if(order != null){
            List<LiteOrderItem> items = liteOrderItemDao.findOrderItems(orderNo);
            order.setOrderItems(items);
        }
        return order;
    }

    @Override
    public int countFinishOrder(Date fromTime, Date toTime){
        Date addOneDayToTime = DateUtil.addOneDayNoTime(toTime);
        Criteria c = new Criteria().andOperator(Criteria.where("updateDate").gte(fromTime),
                Criteria.where("updateDate").lt(addOneDayToTime));
        return countByQuery(Query.query(c));
    }

    @Override
    public List<ChartItem> orderChart(Date fromTime, Date toTime){
        Date addOneDayToTime = DateUtil.addOneDayNoTime(toTime);
        Criteria c = new Criteria().andOperator(Criteria.where("updateDate").gte(fromTime),
                Criteria.where("updateDate").lt(addOneDayToTime));
        Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(c),
                Aggregation.project().and("updateDate").extractDayOfYear().as("label"),
                Aggregation.group("label").count().as("value"),
                Aggregation.project("value").and("label").previousOperation()
        );
        AggregationResults<ChartItem> results = getMongoTemplate().aggregate(agg, getEntityClass(), ChartItem.class);
        return results.getMappedResults();
    }

    @Override
    public LiteOrder findBySource(String source) {
        if (StringUtils.isEmpty(source))
            return null;
        else return findOneByCondition(new String[] {"source"}, new String[] {source});
    }

    @Override
    public List<LiteOrder> findUnCloseOrders() {
        Criteria c = Criteria.where("closed").ne(true);
        Query query = Query.query(c);
        query.with(new Sort(Sort.Direction.DESC,"createDate"));
        return findByQuery(query);
    }

    @Override
    public Class getEntityClass() {
        return LiteOrder.class;
    }

}