where(['id'=>$data['refund_user']])->value('username'); }else{ $model = new \app\farm\model\User(); $info = $model->where(['id'=>$data['refund_user']])->value('nickName'); } return $info; } } /** * @author chenniang * @DataTime: 2022-03-07 17:38 * @功能说明: */ public function getStoreInfoAttr($value,$data){ if(!empty($data['store_id'])){ $farmer_model= new Farmer(); $info = $farmer_model->dataInfo(['id'=>$data['store_id'],'type'=>2]); return $info; } } /** * @author chenniang * @DataTime: 2021-03-26 16:48 * @功能说明: */ public function getImgsAttr($value,$data){ if(!empty($value)){ return explode(',',$value); } } /** * @param $value * @param $data * @功能说明:总商品数量 * @author chenniang * @DataTime: 2021-03-25 14:39 */ public function getAllGoodsNumAttr($value,$data){ if(!empty($data['id'])){ $order_goods_model = new ShopRefundGoods(); $dis = [ 'refund_id' => $data['id'] ]; $num = $order_goods_model->where($dis)->sum('goods_num'); return $num; } } /** * @author chenniang * @DataTime: 2021-03-17 17:16 * @功能说明:收货信息 */ public function getAddressInfoAttr($value,$data){ if(!empty($data['order_id'])){ $address_model = new OrderAddress(); $info = $address_model->dataInfo(['order_id'=>$data['order_id']]); return $info; } } /** * @author chenniang * @DataTime: 2021-03-17 17:16 * @功能说明:收货信息 */ public function getOrderGoodsAttr($value,$data){ if(!empty($data['id'])){ $goods_model = new ShopRefundGoods(); $info = $goods_model->dataSelect(['refund_id'=>$data['id']]); return $info; } } /** * @author chenniang * @DataTime: 2021-03-15 14:37 * @功能说明:后台列表 */ public function adminDataList($dis,$page=10,$mapor=[]){ $data = $this->alias('a') ->join('lbfarm_shop_refund_order_goods c','a.id = c.refund_id') ->join('lbfarm_shop_order d','a.order_id = d.id') ->join('lbfarm_order_address e','a.order_id = e.order_id AND type = 5','left') ->where($dis) ->where(function ($query) use ($mapor){ $query->whereOr($mapor); }) ->field('a.*,e.mobile,d.order_code as pay_order_code,e.user_name,d.pay_price') ->group('a.id') ->order('a.id desc') ->paginate($page) ->toArray(); if(!empty($data['data'])){ $user_model = new User(); foreach ($data['data'] as &$v){ $v['nickName'] = $user_model->where(['id'=>$v['user_id']])->value('nickName'); } } return $data; } /** * @author chenniang * @DataTime: 2021-03-19 17:46 * @功能说明:小程序退款列表 */ public function indexDataList($dis,$where=[],$page=10){ $data = $this->alias('a') ->join('lbfarm_shop_refund_order_goods c','a.id = c.refund_id') ->join('lbfarm_shop_order d','a.order_id = d.id') ->where($dis) ->where(function ($query) use ($where){ $query->whereOr($where); }) ->field('a.*,d.order_code as pay_order_code') ->group('a.id') ->order('a.id desc') ->paginate($page) ->toArray(); return $data; } /** * @author chenniang * @DataTime: 2021-04-08 17:08 * @功能说明:退款中 */ public function refundIng($cap_id){ $dis = [ 'cap_id' => $cap_id, 'status' => 1 ]; $count = $this->where($dis)->count(); return $count; } /** * @author chenniang * @DataTime: 2020-09-29 11:04 * @功能说明:添加 */ public function dataAdd($data){ $data['status'] = 1; $data['create_time'] = time(); $res = $this->insert($data); return $res; } /** * @author chenniang * @DataTime: 2020-09-29 11:05 * @功能说明:编辑 */ public function dataUpdate($dis,$data){ $res = $this->where($dis)->update($data); return $res; } /** * @author chenniang * @DataTime: 2020-09-29 11:06 * @功能说明:列表 */ public function dataList($dis,$page){ $data = $this->where($dis)->order('id desc')->paginate($page)->toArray(); return $data; } /** * @author chenniang * @DataTime: 2020-09-29 11:43 * @功能说明: */ public function dataInfo($dis){ $data = $this->where($dis)->find(); return !empty($data)?$data->toArray():[]; } /** * @author chenniang * @DataTime: 2021-03-18 09:37 * @功能说明:通过退款 */ public function passOrder($id,$price,$payConfig,$refund_user=0,$text='',$id_admin=0){ $refund_order= $this->dataInfo(['id'=>$id]); $order_model = new ShopOrder(); $pay_order = $order_model->dataInfo(['id'=>$refund_order['order_id']]); if($refund_order['status']!=1){ return ['code'=>500,'msg'=>'订单状态错误']; } $update = [ 'refund_user' => $refund_user, 'status' => 2, 'refund_time' => time(), 'refund_price'=> $price, 'pay_price' => $price, 'refund_text' => $text, 'refund_user_admin' => $id_admin ]; Db::startTrans(); $res = $this->dataUpdate(['id'=>$refund_order['id']],$update); if($res!=1){ Db::rollback(); return ['code'=>500,'msg'=>'退款失败,请重试']; } //修改退款子订单的退款状态 $order_refund_goods = new ShopRefundGoods(); $res = $order_refund_goods->dataUpdate(['refund_id'=>$id],['status'=>2]); if($res==0){ Db::rollback(); return ['code'=>500,'msg'=>'退款失败,请重试1'.$res]; } $goods_model = new ShopGoods(); //退换库存 foreach ($refund_order['order_goods'] as $v){ $res = $goods_model->setOrDelStock($v['goods_id'],$v['spe_id'],$v['goods_num'],1,1,0,$v['kill_atv_id']); if(!empty($res['code'])){ Db::rollback(); return $res; } } $res = $order_model->dataUpdate(['id'=>$refund_order['order_id']],['true_price'=>$pay_order['true_price']-$price]); //查看货是否退完了 $refund_success = $this->checkRefundNum($refund_order['order_id']); //退完了 就修改订单状态 if($refund_success==1){ $res = $order_model->dataUpdate(['id'=>$refund_order['order_id']],['pay_type'=>-1]); //退换优惠券 $coupon_model = new CouponRecord(); // // $coupon_model->couponRefund($pay_order['id'],2); // if($res==0){ // // Db::rollback(); // // return ['code'=>500,'msg'=>'退款失败,请重试2']; // // } } $pay_order = $order_model->dataInfo(['id'=>$refund_order['order_id']]); $refund_order= $this->dataInfo(['id'=>$id]); $res = $this->refundCash($payConfig,$pay_order,$price,$refund_order); if(!empty($res['code'])){ Db::rollback(); return ['code'=>500,'msg'=>$res['msg']]; } if($res!=true){ Db::rollback(); return ['code'=>500,'msg'=>'退款失败,请重试3']; } Db::commit(); $sys_model = new PushMsgModel($refund_order['uniacid']); $sys_model->sendMsg($refund_order,6); return true; } /** * @param $payConfig * @param $pay_order * @param $price * @param int $refund_id * @功能说明:退钱 * @author chenniang * @DataTime: 2021-07-12 20:31 */ public function refundCash($payConfig,$pay_order,$price,$refund_order){ if($price<=0){ return true; } $water_model = new FinanceWater(); //说明订单已经完成 if($pay_order['type']=-1){ //将流水状态修改为可入账 $water_model->dataUpdate(['order_id'=>$pay_order['id'],'type'=>8],['cash_status'=>1]); //增加退款流水 $water_model->addWater($refund_order['id'],9,2,1); //如果有运费将运费也改为可入账 $water_model->dataUpdate(['order_id'=>$pay_order['id'],'type'=>16],['cash_status'=>1]); //增加运费退款流水 $water_model->addWater($refund_order['id'],17,1,1); }else{ $water_model->addWater($refund_order['id'],9,2,0); $water_model->addWater($refund_order['id'],17,1,0); } $water_model->cashArrival(); if($pay_order['pay_model']==1){ //微信退款 $response = orderRefundApi($payConfig,$pay_order['pay_price'],$price,$pay_order['transaction_id']); //如果退款成功修改一下状态 if ( isset( $response[ 'return_code' ] ) && isset( $response[ 'result_code' ] ) && $response[ 'return_code' ] == 'SUCCESS' && $response[ 'result_code' ] == 'SUCCESS' ) { $response['out_refund_no'] = !empty($response['out_refund_no'])?$response['out_refund_no']:$pay_order['order_code']; $this->dataUpdate(['id'=>$refund_order['id']],['out_refund_no'=>$response['out_refund_no']]); }else { //失败就报错 $discption = !empty($response['err_code_des'])?$response['err_code_des']:$response['return_msg']; return ['code'=>500,'msg'=> $discption]; } }elseif($pay_order['pay_model']==2){ $data = [ 'user_id' => $pay_order['user_id'], 'pay_price'=> $price, 'id' => $refund_order['id'], 'uniacid' => $pay_order['uniacid'] ]; $water_model = new \app\farm\model\BalanceWater(); $res = $water_model->addWater($data,10,1); if($res==0){ return false; } }else{ //支付宝 $pay_model = new PayModel($payConfig); $res = $pay_model->aliRefund($pay_order['transaction_id'],$pay_order['pay_price']); if(isset($res['alipay_trade_refund_response']['code'])&&$res['alipay_trade_refund_response']['code']==10000){ $this->dataUpdate(['id'=>$pay_order['id']],['out_refund_no'=>$res['alipay_trade_refund_response']['out_trade_no']]); }else{ return ['code'=>500,'msg'=> $res['alipay_trade_refund_response']['sub_msg']]; } } return true; } /** * @author chenniang * @DataTime: 2021-03-18 10:29 * @功能说明:检查改订单款退完了没 */ public function checkRefundNum($order_id,$status=2){ $order_goods_model = new ShopOrderGoods(); $order_refund_goods_model = new ShopRefundGoods(); $dis = [ 'order_id' => $order_id ]; $goods_num = $order_goods_model->where($dis)->sum('goods_num'); if($status==2){ $dis['status'] = 2; $refund_num= $order_refund_goods_model->where($dis)->sum('goods_num'); }else{ $refund_num= $order_refund_goods_model->where($dis)->where('status','in',[1,2])->sum('goods_num'); } return $refund_num>=$goods_num?1:0; } /** * @author chenniang * @DataTime: 2021-03-18 15:38 * @功能说明:该天的退款 */ public function datePrice($date,$uniacid,$cap_id=0,$end_time='',$type=1){ $end_time = !empty($end_time)?$end_time:$date+86399; $dis = []; $dis[] = ['status','=',2]; $dis[] = ['create_time','between',"$date,$end_time"]; $dis[] = ['uniacid',"=",$uniacid]; if(!empty($cap_id)){ $dis[] = ['cap_id','=',$cap_id]; } if($type==1){ $price = $this->where($dis)->sum('refund_price'); return round($price,2); }else{ $count = $this->where($dis)->count(); return $count; } } /** * @author chenniang * @DataTime: 2021-03-26 13:33 * @功能说明:申请退款 */ public function applyRefund($order,$input){ $order_goods_model = new ShopOrderGoods(); $refund_price = 0; $integral = 0; Db::startTrans(); $list = $input['list']; foreach ($list as $k=>$value){ $order_goods = $order_goods_model->dataInfo(['id'=>$value['id']]); if(empty($order_goods)){ return ['code'=>500,'msg'=>'商品未找到']; } if($value['num']>$order_goods['can_refund_num']||$value['num']==0){ return ['code'=>500,'msg'=>'退款数量错误']; } //退款金额 $refund_price += $order_goods['singe_pay_price']*$value['num']; $list[$k]['goods_id'] = $order_goods['goods_id']; $list[$k]['goods_name'] = $order_goods['goods_name']; $list[$k]['goods_cover'] = $order_goods['goods_cover']; $list[$k]['spe_name'] = $order_goods['spe_name']; $list[$k]['spe_id'] = $order_goods['spe_id']; $list[$k]['goods_price'] = $order_goods['goods_price']; $list[$k]['kill_atv_id'] = $order_goods['kill_atv_id']; $res = $order_goods_model->where(['id'=>$value['id']])->update(['can_refund_num'=>$order_goods['can_refund_num']-$value['num']]); if($res!=1){ Db::rollback(); return ['code'=>500,'msg'=>'申请失败']; } } // if($refund_price<=0){ // // Db::rollback(); // // return ['code'=>500,'msg'=>'退款金额至少为0.01元']; // } $refund_price = round($refund_price,2); $refund_price = $refund_price<=$order['pay_price']?$refund_price:$order['pay_price']; $insert = [ 'uniacid' => $order['uniacid'], 'store_id' => $order['store_id'], 'user_id' => $order['user_id'], 'farmer_id' => $order['farmer_id'], 'order_code' => orderCode(), 'apply_price'=> $refund_price, 'order_id' => $order['id'], 'text' => $input['text'], 'imgs' => !empty($input['imgs'])?implode(',',$input['imgs']):'' ]; $res = $this->dataAdd($insert); if($res!=1){ Db::rollback(); return ['code'=>500,'msg'=>'申请失败']; } $refund_id = $this->getLastInsID(); $refund_goods_model = new ShopRefundGoods(); foreach ($list as $value){ $insert = [ 'uniacid' => $order['uniacid'], 'order_id' => $order['id'], 'refund_id' => $refund_id, 'order_goods_id' => $value['id'], 'goods_id' => $value['goods_id'], 'goods_name' => $value['goods_name'], 'goods_cover' => $value['goods_cover'], 'spe_name' => $value['spe_name'], 'spe_id' => $value['spe_id'], 'goods_num' => $value['num'], 'goods_price' => $value['goods_price'], 'kill_atv_id' => $value['kill_atv_id'], 'status' => 1 ]; $res = $refund_goods_model->dataAdd($insert); if($res!=1){ Db::rollback(); return ['code'=>500,'msg'=>'申请失败']; } } //查看货是否退完了 $refund_success = $this->checkRefundNum($order['id'],1); //退完并且未发货 就退运费 if($refund_success==1&&$order['pay_type']<3){ $refund_price += $order['freight']; $refund_price = $refund_price<=$order['pay_price']?$refund_price:$order['pay_price']; $this->dataUpdate(['id'=>$refund_id],['apply_price'=>$refund_price,'car_price'=>$order['freight']]); } Db::commit(); return $refund_id; } /** * @author chenniang * @DataTime: 2021-04-12 09:23 * @功能说明:获取订单已经退款的数量 */ public function refundNum($order_goods_id){ $dis = [ 'b.order_goods_id' => $order_goods_id, 'a.status' => 2 ]; $num = $this->alias('a') ->join('lbfarm_shop_refund_order_goods b','a.id = b.refund_id') ->where($dis) ->group('b.order_goods_id') ->sum('b.goods_num'); return $num; } /** * @author chenniang * @DataTime: 2021-04-12 09:23 * @功能说明:获取订单已经退款的数量 */ public function orderRefundIng($order_goods_id){ $dis = [ 'b.order_goods_id' => $order_goods_id, 'a.status' => 1 ]; $num = $this->alias('a') ->join('lbfarm_shop_refund_order_goods b','a.id = b.refund_id') ->where($dis) ->group('b.order_goods_id') ->find(); return !empty($num)?1:0; } /** * @author chenniang * @DataTime: 2021-04-12 12:04 * @功能说明:拒绝退款 */ public function noPassRefund($refund_id,$refund_user=0,$is_admin=0){ $dis = [ 'id' => $refund_id ]; $refund_order = $this->dataInfo($dis); if($refund_order['status']!=1){ return ['code'=>500,'msg'=>'退款状态错误']; } $update = [ 'status' => 3, 'refund_time' => time(), 'refund_user' => $refund_user, 'refund_user_admin' => $is_admin ]; Db::startTrans(); $res = $this->dataUpdate($dis,$update); if($res!=1){ Db::rollback(); return ['code'=>500,'msg'=>'退款失败,请重试1']; } //修改退款子订单的退款状态 $order_refund_goods = new ShopRefundGoods(); $res = $order_refund_goods->dataUpdate(['refund_id'=>$refund_id],['status'=>3]); if($res==0){ Db::rollback(); return ['code'=>500,'msg'=>'退款失败,请重试2']; } //查询通支付订单未退款对售后订单 $where[] = ['order_id','=',$refund_order['order_id']]; $where[] = ['status','=',1]; $where[] = ['car_price','>',0]; $find = $this->dataInfo($where); if(!empty($find)){ $apply_price = $find['apply_price'] - $find['car_price']; $apply_price = $apply_price>0?$apply_price:0; $update = [ 'apply_price' => $apply_price, 'car_price' => 0 ]; $this->dataUpdate(['id'=>$find['id']],$update); } Db::commit(); return true; } }