KFMessageController.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <?php
  2. namespace Modules\WechatPlatform\Http;
  3. use Catch\Base\CatchController;
  4. use Illuminate\Foundation\Validation\ValidatesRequests;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. use Modules\WechatPlatform\Services\WechatPlatformConstService;
  8. class KFMessageController extends CatchController
  9. {
  10. use ValidatesRequests;
  11. /**
  12. * 客服消息列表
  13. * @param Request $request
  14. */
  15. public function list(Request $request) {
  16. $name = $request->input('name');
  17. $messageType = $request->input('messageType');
  18. $status = $request->input('status');
  19. $sendAtStart = $request->input('send_at_start');
  20. $sendAtEnd = $request->input('send_at_end');
  21. $gzhid = $request->input('gzh_id');
  22. $result = DB::table('wechat_kf_messages')
  23. ->where([
  24. ['is_enable' , '=', 1],
  25. ['user_id', '=', $this->getLoginUserId()]
  26. ])->when($name, function ($query, $name){
  27. return $query->where('name', 'like', '%'. $name. '%');
  28. })->when($messageType, function ($query, $messageType){
  29. return $query->where('message_type', $messageType);
  30. })->when($status, function ($query, $status){
  31. return $query->where('status', $status);
  32. })->when($sendAtStart, function ($query, $sendAtStart){
  33. return $query->where('start_at', '>=', $sendAtStart);
  34. })->when($sendAtEnd, function ($query, $sendAtEnd){
  35. return $query->where('start_at', '<=', $sendAtEnd . ' 23:59:59');
  36. })->when($gzhid, function ($query, $gzhid){
  37. return $query->where('gzh_ids', 'like', '%#'. $gzhid . '#%');
  38. })->orderBy('id', 'desc')
  39. ->paginate($request->input('limit', 20));
  40. $gzhIds = $gzhs = collect();
  41. $result->pluck('gzh_ids')->every(function ($item) use ($gzhIds){
  42. $gzhIds->merge(explode('#', trim($item, '#')));
  43. });
  44. if($gzhIds->isNotEmpty()) {
  45. $gzhs = DB::table('wechat_authorization_infos')
  46. ->whereIn('id', $gzhIds)
  47. ->select('id', 'nick_name')
  48. ->get()->keyBy('id');
  49. }
  50. foreach ($result as $item) {
  51. $item->gzh_names = $this->strGzhId($item->gzh_ids, $gzhs);
  52. $item->status_str = WechatPlatformConstService::KF_MESSAGE_STATUS_MAPPER[$item->status] ?? '';
  53. $item->message_content_arr = \json_decode($item->message_content, true);
  54. $item->message_type = WechatPlatformConstService::KF_MESSAGE_TYPE_MAPPER[$item->message_type] ?? '';
  55. }
  56. return $result;
  57. }
  58. private function strGzhId($gzh_ids, $gzhs) {
  59. $gzh_names = collect();
  60. foreach (explode('#', trim($gzh_ids, '#')) as $gzh_id) {
  61. $gzh_names->push($gzhs->get($gzh_id)->nick_name ?? 'ID:'. $gzh_id);
  62. }
  63. return $gzh_names->unique()->join(', ');
  64. }
  65. /**
  66. * 新增
  67. * @param Request $request
  68. */
  69. public function add(Request $request) {
  70. $this->validate($request, [
  71. 'name' => 'required', 'message_type' => 'required|in:1', 'message_content' => 'required|array',
  72. 'u_type' => 'required|in:1,2', 'uc_unique_key' => 'required', 'send_at' => 'required|date_format:Y-m-d H:i:s',
  73. ]);
  74. $now = date('Y-m-d H:i:s');
  75. DB::table('wechat_kf_messages')
  76. ->insert([
  77. 'name' => $request->input('name'),
  78. 'message_type' => $request->input('message_type'),
  79. 'message_content' => \json_encode($request->input('message_content'), JSON_UNESCAPED_UNICODE),
  80. 'u_type' => $request->input('user_type'),
  81. 'uc_unique_key' => $request->input('user_classify_unique_key'),
  82. 'send_at' => $request->input('send_at'),
  83. 'status' => WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND,
  84. 'user_id' => $this->getLoginUserId(),
  85. 'created_at' => $now,
  86. 'updated_at' => $now,
  87. ]);
  88. return 'ok';
  89. }
  90. /**
  91. * 修改客服消息内容
  92. * @param Request $request
  93. */
  94. public function updateContent(Request $request) {
  95. $this->validate($request, [
  96. 'id' => 'required',
  97. ]);
  98. $now = date('Y-m-d H:i:s');
  99. DB::table('wechat_kf_messages')
  100. ->where([
  101. ['id', '=', $request->input('id')],
  102. ['user_id', '=', $this->getLoginUserId()],
  103. ['status', '=', WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND],
  104. ['is_enabled', '=', 1],
  105. ])->update([
  106. 'name' => $request->input('name'),
  107. 'message_type' => $request->input('message_type'),
  108. 'message_content' => \json_encode($request->input('message_content'), JSON_UNESCAPED_UNICODE),
  109. 'u_type' => $request->input('user_type'),
  110. 'uc_unique_key' => $request->input('user_classify_unique_key'),
  111. 'send_at' => $request->input('send_at'),
  112. 'updated_at' => $now,
  113. ]);
  114. return 'ok';
  115. }
  116. /**
  117. * 修改配置的公众号
  118. * @param Request $request
  119. */
  120. public function updateGZH(Request $request){
  121. $this->validate($request, [
  122. 'id' => 'required',
  123. 'gzh_ids' => 'required|array'
  124. ]);
  125. $now = date('Y-m-d H:i:s');
  126. DB::table('wechat_kf_messages')
  127. ->where([
  128. ['id', '=', $request->input('id')],
  129. ['user_id', '=', $this->getLoginUserId()],
  130. ['status', '=', WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND],
  131. ['is_enabled', '=', 1],
  132. ])->update([
  133. 'gzh_ids' => sprintf('#%s#', join('#', array_unique($request->input('gzh_ids')))),
  134. 'updated_at' => $now,
  135. ]);
  136. return 'ok';
  137. }
  138. /**
  139. * 停止发送
  140. * @param Request $request
  141. */
  142. public function stop(Request $request) {
  143. $this->validate($request, [
  144. 'id' => 'required'
  145. ]);
  146. $now = date('Y-m-d H:i:s');
  147. DB::table('wechat_kf_messages')
  148. ->where([
  149. ['id', '=', $request->input('id')],
  150. ['user_id', '=', $this->getLoginUserId()],
  151. ['status', '=', WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND],
  152. ['is_enabled', '=', 1],
  153. ])->update([
  154. 'status' => WechatPlatformConstService::KF_MESSAGE_STATUS_STOP,
  155. 'updated_at' => $now,
  156. ]);
  157. return 'ok';
  158. }
  159. /**
  160. * 删除
  161. * @param Request $request
  162. */
  163. public function delete(Request $request){
  164. $this->validate($request, [
  165. 'id' => 'required'
  166. ]);
  167. $now = date('Y-m-d H:i:s');
  168. DB::table('wechat_kf_messages')
  169. ->where([
  170. ['id', '=', $request->input('id')],
  171. ['user_id', '=', $this->getLoginUserId()],
  172. ['status', '<>', WechatPlatformConstService::KF_MESSAGE_STATUS_SENDING],
  173. ['is_enabled', '=', 1],
  174. ])->update([
  175. 'is_enabled' => 0,
  176. 'updated_at' => $now,
  177. ]);
  178. DB::table('wechat_kf_message_send_records')
  179. ->where([
  180. ['message_id', '=', $request->input('id')],
  181. ['is_enabled', '=', 1]
  182. ])->update([
  183. 'is_enabled' => 0,
  184. 'updated_at' => $now,
  185. ]);
  186. return 'ok';
  187. }
  188. }