LogisticsController.php 8.6 KB
<?php
/**
 * Created by PhpStorm.
 * User: 29925
 * Date: 2018/8/20
 * Time: 10:57
 */

namespace app\admin\controller;

use app\admin\model\LogisticsModel;
use cmf\controller\AdminBaseController;
use think\Db;

class LogisticsController extends AdminBaseController
{

    protected $table;
    protected $logistics_model;
    public function _initialize()
    {
        $this->table = 'Logistics';
        $this->logistics_model = new LogisticsModel();
    }

    /**
     * 物流列表
     * @adminMenu(
     *     'name'   => '物流列表',
     *     'parent' => 'admin/OrderOption/default',
     *     'display'=> true,
     *     'hasView'=> true,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '物流列表',
     *     'param'  => ''
     * )
     */
    public function index() {
        $param = $this->request->param();
        $where = [
            'delete_time'=>0,
            'is_del'=>0
        ];
        if(isset($param['keyword'])) {
            $where['name'] = ['like','%'.$param['keyword'].'%'];
        }
        $list = $this->singleData($this->table,$where,2,['create_time'=>'DESC']);
        $list->appends($param);
        $this->assign('list',$list->items());
        $this->assign('page',$list->render());
        $this->assign('keyword',isset($param['keyword']) ? $param['keyword'] : '');
        return $this->fetch();
    }

    /**
     * 导入excel数据
     * @adminMenu(
     *     'name'   => '导入excel数据',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '导入excel数据',
     *     'param'  => ''
     * )
     */
    public function excel() {
        list($status, $msg, $file) = $this->upload();
        if($status == 0) {
            $this->error($msg);
        }
        $excel = $file['filepath'];
        // 获取excel内容的数据
        $array = $this->import_excel('./upload/'.$excel);
        //执行导入操作
        Db::startTrans();
        foreach ($array as $k=>$v) {
            $insert = $update = [];
//            if(!$this->logistics_model->check($v[1])) {
            $insert['mobile'] = $update['mobile'] = $v[0];
            $insert['send_time'] = $update['send_time'] = date('Y-m-d H:i:s',\PHPExcel_Shared_Date::ExcelToPHP($v[1]));
            $insert['version'] = $update['version'] = $v[2];
            $insert['express'] = $update['express'] = $v[3];
            $insert['is_del'] = $update['is_del'] = $v[4];
            if(empty($v[4])) {
                $insert['is_del'] = $update['is_del'] = 0;
                if($v[4] == 0) {
                    $update['delete_time'] = 0;
                    $insert['is_del'] = $update['is_del'] = 0;
                }
            } else{
                if($v[4] == 1) {
                    $update['delete_time'] = time();
                    $update['is_del'] = 1;
                }
            }
            $info = $this->logistics_model->where(['express'=>$insert['express']])->find();
            if($info) {
                $update['update_time'] = time();
                if(!$this->logistics_model->where(['id'=>$info['id']])->update($update)) {
                    Db::rollback();
                    $this->error('数据导入中出错,请重试'.$info['id']);
                }
            } else {
                if(!$this->logistics_model->addLogistics($insert)) {
                    Db::rollback();
                    $this->error('数据导入中出错,请重试');
                }
            }
//            }
        }
        Db::commit();
        $this->success('数据导入成功');
    }

    /**
     * 导入excel文件
     * @param  string $file excel文件路径
     * @return array        excel文件内容数组
     */
    private function import_excel($file){
        // 判断文件是什么格式
        $type = pathinfo($file);
        $type = strtolower($type["extension"]);
        if($type =='xlsx' ){
            $type = 'Excel2007';
        }else{
            $type = 'Excel5';
        }
        ini_set('max_execution_time', '0');
        vendor('phpoffice.phpexcel');
        // 判断使用哪种格式
        $objReader = \PHPExcel_IOFactory::createReader($type);
        $objPHPExcel = $objReader->load($file);
        $sheet = $objPHPExcel->getSheet(0);
        // 取得总行数
        $highestRow = $sheet->getHighestRow();
        // 取得总列数
        $highestColumn = $sheet->getHighestColumn();
        //循环读取excel文件,读取一条,插入一条
        $data=array();
        //从第二行开始读取数据
        for($j=2;$j<=$highestRow;$j++){
            //从A列读取数据
            for($k='A';$k<=$highestColumn;$k++){
                // 读取单元格
                $cell = $objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
                if(is_object($cell)) {
                    $data[$j][] = $cell->__toString();
                } else {
                    $data[$j][] = $cell;
                }
            }
        }
        return $data;
    }

    /**
     * 添加物流
     * @adminMenu(
     *     'name'   => '添加物流',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 2,
     *     'icon'   => '',
     *     'remark' => '添加物流',
     *     'param'  => ''
     * )
     */
    public function add() {
        return $this->fetch();
    }

    /**
     * 添加物流提交
     * @adminMenu(
     *     'name'   => '添加物流提交',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 3,
     *     'icon'   => '',
     *     'remark' => '添加物流提交',
     *     'param'  => ''
     * )
     */
    public function addPost() {
        if($this->request->isAjax()) {
            $post = $this->request->param();
            $validate = $this->validate($post, $this->table);
            if ($validate !== true) {
                $this->error($validate);
            }
            $result = $this->logistics_model->addLogistics($post);
            if (!$result) {
                $this->error('添加失败');
            }
            $this->success('添加成功',url('Logistics/index'));
        }
    }

    /**
     * 编辑物流
     * @adminMenu(
     *     'name'   => '编辑物流',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 4,
     *     'icon'   => '',
     *     'remark' => '编辑物流',
     *     'param'  => ''
     * )
     */
    public function edit() {
        $id = $this->request->param('id',0,'intval');
        if(!$id) {
            $this->error('参数错误');
        }
        $info = $this->singleData($this->table,['id'=>$id,'delete_time'=>0]);
        $this->assign($info);
        return $this->fetch();
    }

    /**
     * 编辑物流提交
     * @adminMenu(
     *     'name'   => '编辑物流提交',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 5,
     *     'icon'   => '',
     *     'remark' => '编辑物流提交',
     *     'param'  => ''
     * )
     */
    public function editPost() {
        if($this->request->isPost()) {
            $id = $this->request->param('id', 0, 'intval');
            if (!$id) {
                $this->error('参数错误');
            }
            $post = $this->request->param();
            $validate = $this->validate($post, $this->table);
            if ($validate !== true) {
                $this->error($validate);
            }
            $result = $this->logistics_model->editLogistics($post);
            if (!$result) {
                $this->error('修改失败');
            }
            $this->success('修改成功');
        }
    }

    /**
     * 删除物流
     * @adminMenu(
     *     'name'   => '删除物流',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 6,
     *     'icon'   => '',
     *     'remark' => '删除物流',
     *     'param'  => ''
     * )
     */
    public function delete() {
        $id = $this->request->param('id',0,'intval');
        $ids = $this->request->param('ids/a');
        if(isset($id)) {
            $result = $this->logistics_model->where(['id'=>$id])->update(['delete_time'=>time(),'is_del'=>1]);
        }
        if(isset($ids)) {
            $result = $this->logistics_model->where(['id'=>['in',$ids]])->update(['delete_time'=>time(),'is_del'=>1]);
        }
        if(!$result) {
            $this->error('删除失败');
        }
        $this->success('删除成功');
    }
}