glhcp/server/app/shop/logic/printer/PrinterLogic.php

364 lines
12 KiB
PHP
Raw Normal View History

2023-08-10 06:59:52 +00:00
<?php
// +----------------------------------------------------------------------
// | likeshop开源商城系统
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | gitee下载https://gitee.com/likeshop_gitee
// | github下载https://github.com/likeshop-github
// | 访问官网https://www.likeshop.cn
// | 访问社区https://home.likeshop.cn
// | 访问手册http://doc.likeshop.cn
// | 微信公众号likeshop技术社区
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用未经许可不能去除前后端官方版权标识
// | likeshop系列产品收费版本务必购买商业授权购买去版权授权后方可去除前后端官方版权标识
// | 禁止对系统程序代码以任何目的,任何形式的再发布
// | likeshop团队版权所有并拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeshop.cn.team
// +----------------------------------------------------------------------
namespace app\shop\logic\printer;
use app\common\basics\Logic;
use app\common\model\printer\Printer;
use app\common\model\printer\PrinterConfig;
use app\common\server\ConfigServer;
use app\common\server\UrlServer;
use app\common\server\YlyPrinter;
use think\facade\Cache;
use think\facade\Db;
/**
* 打印机管理逻辑层
* Class PrinterLogic
* @package app\admin\logic\printer
*/
class PrinterLogic extends Logic
{
/**
* @notes 打印机列表
* @param $get
* @param $shop_id
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author 段誉
* @date 2022/1/20 10:54
*/
public static function lists($get, $shop_id)
{
$where[] = ['p.del', '=', 0];
$where[] = ['p.shop_id', '=', $shop_id];
$lists = Printer::alias('p')
->where($where)
->append(['status_desc', 'auto_print_desc', 'type_desc'])
->page($get['page'], $get['limit'])
->order('p.id desc')
->select()
->toArray();
return ['count' => 0, 'lists' => $lists];
}
/**
* @notes 添加打印机
* @param $post
* @param $shop_id
* @return bool|string
* @author 段誉
* @date 2022/1/20 10:53
*/
public static function add($post, $shop_id)
{
Db::startTrans();
try {
Printer::create([
'shop_id' => $shop_id,
'config_id' => $post['config_id'],
'name' => $post['name'],
'machine_code' => $post['machine_code'],
'private_key' => $post['private_key'],
'print_number' => $post['print_number'],
'auto_print' => $post['auto_print'],
'status' => $post['status'],
'create_time' => time(),
'update_time' => time(),
]);
// 打印机配置
$config = PrinterConfig::getConfigById($post['config_id'], $shop_id);
$yly_print = new YlyPrinter($config['client_id'], $config['client_secret'], $shop_id);
//调用易联云添加打印机
$yly_print->addPrinter($post['machine_code'], $post['private_key'], $post['name']);
Db::commit();
return true;
} catch (\Exception $e) {
$msg = json_decode($e->getMessage(), true);
if ($msg && isset($msg['error'])) {
return '易联云:' . $msg['error_description'];
}
if (18 === $e->getCode()) {
Cache::rm('yly_access_token' . $shop_id);
Cache::rm('yly_refresh_token' . $shop_id);
}
Db::rollback();
return '易联云:' . $e->getMessage();
}
}
/**
* @notes 编辑打印机
* @param $post
* @param $shop_id
* @return bool|string
* @author 段誉
* @date 2022/1/20 10:53
*/
public static function edit($post, $shop_id)
{
Db::startTrans();
try {
$now = time();
$data = [
'name' => $post['name'],
'print_number' => $post['print_number'],
'status' => $post['status'],
'auto_print' => $post['auto_print'],
'update_time' => $now,
];
Printer::where(['id' => $post['id']])->update($data);
//调用易联云,更新打印机
$config = PrinterConfig::getConfigById($post['config_id'], $shop_id);
$yly_print = new YlyPrinter($config['client_id'], $config['client_secret'], $shop_id);
//调用易联云添加打印机
$yly_print->addPrinter($post['machine_code'], $post['private_key'], $post['name']);
Db::commit();
return true;
} catch (\Exception $e) {
$msg = json_decode($e->getMessage(), true);
if ($msg && isset($msg['error'])) {
return '易联云:' . $msg['error_description'];
}
if (18 === $e->getCode()) {
Cache::rm('yly_access_token'. $shop_id);
Cache::rm('yly_refresh_token'. $shop_id);
}
Db::rollback();
return '易联云:' . $e->getMessage();
}
}
/**
* @notes 删除打印机
* @param $id
* @param $shop_id
* @return bool|string
* @author 段誉
* @date 2022/1/20 9:58
*/
public static function del($id, $shop_id)
{
Db::startTrans();
try {
Printer::where(['id' => $id, 'shop_id' => $shop_id])->update(['del' => 1, 'update_time' => time()]);
$printer = Printer::where(['id' => $id, 'shop_id' => $shop_id])->findOrEmpty();
$config = PrinterConfig::getConfigById($printer['config_id'], $shop_id);
//调用易联云接口,删除打印机
$yly_print = new YlyPrinter($config['client_id'], $config['client_secret'], $shop_id);
$yly_print->deletePrinter($printer['machine_code']);
Db::commit();
return true;
} catch (\Exception $e) {
$msg = json_decode($e->getMessage(), true);
if ($msg && isset($msg['error'])) {
return '易联云:' . $msg['error_description'];
}
if (18 === $e->getCode()) {
Cache::rm('yly_access_token'. $shop_id);
Cache::rm('yly_refresh_token'. $shop_id);
}
Db::rollback();
return '易联云:' . $e->getMessage();
}
}
public static function testPrint($post, $shop_id)
{
try {
$printer = Printer::where([
'id' => $post['id'],
'del' => 0,
'shop_id' => $shop_id,
'status' => 1
])->findOrEmpty();
if ($printer->isEmpty()) {
throw new \Exception('请配置打印机');
}
$config = PrinterConfig::getConfigById($printer['config_id'], $shop_id);
// 易联云
$yly_print = new YlyPrinter($config['client_id'], $config['client_secret'], $shop_id);
//获取打印机状态
$response = $yly_print->getPrintStatus($printer['machine_code']);
if (1 == $response->body->state) {
$data = static::testData();
$template = self::getPrinterTpl($shop_id);
$yly_print->ylyPrint([['machine_code' => $printer['machine_code'], 'print_number' => $printer['print_number']]], $data, $template);
return true;
}
$msg = '打印机离线';
if (2 == $response->body->state) {
$msg = '打印机缺纸';
}
throw new \Exception($msg);
} catch (\Exception $e) {
$msg = json_decode($e->getMessage(), true);
if ($msg && isset($msg['error'])) {
return '易联云:' . $msg['error_description'];
}
if (18 === $e->getCode()) {
Cache::rm('yly_access_token' . $shop_id);
Cache::rm('yly_refresh_token' . $shop_id);
}
return '易联云:' . $e->getMessage();
}
}
/**
* @notes 打印机配置
* @param $shop_id
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author 段誉
* @date 2022/1/20 10:21
*/
public static function getTypeList($shop_id)
{
ConfigLogic::createDefaultConfig($shop_id);
return PrinterConfig::where(['del' => 0, 'shop_id' => $shop_id])->select()->toArray();
}
/**
* @notes 打印机详情
* @param $id
* @param $shop_id
* @return array|\think\Model
* @author 段誉
* @date 2022/1/20 10:21
*/
public static function getPrinter($id, $shop_id)
{
$where = ['del' => 0, 'id' => $id, 'shop_id' => $shop_id];
return Printer::where($where)->findOrEmpty();
}
/**
* @notes 获取打印机配置
* @param $shop_id
* @return array|int|mixed|string|null
* @author 段誉
* @date 2022/1/19 19:01
*/
public static function getPrinterTpl($shop_id)
{
return ConfigServer::get('printer', 'yly_template', [], $shop_id);
}
/**
* @notes 设置打印机配置
* @param $data
* @param $shop_id
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author 段誉
* @date 2022/1/19 19:01
*/
public static function setPrinterTpl($data, $shop_id)
{
ConfigServer::set('printer', 'yly_template', $data, $shop_id);
}
/**
* @notes 测试数据
* @return array
* @author 段誉
* @date 2022/1/20 11:03
*/
public static function testData()
{
$order = [
'order_sn' => date("Ymd") . '88888888888',
'create_time' => date('Y-m-d H:i:s'),
'delivery_type' => 1,
'consignee' => '张先生',
'mobile' => '138888888888',
'delivery_address' => '广东省广州市天河区XXXX科技园',
'user_remark' => '这是用户备注',
'order_goods' => [
[
'goods_name' => 'iPhone 13',
'spec_value_str' => '全网通256G银色',
'spec_value' => '全网通256G银色',
'goods_num' => '88',
'goods_price' => '3689',
'total_price' => '88888',
],
[
'goods_name' => '小米手机Plus',
'spec_value_str' => '全网通256G黑色',
'spec_value' => '全网通256G黑色',
'goods_num' => '88',
'goods_price' => '3689',
'total_price' => '88888',
],
[
'goods_name' => '华为 P40',
'spec_value_str' => '全网通256G黑色',
'spec_value' => '全网通256G黑色',
'goods_num' => '88',
'goods_price' => '3689',
'total_price' => '88888',
],
],
'selffetch_shop' => [],
'goods_price' => '888888', //商品总价
'discount_amount' => '80', //优惠金额
'member_amount' => '80', //会员金额
'shipping_price' => '12', //应付
'order_amount' => '222' //应付金额
];
return $order;
}
}