GoodsEvaluate.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\goods;
  11. use app\model\order\Config as ConfigModel;
  12. use app\model\order\OrderCommon;
  13. use think\facade\Db;
  14. use think\facade\Cache;
  15. use app\model\BaseModel;
  16. /**
  17. * 商品评价
  18. */
  19. class GoodsEvaluate extends BaseModel
  20. {
  21. private $evaluate_status = [
  22. 0 => '未评价',
  23. 1 => '已评价',
  24. 2 => '已追评'
  25. ];
  26. /**
  27. * 添加评价
  28. * @param array $data
  29. */
  30. public function addEvaluate($data, $site_id)
  31. {
  32. model('goods')->startTrans();
  33. try {
  34. $res = model('goods_evaluate')->getInfo([ [ 'order_id', '=', $data[ 'order_id' ] ] ], 'evaluate_id');
  35. if (empty($res)) {
  36. $config_model = new ConfigModel();
  37. //订单评价设置
  38. $order_evaluate_config = $config_model->getOrderEvaluateConfig($site_id);
  39. $order_evaluate_config = $order_evaluate_config[ 'data' ][ 'value' ];
  40. $data_arr = [];
  41. foreach ($data[ 'goods_evaluate' ] as $k => $v) {
  42. if (empty($v[ 'content' ])) {
  43. model('goods')->rollback();
  44. return $this->error('', '商品的评价不能为空!');
  45. }
  46. $item = [
  47. 'order_id' => $data[ 'order_id' ],
  48. 'order_no' => $data[ 'order_no' ],
  49. 'member_id' => $data[ 'member_id' ],
  50. 'member_name' => $data[ 'member_name' ],
  51. 'member_headimg' => $data[ 'member_headimg' ],
  52. 'is_anonymous' => $data[ 'is_anonymous' ],
  53. 'order_goods_id' => $v[ 'order_goods_id' ],
  54. 'goods_id' => $v[ 'goods_id' ],
  55. 'sku_id' => $v[ 'sku_id' ],
  56. 'site_id' => $site_id,
  57. 'sku_name' => $v[ 'sku_name' ],
  58. 'sku_price' => $v[ 'sku_price' ],
  59. 'sku_image' => $v[ 'sku_image' ],
  60. 'content' => !empty($v[ 'content' ]) ? $v[ 'content' ] : '此用户没有填写评价。',
  61. 'images' => $v[ 'images' ],
  62. 'scores' => $v[ 'scores' ],
  63. 'explain_type' => $v[ 'explain_type' ],
  64. 'is_audit' => ( $order_evaluate_config[ 'evaluate_audit' ] == 1 ? 0 : 1 ),
  65. 'create_time' => time()
  66. ];
  67. $data_arr[] = $item;
  68. $evaluate = 0; //评价
  69. $evaluate_shaitu = 0; //晒图
  70. $evaluate_shipin = 0; //视频
  71. $evaluate_haoping = 0; //好评
  72. $evaluate_zhongping = 0; //中评
  73. $evaluate_chaping = 0; //差评
  74. if ($v[ 'explain_type' ] == 1) {
  75. //好评
  76. $evaluate = 1; //评价
  77. $evaluate_haoping = 1; //好评
  78. } elseif ($v[ 'explain_type' ] == 2) {
  79. //中评
  80. $evaluate = 1; //评价
  81. $evaluate_zhongping = 1; //中评
  82. } elseif ($v[ 'explain_type' ] == 3) {
  83. //差评
  84. $evaluate = 1; //评价
  85. $evaluate_chaping = 1; //差评
  86. }
  87. if (!empty($v[ 'images' ])) {
  88. $evaluate_shaitu = 1; //晒图
  89. }
  90. if ($order_evaluate_config[ 'evaluate_audit' ] == 0) {
  91. Db::name('goods')->where([ [ 'goods_id', '=', $v[ 'goods_id' ] ] ])
  92. ->update(
  93. [
  94. "evaluate" => Db::raw('evaluate+' . $evaluate),
  95. "evaluate_shaitu" => Db::raw('evaluate_shaitu+' . $evaluate_shaitu),
  96. "evaluate_haoping" => Db::raw('evaluate_haoping+' . $evaluate_haoping),
  97. "evaluate_zhongping" => Db::raw('evaluate_zhongping+' . $evaluate_zhongping),
  98. "evaluate_chaping" => Db::raw('evaluate_chaping+' . $evaluate_chaping),
  99. ]);
  100. Db::name('goods_sku')->where([ [ 'sku_id', '=', $v[ 'sku_id' ] ] ])
  101. ->update(
  102. [
  103. "evaluate" => Db::raw('evaluate+' . $evaluate),
  104. "evaluate_shaitu" => Db::raw('evaluate_shaitu+' . $evaluate_shaitu),
  105. "evaluate_haoping" => Db::raw('evaluate_haoping+' . $evaluate_haoping),
  106. "evaluate_zhongping" => Db::raw('evaluate_zhongping+' . $evaluate_zhongping),
  107. "evaluate_chaping" => Db::raw('evaluate_chaping+' . $evaluate_chaping),
  108. ]);
  109. }
  110. }
  111. //记录订单日志 start
  112. $order_common_model = new OrderCommon();
  113. $member_info = model('member')->getInfo([ 'member_id' => $data[ 'member_id' ] ], 'nickname');
  114. $order_info = model('order')->getInfo([ 'order_id' => $data[ 'order_id' ] ], 'order_status,order_status_name');
  115. $buyer_name = empty($member_info[ 'nickname' ]) ? '' : '【' . $member_info[ 'nickname' ] . '】';
  116. $log_data = [
  117. 'order_id' => $data[ 'order_id' ],
  118. 'action' => '买家' . $buyer_name . '评价了订单',
  119. 'uid' => $data[ 'member_id' ],
  120. 'nick_name' => $member_info[ 'nickname' ],
  121. 'action_way' => 1,
  122. 'order_status' => $order_info[ 'order_status' ],
  123. 'order_status_name' => $order_info[ 'order_status_name' ]
  124. ];
  125. $order_common_model->addOrderLog($log_data);
  126. //记录订单日志 end
  127. // 修改订单表中的评价标识
  128. model('order')->update([ 'is_evaluate' => 1, 'evaluate_status' => 1, 'evaluate_status_name' => $this->evaluate_status[ 1 ] ], [ [ 'order_id', '=', $data[ 'order_id' ] ] ]);
  129. $evaluate_id = model('goods_evaluate')->addList($data_arr);
  130. model('goods')->commit();
  131. Cache::tag("goods_evaluate")->clear();
  132. return $this->success($evaluate_id);
  133. } else {
  134. return $this->error();
  135. }
  136. } catch (\Exception $e) {
  137. return $this->error('', $e->getMessage());
  138. }
  139. }
  140. /**
  141. * 评价回复
  142. * @param unknown $data
  143. */
  144. public function evaluateApply($data)
  145. {
  146. $res = model("goods_evaluate")->update($data, [ [ 'evaluate_id', '=', $data[ 'evaluate_id' ] ] ]);
  147. Cache::tag("goods_evaluate")->clear();
  148. return $this->success($res);
  149. }
  150. /**
  151. * 修改评价
  152. * @param $data
  153. * @param array $condition
  154. * @return array
  155. */
  156. public function editEvaluate($data, $condition = [])
  157. {
  158. $res = model("goods_evaluate")->update($data, $condition);
  159. Cache::tag("goods_evaluate")->clear();
  160. return $this->success($res);
  161. }
  162. //操作评价状态
  163. public function modifyAuditEvaluate($data, $condition = [])
  164. {
  165. $list = model("goods_evaluate")->getList($condition, 'goods_id,sku_id,is_audit,explain_type,images');
  166. if (!empty($list)) {
  167. $goods_evaluate = 0; //评价
  168. $goods_evaluate_haoping = 0; //好评
  169. $goods_evaluate_zhongping = 0; //中评
  170. $goods_evaluate_chaping = 0; //差评
  171. $goods_evaluate_shaitu = 0; //晒图
  172. $sku_evaluate = 0; //评价
  173. $sku_evaluate_haoping = 0; //好评
  174. $sku_evaluate_zhongping = 0; //中评
  175. $sku_evaluate_chaping = 0; //差评
  176. $sku_evaluate_shaitu = 0; //晒图
  177. foreach ($list as $k => $v) {
  178. if ($data[ 'is_audit' ] == 1) {
  179. $symbol = "+";
  180. if ($v[ 'explain_type' ] == 1) {
  181. //好评
  182. $goods_evaluate = 1; //评价
  183. $sku_evaluate = 1;
  184. $goods_evaluate_haoping = 1; //好评
  185. $sku_evaluate_haoping = 1;
  186. } elseif ($v[ 'explain_type' ] == 2) {
  187. //中评
  188. $goods_evaluate = 1; //评价
  189. $sku_evaluate = 1;
  190. $goods_evaluate_zhongping = 1; //中评
  191. $sku_evaluate_zhongping = 1;
  192. } elseif ($v[ 'explain_type' ] == 3) {
  193. //差评
  194. $goods_evaluate = 1; //评价
  195. $sku_evaluate = 1;
  196. $goods_evaluate_chaping = 1; //差评
  197. $sku_evaluate_chaping = 1;
  198. }
  199. if (!empty($v[ 'images' ])) {
  200. $goods_evaluate_shaitu = 1; //晒图
  201. $sku_evaluate_shaitu = 1;
  202. }
  203. Db::name('goods')->where([ [ 'goods_id', '=', $v[ 'goods_id' ] ] ])
  204. ->update(
  205. [
  206. "evaluate" => Db::raw('evaluate' . $symbol . $goods_evaluate),
  207. "evaluate_shaitu" => Db::raw('evaluate_shaitu' . $symbol . $goods_evaluate_shaitu),
  208. "evaluate_haoping" => Db::raw('evaluate_haoping' . $symbol . $goods_evaluate_haoping),
  209. "evaluate_zhongping" => Db::raw('evaluate_zhongping' . $symbol . $goods_evaluate_zhongping),
  210. "evaluate_chaping" => Db::raw('evaluate_chaping' . $symbol . $goods_evaluate_chaping),
  211. "wait_evaluate_num" => Db::raw('wait_evaluate_num-' . 1),
  212. "success_evaluate_num" => Db::raw('success_evaluate_num+' . 1),
  213. ]);
  214. Db::name('goods_sku')->where([ [ 'sku_id', '=', $v[ 'sku_id' ] ] ])
  215. ->update(
  216. [
  217. "evaluate" => Db::raw('evaluate' . $symbol . $sku_evaluate),
  218. "evaluate_shaitu" => Db::raw('evaluate_shaitu' . $symbol . $sku_evaluate_shaitu),
  219. "evaluate_haoping" => Db::raw('evaluate_haoping' . $symbol . $sku_evaluate_haoping),
  220. "evaluate_zhongping" => Db::raw('evaluate_zhongping' . $symbol . $sku_evaluate_zhongping),
  221. "evaluate_chaping" => Db::raw('evaluate_chaping' . $symbol . $sku_evaluate_chaping),
  222. "wait_evaluate_num" => Db::raw('wait_evaluate_num-' . 1),
  223. "success_evaluate_num" => Db::raw('success_evaluate_num+' . 1),
  224. ]);
  225. } else {
  226. Db::name('goods')->where([ [ 'goods_id', '=', $v[ 'goods_id' ] ] ])
  227. ->update(
  228. [
  229. "wait_evaluate_num" => Db::raw('wait_evaluate_num-' . 1),
  230. "fail_evaluate_num" => Db::raw('fail_evaluate_num+' . 1),
  231. ]);
  232. Db::name('goods_sku')->where([ [ 'sku_id', '=', $v[ 'sku_id' ] ] ])
  233. ->update(
  234. [
  235. "wait_evaluate_num" => Db::raw('wait_evaluate_num-' . 1),
  236. "fail_evaluate_num" => Db::raw('fail_evaluate_num+' . 1),
  237. ]);
  238. }
  239. }
  240. }
  241. $res = model("goods_evaluate")->update($data, $condition);
  242. Cache::tag("goods_evaluate")->clear();
  243. return $this->success($res);
  244. }
  245. //操作追评状态
  246. public function modifyAgainAuditEvaluate($data, $condition = [])
  247. {
  248. $list = model("goods_evaluate")->getList($condition, 'goods_id,sku_id,is_audit,explain_type,images');
  249. $res = model("goods_evaluate")->update($data, $condition);
  250. foreach ($list as $k => $v) {
  251. if ($res) {
  252. model('goods')->setInc([ [ 'goods_id', '=', $v[ 'goods_id' ] ] ], 'evaluate_zhuiping', 1);
  253. model('goods_sku')->setInc([ [ 'sku_id', '=', $v[ 'sku_id' ] ] ], 'evaluate_zhuiping', 1);
  254. }
  255. }
  256. Cache::tag("goods_evaluate")->clear();
  257. return $this->success($res);
  258. }
  259. /**
  260. * 修改商品评价数量
  261. * @param $evaluate_ids
  262. * @return array
  263. */
  264. public function modifyGoodsEvaluateCount($evaluate_ids)
  265. {
  266. $list = model("goods_evaluate")->getList([ [ 'evaluate_id', 'in', $evaluate_ids ], [ 'is_audit', '<>', 0 ] ], 'goods_id,sku_id,is_audit');
  267. if (!empty($list)) {
  268. $evaluate = 1; //评价
  269. $evaluate_shaitu = 1; //晒图
  270. $evaluate_haoping = 1; //好评
  271. $evaluate_zhongping = 1; //中评
  272. $evaluate_chaping = 1; //差评
  273. foreach ($list as $k => $v) {
  274. if ($v[ 'is_audit' ] == 1) {
  275. // 审核拒绝
  276. $symbol = "+";
  277. Db::name('goods')->where([ [ 'goods_id', '=', $v[ 'goods_id' ] ] ])
  278. ->update(
  279. [
  280. "evaluate" => Db::raw('evaluate' . $symbol . $evaluate),
  281. "evaluate_shaitu" => Db::raw('evaluate_shaitu' . $symbol . $evaluate_shaitu),
  282. "evaluate_haoping" => Db::raw('evaluate_haoping' . $symbol . $evaluate_haoping),
  283. "evaluate_zhongping" => Db::raw('evaluate_zhongping' . $symbol . $evaluate_zhongping),
  284. "evaluate_chaping" => Db::raw('evaluate_chaping' . $symbol . $evaluate_chaping),
  285. ]);
  286. Db::name('goods_sku')->where([ [ 'sku_id', '=', $v[ 'sku_id' ] ] ])
  287. ->update(
  288. [
  289. "evaluate" => Db::raw('evaluate' . $symbol . $evaluate),
  290. "evaluate_shaitu" => Db::raw('evaluate_shaitu' . $symbol . $evaluate_shaitu),
  291. "evaluate_haoping" => Db::raw('evaluate_haoping' . $symbol . $evaluate_haoping),
  292. "evaluate_zhongping" => Db::raw('evaluate_zhongping' . $symbol . $evaluate_zhongping),
  293. "evaluate_chaping" => Db::raw('evaluate_chaping' . $symbol . $evaluate_chaping),
  294. ]);
  295. }
  296. }
  297. }
  298. return $this->success();
  299. }
  300. /**
  301. * 追评
  302. * @param array $data
  303. * @return multitype:string
  304. */
  305. public function evaluateAgain($data, $site_id)
  306. {
  307. $config_model = new ConfigModel();
  308. //订单评价设置
  309. $order_evaluate_config = $config_model->getOrderEvaluateConfig($site_id);
  310. $order_evaluate_config = $order_evaluate_config[ 'data' ][ 'value' ];
  311. foreach ($data[ 'goods_evaluate' ] as $k => $v) {
  312. $item = [
  313. 'order_id' => $data[ 'order_id' ],
  314. 'order_goods_id' => $v[ 'order_goods_id' ],
  315. 'goods_id' => $v[ 'goods_id' ],
  316. 'sku_id' => $v[ 'sku_id' ],
  317. 'again_content' => $v[ 'again_content' ],
  318. 'again_images' => $v[ 'again_images' ],
  319. 'again_time' => time(),
  320. 'again_is_audit' => ( $order_evaluate_config[ 'evaluate_audit' ] == 1 ? 0 : 1 ),
  321. ];
  322. $res = model("goods_evaluate")->update($item, [ [ 'order_goods_id', '=', $v[ 'order_goods_id' ] ] ]);
  323. if ($order_evaluate_config[ 'evaluate_audit' ] == 0) {
  324. if ($res) {
  325. model('goods')->setInc([ [ 'goods_id', '=', $v[ 'goods_id' ] ] ], 'evaluate_zhuiping', 1);
  326. model('goods_sku')->setInc([ [ 'sku_id', '=', $v[ 'sku_id' ] ] ], 'evaluate_zhuiping', 1);
  327. }
  328. }
  329. }
  330. model('order')->update([ 'is_evaluate' => 0, 'evaluate_status' => 2, 'evaluate_status_name' => $this->evaluate_status[ 2 ] ], [ [ 'order_id', '=', $data[ 'order_id' ] ] ]);
  331. Cache::tag("goods_evaluate")->clear();
  332. return $this->success($res);
  333. }
  334. /**
  335. * 删除评价
  336. * @param unknown $condition
  337. */
  338. public function deleteEvaluate($evaluate_ids)
  339. {
  340. $res = model('goods_evaluate')->delete([ [ 'evaluate_id', 'in', $evaluate_ids ] ]);
  341. Cache::tag("goods_evaluate")->clear();
  342. return $this->success($res);
  343. }
  344. /**
  345. * 获取评价信息
  346. * @param $condition
  347. * @param $field
  348. * @param $order
  349. * @return \multitype
  350. */
  351. public function getFirstEvaluateInfo($condition, $field = 'evaluate_id,order_goods_id,goods_id,sku_id,sku_name,sku_price,content,images,explain_first,member_name,member_headimg,member_id,is_anonymous,again_content,again_images,again_explain,create_time,again_time', $order = "create_time desc")
  352. {
  353. $data = json_encode([ $condition, $field ]);
  354. $cache = Cache::get("goods_evaluate_getFirstEvaluateInfo_" . $data);
  355. if (!empty($cache)) {
  356. return $this->success($cache);
  357. }
  358. $info = model('goods_evaluate')->getFirstData($condition, $field, $order);
  359. Cache::tag("goods_evaluate")->set("goods_evaluate_getFirstEvaluateInfo_" . $data, $info);
  360. return $this->success($info);
  361. }
  362. /**
  363. * 获取评价信息
  364. * @param $condition
  365. * @param $field
  366. * @param $order
  367. * @return \multitype
  368. */
  369. public function getSecondEvaluateInfo($condition, $field = 'evaluate_id,order_goods_id,goods_id,sku_id,sku_name,sku_price,content,images,explain_first,member_name,member_headimg,member_id,is_anonymous,again_content,again_images,again_explain,create_time,again_time,scores', $order = "create_time desc")
  370. {
  371. $data = json_encode([ $condition, $field ]);
  372. $cache = Cache::get("goods_evaluate_getSecondEvaluateInfo_" . $data);
  373. if (!empty($cache)) {
  374. return $this->success($cache);
  375. }
  376. $info = model('goods_evaluate')->getList($condition, $field, $order, '', '', '', 2);
  377. Cache::tag("goods_evaluate")->set("goods_evaluate_getSecondEvaluateInfo_" . $data, $info);
  378. return $this->success($info);
  379. }
  380. /**
  381. * 获取评价列表
  382. * @param array $condition
  383. * @param string $field
  384. * @param string $order
  385. * @param string $limit
  386. */
  387. public function getEvaluateList($condition = [], $field = 'evaluate_id, order_id, order_no, order_goods_id, goods_id, sku_id, sku_name, sku_price, sku_image, content, images, explain_first, member_name, member_id, is_anonymous, scores, again_content, again_images, again_explain, explain_type, is_show, create_time, again_time,shop_desccredit,shop_servicecredit,shop_deliverycredit', $order = '', $limit = null)
  388. {
  389. $data = json_encode([ $condition, $field, $order, $limit ]);
  390. $cache = Cache::get("goods_evaluate_getEvaluateList_" . $data);
  391. if (!empty($cache)) {
  392. return $this->success($cache);
  393. }
  394. $list = model('goods_evaluate')->getList($condition, $field, $order, '', '', '', $limit);
  395. Cache::tag("goods_evaluate")->set("goods_evaluate_getEvaluateList_" . $data, $list);
  396. return $this->success($list);
  397. }
  398. /**
  399. * 获取评价分页列表
  400. * @param array $condition
  401. * @param number $page
  402. * @param string $page_size
  403. * @param string $order
  404. * @param string $field
  405. */
  406. public function getEvaluatePageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'create_time desc', $field = 'evaluate_id, order_id, order_no, order_goods_id, goods_id, sku_id, sku_name, sku_price, sku_image, content, images, explain_first, member_name,member_headimg, member_id, is_anonymous, scores, again_content, again_images, again_explain, explain_type, is_show, create_time, again_time,shop_desccredit,shop_servicecredit,shop_deliverycredit,is_audit,again_is_audit')
  407. {
  408. $data = json_encode([ $condition, $field, $order, $page, $page_size ]);
  409. $cache = Cache::get("goods_evaluate_getEvaluatePageList_" . $data);
  410. if (!empty($cache)) {
  411. return $this->success($cache);
  412. }
  413. $list = model('goods_evaluate')->pageList($condition, $field, $order, $page, $page_size);
  414. Cache::tag("goods_evaluate")->set("goods_evaluate_getEvaluatePageList_" . $data, $list);
  415. return $this->success($list);
  416. }
  417. /**
  418. * 查询评论数量
  419. * @param $condition
  420. * @return array
  421. */
  422. public function getEvaluateCount($condition)
  423. {
  424. $count = model('goods_evaluate')->getCount($condition);
  425. return $this->success($count);
  426. }
  427. }