文件
mashangyoujiu/Application/Retail/Controller/PrinterController.class.php

520 行
21 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?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);
}
}