display(); // } public function index() { $arr = array( 'printerSet' => '/index.php/Retail/Printer/printerSet', 'changePrinterStatus' => '/index.php/Retail/Printer/changePrinterStatus', 'powerprinter' => '/index.php/Retail/Printer/powerprinter', 'printerDelete' => '/index.php/Retail/Printer/printerDelete', 'printerEdit' => '/index.php/Retail/Printer/printerEdit', 'refreshToken' => '/index.php/Retail/Printer/refreshToken', ); $authArr = checkFunction($arr); $this->assign('authArr', $authArr); $this->display(); } public function printerList() { $user = session("ls_userinfo"); $storeid = session("storeid"); if (!$user['storeid']) { $user['storeid'] = $storeid; } $page = I("post.page"); $limit = I("post.limit"); $keyword = I("post.keyword"); if ($keyword){ if(is_numeric($keyword)){ $map['printer_sn'] = $keyword; }else{ $map['label_name'] = array("like","%".$keyword."%"); } } $map['merchantid'] = $user['merchantid']; $map['storeid'] = $user['storeid']; $count = M("retail_printer")->where($map)->count(); $list = M("retail_printer")->where($map)->page($page, $limit)->select(); if ($list) { foreach ($list as $key => $value) { $list[$key]['addtime'] = date("Y-m-d H:i:s", $value['addtime']); $list[$key]['key'] = $key + 1; if ($value['printer_type'] == 1){ //飞鹅云 $ros = $this->queryPrinterStatus($value['api_name'], $value['api_key'], $value['printer_sn']); // $list[$key]['sss'] = $ros; $ros = json_decode($ros, true); switch ($ros['msg']) { case '参数错误 : 该帐号未注册.'://账号有误(打印机绑定的管理员账号) $list[$key]['msg'] = <<管理员账号未注册 SIN; break; case '验证失败 : 签名错误.'://管理员开发API接口签名有误 $list[$key]['msg'] = <<开发者密钥错误 SIN; break; case '验证失败 : 没有找到该打印机的信息.'://管理员开发API接口签名有误 $list[$key]['msg'] = <<打印机编号错误 SIN; break; } if ($ros['msg'] == 'ok') { if ($ros['data'] == '在线,工作状态正常。') { $list[$key]['msg'] = <<在线 SIN; } elseif ($ros['data'] = '离线。') { $list[$key]['msg'] = <<离线 SIN; } } }elseif ($value['printer_type'] == 2){ //易联云 $result = A("Yilianyun")->getPrinterStatus($value); $res['ss'] = $result; if ($result['state'] != 0){ if ($result['state'] == 1){ $list[$key]['state'] = $result['state']; $list[$key]['msg'] = <<在线 SIN; }elseif ($result['state'] == 2){ $list[$key]['state'] = $result['state']; $list[$key]['msg'] = <<缺纸 SIN; } }else if ($result['state'] == 0 || $result['error_description']){ $list[$key]['state'] = $result['state']; $msg = $result['error_description'] ? $result['error_description'] : "离线"; $list[$key]['msg'] = <<$msg SIN; }else{ $msg = $result['error_description']; $list[$key]['msg'] = <<$msg SIN; } } } } $res['code'] = 0; $res['data'] = $list; $res['count'] = $count; $this->ajaxReturn($res); } /** * 编辑打印机 */ public function printerSet() { $user = session("ls_userinfo"); $storeid = session("storeid"); if (!$user['storeid']) { $user['storeid'] = $storeid; } $id = I("get.id"); $map['storeid'] = $user['storeid']; $map['merchantid'] = $user['merchantid']; $map['printer_id'] = array("in", array(0, $id)); $label = M("retail_goods_label")->where($map)->field('id,label_name')->select(); if ($id) { $info = M("retail_printer")->where("id=" . $id)->find(); if ($info['printer_labelid']) { $labelarr = explode(',', $info['printer_labelid']); $this->assign("labelarr", $labelarr); } $this->assign("info", $info); } $this->assign("labels", $label); $this->display(); } public function printerSetup() { $user = session("ls_userinfo"); $storeid = session("storeid"); if (!$user['storeid']) { $user['storeid'] = $storeid; } if ($_POST) { $data = I("post."); // var_dump($data);exit; if ($data['ispaging'] == 1){ if (!$data['pages'] || $data['pages'] == 0){ $res['status'] = 0; $res['msg'] = '请输入每页条数'; $this->ajaxReturn($res); exit; } } if ($data['id']) { if (!empty($data['printer_labelid'])) { $data['printer_labelid'] = implode(',', $data['printer_labelid']) . ','; } if ($data['print_type'] == 2) { if (empty($data['printer_labelid'])) { $res['status'] = 0; $res['msg'] = '分单打印请选择标签'; $this->ajaxReturn($res); exit; } } //查询出已绑定 $find = M("retail_printer")->where(array("id" => $data['id']))->getField("printer_labelid"); $find = $find ? $find : array(0); $m['id'] = array("in", $find); $changes = M("retail_goods_label")->where($m)->save(array("printer_id" => 0)); $create = M("retail_printer")->where("id=" . $data['id'])->save($data); if ($create) { $data['printer_labelid'] = $data['printer_labelid'] ? $data['printer_labelid'] : array(0); $m['id'] = array("in", $data['printer_labelid']); $change = M("retail_goods_label")->where($m)->save(array("printer_id" => $data['id'])); $res['status'] = 1; $res['msg'] = '修改完成'; //操作日志记录 $source = 0;//请求来源: 0pc系统 1小助手 $type = 4;//平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST);//请求参数 json数据 $desc = '编辑打印机';//操作行为描述 action_log($source,$type,$request_data,$desc); //end } else { $res['status'] = 0; $res['msg'] = '修改失败'; } } else { $data['addtime'] = time(); $data['merchantid'] = $user['merchantid']; $data['storeid'] = $user['storeid']; //由于标签为数组格式,为了方便需要转化成字符串格式 if (!empty($data['printer_labelid'])) { $data['printer_labelid'] = implode(',', $data['printer_labelid']) . ','; } $create = M("retail_printer")->add($data); if ($create) { $data['printer_labelid'] = $data['printer_labelid'] ? $data['printer_labelid'] : array(0); $m['id'] = array("in", $data['printer_labelid']); $change = M("retail_goods_label")->where($m)->save(array("printer_id" => $create)); $res['status'] = 1; $res['msg'] = '添加完成'; //操作日志记录 $source = 0;//请求来源: 0pc系统 1小助手 $type = 4;//平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST);//请求参数 json数据 $desc = '新增打印机';//操作行为描述 action_log($source,$type,$request_data,$desc); //end } else { $res['status'] = 0; $res['msg'] = '添加失败'; } } } $this->ajaxReturn($res); } /** * 修改状态 */ public function changePrinterStatus() { if ($_POST) { $id = I("post.id"); $status = I("post.status"); if ($id && $status) { $change = M("retail_printer")->where(array('id' => $id))->save(array('status' => $status)); if ($change) { $res['status'] = 1; $res['msg'] = '操作成功'; //操作日志记录 $source = 0;//请求来源: 0pc系统 1小助手 $type = 4;//平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST);//请求参数 json数据 $desc = '修改打印机使用状态';//操作行为描述 action_log($source,$type,$request_data,$desc); //end } else { $res['status'] = 0; $res['msg'] = '操作失败'; } } else { $res['status'] = 0; $res['msg'] = '参数错误'; } } $this->ajaxReturn($res); } /** * 删除 */ public function printerDelete() { if ($_POST) { $id = I("post.id"); if ($id) { $delete = M("retail_printer")->where(array("id" => $id))->delete(); if ($delete) { $change = M("retail_goods_label")->where(array("printer_id" => $id))->save(array("printer_id" => 0)); $res['status'] = 1; $res['msg'] = '操作成功'; //操作日志记录 $source = 0;//请求来源: 0pc系统 1小助手 $type = 4;//平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST);//请求参数 json数据 $desc = '删除打印机';//操作行为描述 action_log($source,$type,$request_data,$desc); //end } } else { $res['status'] = 0; $res['msg'] = '参数有误'; } } $this->ajaxReturn($res); } /** * 查询打印机当前状态 */ public function queryPrinterStatus($print_uid, $print_pass, $printer_sn) { $sig = sha1($print_uid . $print_pass . time()); $msgInfo = array( 'user' => $print_uid, 'stime' => time(), 'sig' => $sig, 'apiname' => 'Open_queryPrinterStatus', 'sn' => $printer_sn ); $client = new HttpClient('api.feieyun.cn', 80); if (!$client->post('/Api/Open/', $msgInfo)) { echo 'error'; } else { $result = $client->getContent(); return $result; } } public function printerEdit() { $user = session("ls_userinfo"); $storeid = session("storeid"); if (!$user['storeid']) { $user['storeid'] = $storeid; } $id = I("get.id"); $map['storeid'] = $user['storeid']; $map['merchantid'] = $user['merchantid']; $map['printer_id'] = array("in", array(0, $id)); $label = M("retail_goods_label")->where($map)->field('id,label_name')->select(); if ($id) { $info = M("retail_printer")->where("id=" . $id)->find(); if ($info['printer_labelid']) { $labelarr = explode(',', $info['printer_labelid']); $this->assign("labelarr", $labelarr); } $this->assign("info", $info); } $this->assign("labels", $label); $this->display(); } /** * 易联云打印机获取token */ public function getToken(){ if(IS_POST){ $appid = I("post.appid"); $appsecret = I("post.appsecret"); if ($appid && $appsecret){ $map['appid'] = $appid; $map['appsecret'] = $appsecret; $find = M("yiliancloud")->where($map)->find(); if ($find){ $res['status'] = 1; $res['token'] = $find['access_token']; }else{ $params['appid'] = $appid; $params['appsecret'] = $appsecret; $result = A("Yilianyun")->getToken($params); // var_dump($result); if ($result['error']){ $res['status'] = 0; $res['msg'] = $result['error_description']; }else{ //根据应用id和密钥;检测是否存在token信息 unset($result['scope']); $result['appid'] = $appid; $result['appsecret'] = $appsecret; $result['addtime'] = time(); M("yiliancloud")->add($result); $res['status'] = 1; $res['token'] = $result['access_token']; } } }else{ $res['status'] = 0; $res['msg'] = '参数错误,请检查输入是否有误'; } $this->ajaxReturn($res); } } //打印机权限设置 public function powerprinter() { $id = I('get.id'); $printinfo = M('retail_printer')->where(array('id'=>$id))->find(); $this->assign('printinfo',$printinfo); $this->display(); } //打印机权限设置提交 public function powersubmit() { $post = I('post.'); if(empty($post['id'])){ $res['status'] = 0; $res['msg'] = '参数错误'; }else{ $data['online_status'] = $post['online'] == 'on'?2:1; $data['register'] = $post['print'] == 'on'?2:1; $data['inventory_status'] = $post['inventory_status'] == 'on'?1:0; $save = M('retail_printer')->where(array('id'=>$post['id']))->save($data); if($save){ $res['status'] = 1; $res['msg'] = '设置成功'; //操作日志记录 $source = 0;//请求来源: 0pc系统 1小助手 $type = 4;//平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST);//请求参数 json数据 $desc = '设置打印机';//操作行为描述 action_log($source,$type,$request_data,$desc); //end }else{ $res['status'] = 0; $res['msg'] = '暂无更新'; } } $this->ajaxReturn($res); } /** * 更新token */ public function refreshToken(){ //以下为获取打印机状态请求接口时的响应参数 PS:当打印机状态正常时,接口只会返回array("state"=>"0|1|2")0离线 1在线 2缺纸 //+======================================================================= //{"error":"0","error_description":"success","body":{"state":"1"}} //{"error":"8","error_description":"打印机信息错误,参数有误"} //{"error":"10","error_description":"权限不足"} //{"error":"11","error_description":"sign验证失败"} //{"error":"12","error_description":"缺少必要参数"} //{"error":"18","error_description":"access_token已过期,请刷新access_token或者重新授权"} //{"error":"19","error_description":"应用未上架或已下架"} //{"error":"25","error_description":"未找到机型的硬件和软件版本"} //{'error':'33', 'error_description':'Uuid不合法'} //+======================================================================= if (IS_POST){ $data = I("post.printerData");//array if ($data){ //接收到打印机的数据信息 $checkToken = A("Yilianyun")->getPrinterStatus($data); // var_dump($checkToken); if ($checkToken['error'] == 18){ //当返回错误信息的时候,需要根据错误信息进行操作,如果是参数问题,直接返回错误给操作用户,方便用户进行排查; //当出现token错误的时候再请求接口,避免参数错误还进行重复请求操作 //1.刷新token需要使用refresh_token;参数信息和access_token都处于ls_yiliancloud表; //2.查询出refresh_token后需要调用更新token接口; //3.接口请求成功,返回获取到的最新token,让用户可本地备份操作(获取到token后已同步更新数据库,此处无需额外操作);接口请求失败:返回错误信息给用户 $map['appid'] = $data['api_name'];//应用id $map['appsecret'] = $data['api_key'];//应用密钥 $params['appid'] = $data['api_name']; $params['appsecret'] = $data['api_key']; $get_refresh_token = A('Yilianyun')->getToken($params); if(!$get_refresh_token){ $res['status'] = 0; $res['msg'] = 'refresh_token值更新失败,请重新授权'; $this->ajaxReturn($res); } $update = A("Yilianyun")->refreshToken($get_refresh_token['refresh_token'],$map); if ($update['status'] == 1){ $res['status'] = 1; $res['msg'] = '刷新成功'; //操作日志记录 $source = 0;//请求来源: 0pc系统 1小助手 $type = 4;//平台:1合伙人端 2代理商端 3商户端 4门店端 $request_data = json_encode($_POST);//请求参数 json数据 $desc = '打印机刷新token';//操作行为描述 action_log($source,$type,$request_data,$desc); //end $res['access_token'] = $update['access_token']; }else{ $res['status'] = 0; $res['msg'] = $update['msg']; } }else if ($checkToken['error'] && $checkToken['error'] != 18){ $res['status'] = 0; $res['msg'] = $checkToken['error_description']; }else{ $res['status'] = 2; $res['msg'] = '打印机token请求正常,无需刷新'; } }else{ //没有接收到打印机的数据信息 $res['status'] = 0; $res['msg'] = '参数错误,请检查打印机数据是否正常'; } } $this->ajaxReturn($res); } }