* @day: 2017/11/02 */ namespace app\admin\model\diagnosis; use app\admin\model\store\StoreProduct; use app\admin\model\system\SystemAdmin; use app\admin\model\user\UserEquity; use app\models\article\ArticleContent; use app\models\user\User; use app\models\user\UserBill; use crmeb\traits\ModelTrait; use crmeb\basic\BaseModel; use think\model\concern\SoftDelete; /** * 图文管理 Model * Class WechatNews * @package app\admin\model\wechat */ class DiagnosisOrder extends BaseModel { use ModelTrait; protected $pk = 'id'; protected $name = 'diagnosis_order'; protected $autoWriteTimestamp = true; use SoftDelete; protected $deleteTime = 'delete_time'; public static function list($where) { $model = self::alias('a') ->field('a.*,b.nickname,c.nickname as re_nickname') ->leftJoin('user b', 'a.uid = b.uid') ->leftJoin('user c', 'a.order_receiving = c.uid') ->order('a.id DESC'); if ($where['name'])$model->where('a.uid|b.nickname' , 'like', '%'.$where['name'].'%'); if ($where['order_id'])$model->where('a.order_id' , 'like', '%'.$where['order_id'].'%'); if ($where['rece'])$model->where('a.order_receiving|c.nickname' , 'like', '%'.$where['rece'].'%'); if ($where['type'])$model->where('a.type' , $where['type']); if ($where['pay_type']) $model->where('a.pay_type', $where['pay_type']); if ($where['status'] == 0 && $where['status'] != ''){ $model->where('a.status', 0)->where('paid', 1); }elseif ($where['status'] == 1){ $model->where('a.status', 1)->where('paid', 1); }elseif ($where['status'] == 2){ $model->where('a.status', 2)->where('paid', 1); }elseif ($where['status'] == 3){ $model->where('a.status', 3)->where('paid', 1); }elseif ($where['status'] == 4){ $model->where('a.after_sales', 1)->where('paid', 1); }elseif ($where['status'] == 5){ $model->where('a.status', -1)->where('paid', 1); }elseif ($where['status'] == 6){ $model->where('a.status', -2)->where('paid', 1); } if (isset($where['data']) && $where['data'] !== '') { $model = self::getModelTime($where, $model, 'create_time'); } $data['count'] = $model->count(); if ($where['page'] && $where['limit']){ $model->page($where['page'], $where['limit']); }else{ $model->page(20, 1); } $list = $model->select()->toArray(); foreach ($list as &$item) { if ($item['paid'] == 0){ $item['paid'] = '未支付'; $item['status'] = '未支付'; } else{ if ($item['status'] == 0){ $item['status'] = '待接单'; }elseif ($item['status'] == 1){ $item['status'] = '已接单'; }elseif ($item['status'] == 2){ if ($item['after_sales'] == 1){ $item['status'] = '申请售后中'; }else{ $item['status'] = '待确认'; } }elseif ($item['status'] == 3){ if ($item['after_sales'] == 1){ $item['status'] = '申请售后中'; }else{ $item['status'] = '已完成'; } }elseif ($item['status'] == -1){ if ($item['refund_status'] == 0){ $item['status'] = '待退款'; }elseif ($item['refund_status'] == 1){ $item['status'] = '已退款'; } }elseif ($item['status'] == -2){ if ($item['refund_status'] == 0){ $item['status'] = '过期订单'; }elseif ($item['refund_status'] == 1){ $item['status'] = '已退款'; } } } if ($item['paid'] == 1) $item['paid'] = '已支付'; if ($item['pay_type'] == 1) $item['pay_type'] = '余额'; if ($item['pay_type'] == 2) $item['pay_type'] = '微信'; if ($item['pay_type'] == 3) $item['pay_type'] = '支付宝'; $item['cate'] = implode(',',DiagnosisCate::where('id', 'in', $item['cate_id'])->column('name')); if ($item['type'] == 1){ $item['type'] = '陪诊'; }elseif ($item['type'] == 2){ $item['type'] = '代办'; } } $data['data'] = $list; return $data; } /** * 生成订单 * @param $order * @param $pay_type * @param $uid * @return DiagnosisOrder|\think\Model */ public static function create_order($order, $pay_type, $uid) { $res1 = self::create([ 'cate_id' => $order['cate_id'], 'order_id' => self::getNewOrderId(), 'uid' => $uid, 'ot_price' => $order['ot_price'], 'pay_price' => $order['pay_price'], 'commission' => $order['commission'], 'pay_type' => $pay_type, 'type' => $order['type'], 'user_card_id' => $order['user_card_id'] ]); $order['attr']['oid'] = $res1['id']; $res2 = DiagnosisOrderAttr::create($order['attr']); return $res1; } /** * 生成订单唯一id * @param $uid 用户uid * @return string */ public static function getNewOrderId() { do { list($msec, $sec) = explode(' ', microtime()); $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', ''); $orderId = 'wx' . $msectime . mt_rand(10000, 99999); } while (self::be(['order_id' => $orderId]));// $orderId = 'wx' . $msectime . mt_rand(10000, 99999); return $orderId; } /** * 余额支付 * @param $orderId * @return bool * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function yuPay($orderId) { self::beginTrans(); $order = self::where('order_id', $orderId)->find(); try { if ($order['pay_price'] == 0){ self::paySuccess($orderId); }else{ if (!$order)return self::setErrorInfo('订单不存在!'); $user = User::where('uid', $order['uid'])->find(); if ($user['now_money'] < $order['pay_price']) return self::setErrorInfo('余额不足!', true); User::where('uid', $order['uid'])->dec('now_money', $order['pay_price'])->update(); self::paySuccess($orderId); } self::commitTrans(); return true; } catch (\Exception $e) { self::rollbackTrans(); return self::setErrorInfo($e->getMessage()); } } /** * 支付成功后 * @param $orderId * @param $paytype * @param $formId * @return bool * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function paySuccess($orderId, $paytype = 'weixin', $formId = '') { $order = self::where('order_id', $orderId)->find(); if (!$order)return self::setErrorInfo('订单不存在!'); if ($order['paid'] == 1) return self::setErrorInfo('订单已支付!'); if ($order['user_card_id']){ self::card($order['user_card_id'], $order['cate_id'], $order['uid']); } self::where('order_id', $orderId)->update(['paid' => 1, 'pay_time' => time()]); $now_money = User::where('uid', $order['uid'])->value('now_money'); UserBill::expend('支付订单', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元创建订单'); return true; } /** * 优惠卡使用减一 * @param $card_id * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function card($card_id, $c_id, $uid) { $c_id = explode(',', $c_id); $equity = []; foreach ($c_id as $item){ $id = UserEquity::where('user_card_id', 'in', $card_id)->where('uid', $uid)->where('c_id', 'like', '%'.$item.'%')->value('id'); if ($id){ $equity[] = $id; } } $equity = array_unique($equity); $equitys = UserEquity::where('id', 'in', $equity)->select(); if ($equitys){ foreach ($equitys as $item){ if ($item['type'] == 2){ if ($item['number'] == 1){ UserEquity::where('id', $item['id'])->update(['use' => 0]); } UserEquity::where('id', $item['id'])->dec('number')->update(); } } } } }