c_news.js 6.0 KB

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