KFMessageController.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. namespace Modules\WechatPlatform\Http\Controllers;
  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_enabled' , '=', 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. // todo:完善
  56. $item->uc_str = '';
  57. }
  58. return $result;
  59. }
  60. private function strGzhId($gzh_ids, $gzhs) {
  61. if(!$gzh_ids){
  62. return '';
  63. }
  64. $gzh_names = collect();
  65. foreach (explode('#', trim($gzh_ids, '#')) as $gzh_id) {
  66. $gzh_names->push($gzhs->get($gzh_id)->nick_name ?? 'ID:'. $gzh_id);
  67. }
  68. return $gzh_names->unique()->join(', ');
  69. }
  70. /**
  71. * 新增
  72. * @param Request $request
  73. */
  74. public function add(Request $request) {
  75. $this->validate($request, [
  76. 'name' => 'required', 'message_type' => 'required|in:1', 'message_content' => 'required|array',
  77. 'u_type' => 'required|in:1,2', 'uc_unique_key' => 'required_if:u_type,2', 'send_at' => 'required|date_format:Y-m-d H:i:s',
  78. ]);
  79. $now = date('Y-m-d H:i:s');
  80. DB::table('wechat_kf_messages')
  81. ->insert([
  82. 'name' => $request->input('name'),
  83. 'message_type' => $request->input('message_type'),
  84. 'message_content' => \json_encode($request->input('message_content'), JSON_UNESCAPED_UNICODE),
  85. 'u_type' => $request->input('u_type', 1),
  86. 'uc_unique_key' => $request->input('uc_unique_key', ''),
  87. 'send_at' => $request->input('send_at'),
  88. 'status' => WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND,
  89. 'user_id' => $this->getLoginUserId(),
  90. 'created_at' => $now,
  91. 'updated_at' => $now,
  92. ]);
  93. return 'ok';
  94. }
  95. /**
  96. * 修改客服消息内容
  97. * @param Request $request
  98. */
  99. public function updateContent(Request $request) {
  100. $this->validate($request, [
  101. 'id' => 'required',
  102. 'name' => 'required', 'message_type' => 'required|in:1', 'message_content' => 'required|array',
  103. 'u_type' => 'required|in:1,2', 'uc_unique_key' => 'required_if:u_type,2', 'send_at' => 'required|date_format:Y-m-d H:i:s',
  104. ]);
  105. $now = date('Y-m-d H:i:s');
  106. DB::table('wechat_kf_messages')
  107. ->where([
  108. ['id', '=', $request->input('id')],
  109. ['user_id', '=', $this->getLoginUserId()],
  110. ['status', '=', WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND],
  111. ['is_enabled', '=', 1],
  112. ])->update([
  113. 'name' => $request->input('name'),
  114. 'message_type' => $request->input('message_type'),
  115. 'message_content' => \json_encode($request->input('message_content'), JSON_UNESCAPED_UNICODE),
  116. 'u_type' => $request->input('u_type', '1'),
  117. 'uc_unique_key' => $request->input('uc_unique_key', ''),
  118. 'send_at' => $request->input('send_at'),
  119. 'updated_at' => $now,
  120. ]);
  121. return 'ok';
  122. }
  123. /**
  124. * 修改配置的公众号
  125. * @param Request $request
  126. */
  127. public function updateGZH(Request $request){
  128. $this->validate($request, [
  129. 'id' => 'required',
  130. 'gzh_ids' => 'required|array'
  131. ]);
  132. $now = date('Y-m-d H:i:s');
  133. DB::table('wechat_kf_messages')
  134. ->where([
  135. ['id', '=', $request->input('id')],
  136. ['user_id', '=', $this->getLoginUserId()],
  137. ['status', '=', WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND],
  138. ['is_enabled', '=', 1],
  139. ])->update([
  140. 'gzh_ids' => sprintf('#%s#', join('#', array_unique($request->input('gzh_ids')))),
  141. 'updated_at' => $now,
  142. ]);
  143. return 'ok';
  144. }
  145. /**
  146. * 停止发送
  147. * @param Request $request
  148. */
  149. public function stop(Request $request) {
  150. $this->validate($request, [
  151. 'id' => 'required'
  152. ]);
  153. $now = date('Y-m-d H:i:s');
  154. DB::table('wechat_kf_messages')
  155. ->where([
  156. ['id', '=', $request->input('id')],
  157. ['user_id', '=', $this->getLoginUserId()],
  158. ['status', '=', WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND],
  159. ['is_enabled', '=', 1],
  160. ])->update([
  161. 'status' => WechatPlatformConstService::KF_MESSAGE_STATUS_STOP,
  162. 'updated_at' => $now,
  163. ]);
  164. return 'ok';
  165. }
  166. /**
  167. * 删除
  168. * @param Request $request
  169. */
  170. public function delete(Request $request){
  171. $this->validate($request, [
  172. 'id' => 'required'
  173. ]);
  174. $now = date('Y-m-d H:i:s');
  175. DB::table('wechat_kf_messages')
  176. ->where([
  177. ['id', '=', $request->input('id')],
  178. ['user_id', '=', $this->getLoginUserId()],
  179. ['status', '<>', WechatPlatformConstService::KF_MESSAGE_STATUS_SENDING],
  180. ['is_enabled', '=', 1],
  181. ])->update([
  182. 'is_enabled' => 0,
  183. 'updated_at' => $now,
  184. ]);
  185. DB::table('wechat_kf_message_send_records')
  186. ->where([
  187. ['message_id', '=', $request->input('id')],
  188. ['is_enabled', '=', 1]
  189. ])->update([
  190. 'is_enabled' => 0,
  191. 'updated_at' => $now,
  192. ]);
  193. return 'ok';
  194. }
  195. }