364 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			364 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?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; | |||
|  |     } | |||
|  | 
 | |||
|  | } |