520 行
21 KiB
PHP
可执行文件
520 行
21 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Retail\Controller;
|
||
|
||
use Think\HttpClient;
|
||
//[1.4.13]
|
||
class PrinterController extends BaseController
|
||
{
|
||
|
||
// public function index()
|
||
// {
|
||
//
|
||
// $this->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
|
||
<span style="color: orangered;font-weight: bold">管理员账号未注册</span>
|
||
SIN;
|
||
break;
|
||
case '验证失败 : 签名错误.'://管理员开发API接口签名有误
|
||
$list[$key]['msg'] = <<<SIN
|
||
<span style="color: orangered;font-weight: bold">开发者密钥错误</span>
|
||
SIN;
|
||
break;
|
||
case '验证失败 : 没有找到该打印机的信息.'://管理员开发API接口签名有误
|
||
$list[$key]['msg'] = <<<SIN
|
||
<span style="color: orangered;font-weight: bold">打印机编号错误</span>
|
||
SIN;
|
||
|
||
break;
|
||
}
|
||
|
||
if ($ros['msg'] == 'ok') {
|
||
if ($ros['data'] == '在线,工作状态正常。') {
|
||
$list[$key]['msg'] = <<<SIN
|
||
<span style="color: green;font-weight: bold">在线</span>
|
||
SIN;
|
||
} elseif ($ros['data'] = '离线。') {
|
||
$list[$key]['msg'] = <<<SIN
|
||
<span style="color: orangered;font-weight: bold">离线</span>
|
||
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
|
||
<span style="color: green;font-weight: bold">在线</span>
|
||
SIN;
|
||
}elseif ($result['state'] == 2){
|
||
$list[$key]['state'] = $result['state'];
|
||
$list[$key]['msg'] = <<<SIN
|
||
<span style="color: orangered;font-weight: bold">缺纸</span>
|
||
SIN;
|
||
}
|
||
}else if ($result['state'] == 0 || $result['error_description']){
|
||
$list[$key]['state'] = $result['state'];
|
||
$msg = $result['error_description'] ? $result['error_description'] : "离线";
|
||
$list[$key]['msg'] = <<<SIN
|
||
<span style="color: orangered;font-weight: bold">$msg</span>
|
||
SIN;
|
||
}else{
|
||
$msg = $result['error_description'];
|
||
$list[$key]['msg'] = <<<SIN
|
||
<span style="color: orangered;font-weight: bold">$msg</span>
|
||
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);
|
||
}
|
||
} |