123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 |
- <?php
- namespace app\sys\controller;
- use app\model\Customer;
- use app\model\WeworksingleCompanySetting;
- use app\model\WeworksingleCustomer;
- use app\model\WeworksingleExternalMessage;
- use app\model\WeworksingleExternalMessageRecord;
- use think\facade\View;
- use app\model\Company;
- use app\model\Employee;
- use think\facade\Request;
- use weworkapi\api\apiSingle;
- class Wework extends Base
- {
- /**
- * 列表页面
- */
- public function external_message()
- {
- if(!request()->isAjax()) return View::fetch();
- $page = input('page', 1, 'intval');
- $limit = input('limit', 10, 'intval');
- $root_id = request()->employee->root_id;
- $where[] = ['root_org', '=', $root_id];
- $date = input('date', '', 'trim');
- if (!empty($date)) {
- $date_arr = explode(' - ', $date);
- $start_time = strtotime($date_arr[0]);
- $end_time = strtotime($date_arr[1]);
- $where[] = ['sendtime', 'between', [$start_time, $end_time]];
- }
- $list = WeworksingleExternalMessage::where($where)->page($page, $limit)->select()->each(function ($item){
- if ($item['send_type'] == 1) {
- $item->send_type_name = '单聊';
- } elseif ($item['send_type'] == 2) {
- $item->send_type_name = '群聊';
- }
- $customer_group_arr = array_filter(explode(',', $item['customer_group']));
- $group_arr[1] = '确认量房';
- $group_arr[2] = '交定';
- $group_arr[3] = '签单';
- $customer_group_str = '';
- foreach ($customer_group_arr as $v) {
- $customer_group_str .= $group_arr[$v] . ',';
- }
- $item->customer_group_name = trim($customer_group_str, ',');
- if (!empty($item['employee_id'])) {
- $employee_list = Employee::where([['id', 'in', $item['employee_id']]])->column('name');
- $item->employee_name = implode(',', $employee_list);
- } else {
- $item->employee_name = '';
- }
- $item->sendtime = date('Y-m-d H:i', $item['sendtime']);
- $item->endtime = date('Y-m-d H:i', $item['endtime']);
- $item->edit_per = strtotime($item['sendtime']) < time() ? false : true;
- });
- $count = WeworksingleExternalMessage::where($where)->count();
- return json(['code'=> 0, 'msg'=> '查询成功', 'data'=> $list, 'count'=> $count]);
- }
- /**
- * 企业微信上传素材
- */
- public function weworkUpload(){
- if (!request()->isPost()) {
- return View::fetch();
- } else {
- $path = request()->param('path', '', 'trim');
- $root_org = request()->employee->root_id;
- $company_id = Company::where('root_id', '=', $root_org)->value('id');
- $company_setting = WeworksingleCompanySetting::where('company_id', '=', $company_id)->find();
- if (empty($company_setting)) {
- return json(['code'=> 1, 'msg'=> '上传失败']);
- } else {
- $config['corp_id'] = $company_setting['corp_id'];
- $config['agent_id'] = $company_setting['agent_id'];
- $config['secret'] = $company_setting['agent_secret'];
- $app = (new apiSingle($config));
- $result = $app->uploadImage($path);
- if ($result['errcode'] == 0) {
- return json(['code'=> 0, 'msg'=> '上传成功', 'data'=> $result['media_id']]);
- } else {
- return json(['code'=> 1, 'msg'=> '文件上传失败']);
- }
- }
- }
- }
- /**
- * 获取外部联系群
- */
- /*public function getGroupChats(){
- $page = input('page', '', 'trim');
- $root_org = request()->employee->root_id;
- $company_id = Company::where('root_id', '=', $root_org)->value('id');
- $company_setting = WeworksingleCompanySetting::where('company_id', '=', $company_id)->find();
- if (empty($company_setting)) {
- return json(['code'=> 1, 'msg'=> '获取失败']);
- } else {
- $config['corp_id'] = $company_setting['corp_id'];
- $config['agent_id'] = $company_setting['agent_id'];
- $config['secret'] = $company_setting['customer_secret'];
- $app = (new apiSingle($config));
- $result = $app->getGroupChats($page, 10, 0, []);
- if ($result['errcode'] == 0) {
- $group_chat_list = $result['group_chat_list'];
- foreach ($group_chat_list as $k => $v) {
- $chat = $app->getGroupChat($v['chat_id']);
- if ($chat['errcode'] == 0) {
- $group_chat_list[$k]['info'] = $chat['group_chat'];
- } else {
- $group_chat_list[$k]['info'] = [];
- }
- }
- $next_page = empty($result['next_cursor']) ? '' : $result['next_cursor'];
- return json(['code'=> 0, 'msg'=> '获取成功', 'data'=> $group_chat_list, 'page'=> $next_page]);
- } else {
- return json(['code'=> 1, 'msg'=> '获取失败']);
- }
- }
- }*/
- /**
- * 获取绑定了企业微信的成员列表
- */
- public function getUserList(){
- $page = input('page', 1, 'intval');
- $root_org = request()->employee->root_id;
- $where[] = ['weworksingle_uid', '>', 0];
- $where[] = ['root_id', '=', $root_org];
- $list = Employee::where($where)->page($page, 10)->select();
- $count = Employee::where($where)->count();
- $data['list'] = $list;
- $data['count'] = $count;
- return json(['code'=> 0, 'msg'=> '获取成功', 'data'=> $data]);
- }
- /**
- * 添加群发内容
- */
- public function add_external_message()
- {
- if(!request()->isPost()){
- return View::fetch();
- } else {
- $param = request()->param();
- $data['root_org'] = request()->employee->root_id;
- $data['sendtime'] = strtotime($param['sendtime']);
- $data['endtime'] = strtotime($param['endtime']);
- $data['send_org_id'] = '';
- $data['status'] = 0;
- $data['executetime'] = '';
- $data['receive_userid'] = ''; //实际执行时候的接收人(单聊)
- $data['external_user'] = ''; // 生成此条数据时候的接收人(单聊),此字段实际无用
- // 群发至客户
- $select = input('select', '', 'trim');
- $data['customer_group'] = $select;
- if (!empty($select)) {
- $data['send_type'] = 1;
- $select_arr = explode(',', $select);
- $state = [];
- foreach ($select_arr as $v) {
- switch (intval($v)) {
- case 1:
- $state[] = '确认量房';
- break;
- case 2:
- $state[] = '交定';
- break;
- case 3:
- $state[] = '签单';
- break;
- default:
- break;
- }
- }
- $orgids = orgSubIds(request()->employee->root_id);
- $c_where[] = ['org_id', 'in', $orgids];
- $c_where[] = ['employee_id', '>', 0];
- $c_where[] = ['state', 'in', $state];
- $customer_ids = Customer::where($c_where)->column('id');
- $external_user = WeworksingleCustomer::where('customer_id', 'in', $customer_ids)->column('external_userid');
- $data['external_user'] = empty($external_user) ? '' : json_encode($external_user);
- }
- // 群发至客户群
- $data['employee_id'] = input('employee_id', '', 'trim');
- if (!empty($data['employee_id'])) {
- $data['send_type'] = 2;
- }
- $data['content'] = $param['content'];
- $attachments = explode(',', $param['media_id_arr']);
- $att = [];
- if (!empty($attachments)) {
- foreach ($attachments as $v) {
- $att[] = [
- 'image' => [
- 'media_id'=> $v
- ]
- ];
- }
- }
- $data['attachments'] = !empty($att) ? json_encode($att) : '';
- $result = WeworksingleExternalMessage::create($data);
- if ($result) {
- return json(['code'=> 0, 'msg'=> '添加成功']);
- } else {
- return json(['code'=> 1, 'msg'=> '添加失败']);
- }
- }
- }
- /**
- * 编辑群发内容
- */
- public function edit_external_message()
- {
- if(!request()->isPost()) {
- $id = input('id', '', 'intval');
- $info = WeworksingleExternalMessage::find($id);
- $employee_list = [];
- if (!empty($info['employee_id'])) {
- $employee_list = Employee::where([['id', 'in', $info['employee_id']]])->field('id,name')->select()->toArray();
- }
- $info['employee_list'] = $employee_list;
- View::assign('info', $info);
- return View::fetch();
- } else {
- $param = request()->param();
- $id = $param['id'];
- $info = WeworksingleExternalMessage::find($id);
- if (empty($info)) {
- return json(['code'=> 1, 'msg'=> '编辑失败']);
- }
- if ($info['sendtime'] < time()) {
- return json(['code'=> 1, 'msg'=> '该任务已执行,无法编辑']);
- }
- $data['sendtime'] = strtotime($param['sendtime']);
- $data['endtime'] = strtotime($param['endtime']);
- $data['send_org_id'] = '';
- $data['status'] = 0;
- $data['executetime'] = '';
- $data['receive_userid'] = $info['receive_userid'];
- $data['external_user'] = '';
- // 群发至客户
- $select = input('select', '', 'trim');
- $data['customer_group'] = $select;
- if (!empty($select)) {
- $data['send_type'] = 1;
- $select_arr = explode(',', $select);
- $state = [];
- foreach ($select_arr as $v) {
- switch (intval($v)) {
- case 1:
- $state[] = '确认量房';
- break;
- case 2:
- $state[] = '交定';
- break;
- case 3:
- $state[] = '签单';
- break;
- default:
- break;
- }
- }
- $c_where[] = ['state', 'in', $state];
- $c_where[] = ['org_id', '=', request()->employee->root_id];
- $customer_ids = Customer::where($c_where)->column('id');
- $external_user = WeworksingleCustomer::where('customer_id', 'in', $customer_ids)->column('external_userid');
- $data['external_user'] = empty($external_user) ? '' : json_encode($external_user);
- }
- // 群发至客户群
- $data['employee_id'] = input('employee_id', '', 'trim');
- if (!empty($data['employee_id'])) {
- $data['send_type'] = 2;
- }
- $data['content'] = $param['content'];
- $attachments = explode(',', $param['media_id_arr']);
- $att = [];
- if (!empty($attachments)) {
- foreach ($attachments as $v) {
- $att[] = [
- 'image' => [
- 'media_id'=> $v
- ]
- ];
- }
- }
- $data['attachments'] = !empty($att) ? json_encode($att) : '';
- $result = WeworksingleExternalMessage::where('id', '=', $id)->save($data);
- if ($result !== false) {
- return json(['code'=> 0, 'msg'=> '编辑成功']);
- } else {
- return json(['code'=> 1, 'msg'=> '编辑失败']);
- }
- }
- }
- /**
- * 删除群发
- */
- public function delete_external_message(){
- $id = input('id', '', 'intval');
- $root_org = request()->employee->root_id;
- $find = WeworksingleExternalMessage::find($id);
- if (empty($find)) {
- return json(['code'=> 0, 'msg'=> '删除成功']);
- }
- if ($find['root_org'] !== $root_org) {
- return json(['code'=> 1, 'msg'=> '删除失败']);
- }
- if ($find['sendtime'] < time()) {
- return json(['code'=> 1, 'msg'=> '已发送,无法删除']);
- }
- $result = $find->delete();
- if ($result !== false) {
- return json(['code'=> 0, 'msg'=> '删除成功']);
- } else {
- return json(['code'=> 1, 'msg'=> '删除失败']);
- }
- }
-
- /**
- * 群发统计
- */
- public function statistics_external_message()
- {
- $id = input('id', '', 'intval');
- if(!request()->isAjax()){
- $info = WeworksingleExternalMessage::find($id);
- $company_id = Company::where('root_id', '=', request()->employee->root_id)->value('id');
- $setting = WeworksingleCompanySetting::where('company_id', '=', $company_id)->find();
- $config['corp_id'] = $setting['corp_id'];
- $config['agent_id'] = $setting['agentid'];
- $config['secret'] = $setting['customer_secret'];
- $send_list = WeworksingleExternalMessageRecord::where('message_id', '=', $info['id'])->select();
- $app = (new apiSingle($config));
- foreach ($send_list as $k => $v) {
- $result = $app->getExternalMessage($v['msgid']);
- if ($result['errcode'] == 0) {
- if (!empty($result['detail_list'])) {
- $v->status = $result['detail_list'][0]['status'];
- $v->send_time = !empty($result['detail_list'][0]['send_time']) ? $result['detail_list'][0]['send_time'] : 0;
- $v->save();
- }
- }
- }
- $data['send_number'] = WeworksingleExternalMessageRecord::where('message_id', '=', $info['id'])->count();
- $data['send_type'] = $info['send_type'] == 1 ? '单聊' : '群聊';
- $data['receive_count'] = count(explode(',', $info['receive_userid']));
- $data['send_count'] = WeworksingleExternalMessageRecord::where([['message_id', '=', $info['id']], ['status', '<>', 0]])->count();
- $data['unsend_count'] = WeworksingleExternalMessageRecord::where([['message_id', '=', $info['id']], ['status', '=', 0]])->count();
- View::assign('info', $data);
- View::assign('id', $id);
- return View::fetch();
- }
- $status = input('status', '', 'intval');
- $page = input('page', 1, 'intval');
- $where[] = ['message_id', '=', $id];
- if ($status) {
- switch ($status) {
- case 1:
- $where[] = ['status', '=', 1];
- break;
- case 2:
- $where[] = ['status', '=', 0];
- break;
- case 3:
- $where[] = ['status', 'in', [2,3]];
- break;
- default:
- break;
- }
- }
- $list = WeworksingleExternalMessageRecord::where($where)->page($page, 10)->select()->each(function ($item){
- $employee = Employee::find($item['employee_id']);
- $item->employee_name = $employee['name'];
- switch ($item['status']) {
- case 0:
- $item->status_name = '未执行';
- break;
- case 1:
- $item->status_name = '已执行';
- break;
- case 2:
- case 3:
- $item->status_name = '执行失败';
- break;
- default:
- $item->status_name = '';
- break;
- }
- if ($item['send_time']) {
- $item->send_time = date('Y-m-d H:i:s');
- } else {
- $item->send_time = '';
- }
- });
- return json(['code'=> 0, 'msg'=> '查询成功', 'data'=> $list]);
- }
- }
|