From 56af1f45934027ff55b0b4f619fb48d3cc925dde Mon Sep 17 00:00:00 2001 From: dengbw Date: Thu, 27 Apr 2023 11:42:18 +0800 Subject: [PATCH] market_order_import --- .../api/institution/OrganizationUser.php | 18 +++ market/controllers/api/sylive/Activity.php | 6 +- market/controllers/api/sylive/GroupsOrder.php | 138 +++++++++++++++++- market/controllers/api/system/User.php | 2 +- www/market/temp/order.xlsx | Bin 0 -> 9260 bytes 5 files changed, 159 insertions(+), 5 deletions(-) create mode 100644 www/market/temp/order.xlsx diff --git a/market/controllers/api/institution/OrganizationUser.php b/market/controllers/api/institution/OrganizationUser.php index 77e784d5..6c64c224 100644 --- a/market/controllers/api/institution/OrganizationUser.php +++ b/market/controllers/api/institution/OrganizationUser.php @@ -254,6 +254,24 @@ class OrganizationUser extends BaseController $this->return_response(); } + /** + * Notes:批量删除用户 + * Created on: 2022/9/8 17:11 + * Created by: dengbw + */ + public function batch_delete() + { + $ids = $this->input_param('ids'); + if (!$ids) { + $this->return_json('参数错误'); + } + $str_ids = implode(',', $ids); + if ($str_ids) { + $this->mdSyliveUser->update(['status' => -1], ["userId in($str_ids)" => null]); + } + $this->return_response(); + } + /** * Notes:栓验字段 * Created on: 2022/9/21 15:52 diff --git a/market/controllers/api/sylive/Activity.php b/market/controllers/api/sylive/Activity.php index 73ff823d..2d686203 100644 --- a/market/controllers/api/sylive/Activity.php +++ b/market/controllers/api/sylive/Activity.php @@ -275,7 +275,7 @@ class Activity extends BaseController } $jsondata['bottoms'] = $setBottoms; $jsondata['blacklist'] = intval($this->input_param('blacklist')); - !$signBespeak['status'] && $signBespeak = ['status' => 0, 'title' => '', 'content' => '', 'itemId' => '']; + !$signBespeak['status'] && $signBespeak = ['status' => 0, 'title' => '', 'content' => '', 'itemId' => '']; $jsondata['signBespeak'] = $signBespeak; $jsondata['barrage'] = $this->input_param('barrage'); $jsondata['button'] = $this->input_param('button'); @@ -375,7 +375,7 @@ class Activity extends BaseController $jsondata['banner'] = $banner; $jsondata['serviceLink'] = $serviceLink; $jsondata['blacklist'] = intval($this->input_param('blacklist')); - !$signBespeak['status'] && $signBespeak = ['status' => 0, 'title' => '', 'content' => '', 'itemId' => '']; + !$signBespeak['status'] && $signBespeak = ['status' => 0, 'title' => '', 'content' => '', 'itemId' => '']; $jsondata['signBespeak'] = $signBespeak; $jsondata['barrage'] = $this->input_param('barrage'); $jsondata['button'] = $this->input_param('button'); @@ -551,7 +551,7 @@ class Activity extends BaseController */ public function batch_delete() { - $ids = $this->inputs; + $ids = $this->input_param('ids'); if (!$ids) { $this->return_json('参数错误'); } diff --git a/market/controllers/api/sylive/GroupsOrder.php b/market/controllers/api/sylive/GroupsOrder.php index 89016bda..bc379817 100644 --- a/market/controllers/api/sylive/GroupsOrder.php +++ b/market/controllers/api/sylive/GroupsOrder.php @@ -127,7 +127,7 @@ class groupsOrder extends BaseController $consultant = $this->consultantGet(['activityId' => $v['activityId'], 'userId' => $v['userId'] , 'levelId1' => $v['levelId1'], 'levelId2' => $v['levelId2'], 'levelId3' => $v['levelId3'] , 'bizId' => $v['bizId'], 'cfUserId' => $v['cfUserId']]); - $insiders = $map_user[$v['userId']]? '是' : '否';//内部人员 + $insiders = $map_user[$v['userId']] ? '是' : '否';//内部人员 $list1 = [ 'id' => $v['id'], 'sid' => $v['sid'], 'uname' => $v['uname'], 'mobile' => $v['mobile'], 'itemTitle' => $v['itemTitle'] , 'totalPrice' => $v['totalPrice'], 'payTime' => $v['payTime'] != '0000-00-00 00:00:00' ? $v['payTime'] : '' @@ -241,4 +241,140 @@ class groupsOrder extends BaseController 'levelName2' => $levelName2, 'levelName3' => $levelName3]; } + /** + * Notes:导入订单 + * Created on: 2023/4/26 17:24 + * Created by: dengbw + * @throws PHPExcel_Exception + * @throws PHPExcel_Reader_Exception + */ + public function import_post() + { + $activityId = intval($_POST['activityId']); + if (!$activityId) { + $this->return_json('参数错误'); + } + require_once COMMPATH . '/third_party/PHPExcel/IOFactory.php'; + $res = $this->upload(); + if (!$res['code']) { + return $this->return_json($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->return_json('文件无法识别'); + } + $PHPExcel = $reader->load($file); // 文档名称 + $objWorksheet = $PHPExcel->getActiveSheet(); + $rowCnt = $objWorksheet->getHighestRow(); //获取总行数 + if ($rowCnt > 800) { + @unlink($file); + $this->return_json('数据大于800请拆分多个表格导入'); + } + $this->load->model('market/Market_sylive_items_model', 'mdSyliveItems'); + $this->load->model('market/Market_sylive_groups_user_model', 'mdSyliveGroupsUser'); + $done = 0; + for ($_row = 2; $_row <= $rowCnt; $_row++) { //读取内容 + $mobile = $objWorksheet->getCell('B' . $_row)->getValue(); + if ($mobile) { + $re_order = $this->mdSyliveOrder->get(['mobile' => $mobile, "activityId" => $activityId]); + if (!$re_order) { + $addData["uname"] = $objWorksheet->getCell('A' . $_row)->getValue(); + $addData["totalPrice"] = $objWorksheet->getCell('C' . $_row)->getValue(); + $addData["itemTitle"] = $objWorksheet->getCell('D' . $_row)->getValue(); + $addData["createTime"] = $objWorksheet->getCell('E' . $_row)->getValue(); + $bizName = $objWorksheet->getCell('F' . $_row)->getValue(); + $cfMobile = $objWorksheet->getCell('H' . $_row)->getValue(); + $addData["mobile"] = $mobile; + $addData["status"] = 1; + $addData["activityId"] = $activityId; + if ($addData["itemTitle"]) { + $re_order = $this->mdSyliveItems->get(['title' => $addData["itemTitle"], "activityId" => $activityId]); + if ($re_order) { + $addData["itemId"] = $re_order['itemId']; + $addData["itemPrice"] = $re_order['price']; + } + } + if ($cfMobile) { + $re_user = $this->mdSyliveUser->get(['mobile' => $cfMobile, 'organizationId>' => 0, 'status<>' => -1]); + if ($re_user['userId']) { + $addData['cfUserId'] = $re_user['userId']; + $re_groUser = $this->mdSyliveGroupsUser->get(['activityId' => $activityId, 'userId' => $re_user['userId'], 'status<>' => -1]); + if ($re_groUser['bizId']) { + $addData['bizId'] = $re_groUser['bizId']; + $addData['levelId1'] = $re_groUser['levelId1']; + $addData['levelId2'] = $re_groUser['levelId2']; + $addData['levelId3'] = $re_groUser['levelId3']; + } + } + } + if (!$addData['bizId'] && $bizName) { + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'groupsName' => $bizName, 'ifBiz' => 1, 'status<>' => -1]); + if ($re_gro['groupsId']) { + $addData['bizId'] = $re_gro['groupsId']; + $levelAry = $this->getLevelAry($re_gro['parentId']); + $levelAry['levelId1'] && $addData['levelId1'] = $levelAry['levelId1']; + $levelAry['levelId2'] && $addData['levelId2'] = $levelAry['levelId2']; + $levelAry['levelId3'] && $addData['levelId3'] = $levelAry['levelId3']; + } + } + $re_user = $this->mdSyliveUser->get(['mobile' => $mobile, 'status<>' => -1]); + if ($re_user['userId']) { + $addData['userId'] = $re_user['userId']; + } + $id = $this->mdSyliveOrder->add($addData); + if ($id) { + $done++; + } + } + } + } + @unlink($file); + $this->return_response('', "成功导入订单{$done}条"); + } + + /** + * Notes:获取分组等级ID + * Created on: 2023/3/01 14:30 + * Created by: dengbw + * @param $groupsId + * @param array $data + * @return array + */ + private function getLevelAry($groupsId, $data = []) + { + $re = $this->mdSyliveGroups->get(['groupsId' => $groupsId], 'groupsId,parentId,groupsLevel'); + if (!$re) { + return $data; + } else { + if ($re['groupsLevel']) {//分类id + $levelId = "levelId" . $re['groupsLevel']; + $data[$levelId] = $re['groupsId']; + } + if ($re['parentId']) { + return $this->getLevelAry($re['parentId'], $data); + } else { + return $data; + } + } + } + + private function upload() + { + $config['upload_path'] = $_SERVER['DOCUMENT_ROOT'] . '/temp/'; + $config['allowed_types'] = '*'; + $config['max_size'] = 5120; + $config['file_name'] = 'exchange_' . time() . rand(1, 99999); + $this->load->library('upload', $config); + if (!$this->upload->do_upload('file')) { + return ['code' => SYS_CODE_FAIL, 'message' => $this->upload->display_errors('', '')]; + } else { + $data = $this->upload->data(); + return ['code' => SYS_CODE_SUCCESS, 'path' => $data['full_path'], 'file_ext' => $data['file_ext']]; + } + } + } \ No newline at end of file diff --git a/market/controllers/api/system/User.php b/market/controllers/api/system/User.php index d7291511..f73db8f9 100644 --- a/market/controllers/api/system/User.php +++ b/market/controllers/api/system/User.php @@ -237,7 +237,7 @@ class User extends BaseController */ public function batch_delete() { - $ids = $this->inputs; + $ids = $this->input_param('ids'); if (!$ids) { $this->return_json('参数错误'); } diff --git a/www/market/temp/order.xlsx b/www/market/temp/order.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a18e11a3835ba6f868d9931340784d2873ffb526 GIT binary patch literal 9260 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 literal 0 HcmV?d00001