| 
									
										
										
										
											2021-11-23 17:13:55 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace app\controller\manager; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use app\exception\RepositoryException; | 
					
						
							|  |  |  | use app\model\Comment as CommentModel; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use app\repository\AccountRepository; | 
					
						
							|  |  |  | use Exception; | 
					
						
							|  |  |  | use think\facade\Db; | 
					
						
							|  |  |  | use think\db\exception\DataNotFoundException; | 
					
						
							|  |  |  | use think\db\exception\DbException; | 
					
						
							|  |  |  | use think\db\exception\ModelNotFoundException; | 
					
						
							|  |  |  | use think\exception\ValidateException; | 
					
						
							|  |  |  | use think\response\Json; | 
					
						
							|  |  |  | use think\response\View; | 
					
						
							|  |  |  | use think\facade\Config; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * 评论 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Class Comment | 
					
						
							|  |  |  |  * @package app\controller\manager | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class Comment extends Base | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected function initialize() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         parent::initialize(); | 
					
						
							|  |  |  |         Config::load("extra/wechat", "wechat"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 审核 | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return Json|View | 
					
						
							|  |  |  |      * @throws DataNotFoundException | 
					
						
							|  |  |  |      * @throws DbException | 
					
						
							|  |  |  |      * @throws ModelNotFoundException | 
					
						
							|  |  |  |      * @throws Exception | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function examine() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $id = input('id/d', 0); | 
					
						
							|  |  |  |         $state = input('state/d', 0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!in_array($state, array_keys(CommentModel::allState()))) { | 
					
						
							|  |  |  |             return $this->json(4001, '状态错误'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (!$info = CommentModel::findById($id)) { | 
					
						
							|  |  |  |             return $this->json(4001, '记录不存在'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->request->isPost()) { | 
					
						
							|  |  |  |             $data = ['state' => $state]; | 
					
						
							|  |  |  |             if ($state == CommentModel::state_hide) { | 
					
						
							|  |  |  |                 $data['is_delete'] = CommentModel::COMMON_ON; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $info->save($data); | 
					
						
							|  |  |  |             return $this->json(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $disabled = CommentModel::getAllChildrenIds($id); | 
					
						
							|  |  |  |         $disabled[] = $id; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->data['item'] = $info; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $this->view(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 恢复 | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return Json|View | 
					
						
							|  |  |  |      * @throws DataNotFoundException | 
					
						
							|  |  |  |      * @throws DbException | 
					
						
							|  |  |  |      * @throws ModelNotFoundException | 
					
						
							|  |  |  |      * @throws Exception | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function recovery() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $id = input('id/d', 0); | 
					
						
							|  |  |  |         if (!$info = CommentModel::findById($id)) { | 
					
						
							|  |  |  |             return $this->json(4001, '记录不存在'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if ($this->request->isPost()) { | 
					
						
							|  |  |  |             $data = ["is_delete"=>CommentModel::COMMON_OFF]; | 
					
						
							|  |  |  |             $info->save($data); | 
					
						
							|  |  |  |             return $this->json(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 加入黑名单 | 
					
						
							|  |  |  |      * @return Json | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function addBlack() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $id = input("id/d"); | 
					
						
							|  |  |  |         $info = CommentModel::findById($id); | 
					
						
							|  |  |  |         if (empty($info)) { | 
					
						
							|  |  |  |             return $this->error('记录不存在'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->request->isPost()) { | 
					
						
							|  |  |  |             if (empty($info)) { | 
					
						
							|  |  |  |                 return $this->json(4001, '记录不存在'); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $time = input("time/d", 0, "abs"); | 
					
						
							|  |  |  |             if ($time <= 0) { | 
					
						
							|  |  |  |                 return $this->json(4001, "时间输入错误"); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $account = AccountRepository::getInstance()->findOneByWhere(["user_code" => $info["user_code"]]); | 
					
						
							|  |  |  |             if (empty($account)) { | 
					
						
							|  |  |  |                 return $this->json(4001, "用户不存在"); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $timeSecond = $time * 60; | 
					
						
							|  |  |  |             Db::startTrans(); | 
					
						
							|  |  |  |             try { | 
					
						
							|  |  |  |                 //如果之前有黑名单设置 如果黑名单时间未过期
 | 
					
						
							|  |  |  |                 if (!empty($account["blank_time"]) && strtotime($account["blank_time"]) && strtotime($account["blank_time"]) > time()) { | 
					
						
							|  |  |  |                     $account->save(["blank_time" => date("Y-m-d H:i:s", (strtotime($account["blank_time"]) + $timeSecond)), "blank_total" => (($account["blank_total"] ?? 0) + $time)]); | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     $account->save(["blank_time" => date("Y-m-d H:i:s", (time() + $timeSecond)), "blank_total" => (($account["blank_total"] ?? 0) + $time)]); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $info->save(["state" => CommentModel::state_hide]); | 
					
						
							|  |  |  |                 Db::commit(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return $this->json(); | 
					
						
							|  |  |  |             } catch (RepositoryException $e) { | 
					
						
							|  |  |  |                 Db::rollback(); | 
					
						
							|  |  |  |                 return $this->json(5001, "失败"); | 
					
						
							|  |  |  |             } catch (Exception  $e) { | 
					
						
							|  |  |  |                 Db::rollback(); | 
					
						
							|  |  |  |                 return $this->json(5002, "失败"); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $this->data["id"] = $id; | 
					
						
							|  |  |  |         return $this->view(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 彻底删除 | 
					
						
							|  |  |  |      * @return Json | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function del() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!$this->request->isPost()) { | 
					
						
							|  |  |  |             return $this->json(4000, '非法请求'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $ids = $this->request->param('ids/a', []); | 
					
						
							|  |  |  |         CommentModel::destroy($ids); | 
					
						
							|  |  |  |         return $this->json(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 列表 | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return Json|View | 
					
						
							|  |  |  |      * @throws Exception | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function index() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $stateArray = CommentModel::allState(); | 
					
						
							|  |  |  |         $typeArray = CommentModel::allType(); | 
					
						
							|  |  |  |         if ($this->request->isPost()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $keyword = $this->request->param('keyword/s',); | 
					
						
							|  |  |  |             $state = $this->request->param('state/d', "-1"); | 
					
						
							|  |  |  |             $type = $this->request->param('type/d', -1); | 
					
						
							|  |  |  |             $page = $this->request->param('page/d', 1); | 
					
						
							|  |  |  |             $size = $this->request->param('size/d', 30); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $whereMap = [["comment.is_delete", "=", CommentModel::COMMON_OFF]]; | 
					
						
							|  |  |  |             $orders = ['comment.id' => 'desc']; | 
					
						
							|  |  |  |             if (!empty($keyword)) { | 
					
						
							| 
									
										
										
										
											2021-11-30 18:31:58 +08:00
										 |  |  |                 $whereMap[] = ['account.nick_name|comment.comment', 'like', "%$keyword%"]; | 
					
						
							| 
									
										
										
										
											2021-11-23 17:13:55 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |             if ($type >= 0) { | 
					
						
							|  |  |  |                 $whereMap[] = ['comment.type', '=', $type]; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             if (isset($stateArray[$state])) { | 
					
						
							|  |  |  |                 $whereMap[] = ['comment.state', '=', $state]; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $list = CommentModel::findList($whereMap, [], $page, $size, function ($q) { | 
					
						
							|  |  |  |                 return $q->withJoin("account"); | 
					
						
							|  |  |  |             }, $orders); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-08 11:48:22 +08:00
										 |  |  |             $list["list"]->each(function ($item){ | 
					
						
							|  |  |  |                 if($item->type == CommentModel::type_text){ | 
					
						
							|  |  |  |                     $data = json_decode($item->comment,true); | 
					
						
							|  |  |  |                     if(!empty($data)){ | 
					
						
							|  |  |  |                         $dataStr = ''; | 
					
						
							|  |  |  |                         foreach ($data as $ditem){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                             if($ditem["msgType"] == CommentModel::msg_type_emoji){ | 
					
						
							|  |  |  |                                 $dataStr .=  "<img  class='emoji' src='/static/" . $ditem['msgImage']."'/>"; | 
					
						
							|  |  |  |                             }else{ | 
					
						
							|  |  |  |                                 $dataStr.=$ditem['msgCont']; | 
					
						
							|  |  |  |                             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                         $item->comment = $dataStr; | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-11-23 17:13:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-08 11:48:22 +08:00
										 |  |  |                 } | 
					
						
							|  |  |  |             }); | 
					
						
							| 
									
										
										
										
											2021-11-23 17:13:55 +08:00
										 |  |  |             return $this->json(0, 'success', $list); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $this->data["state"] = $stateArray; | 
					
						
							|  |  |  |         $this->data["type"] = $typeArray; | 
					
						
							|  |  |  |         return $this->view(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 列表 | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return Json|View | 
					
						
							|  |  |  |      * @throws Exception | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function recycleBin() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($this->request->isPost()) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $keyword = $this->request->param('keyword/s',); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $page = $this->request->param('page/d', 1); | 
					
						
							|  |  |  |             $size = $this->request->param('size/d', 30); | 
					
						
							|  |  |  |             $whereMap = [["comment.is_delete", "=", CommentModel::COMMON_ON]]; | 
					
						
							|  |  |  |             if (!empty($keyword)) { | 
					
						
							| 
									
										
										
										
											2021-11-30 18:31:58 +08:00
										 |  |  |                 $whereMap[] = ['account.nick_name|comment.comment', 'like', "%$keyword%"]; | 
					
						
							| 
									
										
										
										
											2021-11-23 17:13:55 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |             $orders = ['comment.id' => 'desc']; | 
					
						
							|  |  |  |             $list = CommentModel::findList($whereMap, [], $page, $size, function ($q) { | 
					
						
							|  |  |  |                 return $q->withJoin("account"); | 
					
						
							|  |  |  |             }, $orders); | 
					
						
							| 
									
										
										
										
											2021-12-22 09:32:41 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             $list["list"]->each(function ($item){ | 
					
						
							|  |  |  |                 if($item->type == CommentModel::type_text){ | 
					
						
							|  |  |  |                     $data = json_decode($item->comment,true); | 
					
						
							|  |  |  |                     if(!empty($data)){ | 
					
						
							|  |  |  |                         $dataStr = ''; | 
					
						
							|  |  |  |                         foreach ($data as $ditem){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                             if($ditem["msgType"] == CommentModel::msg_type_emoji){ | 
					
						
							|  |  |  |                                 $dataStr .=  "<img  class='emoji' src='/static/" . $ditem['msgImage']."'/>"; | 
					
						
							|  |  |  |                             }else{ | 
					
						
							|  |  |  |                                 $dataStr.=$ditem['msgCont']; | 
					
						
							|  |  |  |                             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                         $item->comment = $dataStr; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }); | 
					
						
							| 
									
										
										
										
											2021-11-23 17:13:55 +08:00
										 |  |  |             return $this->json(0, 'success', $list); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $this->view(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |