Files
duolamaojiazhen/application/admin/logic/OrderLogic.php
2025-12-22 13:59:40 +08:00

1143 lines
41 KiB
PHP

<?php
namespace app\admin\logic;
use app\common\logic\OrderRefundLogic;
use app\common\model\MessageScene_;
use app\common\model\NoticeSetting;
use app\common\model\Order;
use app\common\model\OrderGoods;
use app\common\model\OrderLog;
use app\common\logic\OrderLogLogic;
use app\common\model\Pay;
use app\common\model\UserLevel;
use app\common\server\ConfigServer;
use app\common\server\UrlServer;
use app\common\server\YlyPrinter;
use expressage\Kd100;
use expressage\Kdniao;
use think\Db;
use think\Exception;
use think\facade\Cache;
use think\facade\Env;
use think\facade\Hook;
class OrderLogic
{
/**
* Notes: 列表查询条件
* @param $get
* @author 段誉(2021/2/1 10:12)
* @return array
*/
public static function getListsCondition($get)
{
$where = [];
//订单状态
if ($get['type'] != '') {
$where[] = ['pay_status', '=', $get['type']];
}
//订单编号查询
if (isset($get['order_sn']) && $get['order_sn'] != '') {
$where[] = ['order_sn', 'like', '%' . $get['order_sn'] . '%'];
}
//客户姓名查询
if (isset($get['name']) && $get['name'] != '') {
$where[] = ['consignee', 'like', '%' . $get['name'] . '%'];
}
//客户的电话查询
if (isset($get['mobile']) && $get['mobile'] != '') {
$where[] = ['mobile', 'like', '%' . $get['mobile'] . '%'];
}
//商品名称
if (isset($get['goods_name']) && $get['goods_name'] != '') {
$where[] = ['goods_name', 'like', '%' . $get['goods_name'] . '%'];
}
//商品名称
if (isset($get['goods_id']) && $get['goods_id'] != '') {
$where[] = ['goods_id', '=', $get['goods_id']];
}
//付款方式
if (isset($get['order_ysck']) && $get['order_ysck'] != '') {
$where[] = ['order_ysck', '=', $get['order_ysck']];
}
//付款方式
if (isset($get['channel_id']) && $get['channel_id'] != '') {
$where[] = ['channel_id', '=', $get['channel_id']];
}
//付款方式
if (isset($get['pay_way']) && $get['pay_way'] != '') {
$where[] = ['pay_way', '=', $get['pay_way']];
}
//付款方式
if (isset($get['admin_id']) && $get['admin_id'] != '') {
$where[] = ['admin_id', '=', $get['admin_id']];
}
//配送方式
if (isset($get['delivery_type']) && $get['delivery_type'] != '') {
$where[] = ['delivery_type', '=', $get['delivery_type']];
}
//订单类型
if (isset($get['order_type']) && $get['order_type'] != '') {
$where[] = ['admin_id', '=', NULL];
}
//订单来源
if (isset($get['order_source']) && $get['order_source'] != '') {
$where[] = ['order_source', '=', $get['order_source']];
}
//下单时间
if (isset($get['start_time']) && $get['start_time'] != '') {
$where[] = ['create_time', '>=', strtotime($get['start_time'])];
}
if (isset($get['end_time']) && $get['end_time'] != '') {
$where[] = ['create_time', '<=', strtotime($get['end_time'])];
}
return $where;
}
/**
* Notes: 列表
* @param $get
* @author 段誉(2021/2/1 10:12)
* @return array
*/
public static function lists($get)
{
$order = new Order();
$where = self::getListsCondition($get);
$field = 'o.*,order_status as order_status_text,pay_way as pay_way_text';
$brand = Db::name('goods_brand')->where(['del'=>0])->column('name','id'); //订单类型
$admin=Db::name('admin')->column('name','id');
$count = $order
->where($where)
->count();
$lists = $order
->where($where)
->page($get['page'],$get['limit'])
->order('id desc')
->select();
$channel = Db::name('orderchannel')->column('name','id');
foreach ($lists as &$item){
if(isset($channel[$item['channel_id']])){
$item['channel'] = $channel[$item['channel_id']];
}
if(isset($brand[$item['type_id']])){
$item['brand'] = $brand[$item['type_id']];
}
if(isset($admin[$item['admin_id']])){
$item['admin_id'] = $admin[$item['admin_id']];
}
//获取订单的商品
$goods=GoodsLogic::goodsinfo($item['goods_id']);
if($goods){
$item['goods_name']=$goods['name'];
$item['goods_image']=UrlServer::getFileUrl($goods['image']);
$item['code']=$goods['code'];
}else{
$item['goods_name']='';
$item['goods_image']='';
$item['code']='';
}
$gord_id=Db::name('collection')->where('id',$item['gord_id'])->find();
if($gord_id){
$item['gord_name']= $gord_id['cqname'];
}else{
$item['gord_name']='-';
}
}
return ['count' => $count, 'lists' => $lists];
}
public static function exportFile($get)
{
$where[] = ['o.del', '=', 0];
//订单状态
if ($get['type'] != '') {
$where[] = ['order_status', '=', $get['type']];
}
//订单搜素
if (!empty($get['search_key']) && !empty($get['keyword'])) {
$keyword = $get['keyword'];
switch ($get['search_key']) {
case 'order_sn':
$where[] = ['o.order_sn', 'like', '%' . $keyword . '%'];
break;
case 'user_sn':
$where[] = ['u.sn', 'like', '%' . $keyword . '%'];
break;
case 'nickname':
$where[] = ['nickname', 'like', '%' . $keyword . '%'];
break;
case 'user_mobile':
$where[] = ['u.mobile', 'like', '%' . $keyword . '%'];
break;
case 'consignee':
$where[] = ['consignee', 'like', '%' . $keyword . '%'];
break;
case 'consignee_mobile':
$where[] = ['o.mobile', 'like', '%' . $keyword . '%'];
break;
}
}
//商品名称
if (isset($get['goods_name']) && $get['goods_name'] != '') {
$where[] = ['g.name', 'like', '%' . $get['goods_name'] . '%'];
}
//付款方式
if (isset($get['pay_way']) && $get['pay_way'] != '') {
$where[] = ['o.pay_way', '=', $get['pay_way']];
}
//配送方式
if (isset($get['delivery_type']) && $get['delivery_type'] != '') {
$where[] = ['o.delivery_type', '=', $get['delivery_type']];
}
//订单类型
if (isset($get['order_type']) && $get['order_type'] != '') {
$where[] = ['o.order_type', '=', $get['order_type']];
}
//订单来源
if (isset($get['order_source']) && $get['order_source'] != '') {
$where[] = ['o.order_source', '=', $get['order_source']];
}
//下单时间
if (isset($get['start_time']) && $get['start_time'] != '') {
$where[] = ['o.create_time', '>=', strtotime($get['start_time'])];
}
if (isset($get['end_time']) && $get['end_time'] != '') {
$where[] = ['o.create_time', '<=', strtotime($get['end_time'])];
}
$field = 'o.*,o.order_type as order_type_text, o.order_source as order_source_text,o.pay_way as pay_way_text,address as delivery_address,o.pay_status as pay_status_text,o.order_status as order_status_text,u.sn as user_sn,u.nickname as user_nickname,u.level as user_level';
$lists = Order::alias('o')
->join('user u','u.id=o.user_id')
->join('order_goods og', 'og.order_id=o.id')
->join('goods g', 'g.id=og.goods_id')
->with('order_goods')
->field($field)
->where($where)
->order('o.id', 'desc')
->group('og.order_id')
->select()
->toArray();
$userLevel = UserLevel::where('del', 0)->column(['id','name'], 'id');
$exportTitle = ['订单编号', '订单类型', '下单时间', '支付时间', '订单来源', '会员编号', '会员昵称', '会员等级', '商品信息', '商品数量', '运费金额', '商品总金额', '优惠金额', '应付金额', '支付方式', '收货人', '手机号码', '收货地址', '配送方式', '支付状态', '订单状态'];
$exportExt = 'xls';
$exportData = [];
foreach ($lists as $item){
$orderSn = 'SN'.$item['order_sn']; // 转字符串
$level = isset($userLevel[$item['user_level']]) ? $userLevel[$item['user_level']] : '无等级';
$deliveryType = Order::getDeliveryType($item['delivery_type']);
$goodsStr = '';
foreach($item['order_goods'] as $subItem) {
$goodsInfo = json_decode($subItem['goods_info'], true);
$goodsStr.= '【'.$goodsInfo['goods_name'].' 规格:'.$goodsInfo['spec_value_str']. ' 数量:'.$subItem['goods_num']. '】';
}
$exportData[] = [$orderSn, $item['order_type_text'], $item['create_time'], $item['pay_time'], $item['order_source_text'], $item['user_sn'], $item['user_nickname'], $level, $goodsStr,$item['total_num'], $item['shipping_price'], $item['goods_price'], $item['discount_amount'], $item['order_amount'], $item['pay_way_text'], $item['consignee'], $item['mobile'], $item['delivery_address'],$deliveryType, $item['pay_status_text'], $item['order_status_text']];
}
return ['exportTitle'=> $exportTitle, 'exportData' => $exportData, 'exportExt'=>$exportExt, 'exportName'=>'订单列表'.date('Y-m-d H:i:s')];
}
public static function exportorder($get){
$where[] = ['o.del', '=', 0];
$where = self::getListsCondition($get);
$lists=Db::name('order')->where($where)->select(); //获取订单的内容
$exportData = [];
foreach ($lists as $item){
$orderSn = 'DL'.$item['order_sn']; // 转字符串
$goods=Db::name('goods')->where('id',$item['goods_id'])->find(); //获取商品的基本信息
$ervice=Db::name('order_exe')
->where('order_sn',$item['order_sn'])
->where('staff_status',3)
->count(); //查询服务条数
if($item['pay_status']==1){
$item['order_status_text']='已支付';
}else{
$item['order_status_text']='未支付';
}
$admin=Db::name('admin')->where('id',$item['admin_id'])->find(); //查询客服id
if($admin){
$admin_name=$admin['name'];
}else{
$admin_name='-';
}
$channe=Db::name('orderchannel')->where('id',$item['channel_id'])->find(); //查询渠道内容
if($channe){
$channe_name=$channe['name'];
}else{
$channe_name='-';
}
$phone=Db::name('user_address')->where('telephone',$item['mobile'])->find();
if($phone){
$cnle=Db::name('staffchannel')->where('id',$phone['brand_id'])->find();
if($cnle){
$custom= $cnle['name'];
}else{
$custom='-';
}
}
$dsynumber=$item['number']-$ervice;
if($item['pay_zd']==0){
$item['pay_zd']='已收款';
}else{
$item['pay_zd']='未收款';
}
$exportData[] = [$orderSn,$item['consignee'], $item['mobile'],$item['address'],$admin_name,$goods['name'],$goods['min_price'],
$item['order_amount'],$channe_name,$custom,$item['order_status_text'],$item['pay_zd'],$item['number'],$ervice,$dsynumber,date('Y-m-d H:i:s',$item['create_time'])
];
$exportTitle = ['订单序号','客户姓名','客户电话','房屋地址','订单归属','套餐名称','套餐金额','付款金额','订单渠道','客户渠道','是否收款','是否支付','总次数','已使用','待使用','下单时间'];
$exportExt = 'xls';
}
return ['exportTitle'=> $exportTitle, 'exportData' => $exportData, 'exportExt'=>$exportExt, 'exportName'=>'订单列表'.date('Y-m-d H:i:s')];
}
/**
* Notes: 我的订单导出功能
* @param $get
* @author 段誉(2021/2/1 10:12)
* @return array
*/
public static function userexport($get){
$where=[];
$where = self::getListsCondition($get);
$lists=Db::name('order')
->where($where)
->where('admin_id',session('admin_info.id'))
->select(); //获取订单的内容
$exportData = [];
foreach ($lists as $item){
$orderSn = 'DL'.$item['order_sn']; // 转字符串
$goods=Db::name('goods')->where('id',$item['goods_id'])->find(); //获取商品的基本信息
$ervice=Db::name('order_exe')
->where('order_sn',$item['order_sn'])
->where('staff_status',3)
->count(); //查询服务条数
if($item['pay_status']==1){
$item['order_status_text']='已支付';
}else{
$item['order_status_text']='未支付';
}
$admin=Db::name('admin')->where('id',$item['admin_id'])->find(); //查询客服id
if($admin){
$admin_name=$admin['name'];
}else{
$admin_name='-';
}
$channe=Db::name('orderchannel')->where('id',$item['channel_id'])->find(); //查询渠道内容
if($channe){
$channe_name=$channe['name'];
}else{
$channe_name='-';
}
$phone=Db::name('user_address')->where('telephone',$item['mobile'])->find();
if($phone){
$cnle=Db::name('staffchannel')->where('id',$phone['brand_id'])->find();
if($cnle){
$custom= $cnle['name'];
}else{
$custom='-';
}
}
if($item['pay_zd']==0){
$item['pay_zd']='已收款';
}else{
$item['pay_zd']='未收款';
}
$exportData[] = [$orderSn,$item['consignee'], $item['mobile'],$item['address'],$admin_name,$goods['name'],$goods['min_price'],
$item['order_amount'],$channe_name,$custom,$item['order_status_text'],$item['pay_zd'],date('Y-m-d H:i:s',$item['create_time'])
];
$exportTitle = ['订单序号','客户姓名','客户电话','房屋地址','订单归属','套餐名称','套餐金额','付款金额','订单渠道','客户渠道','是否收款','是否支付','下单时间'];
$exportExt = 'xls';
}
return ['exportTitle'=> $exportTitle, 'exportData' => $exportData, 'exportExt'=>$exportExt, 'exportName'=>'订单列表'.date('Y-m-d H:i:s')];
}
// 子订单的导出
public static function exportFilestaff($get)
{
$where=[];
//订单类型
if (isset($get['satff']) && $get['satff'] != '') {
$where[] = ['staff_id', '=', $get['satff']];
}
if (isset($get['order_sn']) && $get['order_sn'] != '') {
$where[] = ['order_sn', '=', $get['order_sn']];
}
//下单时间
if (isset($get['start_time']) && $get['start_time'] != '') {
$where[] = ['autotime', '>=', strtotime($get['start_time'])];
}
if (isset($get['end_time']) && $get['end_time'] != '') {
$where[] = ['autotime', '<=', strtotime($get['end_time'])];
}
$lists=Db::name('order_exe')
->where($where)
->select();
$exportData = [];
foreach ($lists as $item){
$order=Db::name('order')->where('order_sn',$item['order_sn'])->find(); //主订单的基本信息
$goods=Db::name('goods')->where('id',$order['goods_id'])->find(); //获取套餐的名称
if($goods){
$goods['name']=$goods['name'];
}else{
$goods['name']='-';
}
$coumst=Db::name('orderchannel')->where('id',$order['channel_id'])->find(); //获取订单的渠道
$staff=Db::name('staff')->where('id',$item['staff_id'])->find(); //获取员工的基本信息
$admin=Db::name('admin')->where('id',$order['admin_id'])->find(); //获取客服管家
if($admin){
$admin['name']=$admin['name'];
}else{
$admin['name']='-';
}
if($coumst){
$coumst['name']= $coumst['name'];
}else{
$coumst['name']= '-';
}
if($staff){
$staff['name']= $staff['name'];
}else{
$staff['name']= '-';
}
$xdtime=date('Y-m-d',$order['create_time']); //下单日期
$autotime=date('Y-m-d',$item['autotime']); //服务日期
if($order['number']>12){
$item['yeaey']='是';
}else{
$item['yeaey']='否';
}
if($item['addtime']==1){
$item['addtime']='上午';
}else{
$item['addtime']='下午';
}
$tiem['sfsk']=$order['integral_amount'];
$adder=Db::name('dev_region')->where('id',$order['district'])->find(); //获取到地区信息
$adderss=Db::name('user_address')->where('telephone',$order['mobile'])->find(); //客户的房屋地址
if($adderss){
$couadderss=Db::name('admin')->where('id',$adderss['admin_id'])->find();
if($couadderss){
$couadderss['name_adder']=$couadderss['name'];
}
}
if($adder){
$adder=$adder['name'];
}else{
$adder['name']='-';
}
$timeadd=Db::name('order_timeadd')
->where('orderid',$item['id'])
->where('status',2)
->find();
if($timeadd){
$item['addtimes']=$timeadd['minute']/60;
}else{
$item['addtimes']=0;
}
if($item['staff_status']==0){
$item['statusdd']="等待接单";
}
if($item['staff_status']==1){
$item['statusdd']="等待上门";
}
if($item['staff_status']==2){
$item['statusdd']="等待服务";
}
if($item['staff_status']==3){
$item['statusdd']="服务完成";
}
$exportData[] = [
$order['order_sn'],
$order['mobile'],$order['consignee'],
$adder,
$order['address'],
$goods['name'],//套餐名称
$xdtime ,$autotime,
$item['addtime'],
$item['statusdd']
,$order['order_amount'],$tiem['sfsk'],
$item['addtimes'],$item['add'],$item['yeaey']
,$order['number'],$order['code'],
$coumst['name'],
$staff['name'],$item['account'],
$admin['name'],
$couadderss['name_adder'],
$item['remark']];
$exportTitle = ['订单编号','手机号码','客户名称','区','详细地址','套餐名称','下单日期','服务日期','上午/下午','服务状态','订单总金额','优惠券抵用金额','加时','是否收款','是否年卡',' 总次数','剩余次数','渠道','员工姓名','报销','订单归属','客户归属','订单备注'];
$exportExt = 'xls';
}
return ['exportTitle'=> $exportTitle, 'exportData' => $exportData, 'exportExt'=>$exportExt, 'exportName'=>'订单列表'.date('Y-m-d H:i:s')];
}
/**
* Notes: 详情
* @param $id
* @author 段誉(2021/2/1 10:12)
* @return Order
*/
public static function getDetail($id)
{
$result = Db::name('order')
->where('id', $id)
->find();
$goods=Db::name('goods')->where('id', $result['goods_id'])->find();
$result['goods_image']= UrlServer::getFileUrl($goods['image']);
$result['goods_name']= $goods['name'];
if($result['type']=1){
$result['type']="固定订单";
}else{
$result['type']="非固定订单";
}
$result['create_time']=date("Y-m-d H:i:s",$result['create_time']);
if($result['pay_status']==1){
$result['pay_status']="已支付";
}
return $result;
}
/**
* Notes: 取消订单(返回商品规格表库存)
* @param $order_id
* @param $admin_id
* @author 段誉(2021/2/1 10:12)
*/
public static function cancel($order_id, $admin_id)
{
Db::startTrans();
try{
$order = Order::get(['id' => $order_id], ['orderGoods']);
//取消订单
OrderRefundLogic::cancelOrder($order_id, OrderLog::TYPE_SHOP, $admin_id);
//已支付的订单,取消,退款
if ($order['pay_status'] == Pay::ISPAID) {
//更新订单状态
OrderRefundLogic::cancelOrderRefundUpdate($order);
//订单退款
OrderRefundLogic::refund($order, $order['order_amount'], $order['order_amount']);
}
Db::commit();
return true;
} catch(\Exception $e) {
Db::rollback();
//增加退款失败记录
OrderRefundLogic::addErrorRefund($order, $e->getMessage());
return $e->getMessage();
}
}
/**
* Notes: 删除已取消的订单
* @param $order_id
* @param $admin_id
* @author 段誉(2021/2/1 10:14)
*/
public static function del($order_id, $admin_id)
{
$order = Order::get(['del' => 0, 'id' => $order_id]);
$order->save(['del' => 1, 'update_time' => time()]);
//订单日志
OrderLogLogic::record(
OrderLog::TYPE_SHOP,
OrderLog::SHOP_DEL_ORDER,
$order_id,
$admin_id,
OrderLog::SHOP_DEL_ORDER
);
}
/**
* Notes: 物流公司
* @author 段誉(2021/2/1 10:15)
* @return array|\PDOStatement|string|\think\Collection
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public static function express()
{
return Db::name('express')->where('del', 0)->select();
}
/**
* Notes: 发货操作
* @param $data
* @param $admin_id
* @author 段誉(2021/2/1 10:15)
* @return bool
* @throws \think\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
* @throws \think\exception\PDOException
*/
public static function deliveryHandle($data, $admin_id)
{
$order_id = $data['order_id'];
$order = Order::get(['del' => 0, 'id' => $order_id], ['order_goods']);
if ($order['shipping_status'] == 1) {
return true;
}
$shipping = Db::name('express')->where('id', $data['shipping_id'])->find();
//添加发货单
$delivery_data = [
'order_id' => $order_id,
'order_sn' => $order['order_sn'],
'user_id' => $order['user_id'],
'admin_id' => $admin_id,
'consignee' => $order['consignee'],
'mobile' => $order['mobile'],
'province' => $order['province'],
'city' => $order['city'],
'district' => $order['district'],
'address' => $order['address'],
'invoice_no' => $data['invoice_no'],
'send_type' => $data['send_type'],
'create_time' => time(),
];
//配送方式->快递配送
if ($data['send_type'] == 1) {
$delivery_data['shipping_id'] = $data['shipping_id'];
$delivery_data['shipping_name'] = $shipping['name'];
$delivery_data['shipping_status'] = 1;
}
$delivery_id = Db::name('delivery')->insertGetId($delivery_data);
//更新订单下商品的发货状态
$order->update_time = time();
$order->shipping_time = time();
$order->shipping_status = 1;
$order->order_status = Order::STATUS_WAIT_RECEIVE;
$order->delivery_id = $delivery_id;
$order->save();
//订单日志
OrderLogLogic::record(
OrderLog::TYPE_SHOP,
OrderLog::SHOP_DELIVERY_ORDER,
$order_id,
$admin_id,
OrderLog::SHOP_DELIVERY_ORDER
);
//发货短信通知
if($order->mobile){
$nickname = Db::name('user')->where(['id' => $order['user_id']])->value('nickname');
$send_data = [
'key' => NoticeSetting::ORDER_DELIVERY_NOTICE,
'user_id' => $order['user_id'],
'mobile' => $order->mobile,
'params' => [
'order_sn' => $order->order_sn,
'nickname' => $nickname,
'time' => date('Y-m-d H:i:s'),
'invoice_no' => $data['invoice_no'] ?? '',
'shipping_name' => $delivery_data['shipping_name'] ?? '无需快递',
'goods_name' => omit_str($order['order_goods'][0]['goods_name'] ?? '商品', 8)
],
];
}
Hook::listen('sms_send', $send_data);
// 赠送成长值和积分
Hook::listen('give_reward', [
'order_id' => $order['id'],
'scene' => 2, //2=发货场景
]);
// 发货模板消息
Hook::listen('notice', [
'user_id' => $order['user_id'],
'order_id' => $order['id'],
'scene' => NoticeSetting::ORDER_DELIVERY_NOTICE,
'shipping_name' => $delivery_data['shipping_name'] ?? '无需快递',
'invoice_no' => $data['invoice_no'] ?? '',
'time' => date('Y-m-d H:i:s')
]);
}
/**
* Notes: 确认收货
* @param $order_id
* @param $admin_id
* @author 段誉(2021/2/1 10:16)
*/
public static function confirm($order_id, $admin_id)
{
$order = Order::get(['del' => 0, 'id' => $order_id]);
$order->order_status = Order::STATUS_FINISH;
$order->update_time = time();
$order->confirm_take_time = time();
$order->save();
// 赠送成长值和积分
Hook::listen('give_reward', [
'order_id' => $order_id,
'scene' => 3, //3=订单完成
]);
//订单日志
OrderLogLogic::record(
OrderLog::TYPE_SHOP,
OrderLog::SHOP_CONFIRM_ORDER,
$order_id,
$admin_id,
OrderLog::SHOP_CONFIRM_ORDER
);
}
/**
* Notes: 物流信息
* @param $order_id
* @author 段誉(2021/2/1 10:16)
* @return array|\PDOStatement|string|\think\Model|null
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public static function shippingInfo($order_id)
{
$shipping = Db::name('delivery')->where('order_id', $order_id)->find();
if ($shipping) {
$shipping['create_time_text'] = date('Y-m-d H:i:s', $shipping['create_time']);
}
$shipping['traces'] = self::getShipping($order_id);
return $shipping;
}
/**
* Notes: 物流轨迹
* @param $order_id
* @author 段誉(2021/2/1 10:16)
* @return array|bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public static function getShipping($order_id)
{
$orderModel = new Order();
$order = $orderModel->alias('o')
->field('invoice_no,shipping_name,shipping_id,o.shipping_status')
->join('delivery d', 'd.order_id = o.id')
->where(['o.id' => $order_id])
->find();
$express = ConfigServer::get('express', 'way', '', '');
$app = ConfigServer::get($express, 'appkey', '', '');
$key = ConfigServer::get($express, 'appsecret', '', '');
if (empty($express) || $order['shipping_status'] != 1 || empty($app) || empty($key)) {
return $traces[] = ['暂无物流信息'];
}
//快递配置设置为快递鸟时
if($express === 'kdniao') {
$expressage = (new Kdniao($key, $app, Env::get('app.app_debug', 'true')));
$shipping_field = 'codebird';
} else {
$expressage = (new Kd100($key, $app, Env::get('app.app_debug', 'true')));
$shipping_field = 'code100';
}
//快递编码
$shipping_code = Db::name('express')
->where(['id' => $order['shipping_id']])
->value($shipping_field);
//获取物流轨迹
$expressage->logistics($shipping_code, $order['invoice_no']);
$traces = $expressage->logisticsFormat();
if ($traces == false) {
$traces[] = [$expressage->getError()];
} else {
foreach ($traces as &$item) {
$item = array_values(array_unique($item));
}
}
return $traces;
}
/**
* Notes: 订单备注
* @param $post
* @param string $type
* @return int|string
* @throws \think\Exception
* @throws \think\exception\PDOException
* @author 张无忌(2021/2/1 18:50)
*/
public static function remarks($post, $type="get")
{
if ($type==='get') {
return Db::name('order')->field('id,order_remarks')
->where(['id'=>$post['id']])
->findOrEmpty();
} else {
return Db::name('order')
->where(['id'=>$post['id']])
->update(['order_remarks'=>$post['order_remarks']]);
}
}
/**
* Notes:打印接口
* @param $id int 订单id
* @return string
*/
public static function orderPrint($id){
try {
//打印机配置
$printer_config = Db::name('printer_config')->where(['status'=>1])->find();
//打印机列表
$printer_list = Db::name('printer')->where(['type'=>$printer_config['id'],'del'=>0])->select();
if(empty($printer_config) || empty($printer_list)){
throw new Exception('请先配置打印机');
}
$yly_print = new YlyPrinter($printer_config['client_id'],$printer_config['client_secret']);
$order = self::getPrintOrder($id);
$template_config = ConfigServer::get('printer', 'yly_template', []);
$yly_print->ylyPrint($printer_list,$order,$template_config);
}catch (\Exception $e){
$msg = json_decode($e->getMessage(),true);
if($msg && isset($msg['error'])){
return '易联云:'.$msg['error_description'];
}
if(18 === $e->getCode()){
//todo token过期重新拿
Cache::rm('yly_access_token');
Cache::rm('yly_refresh_token');
};
return '易联云:'.$e->getMessage();
}
}
public static function getPrintOrder($id){
$order = new Order();
$result = $order
->with(['user', 'order_goods'])
->where('id', $id)
->append(['delivery_address'])
->find();
foreach ($result['order_goods'] as &$order_goods) {
$info = json_decode($order_goods['goods_info'], true);
$order_goods['name'] = $info['goods_name'];
$order_goods['spec_value_str'] = $info['spec_value_str'];
$order_goods['goods_image'] = empty($info['spec_image']) ? $info['image'] : $info['spec_image'];
}
return $result->toArray();
}
//后台增加订单
public static function add($post){
$adder=UserLogic::adder($post['user_id']); //获取用户的地址
$goods=Db::name('goods')->where('id',$post['goods_id'])->find(); //获取商品的ID
$user=Db::name('user')->where('mobile',$adder['telephone'])->find();
if($user){
$user['id']= $user['id'];
}else{
$user['id']=0;
}
if($post['gord_id']){
$post['gord_id']=$post['gord_id'];
}else{
$post['gord_id']=0;
}
$post['order_sn']=createSn('order', 'order_sn', '', 4);
$data=[
'order_sn'=> $post['order_sn'],
'goods_id'=>$post['goods_id'],
'user_id'=>$user['id'],
'consignee'=>$adder['contact'],
'province'=>$adder['province_id'],
'city'=>$adder['city_id'],
'district'=>$adder['district_id'],
'address'=>$adder['address'],
'mobile'=>$adder['telephone'],
'lat'=>$adder['lat'],
'lng'=>$adder['lng'],
'goods_price'=>$post['total_amount'],
'order_amount'=>$post['total_amount'],
'total_amount'=>$post['total_amount'],
'pay_zd'=>$post['order_ysck'],
'pay_status'=>1,
'code'=>$goods['code'],
'number'=>$goods['code'],
'channel_id'=>$post['channel_id'],
'admin_id' =>session('admin_info.id'),
'order_ysck'=>$post['order_ysck'],
'gord_id'=>$post['gord_id'],
'create_time'=>time(),
'update_time'=>time(),
];
return Db::name('order')->data($data)->insert();
}
//根据订单编号获取到订单信息
public static function orderinfo($order_sn){
return Db::name('order')->where('order_sn',$order_sn)->find();
}
//根据订单ID获取到订单信息
public static function orderinfoid($id){
return Db::name('order')->where('id',$id)->find();
}
public static function userlists($get)
{
$where=[];
//订单搜素
if (!empty($get['search_key']) && !empty($get['keyword'])) {
$keyword = $get['keyword'];
switch ($get['search_key']) {
case 'order_sn':
$where[] = ['o.order_sn', 'like', '%' . $keyword . '%'];
break;
case 'user_sn':
$where[] = ['u.sn', 'like', '%' . $keyword . '%'];
break;
case 'nickname':
$where[] = ['nickname', 'like', '%' . $keyword . '%'];
break;
case 'user_mobile':
$where[] = ['u.mobile', 'like', '%' . $keyword . '%'];
break;
case 'consignee':
$where[] = ['consignee', 'like', '%' . $keyword . '%'];
break;
case 'consignee_mobile':
$where[] = ['o.mobile', 'like', '%' . $keyword . '%'];
break;
}
}
//商品名称
if (isset($get['goods_name']) && $get['goods_name'] != '') {
$where[] = ['g.name', 'like', '%' . $get['goods_name'] . '%'];
}
//付款方式
if (isset($get['pay_way']) && $get['pay_way'] != '') {
$where[] = ['o.pay_way', '=', $get['pay_way']];
}
//配送方式
if (isset($get['delivery_type']) && $get['delivery_type'] != '') {
$where[] = ['o.delivery_type', '=', $get['delivery_type']];
}
//订单类型
if (isset($get['order_type']) && $get['order_type'] != '') {
$where[] = ['o.order_type', '=', $get['order_type']];
}
//订单来源
if (isset($get['order_source']) && $get['order_source'] != '') {
$where[] = ['o.order_source', '=', $get['order_source']];
}
//下单时间
if (isset($get['start_time']) && $get['start_time'] != '') {
$where[] = ['o.create_time', '>=', strtotime($get['start_time'])];
}
if (isset($get['end_time']) && $get['end_time'] != '') {
$where[] = ['o.create_time', '<=', strtotime($get['end_time'])];
}
$order = new Order();
$where = self::getListsCondition($get);
$field = 'o.*,order_status as order_status_text,pay_way as pay_way_text';
$brand = Db::name('goods_brand')->where(['del'=>0])->column('name','id'); //订单类型
$count = $order
->where($where)
->where('admin_id',session('admin_info.id'))
->order('id desc')
->count();
$lists = $order
->where($where)
->where('admin_id',session('admin_info.id'))
->page($get['page'],$get['limit'])
->order('id desc')
->select();
$channel = Db::name('orderchannel')->column('name','id');
foreach ($lists as &$item){
if(isset($channel[$item['channel_id']])){
$item['channel'] = $channel[$item['channel_id']];
}
if(isset($brand[$item['type_id']])){
$item['brand'] = $brand[$item['type_id']];
}
//获取订单的商品
$goods=Db::name('goods')->where('id',$item['goods_id'])->find();
if($goods){
$item['goods_name']=$goods['name'];
$item['goods_image']=UrlServer::getFileUrl($goods['image']);
$item['code']=$goods['code'];
}else{
$item['goods_name']='';
$item['goods_image']='';
$item['code']='';
}
$gord_id=Db::name('collection')->where('id',$item['gord_id'])->find();
if($gord_id){
$item['gord_name']= $gord_id['cqname'];
}else{
$item['gord_name']= '-';
}
}
return ['count' => $count, 'lists' => $lists];
}
public static function edit($post){
return Db::name('order')->where('id',$post['id'])->update(['consignee'=>$post['name'],
'address'=>$post['address'],
'mobile'=>$post['phone'],
'pay_status'=>$post['pay_status'],
'province'=>$post['first_category_id'],
'city'=>$post['second_category_id'],
'district'=>$post['third_category_id'],
'lat'=>$post['store_longitude'],
'lng'=>$post['store_latitude'],
'gord_id'=>$post['gord_id'],
'pay_status'=>1,
'pay_zd'=>$post['pay_status'],
'channel_id'=>$post['brand_id'],
'order_amount'=>$post['total_amount']]);
}
/**
* Notes: 后台操作划卡次数
* @param $post
* @param string $type
* @return int|string
* @throws \think\Exception
* @throws \think\exception\PDOException
* @author 张无忌(2021/2/1 18:50)
*/
public static function delnumber($post, $type="get")
{
if ($type==='get') {
return Db::name('order')->field('id,code')
->where(['id'=>$post['id']])
->findOrEmpty();
} else {
return Db::name('order')
->where(['id'=>$post['id']])
->update(['code'=>$post['code']]);
}
}
public static function channel_update($post){
$order=Db::name('order')->where('id',$post['id'])->find();
Db::name('order')->where('id',$post['id'])->update(['channel_id'=>$post['channel_id']]);
$order_exe=Db::name('order_exe')->where('order_sn',$order['order_sn'])->find();
if($order_exe){
return Db::name('order_exe')->where('order_sn',$order['order_sn'])->update(['channel_id'=>$post['channel_id']]);
}
return 1;
}
}