model = new \app\admin\model\pickup\Order; $Config = get_addon_config('pickup'); $kd_company = $Config['kd_company']; $this->view->assign("statusList", $this->model->getStatusList()); $this->view->assign("kd_company", $kd_company); } /** * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法 * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑 * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改 */ /** * 查看 */ public function index() { //设置过滤方法 $this->request->filter(['strip_tags']); if ($this->request->isAjax()) { //如果发送的来源是Selectpage,则转发到Selectpage if ($this->request->request('keyField')) { return $this->selectpage(); } list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = $this->model ->where($where) ->order($sort, $order) ->count(); $list = $this->model ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->select(); $list = collection($list)->toArray(); foreach ($list as $k => &$v) { $v['gift_goods_title'] = json_decode($v['gift_goods_title'], true); $v['gift_goods_image'] = json_decode($v['gift_goods_image'], true); $v['gift_goods_ids'] = json_decode($v['gift_goods_ids'], true); } $result = array("total" => $total, "rows" => $list); return json($result); } return $this->view->fetch(); } /** * 订单发货 */ public function delivery($ids = null) { $ids = $ids ? $ids : $this->request->param("ids"); $detail = $this->model->get($ids); $goodsList = json_decode($detail['gift_goods'], true); if ($this->request->isPost()) { $row = $detail; $params = $this->request->post("row/a"); if ($params['kd_company'] && $params['kd_number'] && $row['status'] == 1) { $data = [ "kd_company" => $params['kd_company'], "kd_number" => $params['kd_number'], "ship_date" => time(), "status" => 2, ]; } else { $this->error("快递信息不正确,或者该订单已经发货"); } if ($params) { $params = $this->preExcludeFields($params); $result = false; Db::startTrans(); try { //是否采用模型验证 if ($this->modelValidate) { $name = str_replace("\\model\\", "\\validate\\", get_class($this->model)); $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : $name) : $this->modelValidate; $row->validateFailException(true)->validate($validate); } $result = $row->allowField(true)->save($data); Db::commit(); } catch (ValidateException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (PDOException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (Exception $e) { Db::rollback(); $this->error($e->getMessage()); } if ($result !== false) { $this->success(); } else { $this->error(__('No rows were updated')); } } $this->error(__('Parameter %s can not be empty', '')); } $this->view->assign("detail", $detail); $this->view->assign("goodsList", $goodsList); return $this->view->fetch(); } /** * 查看物流 */ public function transport($ids = null) { $ids = $ids ? $ids : $this->request->param("ids"); $detail = $this->model->get($ids); $goodsList = json_decode($detail['gift_goods'], true); if ($this->request->isPost()) { } $Kuaidi = []; if ($detail['status'] > 1) { $Kuaidi = \addons\pickup\library\Kuaidi100::getKdInfo([ "com" => $detail['kd_company'], "num" => $detail['kd_number'], ]); } $this->view->assign("Kuaidi", $Kuaidi); $this->view->assign("detail", $detail); $this->view->assign("goodsList", $goodsList); return $this->view->fetch(); } /** * 订单详情 */ public function detail($ids = null) { $ids = $ids ? $ids : $this->request->param("ids"); $detail = $this->model->get($ids); $goodsList = json_decode($detail['gift_goods'], true); if ($this->request->isPost()) { } $Kuaidi = []; if ($detail['status'] > 1) { $Kuaidi = \addons\pickup\library\Kuaidi100::getKdInfo([ "com" => $detail['kd_company'], "num" => $detail['kd_number'], ]); } $this->view->assign("Kuaidi", $Kuaidi); $this->view->assign("detail", $detail); $this->view->assign("goodsList", $goodsList); return $this->view->fetch(); } /** * 修改订单状态 */ public function setstatus($ids = null) { $ids = $ids ? $ids : $this->request->param("itemid"); $status = $this->request->param("status"); $detail = $this->model->get($ids); if ($detail) { $detail->status = $status; $res = $detail->save(); if ($res) { $this->success("设置成功"); } else { $this->error(__('设置失败')); } } else { $this->error(__('订单不存在')); } } /** * 导入发货单 */ public function impDelivery() { $file = $this->request->request('file'); if (!$file) { $this->error(__('Parameter %s can not be empty', 'file')); } $filePath = ROOT_PATH . DS . 'public' . DS . $file; if (!is_file($filePath)) { $this->error(__('No results were found')); } //实例化reader $ext = pathinfo($filePath, PATHINFO_EXTENSION); if (!in_array($ext, ['xls', 'xlsx'])) { $this->error(__('Unknown data format')); } if ($ext === 'xls') { $reader = new Xls(); } else { $reader = new Xlsx(); } //导入文件首行类型,默认是注释,如果需要使用字段名称请使用name // $importHeadType = isset($this->importHeadType) ? $this->importHeadType : 'comment'; // $importHeadType = isset($this->importHeadType) ? $this->importHeadType : 'name'; $importHeadType = "comment"; $table = $this->model->getQuery()->getTable(); $database = \think\Config::get('database.database'); $fieldArr = []; $list = db()->query("SELECT COLUMN_NAME,COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? AND TABLE_SCHEMA = ?", [$table, $database]); foreach ($list as $k => $v) { if ($importHeadType == 'comment') { $fieldArr[$v['COLUMN_COMMENT']] = $v['COLUMN_NAME']; } else { $fieldArr[$v['COLUMN_NAME']] = $v['COLUMN_NAME']; } } //加载文件 $insert = []; try { if (!$PHPExcel = $reader->load($filePath)) { $this->error(__('Unknown data format')); } $currentSheet = $PHPExcel->getSheet(0); //读取文件中的第一个工作表 $allColumn = $currentSheet->getHighestDataColumn(); //取得最大的列号 $allRow = $currentSheet->getHighestRow(); //取得一共有多少行 $maxColumnNumber = Coordinate::columnIndexFromString($allColumn); $fields = []; for ($currentRow = 1; $currentRow <= 1; $currentRow++) { for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) { $val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue(); $fields[] = $val; } } for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) { $values = []; for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) { $val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue(); $values[] = is_null($val) ? '' : $val; } $row = []; $temp = array_combine($fields, $values); foreach ($temp as $k => $v) { if (isset($fieldArr[$k]) && $k !== '') { $row[$fieldArr[$k]] = $v; } } if ($row) { $insert[] = $row; } } } catch (Exception $exception) { $this->error($exception->getMessage()); } if (!$insert) { $this->error(__('No rows were updated')); } try { //是否包含admin_id字段 $has_admin_id = false; foreach ($fieldArr as $name => $key) { if ($key == 'admin_id') { $has_admin_id = true; break; } } if ($has_admin_id) { $auth = Auth::instance(); foreach ($insert as &$val) { if (!isset($val['admin_id']) || empty($val['admin_id'])) { $val['admin_id'] = $auth->isLogin() ? $auth->id : 0; } } } $Config = get_addon_config('pickup'); $kd_company = $Config['kd_company']; foreach ($insert as $k => $v) { if (!empty($v['id'] && $v['id'] > 0)) { $kd_company_code = ""; foreach ($kd_company as $key => $val) { if ($v['kd_company'] == $val) { $kd_company_code = $key; } } if ($v['kd_number'] != "") { $mod = new \app\admin\model\pickup\Order; $mod->save( [ 'status' => 2, 'kd_company' => $kd_company_code, 'kd_number' => $v['kd_number'], "ship_date" => time(), ], ['id' => $v['id'], 'status' => 1]); } } } } catch (PDOException $exception) { $msg = $exception->getMessage(); if (preg_match("/.+Integrity constraint violation: 1062 Duplicate entry '(.+)' for key '(.+)'/is", $msg, $matches)) { $msg = "导入失败,包含【{$matches[1]}】的记录已存在"; } $this->error($msg); } catch (Exception $e) { $this->error($e->getMessage()); } $this->success(); } }