Article.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | A3Mall
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2020 http://www.a3-mall.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: xzncit <158373108@qq.com>
  8. // +----------------------------------------------------------------------
  9. namespace app\admin\service\wechat;
  10. use think\facade\Session;
  11. use app\admin\service\Service;
  12. use app\common\models\wechat\WechatNews as WechatNewsModel;
  13. use app\common\models\wechat\WechatNewsArticle as WechatNewsArticleModel;
  14. use mall\utils\CString;
  15. use app\common\models\Attachments as AttachmentsModel;
  16. class Article extends Service {
  17. /**
  18. * 获取列表数据
  19. * @param $data
  20. * @return array
  21. * @throws \think\db\exception\DataNotFoundException
  22. * @throws \think\db\exception\DbException
  23. * @throws \think\db\exception\ModelNotFoundException
  24. */
  25. public static function getList($data){
  26. $page = $data["page"]??1;
  27. $size = 4*4;
  28. $count = WechatNewsModel::count();
  29. $total_page = ceil($count/$size);
  30. $result = [ "info"=>"ok", "status"=>0, "data"=>[], "total"=>$total_page, "page"=>$page ];
  31. if($total_page == $page -1){
  32. return $result;
  33. }
  34. $data = WechatNewsModel::limit((($page - 1) * $size),$size)->select()->toArray();
  35. if(empty($data)){
  36. return $result;
  37. }
  38. foreach($data as $key=>$item){
  39. $data[$key] = $item;
  40. $row = WechatNewsArticleModel::where("id","in",$item["article_id"])->select()->toArray();
  41. $data[$key]["list"] = $row;
  42. $data[$key]["editor"] = createUrl("editor",["id"=>$item["id"]]);
  43. $data[$key]["remove"] = createUrl("delete",["id"=>$item["id"]]);
  44. }
  45. $result["data"] = $data;
  46. return $result;
  47. }
  48. /**
  49. * 详情
  50. * @param $id
  51. * @return array
  52. * @throws \think\db\exception\DataNotFoundException
  53. * @throws \think\db\exception\DbException
  54. * @throws \think\db\exception\ModelNotFoundException
  55. */
  56. public static function detail($id){
  57. $data = WechatNewsModel::where("id",$id)->find();
  58. if(!empty($data)) {
  59. $article = WechatNewsArticleModel::where("id", "in", $data["article_id"])->select()->toArray();
  60. foreach($article as $k=>$v){
  61. $article[$k]["images"] = Db::name("attachments")->where([
  62. "pid"=>$v["id"],"module"=>"wechat","method"=>"article"
  63. ])->select()->toArray();
  64. }
  65. $data["article"] = json_encode($article,JSON_UNESCAPED_UNICODE);
  66. }
  67. return [ "data"=>$data ];
  68. }
  69. /**
  70. * 保存数据
  71. * @param $data
  72. * @throws \Exception
  73. */
  74. public static function save($data){
  75. try{
  76. WechatNewsModel::startTrans();
  77. $post = $data["post"]??[];
  78. $pid = $data["pid"] ?? 0;
  79. $arrIds = [];
  80. foreach($post as $value){
  81. $attachment_id = [];
  82. if(empty($value["digest"])){
  83. $value["digest"] = CString::msubstr($value["content"],100,false);
  84. }
  85. if($value["id"] == 0){
  86. $value["create_time"] = time();
  87. $value["id"] = WechatNewsArticleModel::create($value)->id;
  88. $arrIds[] = $value["id"];
  89. }else{
  90. WechatNewsArticleModel::where("id",$value["id"])->save($value);
  91. $arrIds[] = $value["id"];
  92. }
  93. if(!empty($value["images"])){
  94. foreach($value["images"] as $img){
  95. $attachment_id[] = $img["id"];
  96. }
  97. $res = AttachmentsModel::where('id','in',$attachment_id)->select()->toArray();
  98. foreach($res as $value){
  99. AttachmentsModel::where('id',$value['id'])->save([ "pid"=>$value["id"] ]);
  100. }
  101. }
  102. }
  103. if($pid <= 0){
  104. $pid = WechatNewsModel::create([ "admin_id"=>Session::get("system_user_id"), "article_id"=>implode(",",$arrIds), "create_time"=>time() ])->id;
  105. }else{
  106. $row = WechatNewsModel::where(["id"=>$pid])->find();
  107. WechatNewsModel::where(["id"=>$pid])->save(["admin_id"=>Session::get("system_user_id"), "article_id"=>implode(",",$arrIds), "update_time"=>time()]);
  108. $a = array_diff(explode(",",$row["article_id"]),$arrIds);
  109. WechatNewsArticleModel::where("id","in",$a)->delete();
  110. }
  111. WechatNewsModel::commit();
  112. }catch (\Exception $ex){
  113. WechatNewsModel::rollback();
  114. throw new \Exception($ex->getMessage(),$ex->getCode());
  115. }
  116. }
  117. /**
  118. * 删除
  119. * @param $id
  120. * @return bool
  121. * @throws \Exception
  122. */
  123. public static function delete($id){
  124. $row = Db::name("wechat_news")->where("id",$id)->find();
  125. if(empty($row)){
  126. throw new \Exception("您要查找的内容不存在!",0);
  127. }
  128. if(WechatNewsModel::where("id",$id)->delete()){
  129. return WechatNewsArticleModel::where("id","in",$row["article_id"])->delete();
  130. }
  131. return false;
  132. }
  133. }