From 71d5dfb4398d1c43958b8e0262bbbdffd293ea36 Mon Sep 17 00:00:00 2001 From: xxb Date: Wed, 7 Jul 2021 14:45:07 +0800 Subject: [PATCH] admin update for receiver clues import and add --- admin/controllers/receiver/Clues.php | 157 +++++++++++++++++++++++++++ admin/views/receiver/clues/get.php | 88 +++++++++++++++ admin/views/receiver/clues/lists.php | 75 ++++++++++++- www/admin/temp/clues.xlsx | Bin 0 -> 9920 bytes 4 files changed, 316 insertions(+), 4 deletions(-) create mode 100644 admin/views/receiver/clues/get.php create mode 100644 www/admin/temp/clues.xlsx diff --git a/admin/controllers/receiver/Clues.php b/admin/controllers/receiver/Clues.php index 78803713..3309c028 100644 --- a/admin/controllers/receiver/Clues.php +++ b/admin/controllers/receiver/Clues.php @@ -4,8 +4,13 @@ defined('BASEPATH') OR exit('No direct script access allowed'); class Clues extends HD_Controller{ private $searchTpAry = array('mobile' => '客户手机号', 'name' => '客户姓名'); + protected $log_dir; + public function __construct(){ parent::__construct(); + + $this->log_dir = 'receiver_clues'; + $this->load->model('receiver/receiver_clues_model','clues_model'); $this->load->model('receiver/receiver_clues_cfrom_model','clues_cfrom_model'); $this->load->model('receiver/receiver_status_model','status_model'); @@ -70,10 +75,107 @@ class Clues extends HD_Controller{ } public function get(){ + $id = $this->input->get('id'); + + if($id){ + $row = $this->clues_model->get(array('id' => $id)); + if(!$row){ + return $this->show_json(SYS_CODE_FAIL, '记录不存在'); + } + + $info = array( + 'name' => $row['name'], + 'mobile' => $row['mobile'], + 'cf_id' => $row['cf_id'], + ); + $title = "编辑线索"; + $action = "edit"; + } else { + $info = array( + 'name' => '', + 'mobile' => '', + 'cf_id' => '', + ); + $title = "新增线索"; + $action = "add"; + } + + $where = array('status' => 1); + $select = 'id, title'; + $map_cfrom = $this->clues_cfrom_model->map('id', 'title', $where, '', 0, 0, $select); + + $this->data['info'] = $info; + $this->data['cfrom_ary'] = $map_cfrom; + $this->data['action'] = $action; + + $this->data['_title'] = $title; + return $this->show_view('receiver/clues/get'); } //添加单条数据 public function add(){ + $info = $this->input->post('info'); + + if(!$info['name']){ + return $this->show_json(SYS_CODE_FAIL, '请填写姓名'); + } + + if(! mobile_valid($info['mobile'])){ + return $this->show_json(SYS_CODE_FAIL, '手机号码不准确'); + } + + $add = array( + 'name' => $info['name'], + 'mobile' => $info['mobile'], + 'cf_id' => $info['cf_id'] ? $info['cf_id'] : 0, + 'c_time' => time(), + ); + $ret = $this->clues_model->add($add); + if(!$ret){ + debug_log("[error]# add fail; " . $this->clues_model->db->last_query(), __FUNCTION__, $this->log_dir); + return $this->show_json(SYS_CODE_FAIL, '添加失败'); + } + + return $this->show_json(SYS_CODE_SUCCESS, '添加成功'); + } + + function add_excel(){ + require_once COMMPATH . '/third_party/PHPExcel/IOFactory.php'; + $res = $this->upload(); + if (!$res['code']) { + return $this->show_json(0, $res['message']); + } + $file = $res['path']; + if ($res['file_ext'] == '.xls') { + $reader = \PHPExcel_IOFactory::createReader('Excel5'); // 读取 excel 文档 + } elseif ($res['file_ext'] == '.xlsx') { + $reader = \PHPExcel_IOFactory::createReader('Excel2007'); // 读取 excel 文档 + } else { + return $this->show_json(SYS_CODE_FAIL, '文件无法识别'); + } + $PHPExcel = $reader->load($file); // 文档名称 + $objWorksheet = $PHPExcel->getActiveSheet(); + $rowCnt = $objWorksheet->getHighestRow(); //获取总行数 + if ($rowCnt > 800) { + @unlink($file); + return $this->show_json(0, '数据大于800请拆分多个表格导入'); + } + $data = array(); + for ($_row = 2; $_row <= $rowCnt; $_row++) { //读取内容 + if ($objWorksheet->getCell('A' . $_row)->getValue()) { + $data[] = array( + 'name' => $objWorksheet->getCell('A' . $_row)->getValue(), + 'mobile' => $objWorksheet->getCell('B' . $_row)->getValue(), + 'cfrom' => $objWorksheet->getCell('C' . $_row)->getValue(), + ); + } + } + $data && $data = array_unique($data); //去除重复数据 + $done = $this->add_batch($data); + @unlink($file); + $this->data['load_num'] = count($data); + $this->data['done'] = $done; + return $this->show_json(SYS_CODE_SUCCESS, "成功导入{$done}条"); } //编辑单条数据 @@ -160,4 +262,59 @@ class Clues extends HD_Controller{ return $this->show_json(SYS_CODE_SUCCESS, '分配成功!'); } + private function upload() + { + $config['upload_path'] = $_SERVER['DOCUMENT_ROOT'] . '/temp/'; + $config['allowed_types'] = 'xls|xlsx'; + $config['max_size'] = 5120; + $config['file_name'] = 'receiver_clues' . time() . rand(1, 99999); + $this->load->library('upload', $config); + if (!$this->upload->do_upload('file')) { + return array('code' => SYS_CODE_FAIL, 'message' => $this->upload->display_errors('', '')); + } else { + $data = $this->upload->data(); + return array('code' => SYS_CODE_SUCCESS, 'path' => $data['full_path'], 'file_ext' => $data['file_ext']); + } + } + + /** + * 批量新增 + * @param $lists + * @return int + */ + private function add_batch($lists){ + $done = 0; + $adds = array(); + + $where = array('status' => 1); + $select = 'id, title'; + $map_cfrom = $this->clues_cfrom_model->map('title', 'id', $where, '', 0, 0, $select); + foreach($lists as $v){ + if(!$v['name']){ + continue; + } + if(!mobile_valid($v['mobile'])){ + continue; + } + $cf_id = $map_cfrom[$v['cfrom']]; + $adds[] = array( + 'name' => $v['name'], + 'mobile' => $v['mobile'], + 'cf_id' => $cf_id ? $cf_id : 0, + 'c_time' => time(), + ); + $done++; + } + + if($adds){ + $ret = $this->clues_model->add_batch($adds); + if(!$ret){ + debug_log("[error] add_batch fail; " . $this->clues_model->db->last_query(), __FUNCTION__, $this->log_dir); + $done = 0; + } + } + + return $done; + } + } diff --git a/admin/views/receiver/clues/get.php b/admin/views/receiver/clues/get.php new file mode 100644 index 00000000..a1034cb1 --- /dev/null +++ b/admin/views/receiver/clues/get.php @@ -0,0 +1,88 @@ +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+ diff --git a/admin/views/receiver/clues/lists.php b/admin/views/receiver/clues/lists.php index b9056ff6..c749c965 100644 --- a/admin/views/receiver/clues/lists.php +++ b/admin/views/receiver/clues/lists.php @@ -59,14 +59,12 @@
- +
+ data-modal="/receiver/clues/get" data-title="新增线索">新增
@@ -114,6 +112,25 @@ + + diff --git a/www/admin/temp/clues.xlsx b/www/admin/temp/clues.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e198b44480618fcd43f4dbf100e7aca437265743 GIT binary patch literal 9920 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%0DD zoTT^uYls7ujb&<4pCJ}`(1+ABH78-4xk{ypWl)9gBse;9y78_e4K$g1I3y%k^zv%| zX4ADxk;XAd5JEMuQJi~x7ex8M2Nj5h5go}MK|J-=v5>ywjtCX-1RDqot*^M_=I8lg zMqP!geJ}5V8T^*Pf+mOu##z}jY{nK@>OxK2SEq-sB=kNQdJ*1SA}a^Y{@}F!Ktt@P zjkp!MgiT|jHqLw&ojWE}hH-tFvHnxO{ekB@NE`^E`|n@j{OA4sXa6tX5X*d%3;j``gPb&Mz;w7l3a&xLtn#c92N)%fatr{I==s`sKH2G@_q^h=k|u zYUZ|w+baLJhhnnZG5A-_f7{`0(fr%tE5w>O;*oAi=G*7LB=l{ke^&&*T>=19)BwOg n^ucZOzh~~hnm5q?#r)4auAz*Az#ssCjrcJmU>y0AK7juNh92xj literal 0 HcmV?d00001