首页 > 其他 > 详细

卡片推荐部分代码

时间:2017-01-16 21:32:21      阅读:205      评论:0      收藏:0      [点我收藏+]
技术分享
import _ from ‘lodash‘;
import cfg from ‘../cfg/cfg‘;
import {Response} from ‘../shared/lib/response‘;
import {RecDB} from ‘../lib/mongo.js‘;
import {timed} from ‘../utils/metrics‘;

let config = cfg.recommend.mongo;
// 获取用户的观看电影的卡片
let getreadCards = async(opts) => {
  opts = opts || {};
  let id = opts.id;
  if (!id) {
    return {
      total: 0,
      data: []
    };
  }
  let readCards = timed(‘personRec.readCards‘, async() => {
    let doRead = await RecDB.findOne({
      query: {
        id: opts.id
      },
      collection: ‘label‘
    });
    return doRead;
  });
  let res = await readCards();
  let results = res ? res.result : null;
  results = results || [];
  return results;
  // let videos = _.orderBy(results, [‘weight‘], [‘desc‘]);
  // let videos = _.map(_.sortByOrder(results, [‘weight‘], [‘desc‘]), _.values);
  // let videos = _.map(results, ‘cards‘);
};
// 获取每个卡片对应的电影
let getRealtimeCardVideos = async(opts) => {
  opts = opts || {};
  let cards = opts.cards;
  if (!cards) {
    return {
      total: 0,
      data: []
    };
  }
  let read = timed(‘personRec.realtimeCardVideos‘, async() => {
    let doRead = await RecDB.findOne({
      query: {
        cards: opts.cards
      },
      collection: ‘label1‘
    });
    return doRead;
  });
  let res = await read();
  res = res ? res.result : null;
   // console.log(JSON.stringify(res));
  res = res || [];
  let videos = _.chain(res)
  .forEach((val) => {
    val.type = ‘realtimeCard‘;
  })
  .value();
  return videos;
};
// 获得所有的热度卡片
let getHotCards = async (opts) => {
  opts = opts || {};
  let page = opts.page;
  let pageSize = opts.pageSize;
  let read = timed(‘personalRec.readCards‘, async () => {
    let doRead = await RecDB.read({
      options: {
        skip: (page-1) * pageSize;
        limit: page;
      }
      collection: ‘movielabel‘
    });
    return doRead;
  });
  let res = await read();
  let hotCards = res ? res.result : null;
  hotCards = hotCards || [];
  return hotCards;
  return {
    total: hotCards.length,
    data: hotCards
  };
};
let getUserRecords = async(opts) => {
  opts = opts || {};
  let macId = opts.macId;
  if (!macId) {
    return {
      total: 0,
      data: []
    };
  }
  // userrecord 用户的实时记录
  let readRecords = timed(‘personRec.readRecords‘, async() => {
    let doRead = await RecDB.findOne({
      query: {
        mac: opts.macId
      },
      collection: ‘userrecord‘
    });
    return doRead;
  });
  let res = await readRecords();
  let result = res ? res.vv : null;
  result = result || [];
  let videos = _.map(result, ‘id‘);
  return videos;
};
let getPersonalCards = async (opts) => {
  opts = opts || {};
  let page = opts.page;
  let pageSize = opts.pageSize;
  let realtimeCard = [];
  // console.log(group+‘11111‘);
   // 获取分组对应的 collection
  console.log(collectionName);
  let macId = opts.macId;
  if (!macId || !collectionName) {
    return {
      total: 0,
      data: []
    };
  }
  let readVideos = timed(‘personalRec.readPersonalCards‘, async () => {
    let doRead = await RecDB.read({
      query: {
        mac: macId
      },
      collection: ‘personalCards‘
    });
    return doRead;
  });
  let [res, record, oldrecord] = await Promise.all([
    readVideos(),
    getUserRecords({macId}),
    getoldRecords({macId})
  ]);
  // console.log(‘----------------‘);
  // console.log(oldrecord);
  // console.log(‘----------------‘);
  // console.log(macId, collectionName, res)
  // 将获取的卡片排序

  // 将获取的卡片转换成电影
  let cardVideos = [];
  for (let labe of realtimeCard) {  
    let weight = labe.weight;
    cardVideos = _.uniq(_.concat(cardVideos, card), ‘id‘);
  }
  console.log(cardVideos);
  userPrefers = _.concat(userPrefers, record);
  let real = _.chain(realtime).map((val) => {
    let temp = {
      id: val.id,
      group: val.group,
      type: val.type
    };
    // console.log(JSON.stringify(temp));
    return temp;
  }).filter(val => !_.includes(userPrefers, val.id))
  .value();
  // res = res ? res.result : null;
  res = res ? res[0].result : null;
  // console.log(res);
  let realtimeCards = [];
  if (res.length === 0) {
    let hotCards = await getHotCards({page: page, pageSize: pageSize});
    for (let video of record) {
  // console.log(video)
    let appendLabel = await getreadCards({id: video});
    let weigh = appendLabel.weight;
    let movies = await getRealtimeCardVideos({cards: appendLabel.id});
    let movie = _.find(movies, (item) => item.id === video);
    weigh = weigh + (movie.weight ? movie.weight: 0);
    let card = _.find(hotCards, (item) => item.labelid === appendLabel.labelid);
    card.weight = weigh;
   // realtimeCard = _.uniq(_.concat(realtimeCard, appendLabel));
    // console.log(JSON.stringify(append));
    };
    realtimeCards = _.orderBy(results, [‘weight‘], [‘desc‘]);
  };
  else {
     for (let video of record) {
  // console.log(video)
    let appendLabel = await getreadCards({id: video});
    let weigh = appendLabel.weight;
    let movies = await getRealtimeCardVideos({cards: appendLabel.id});
    let movie = _.find(movies, (item) => item.id === video);
    weigh = weigh + (movie.weight ? movie.weight: 0);
    let card = _.find(res, (item) => item.labelid === appendLabel.labelid);
    card.weight = weigh;
    let start = (page - 1) * pageSize;
    let end = page * pageSize;
    realtimeCards = _.orderBy(res, [‘weight‘], [‘desc‘]);
    return {
      total: realtimeCards.length,
      data: realtimeCards
      };
    };
  };
};

let realtimeRecHandler = async (ctx) => {
  let query = ctx.query;
  // let page = query.page;
  let page = parseInt(query.page, 10) || 1;
  let pageSize = parseInt(query.pageSize, 10) || 10;
  let macId = query.macId;
  let res = await getPersonalVideos({
    page,
    pageSize,
    macId
  });
  let pageCount = Math.ceil(res.total / pageSize);
  return new Response({
    data: {
      page,
      pageSize,
      pageCount,
      macId,
      total: res.total,
      videos: res.data
    }
  });
};

export {
  realtimeRecHandler,
};
View Code

 

卡片推荐部分代码

原文:http://www.cnblogs.com/peizhe123/p/6290953.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!