|
@@ -0,0 +1,266 @@
|
|
|
+const HttpClient = require('../src/HttpClient');
|
|
|
+const helper = require('../src/helper');
|
|
|
+const tools = require('../tools');
|
|
|
+const video_product_controllers = require('../src/data_manager/Controllers/video_product_controllers');
|
|
|
+const get_fq_book_tab_controllers = require('../src/data_manager/Controllers/get_fq_book_tab_controllers');
|
|
|
+const filter_data_controllers = require('../src/data_manager/Controllers/filter_data_controllers');
|
|
|
+const redis_help = require('../src/use_redis');
|
|
|
+const axios = require('axios');
|
|
|
+const config = require('../etc/config.json');
|
|
|
+
|
|
|
+const task_queue = [];
|
|
|
+const FQ_FACTORY = {};
|
|
|
+
|
|
|
+FQ_FACTORY.getFqGenre = function(genre) {
|
|
|
+ if(genre=="0") return 1;
|
|
|
+ if(genre=="8") return 3;
|
|
|
+ if(genre=="202") return 202;
|
|
|
+ return 999;
|
|
|
+}
|
|
|
+
|
|
|
+FQ_FACTORY.processBook = async function(data) {
|
|
|
+ let client = new HttpClient();
|
|
|
+ let sid_tt = await tools.getFqSidtt();
|
|
|
+ let response = await client.proxyRequest(helper.getFqRequestOpt(data.book_id, sid_tt));
|
|
|
+ let obj = response['data'];
|
|
|
+ let book_name = obj['novel_data'].book_name;
|
|
|
+ let book_id = obj['novel_data'].book_id;
|
|
|
+ let genre = FQ_FACTORY.getFqGenre(obj['novel_data'].genre);
|
|
|
+ let words = obj['novel_data'].word_number;
|
|
|
+
|
|
|
+ let fq_book_data = {
|
|
|
+ book_name: book_name,
|
|
|
+ book_id: book_id,
|
|
|
+ genre: genre,
|
|
|
+ words: words,
|
|
|
+ info: JSON.stringify(obj['novel_data'])
|
|
|
+ };
|
|
|
+
|
|
|
+ let fq_book = {
|
|
|
+ key: data.book_id,
|
|
|
+ tg_platform_id: data.tg_platform_id
|
|
|
+ };
|
|
|
+
|
|
|
+ await FQ_FACTORY.add_fq_book(fq_book, fq_book_data);
|
|
|
+
|
|
|
+ return {
|
|
|
+ words: words,
|
|
|
+ genre: fq_book_data.genre,
|
|
|
+ book_id: fq_book_data.book_id,
|
|
|
+ book_name: fq_book_data.book_name,
|
|
|
+ tg_platform_id: data.tg_platform_id
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+FQ_FACTORY.add_fq_book = async function(data, response) {
|
|
|
+ let tab = {
|
|
|
+ book_key: data.key,
|
|
|
+ book_id: response.book_id,
|
|
|
+ info: response.info
|
|
|
+ };
|
|
|
+
|
|
|
+ if(tab.book_id === undefined) {
|
|
|
+ throw "tab.book_id==undefined";
|
|
|
+ }
|
|
|
+
|
|
|
+ return await get_fq_book_tab_controllers.createData(tab);
|
|
|
+}
|
|
|
+
|
|
|
+FQ_FACTORY.update_filter_data = async function(FilterConfig, data) {
|
|
|
+ let isGenre = FQ_FACTORY.getFqGenre(data.genre) !== 999;
|
|
|
+ if(isGenre) {
|
|
|
+ try {
|
|
|
+ await FQ_FACTORY.video_product_material(data);
|
|
|
+ } catch(e) {
|
|
|
+ console.log("video_product_material error:", e);
|
|
|
+ }
|
|
|
+ await filter_data_controllers.updateFilterData(
|
|
|
+ { id: data.id },
|
|
|
+ {
|
|
|
+ status: 1,
|
|
|
+ book_id: data.book_id,
|
|
|
+ book_name: data.book_name,
|
|
|
+ genre: data.genre,
|
|
|
+ words: data.words
|
|
|
+ }
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ await filter_data_controllers.updateFilterData(
|
|
|
+ { id: data.id },
|
|
|
+ {
|
|
|
+ status: 2,
|
|
|
+ book_id: data.book_id,
|
|
|
+ book_name: data.book_name,
|
|
|
+ genre: data.genre
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+FQ_FACTORY.insert_product = async function(data) {
|
|
|
+ return await video_product_controllers.createProductData({
|
|
|
+ book_platform: data.tg_platform_id,
|
|
|
+ product_name: data.book_name,
|
|
|
+ genre: data.genre,
|
|
|
+ product_id: data.book_id,
|
|
|
+ words: data.words
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+FQ_FACTORY.video_product_material = async function(data) {
|
|
|
+ let url = config.isDebug ? config.debug_supdate_config.host : config.release_supdate_config.host;
|
|
|
+ url = url + '/sapi/video_product_material/supdate';
|
|
|
+ const formData = new FormData();
|
|
|
+ formData.append('data', JSON.stringify({
|
|
|
+ dy_id: data.video_id,
|
|
|
+ dy_url: data.video_link,
|
|
|
+ product_id: data.book_id,
|
|
|
+ product_name: data.book_name,
|
|
|
+ d_z_number: data.like_num,
|
|
|
+ collect_number: data.kepp_num,
|
|
|
+ comment_number: data.comment_num,
|
|
|
+ forward_number: data.shared_num,
|
|
|
+ book_platform: data.tg_platform_id,
|
|
|
+ title: data.title,
|
|
|
+ yun_fabu_time: data.publish_time
|
|
|
+ }));
|
|
|
+
|
|
|
+ return await axios.post(url, formData, {
|
|
|
+ headers: {
|
|
|
+ 'Content-Type': 'multipart/form-data'
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .then(response => {
|
|
|
+ if(response.data.code === 10000) {
|
|
|
+ console.log("插入任务表成功:", response.data);
|
|
|
+ } else {
|
|
|
+ console.log("插入任务表失败:", formData);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(error => {
|
|
|
+ console.error("插入任务表失败:", error, formData);
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+// 处理任务队列
|
|
|
+async function processCreateTask() {
|
|
|
+ let result = null;
|
|
|
+ try {
|
|
|
+ if(task_queue.length > 0) {
|
|
|
+ let task_queue_item = task_queue.pop();
|
|
|
+ result = task_queue_item.result;
|
|
|
+
|
|
|
+ let client = new HttpClient();
|
|
|
+ let sid_tt = await tools.getFqSidtt();
|
|
|
+ let response = await client.proxyRequest(helper.getFqRequestOpt(result.data.book_id, sid_tt));
|
|
|
+ let obj = response['data'];
|
|
|
+ let book_name = obj['novel_data'].book_name;
|
|
|
+ let book_id = obj['novel_data'].book_id;
|
|
|
+ let genre = FQ_FACTORY.getFqGenre(obj['novel_data'].genre);
|
|
|
+ let words = obj['novel_data'].word_number;
|
|
|
+
|
|
|
+ let fq_book_data = {
|
|
|
+ book_name: book_name,
|
|
|
+ book_id: book_id,
|
|
|
+ genre: genre,
|
|
|
+ words: words,
|
|
|
+ info: JSON.stringify(obj['novel_data'])
|
|
|
+ };
|
|
|
+
|
|
|
+ let fq_book = {
|
|
|
+ key: result.data.book_id,
|
|
|
+ tg_platform_id: result.data.tg_platform_id
|
|
|
+ };
|
|
|
+
|
|
|
+ await FQ_FACTORY.add_fq_book(fq_book, fq_book_data);
|
|
|
+
|
|
|
+ let FilterConfig = await redis_help.getKeyValue("FilterConfig");
|
|
|
+ FilterConfig = JSON.parse(FilterConfig);
|
|
|
+
|
|
|
+ if(FQ_FACTORY.getFqGenre(genre) !== 999) {
|
|
|
+ await FQ_FACTORY.insert_product({
|
|
|
+ book_platform: result.data.tg_platform_id,
|
|
|
+ product_name: book_name,
|
|
|
+ genre: genre,
|
|
|
+ product_id: book_id,
|
|
|
+ words: words
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch(error) {
|
|
|
+ console.error("番茄平台处理创建任务出错:", error);
|
|
|
+ } finally {
|
|
|
+ setTimeout(processCreateTask, 2000);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 独立运行任务
|
|
|
+async function processTask() {
|
|
|
+ let result = null;
|
|
|
+ try {
|
|
|
+ let isPauseTask = await redis_help.getKeyValue("isPauseTask");
|
|
|
+ if(isPauseTask == "true") {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ let FilterConfig = await redis_help.getKeyValue("FilterConfig");
|
|
|
+ FilterConfig = JSON.parse(FilterConfig);
|
|
|
+
|
|
|
+ // 获取番茄平台的待处理数据
|
|
|
+ result = await filter_data_controllers.getFilterDataByStatus({
|
|
|
+ status: 0,
|
|
|
+ tg_platform_id: 2 // 番茄平台ID
|
|
|
+ });
|
|
|
+
|
|
|
+ if(result.success) {
|
|
|
+ let isInsertTask = false;
|
|
|
+ // 获取番茄书库的书
|
|
|
+ let fq_book_result = await get_fq_book_tab_controllers.getData({ book_id: result.data.book_id });
|
|
|
+ if(fq_book_result.success) {
|
|
|
+ result.data.genre = fq_book_result.data.genre;
|
|
|
+ result.data.book_id = fq_book_result.data.book_id;
|
|
|
+ result.data.book_name = fq_book_result.data.info.book_name;
|
|
|
+ result.data.words = fq_book_result.data.info.word_number;
|
|
|
+
|
|
|
+ // 获取商品库的商品
|
|
|
+ let product_result = await video_product_controllers.getProductData({ book_id: fq_book_result.data.book_id });
|
|
|
+ if(!product_result.success) {
|
|
|
+ // 如果商品库没有这个商品
|
|
|
+ if(FQ_FACTORY.getFqGenre(result.data.genre) !== 999) {
|
|
|
+ await FQ_FACTORY.insert_product(result.data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ isInsertTask = true;
|
|
|
+ task_queue.push({result: result});
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新过滤数据状态
|
|
|
+ await FQ_FACTORY.update_filter_data(FilterConfig, result.data);
|
|
|
+ }
|
|
|
+ } catch(error) {
|
|
|
+ console.error("番茄平台处理任务出错:", error);
|
|
|
+ if(result && result.data) {
|
|
|
+ await filter_data_controllers.updateFilterData(
|
|
|
+ { id: result.data.id },
|
|
|
+ { status: 2 }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ // 继续下一个任务
|
|
|
+ setTimeout(processTask, 500);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 启动任务
|
|
|
+if(require.main === module) {
|
|
|
+ redis_help.connect((results) => {
|
|
|
+ if(results) {
|
|
|
+ console.log("番茄平台任务启动");
|
|
|
+ processTask();
|
|
|
+ processCreateTask();
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+module.exports = FQ_FACTORY;
|