PRODUCT_FACTORY.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. const CMD = {}
  2. const video_product_controllers = require('../src/data_manager/Controllers/video_product_controllers');
  3. const filter_data_controllers = require('../src/data_manager/Controllers/filter_data_controllers');
  4. const get_fq_book_tab_controllers = require('../src/data_manager/Controllers/get_fq_book_tab_controllers');
  5. const video_applet_product_controllers = require('../src/data_manager/Controllers/video_applet_product_controllers');
  6. const redis_help = require('../src/use_redis');
  7. const axios = require('axios');
  8. const config = require('../etc/config.json');
  9. const HttpClient = require('../src/HttpClient');
  10. const helper = require('../src/helper');
  11. const time_count = 500;
  12. CMD.init = async function(){
  13. redis_help.connect((results)=>{
  14. if(results){
  15. }
  16. })
  17. setInterval(async () => {
  18. let isPauseTask = await redis_help.getKeyValue("isPauseTask")
  19. if(isPauseTask=="true"){
  20. return
  21. }
  22. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  23. FilterConfig = JSON.parse(FilterConfig)
  24. let result = await filter_data_controllers.getFilterDataByStatus({ status: 0 });
  25. if(result.success){
  26. let tg_platform_id = result.data.tg_platform_id
  27. //判断是否存在这本书
  28. if(tg_platform_id==1){
  29. let hy_book_result = await video_product_controllers.getProductData({ book_id: result.data.book_id });
  30. if(hy_book_result.success){
  31. result.data.words = hy_book_result.data.words
  32. result.data.genre = hy_book_result.data.genre
  33. result.data.book_id = hy_book_result.data.product_id
  34. result.data.book_name = hy_book_result.data.product_name
  35. }else{
  36. let hy_book_data = await require('./collect_hy_book').runTask(result.data)
  37. if(CMD.isGenre(FilterConfig,hy_book_data.genre)){
  38. await CMD.insert_product(hy_book_data)
  39. }
  40. result.data.words = hy_book_data.words
  41. result.data.genre = hy_book_data.genre
  42. result.data.book_id = hy_book_data.book_id
  43. result.data.book_name = hy_book_data.book_name
  44. }
  45. }else if(tg_platform_id==2){ //番茄
  46. //获取番茄书库的书
  47. let fq_book_result = await get_fq_book_tab_controllers.getData({ book_id: result.data.book_id });
  48. if(fq_book_result.success){//如果番茄书库里有这本书
  49. result.data.genre = CMD.getFqGenre(fq_book_result.data.info.genre)
  50. result.data.book_id = fq_book_result.data.book_id
  51. result.data.book_name = fq_book_result.data.info.book_name
  52. result.data.words = fq_book_result.data.info.word_number
  53. //获取商品库的商品
  54. let product_result = await video_product_controllers.getProductData({ book_id: fq_book_result.data.book_id });
  55. //如果商品库没有这个商品
  56. if(!product_result.success){ //如果只是 get_fq_book 有, 书库里没有
  57. fq_book_result.data.tg_platform_id = result.data.tg_platform_id
  58. //如果是长篇短篇符合
  59. if(CMD.isGenre(FilterConfig,result.data.genre)){
  60. await CMD.insert_product(result.data)
  61. }
  62. }
  63. }else{
  64. let client = new HttpClient()
  65. let response = await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id))
  66. let obj = response['data']
  67. let book_name = obj['novel_data'].book_name
  68. let book_id = obj['novel_data'].book_id
  69. let genre = CMD.getFqGenre(obj['novel_data'].genre)
  70. let words = obj['novel_data'].word_number
  71. let fq_book_data = {book_name:book_name,book_id:book_id,genre:genre,words:words,info:JSON.stringify(obj['novel_data'])}
  72. let fq_book = {}
  73. fq_book.key = result.data.book_id
  74. await CMD.add_fq_book(fq_book,fq_book_data)
  75. let product_result = await video_product_controllers.getProductData({ book_id: book_id });
  76. if(!product_result.success){ //如果书库也没有
  77. fq_book.tg_platform_id = result.data.tg_platform_id
  78. if(CMD.isGenre(FilterConfig,fq_book_data.genre)){
  79. await CMD.insert_product(fq_book)
  80. }
  81. }
  82. result.data.words = words
  83. result.data.genre = fq_book_data.genre
  84. result.data.book_id = fq_book_data.book_id
  85. result.data.book_name = fq_book_data.book_name
  86. }
  87. }
  88. await CMD.update_filter_data(FilterConfig,result.data)
  89. }
  90. }, time_count);
  91. }
  92. CMD.getFqGenre = function(genre){
  93. if(genre=="0"){
  94. return 1;
  95. }
  96. if(genre=="8"){
  97. return 3;
  98. }
  99. if(genre=="202"){
  100. return 202;
  101. }
  102. return 999;
  103. }
  104. CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){
  105. for (let index = 0; index < AppConfig.length; index++) {
  106. const element = AppConfig[index];
  107. if(element.tg_platform_id==tg_platform_id){
  108. return element
  109. }
  110. }
  111. return null
  112. }
  113. CMD.getMainInfoByAppid = function(MainConfig,app_id){
  114. let list = []
  115. for (let index = 0; index < MainConfig.length; index++) {
  116. const element = MainConfig[index];
  117. if(element.app_id==app_id){
  118. list.push(element)
  119. }
  120. }
  121. return list
  122. }
  123. CMD.isGenre = function(FilterConfig,genre){
  124. let is_need = false
  125. //判断长篇短篇是否是要的数据
  126. for (let index = 0; index < FilterConfig.genre.length; index++) {
  127. const element = FilterConfig.genre[index];
  128. if(genre==element){
  129. is_need = true
  130. break
  131. }
  132. }
  133. return is_need
  134. }
  135. function deepCopy3(obj) {
  136. return JSON.parse(JSON.stringify(obj));
  137. }
  138. CMD.update_filter_data = async function(FilterConfig,data) {
  139. if(CMD.isGenre(FilterConfig,data.genre)){
  140. await CMD.video_product_material(data)
  141. await filter_data_controllers.updateFilterData({id:data.id},{status:1,book_id:data.book_id,book_name:data.book_name})
  142. //创建一个小程序
  143. let AppConfig = await redis_help.getKeyValue("AppConfig")
  144. AppConfig = JSON.parse(AppConfig)
  145. let AppInfo = CMD.getAppInfoByPlatformId(AppConfig,data.tg_platform_id)
  146. data.app_id = AppInfo.app_id
  147. let PlatformInfo = await redis_help.getKeyValue("PlatformConfig")
  148. PlatformInfo = JSON.parse(PlatformInfo)
  149. if(PlatformInfo==null){
  150. return console.error("平台配置错误:",data)
  151. }
  152. let MainConfig = await redis_help.getKeyValue("MainConfig")
  153. MainConfig = JSON.parse(MainConfig)
  154. let list = CMD.getMainInfoByAppid(MainConfig,data.app_id)
  155. if(list.length<0){
  156. return console.error("获取主体错误:",data)
  157. }
  158. for (let index = 0; index < list.length; index++) {
  159. const main_info = list[index];
  160. data.main_id = main_info.id
  161. data.main_name = main_info.main_name
  162. if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){
  163. console.error("主体配置推广链接错误:",main_info)
  164. }else{
  165. //符合标准进行创建表
  166. const result = await video_applet_product_controllers.getAppletProductData({book_id:data.book_id,main_id:data.main_id})
  167. if(!result.success){
  168. //没有找到 可以创建
  169. await video_applet_product_controllers.createAppletProductData({
  170. book_platform:data.tg_platform_id,
  171. product_name:data.book_name,
  172. product_id:data.book_id,
  173. dy_small_program_start:"",
  174. dy_small_program_start_data:"",
  175. dy_small_applet_app_id:data.app_id,
  176. status:0,
  177. main_id:data.main_id,
  178. promotion_id:"",
  179. wait_status:0,
  180. })
  181. }
  182. }
  183. }
  184. }else{
  185. await filter_data_controllers.updateFilterData({id:data.id},{status:2,book_id:data.book_id,book_name:data.book_name})
  186. }
  187. }
  188. CMD.video_product_material = async function(data){
  189. let url = config.isDebug?config.debug_supdate_config.host:config.release_supdate_config.host
  190. url = url+'/sapi/video_product_material/supdate';
  191. const formData = new FormData();
  192. formData.append('data',JSON.stringify({
  193. dy_id:data.video_id,
  194. dy_url:data.video_link,
  195. product_id:data.book_id,
  196. product_name:data.book_name,
  197. d_z_number:data.like_num,
  198. collect_number:data.kepp_num,
  199. comment_number: data.comment_num,
  200. forward_number: data.shared_num,
  201. book_platform: data.tg_platform_id,
  202. yun_fabu_time:data.publish_time
  203. }))
  204. return await axios.post(url, formData, {
  205. headers: {
  206. 'Content-Type': 'multipart/form-data'
  207. }
  208. })
  209. .then(response => {
  210. if(response.data.code===10000){
  211. console.log("插入任务表成功:", response.data);
  212. }else{
  213. console.log("插入任务表失败:", formData);
  214. }
  215. })
  216. .catch(error => {
  217. console.error("插入任务表失败:", error,formData);
  218. });
  219. }
  220. CMD.insert_product = async function(data){
  221. return await video_product_controllers.createProductData({
  222. book_platform:data.tg_platform_id,
  223. product_name:data.book_name,
  224. genre:data.genre,
  225. product_id:data.book_id,
  226. words:data.words
  227. })
  228. }
  229. CMD.add_fq_book = async function(data,response){
  230. let book_name = response.book_name
  231. let book_id = response.book_id
  232. let genre = response.genre
  233. let words = response.word_number
  234. data.genre = 0
  235. if(genre=="0"){
  236. data.genre = 1;
  237. }
  238. if(genre=="8"){
  239. data.genre = 3;
  240. }
  241. if(genre=="202"){
  242. data.genre = 202;
  243. }
  244. data.words = words
  245. data.book_name = book_name
  246. data.book_id = book_id
  247. console.log("response:",response)
  248. return await get_fq_book_tab_controllers.createData( {
  249. book_key:data.key,
  250. book_id:data.book_id,
  251. info:JSON.stringify(response)
  252. })
  253. }
  254. CMD.build_check_url = function(data){
  255. let url = 'https://clipvideoup.s6kuwan.com/sapi/check/get_check_url';
  256. const formData = new FormData();
  257. formData.append('platform_id', data.book_platform);
  258. formData.append('cp_spread_id', data.promotion_id);
  259. // console.log("formData:", formData);
  260. axios.post(url, formData, {
  261. headers: {
  262. 'Content-Type': 'multipart/form-data'
  263. }
  264. })
  265. .then(response => {
  266. if(response.data.code==10000){
  267. CMD.update_video_applet_product({promotion_id:data.promotion_id,
  268. product_id:data.product_id,check_url:response.data.content.check_url
  269. })
  270. }
  271. })
  272. .catch(error => {
  273. console.error('create_link was an error!', error);
  274. });
  275. }
  276. CMD.update_video_applet_product = function(data){
  277. sql_task_help.update('UPDATE video_applet_product SET status = ?, wait_status = ? , check_url = ? WHERE promotion_id = ? and product_id = ?',
  278. [1,1,data.check_url,data.promotion_id,data.product_id],
  279. ()=>{
  280. console.log("update_video_applet_product:更新成功!")
  281. })
  282. }
  283. CMD.init()