123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562 |
- <?php
- namespace app\api\controller;
- use app\admin\model\Address;
- use app\api\model\Express;
- use app\admin\model\general\Load;
- use app\admin\model\Word;
- use app\api\model\ShopUser;
- use app\api\model\StoreEvaluate;
- use app\api\model\StoreOrder;
- use app\api\model\StoreProduct;
- use app\common\controller\Api;
- use app\api\model\Member;
- class Order extends Api
- {
- //无需登录的接口
- protected $noNeedLogin = ['order_notify_url','express_list'];//都需要登录
- /**
- * 提交订单
- *
- * @ApiTitle (提交订单)
- * @ApiSummary (提交订单)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_add)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="store_id", type="int", required=true, description="商品id")//
- * @ApiParams (name="address_id", type="int", required=true, description="address_id 地址id")//address_id
- */
- public function order_add(){
- $store_id = $this->request->post('store_id');
- $user_id = $this->request->post('user_id');
- $address_id = $this->request->post('address_id');
- $freight_price=$this->request->post('freight_price');//运费
- $total_num=$this->request->post('total_num');//商品数量
- $total_price=$this->request->post('total_price');//商品总价
- $attribute_top_id=$this->request->post('attribute_top_id');//订单类型 14车辆15商品
- $mark=$this->request->post('mark');//备注
- if (empty($store_id)){
- $this->result('系统错误,刷新重试');
- }
- $where['id']=$store_id;
- $where['is_del']=array('eq',0);
- $where['is_show']=array('eq',1);
- $get_store=StoreProduct::where($where)->field('id,suser_id,store_name')->find();
- if (empty($get_store)){
- $this->result('此产品已经下架');
- }
- $get_address=Address::where('id',$address_id)->find();
- $insert['address_name']=$get_address['name'];//姓名
- $insert['address_phone']=$get_address['mobile'];//电话
- $insert['address_address']=$get_address['province']. ' '.$get_address['city'].' '.$get_address['city'].' '.$get_address['address'];//详细地址
- $insert['order_id']='YH'.date('YmdHis').$user_id.rand('1000','9999');
- $insert['mid']=$user_id;
- $insert['suser_id']=$get_store['suser_id'];//商户id
- $insert['store_product_id']=$store_id;
- $insert['cate_id']=$attribute_top_id;
- $insert['address_id']=$address_id;
- $insert['freight_price']=$freight_price;
- $insert['total_num']=$total_num;
- $insert['total_price']=$total_price;
- $insert['pay_price']=$freight_price+$total_price;
- $insert['mark']=$mark;//备注
- $insert['add_time']=time();//下单时间
- $insert['status']=0;//订单状态,待付款
- // dump($insert);exit;
- if(StoreOrder::insert($insert)){
- //添加数据
- $bid = StoreOrder::getLastInsID(); //成功后跳转界面
- $out_trade_no =$insert['order_id'];
- $body = $get_store['store_name'];
- $notify_url = 'http://test.yhcars.hdlkeji.com/api/order/order_notify_url';//======
- $total_fee = floatval($insert['pay_price']);
- $get_user=Member::where('mid',$user_id)->field('mid,openid')->find();
- $weixinpay = new WxPay();
- $return=$weixinpay->getPrePayOrder($body, $out_trade_no, $total_fee, $notify_url,$get_user['openid']);
- if (!empty($return['prepay_id'])){
- $arr['prepay_id']=$return['prepay_id'];
- $update_status=StoreOrder::where('order_id',$out_trade_no)->update(['prepay_id'=>$return['prepay_id']]);
- $this->result('下单成功',['prepay_id'=>$arr['prepay_id'],'order_id'=>$bid],1);
- }else{
- StoreOrder::where('order_id',$out_trade_no)->delete();
- $this->result('下单失败,请重新提交',$return);
- }
- }else{
- $this->result('下单失败,请重新提交');
- }
- }
- /**
- * 订单列表
- *
- * @ApiTitle (订单列表)
- * @ApiSummary (订单列表)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_list)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="status", type="int", required=true, description="all 全部")订单状态(-1 : 申请退款 -2 : 退货成功 0:待付款,1:待发货(已付款);2:待收货(已发货);3:已收货(确认收货,待评价);4:已评价;-1:已退款)
- */
- public function order_list(){
- $user_id = $this->request->post('user_id');
- $status = $this->request->post('status');
- if (empty($status)){
- $status='0';
- }
- if ($status=='all'){//待付款
- }else{
- if ($status=='-1'){
- $where['status']=['in',['-1','-2','-3','-4','-5']];
- }else{
- $where['status']=$status;
- }
- }
- $where['mid']=$user_id;
- $where['is_del']=0;
- $where['is_system_del']=0;
- $get_order=StoreOrder::where($where)
- ->with(['shopuser','product'])
- ->order('id','desc')
- ->field('id,order_id,total_price,total_num,freight_price,mid,suser_id,store_product_id,prepay_id,status,cate_id')
- ->select();
- $this->result('success',$get_order,1);
- }
- /**
- * 订单详情
- *
- * @ApiTitle (订单详情)
- * @ApiSummary (订单详情)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_info)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id"
- */
- public function order_info(){
- $user_id = $this->request->post('user_id');
- $id = $this->request->post('order_id');
- $where['mid']=$user_id;
- $where['id']=$id;
- $where['is_del']=0;
- $where['is_system_del']=0;
- $get_order=StoreOrder::where($where)
- ->with(['shopuser','product','express','refundexpress'])
- //->field('id,order_id,total_price,total_num,freight_price,mid,suser_id,store_product_id,prepay_id,type')
- ->find();
- if (empty($get_order)){
- $this->result('此订单已删除');
- }
- $this->result('success',$get_order,1);
- }
- /**
- * 订单申请退款
- *
- * @ApiTitle (订单申请退款)
- * @ApiSummary (订单申请退款)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_refund)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
- * @ApiParams (name="refund_type", type="int", required=true, description=" 0退货退款 1仅退款")
- * @ApiParams (name="refund_reason_wap_img", type="int", required=true, description=",拼接的退款图片")
- */
- public function order_refund(){
- $user_id = $this->request->post('user_id');
- $id = $this->request->post('order_id');
- $refund_type=$this->request->post('refund_type');//退款类型
- $refund_reason_wap_img=$this->request->post('refund_reason_wap_img');// 退款图片
- $refund_reason_wap_explain=$this->request->post('refund_reason_wap_explain');//refund_reason_wap_explain 退款说明
- $refund_reason_wap=$this->request->post('refund_reason_wap');//退款原因
- $refund_price=$this->request->post('refund_price');//退款金额
- if (empty($refund_type)){
- $refund_type=0;
- }
- $where['mid']=$user_id;
- $where['id']=$id;
- $where['is_del']=0;
- $where['is_system_del']=0;
- $where['cate_id']=15;
- //订单状态(-1 : 申请退款 -2 : 退货成功,-3退款失败 0:待付款,1:待发货(已付款);2:待收货(已发货);3:已收货(确认收货);4:已评价;)
- $where['status']=['in',['1','2','-3']];
- $get_order=StoreOrder::where($where)
- ->field('id,total_price')
- ->find();
- if (empty($get_order)){
- $this->result('此订单不能进行退款操作');
- }
- if ($refund_price>$get_order['total_price']){
- $this->result('退款金额超出订单总额');
- }
- $update['status']='-1';
- $update['refund_status']='1';
- $update['refund_type']=$refund_type;
- $update['refund_reason_wap_img']=$refund_reason_wap_img;
- $update['refund_reason_wap_explain']=$refund_reason_wap_explain;
- $update['refund_reason_time']=time();
- $update['refund_reason_wap']=$refund_reason_wap;
- $update['refund_price']=$refund_price;
- $update_status=StoreOrder::where('id',$id)->update($update);
- $this->result('success',$get_order,1);
- }
- /**
- * 取消退款
- * @ApiTitle (取消退款)
- * @ApiSummary (取消退款)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/refund_cancel)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
- */
- public function refund_cancel(){
- $user_id = $this->request->post('user_id');
- $id = $this->request->post('order_id');
- $where['mid']=$user_id;
- $where['id']=$id;
- $where['is_del']=0;
- $where['is_system_del']=0;
- $where['status']=['in',['-1','-2','-3']];
- $get_order=StoreOrder::where($where)
- ->field('id,status,delivery_id')
- ->find();
- if (empty($get_order)){
- $this->result('此退款不能取消');
- }
- if (!empty($get_order['delivery_id'])){
- $status='2';
- }else{
- $status='1';
- }
- $update_status=StoreOrder::where('id',$id)->update(['status'=>$status,'refund_status'=>'0']);
- $this->result('success',$get_order,1);
- }
- /**
- * 快递公司
- *
- * @ApiTitle (快递公司)
- * @ApiSummary (快递公司)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/express_list)
- */
- public function express_list(){
- $get_express=Express::where('is_show',1)->select();
- $this->result('success',$get_express,1);
- }
- /**
- * 退货填写快递
- *
- * @ApiTitle (退货填写快递)
- * @ApiSummary (退货填写快递)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/add_express)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
- */
- public function add_express(){
- $user_id = $this->request->post('user_id');
- $id = $this->request->post('order_id');
- $refund_delivery_name=$this->request->post('refund_delivery_name');
- $refund_delivery_id=$this->request->post('refund_delivery_id');
- $where['mid']=$user_id;
- $where['id']=$id;
- $where['is_del']=0;
- $where['is_system_del']=0;
- $where['cate_id']=15;
- //订单状态(-1 : 申请退款 -2 : 退货成功,-3退款失败 0:待付款,1:待发货(已付款);2:待收货(已发货);3:已收货(确认收货);4:已评价;)
- $where['status']=['in',['-2','-4']];
- $get_order=StoreOrder::where($where)
- ->field('id,total_price')
- ->find();
- if (empty($get_order)){
- $this->result('此订单不能填写退款物流');
- }
- $update_status=StoreOrder::where('id',$id)->update(['status'=>'-4','refund_status'=>4,'refund_delivery_name'=>$refund_delivery_name,'refund_delivery_id'=>$refund_delivery_id]);
- $this->result('success',$update_status,1);
- }
- /**
- * 订单删除
- * @ApiTitle (订单删除)
- * @ApiSummary (订单删除)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_del)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
- */
- public function order_del(){
- $user_id = $this->request->post('user_id');
- $id = $this->request->post('order_id');
- $where['mid']=$user_id;
- $where['id']=$id;
- $where['is_del']=0;
- $where['is_system_del']=0;
- $where['status']=['in',['-2','0','3','4','9']];
- $get_order=StoreOrder::where($where)
- ->field('id')
- ->find();
- if (empty($get_order)){
- $this->result('此订单不能进行删除操作');
- }
- $update_status=StoreOrder::where('id',$id)->update(['is_del'=>1]);
- $this->result('success',$get_order,1);
- }
- /**
- * 订单取消
- * @ApiTitle (订单取消)
- * @ApiSummary (订单取消)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_cancel)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
- */
- public function order_cancel(){
- $user_id = $this->request->post('user_id');
- $id = $this->request->post('order_id');
- $where['mid']=$user_id;
- $where['id']=$id;
- $where['is_del']=0;
- $where['is_system_del']=0;
- $where['status']=['in',['0']];
- $get_order=StoreOrder::where($where)
- ->field('id')
- ->find();
- if (empty($get_order)){
- $this->result('此订单不能取消');
- }
- $update_status=StoreOrder::where('id',$id)->update(['status'=>9]);
- $this->result('success',$get_order,1);
- }
- /**
- * 订单确认收货
- * @ApiTitle (订单确认收货)
- * @ApiSummary (订单确认收货)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_take)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="order_id", type="int", required=true, description="订单编号 id")
- */
- public function order_take(){
- $user_id = $this->request->post('user_id');
- $id = $this->request->post('order_id');
- $where['mid']=$user_id;
- $where['id']=$id;
- $where['is_del']=0;
- $where['is_system_del']=0;
- $where['status']=['in',['2']];
- $get_order=StoreOrder::where($where)
- ->field('id,suser_id,pay_price')
- ->select();
- if (empty($get_order)){
- $this->result('此订单不能收货');
- }
- ShopUser::where('id',$get_order['suser_id'])->setInc('order_num');
- ShopUser::where('id',$get_order['suser_id'])->setInc('order_price',$get_order['pay_price']);
- ShopUser::where('id',$get_order['suser_id'])->setInc('balance',$get_order['pay_price']);
- $update_status=StoreOrder::where('id',$id)->update(['status'=>3]);
- $this->result('success',$get_order,1);
- }
- /**
- * 订单评论
- *
- * @ApiTitle (订单评论)
- * @ApiSummary (订单评论)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_evaluate)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="suser_id", type="int", required=true, description="商家id")
- * @ApiParams (name="store_id", type="int", required=true, description="商品id")
- */
- public function order_evaluate(){
- $post=$this->request->post();
- $insert['mid']=$post['user_id'];
- $insert['order_id']=$post['order_id'];
- $get_order=StoreOrder::where('id',$post['order_id'])->where('status',3)->field('id,suser_id,store_product_id')->find();
- if (empty($get_order)){
- $this->result('该订单暂时不能评价');
- }
- $insert['content']=$post['content'];
- $insert['images']=$post['images'];
- $insert['xj']=$post['xj'];
- if (!empty($insert['content'])){
- $word_model=new Word();
- $list=$word_model->get_worde();
- $say_record= $this->sensitive($list,$insert['content']);
- if (strpos($say_record,'**') !== false){
- $this->result('您的发布包含敏感词,请重新整理');
- }
- }
- $insert['suser_id']=$get_order['suser_id'];
- $insert['store_id']=$get_order['store_product_id'];
- $insert['updatetime']=$insert['createtime']=time();
- if(StoreEvaluate::insert($insert)){ //添加数据
- $bid = StoreEvaluate::getLastInsID(); //成功后跳转界面
- $update_status=StoreOrder::where('id',$post['order_id'])->update(['status'=>4]);
- $this->result('SUCCESS', $bid, 1);
- }else{
- $this->result('评价失败,稍后重试');
- }
- }
- /**
- * 车贷
- *
- * @ApiTitle (车贷)
- * @ApiSummary (车贷)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_loan_time)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- */
- public function order_loan_time(){
- $loan=Load::find();
- $loan['time']=[];
- $array['6个月']='6';
- $array['1年']='12';
- $array['2年']='24';
- $array['3年']='36';
- $array['4年']='48';
- $array['5年']='60';
- $array['6年']='72';
- $array['8年']='96';
- $array['10年']='120';
- $loan['time']=$array;
- $this->result('success',$loan,1);
- }
- /**
- * 退款原因
- *
- * @ApiTitle (退款原因)
- * @ApiSummary (退款原因)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/return_reason)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- */
- public function return_reason(){
- $array=['多拍','不想要','未发货','地址错了','其他'];
- $this->result('success',$array,1);
- }
- /**
- * 车贷计算
- *
- * @ApiTitle (车贷计算)
- * @ApiSummary (车贷计算)
- * @ApiMethod (POST)
- * @ApiHeaders (name="user-token", type="string", required=true, description="请求的Token")
- * @ApiRoute (/api/order/order_loan)
- * @ApiParams (name="user_id", type="int", required=true, description="用户user_id")
- * @ApiParams (name="time", type="int", required=true, description="时间 月数"
- * @ApiParams (name="money", type="int", required=true, description="时间"
- */
- public function order_loan(){
- $user_id = $this->request->post('user_id');
- $time = $this->request->post('time');
- $money = $this->request->post('money');
- if (empty($time)){
- $type=12;
- }
- $dkm = $time; //贷款月数,20年就是240个月
- $dkTotal = $money; //贷款总额
- // 车价乘以0.3是首付 剩下的金额乘以1.1796除以36 是每个月月供
- $loan=Load::find();
- $array['shoufu']=$money*$loan['down_payments'];
- $array['yuegong']=(($money-$array['shoufu'])*$loan['interest_rate'])/$time;
- $this->result('success',$array,1);
- }
- // 回调顶顶顶顶
- public function order_notify_url()
- {
- $testxml = file_get_contents("php://input");
- $jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
- $result = json_decode($jsonxml, true);//转成数组,
- if ($result) {
- //如果成功返回了
- $out_trade_no = $result['out_trade_no'];
- if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
- $get_order=StoreOrder::where(['order_id'=>$out_trade_no])->field('cate_id,store_product_id,id,order_id')->find();
- try {
- if ($get_order['cate_id']==14){
- $status=3;//车辆的订单直接完成
- }else{
- $status=1;
- }
- StoreOrder::where('order_id',$out_trade_no)->update(['status'=>$status,'pay_time'=>time()]);
- StoreProduct::where(['id'=>$get_order['store_product_id']])->setInc('sales'); // 原数值加一
- StoreProduct::where(['id'=>$get_order['store_product_id']])->setDec('stock'); // 原数值减一\
- StoreOrder::commit();
- StoreProduct::commit();
- echo '<xml>
- <return_code><![CDATA[SUCCESS]]></return_code>
- <return_msg><![CDATA[OK]]></return_msg>
- </xml>';
- exit();
- } catch (\Exception $e) {
- dump($e->getMessage());
- // 回滚事务
- StoreOrder::rollback();
- StoreProduct::rollback();
- }
- }
- }else{
- echo 'error';
- }
- }
- }
|