c_news.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. const {searchHandle} = require('../tools/searchSql');
  2. const {handle} = require('../tools/handle_cjs');
  3. const codeMap = require("../map/rcodeMap");
  4. const log = require("../logger").logger("c_solution","info");
  5. const d_news = require("../database/d_news");
  6. const d_product = require("../database/d_product");
  7. const {filePathToUrl} = require("../tools/filePathTool");
  8. const dbField = require("../map/dbField");
  9. async function addReadNum(newId){
  10. let [err,res] = await handle(d_news.addReadNum(newId));
  11. if(err){
  12. return [err,null];
  13. }
  14. return [null,'ok'];
  15. }
  16. async function searchNewsByMini(type, key, p, l){
  17. p = p || 1;
  18. l = l || 10;
  19. let _params = {
  20. }
  21. if(type !== 'all'){
  22. _params.type = type;
  23. }
  24. if(key){
  25. _params.key = key
  26. }
  27. return await searchHandle(
  28. '搜索文章失败',
  29. d_news.searchAllNewsMini,
  30. _params,
  31. null,
  32. p,
  33. l,
  34. );
  35. }
  36. async function addArticle(article){
  37. let res;
  38. // 获取文章类型
  39. let [err, typeRes] = await handle(d_news.getTypeByKey(article.type));
  40. if(err){
  41. log.error(err);
  42. log.error(`[新增文章] 获取文章类型失败 ${err.message}`);
  43. return [{
  44. code: codeMap.ServerError,
  45. message: `文章类型校验失败`
  46. }, null];
  47. }
  48. if(typeRes.length === 0){
  49. log.error(`[新增文章] 文章类型不存在`);
  50. return [{
  51. code: codeMap.NotFound,
  52. message: `文章类型不存在`
  53. }, null];
  54. }
  55. let typeItem = typeRes[0];
  56. [err, res] = await handle(d_news.addArticle(article, typeItem.type_id));
  57. if(err){
  58. log.error(`[新增文章] 新增文章失败 ${err.message}`);
  59. return [{
  60. code: codeMap.ServerError,
  61. message: `服务器错误,新增文章失败`
  62. }, null];
  63. }
  64. return [null, res];
  65. }
  66. // 修改文章
  67. async function editArticle(article){
  68. let res;
  69. // 获取文章类型
  70. let [err, typeRes] = await handle(d_news.getTypeByKey(article.type));
  71. if(err){
  72. log.error(err);
  73. log.error(`[编辑文章] 获取文章类型失败 ${err.message}`);
  74. return [{
  75. code: codeMap.ServerError,
  76. message: `文章类型校验失败`
  77. }, null];
  78. }
  79. if(typeRes.length === 0){
  80. log.error(`[新增文章] 文章类型不存在`);
  81. return [{
  82. code: codeMap.NotFound,
  83. message: `文章类型不存在`
  84. }, null];
  85. }
  86. let typeItem = typeRes[0];
  87. [err, res] = await handle(d_news.editArticle(article, typeItem.type_id));
  88. if(err){
  89. log.error(`[编辑文章] 编辑文章失败 ${err.message}`);
  90. return [{
  91. code: codeMap.ServerError,
  92. message: `服务器错误,新增文章失败`
  93. }, null];
  94. }
  95. return [null, res];
  96. }
  97. async function getArticleTypes(){
  98. [err, res] = await handle(d_news.loadTypes());
  99. if(err){
  100. log.error(`[获取文章类型] 获取文章类型 ${err.message}`);
  101. return [{
  102. code: codeMap.ServerError,
  103. message: `[服务器异常] 获取文章类型失败`
  104. }, null];
  105. }
  106. return [err, res]
  107. }
  108. async function editType( id, articleType)
  109. {
  110. let [err,res] = await handle(d_news.getTypeByKey(articleType.type_key))
  111. if(err){
  112. return [err,null];
  113. }
  114. if(res.length){
  115. return [
  116. {
  117. eCode:codeMap.DataRepeat,
  118. eMsg:`类型关键字重复`
  119. },null]
  120. }
  121. [err,res] = await handle(d_news.editArticleType(id, articleType));
  122. if(err){
  123. return [err,null];
  124. }
  125. return [null,res];
  126. }
  127. async function addType( id, articleType)
  128. {
  129. // 数据校验
  130. let parentType = articleType.parentType;
  131. if(parentType !== dbField.db_base.newsType.solution ||
  132. parentType !== dbField.db_base.newsType.news){
  133. return [
  134. {
  135. eCode: codeMap.NotPermission,
  136. eMsg: `不受支持的文章父类型, 目前支持 解决方案与文章`
  137. }, null];
  138. }
  139. // 判断类别关键字是否重复
  140. let [err,res] = await handle(d_news.getTypeByKey(articleType.type_key))
  141. if(err){
  142. return [err,null];
  143. }
  144. if(res.length){
  145. return [
  146. {
  147. eCode:codeMap.DataRepeat,
  148. eMsg:`类型关键字重复`
  149. },null]
  150. }
  151. [err,res] = await handle(d_news.addArticleType(id, articleType, parentType));
  152. if(err){
  153. return [err,null];
  154. }
  155. return [null,res];
  156. }
  157. // 删除产品类型
  158. async function deleteType(id) {
  159. let err, res;
  160. // 检索产品类型下是否有产品
  161. [err, res] = await handle(d_news.getAriticleByTypeId(id));
  162. if (err) {
  163. // 删除失败
  164. log.error('[移除文章分类] 寻找文章失败' + err.message);
  165. return [err, null];
  166. }
  167. if (res.length > 0) {
  168. // 存在产品
  169. log.warn('[移除文章分类] 存在文章,无法删除');
  170. return [
  171. {
  172. eCode: codeMap.NotPermission,
  173. eMsg: `该类型下存在文章,无法删除, 请先移除对应文章`
  174. }, null];
  175. }
  176. [err, res] = await handle(d_product.deleteProductType(id));
  177. if (err) {
  178. log.error('删除失败' + err.message);
  179. return [err, null];
  180. }
  181. return [null,res];
  182. }
  183. module.exports = {
  184. addReadNum,
  185. searchNewsByMini,
  186. addArticle,
  187. editArticle,
  188. getArticleTypes,
  189. editType,
  190. addType,
  191. deleteType
  192. }