123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- <?php
- /**
- *
- * @author: xaboy<365615158@qq.com>
- * @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();
- }
- }
- }
- }
- /**
- * 自动确认
- * @return void
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public static function automatic_confirmation()
- {
- $order = DiagnosisOrder::where('status', 2)->where('after_sales', 0)->select();
- if (count($order) > 0)
- {
- foreach ($order as $item)
- {
- $time = $item['up_time'] + (86400 * 7); // 上传时间的七天后
- if (time() > $time){
- // 大于七天自动完成
- DiagnosisOrder::where('id', $item['id'])->update(['status' => 3]);
- $user = User::where('uid', $item['order_receiving'])->find();
- UserBill::income('完成订单佣金', $item['order_receiving'], 'now_money', 'brokerage', $item['commission'], '', $user['brokerage_price']+$item['commission'], '完成订单佣金');
- User::where('uid', $item['order_receiving'])->inc('brokerage_price', $item['commission'])->update();
- }
- }
- }
- }
- }
|