<?php


namespace app\admin\controller;

use app\admin\model\ProcessOrder;
use think\facade\Db;
use think\App;
use app\admin\model\ActionLog;

//销售单退货
class Reorder extends \app\BaseController
{
    public $post=[];
    public function __construct(App $app)
    {
        parent::__construct($app);
        $this->post =$this->request->post();
    }

    public function create(){
        $ordeCode = isset($this->post['orderCode']) &&$this->post['orderCode']!=''?trim($this->post['orderCode']) :"";
        if($ordeCode==''){
            return error_show(1004,"参数orderCode 不能为空");
        }
        $order= Db::name("sale")->where(["orderCode"=>$ordeCode,"is_del"=>0])->find();

        if(empty($order)){
            return error_show(1005,"未找到订单数据");
        }
        $errorCode = isset($this->post['errorCode']) &&$this->post['errorCode']!=''?trim($this->post['errorCode']) :"";
        if($errorCode==''){
            return error_show(1004,"参数errorCode 不能为空");
        }
        $error =Db::name('result_info')->where(["result_code"=>$errorCode,"is_del"=>0])->find();
        if(empty($error)){
            return error_show(1005,"未找到退货原因数据");
        }
        $remark =isset($this->post['remark']) &&$this->post['remark']!=''?trim($this->post['remark']) :"";
        $thnum =isset($this->post['thnum']) &&$this->post['thnum']!=''?intval($this->post['thnum']) :"";
        $token = isset($this->post['token'])&&$this->post['token']!='' ? trim($this->post['token']):"";
        if($token==''){
            return error_show(105,"参数token不能为空");
        }
        $user =GetUserInfo($token);
        if(empty($user)||$user['code']!=0){
            return error_show(1002,"申请人数据不存在");
        }
        $is_addr=0;
        $rm= isset($user["data"]['id']) ?  $user["data"]['id'] : "";
        $ri= isset($user["data"]['nickname']) ?  $user["data"]['nickname'] : "";
        $returnadr =isset($this->post['returnAddr'])&& !empty($this->post['returnAddr']) ?
                $this->post['returnAddr']:"";
        if($returnadr!=''){
            $thnum=array_sum(array_column($returnadr,"return_num"));
            $is_addr=1;
        }
        $returnCode=makeNo("RS");
        Db::startTrans();
        try{
            $in = [
                "returnCode"=>$returnCode,
                "orderCode"=>$ordeCode,
                "good_code"=>$order['good_code'],
                "good_name"=>$order['good_name'],
                "apply_id"=>$rm,
                "apply_name"=>$ri,
                "error_code"=>$errorCode,
                "num"=>$thnum,
                "remark"=>$remark,
                "order_type"=>$order['order_type'],
                "is_addr"=>$is_addr,
                "status"=>0,
                "is_del"=>0,
                "addtime"=>date("Y-m-d H:i:s"),
                "updatetime"=>date("Y-m-d H:i:s")
            ];
            $create = Db::name("sale_return")->insert($in,true);
            if($create>0){
                $stn = ["order_code"=>$returnCode,"status"=>0,"action_remark"=>'',"action_type"=>"create"];
                ActionLog::logAdd($this->post['token'],$stn,"QRTHD",0,$stn);
                $process=["order_code"=>$returnCode,"order_id"=>$create,"order_status"=>0,"order_type"=>'QRTHD'];
                ProcessOrder::AddProcess($this->post['token'],$process);
                if($returnadr!=""){
                    $inf=[];
                    foreach ($returnadr as $val){
                        $temp=[];
                        $addrinfo =Db::name("order_addr")->where(['id'=>$val['id'],"orderCode"=>$ordeCode])->find();
                        if($addrinfo==false){
                            Db::rollback();
                            return error_show(1005,"地址信息未找到");
                        }
                        $send =Db::name('order_out')->where([["addrid","=",$val['id']],["status",">=",2]])->find();
                        if($send!=false && $send['send_num']<$val['return_num']){
                            Db::rollback();
                            return error_show(1005,"地址已发货");
                        }
                        $temp['returnCode']=$returnCode;
                        $temp['orderCode']=$ordeCode;
                        $temp['outCode']=$send['outCode'];
                        $temp['addrid']=$val['id'];
                        $temp['send_num']=$addrinfo['receipt_quantity'];
                        $temp['return_num']=$val['return_num'];
                        $temp['is_del']=0;
                        $temp['addtime']=date("Y-m-d H:i:s");
                        $temp['updatetime']=date("Y-m-d H:i:s");
                        $inf[]=$temp;
                    }
                    $inadd=Db::name("sale_returnaddr")->insertAll($inf);
                    if($inadd==0){
                        Db::rollback();
                        return error_show(1005,"退货单新建失败");
                    }
                }


                Db::commit();
                return app_show(0,"退货单新建成功",["returnCode"=>$returnCode]);

            }
            Db::rollback();
            return error_show(1005,"退货单新建失败");
        }catch (\Exception $e){
            Db::rollback();
            return error_show(1005,$e->getMessage());
        }
    }

    public function list(){
        $page = isset($this->post['page']) && $this->post['page'] !=="" ? intval($this->post['page']):"1";
        $size = isset($this->post['size']) && $this->post['size'] !=="" ? intval($this->post['size']):"10";
        $where =[['is_del',"=",0]];
        $bkcode = isset($this->post['returnCode']) && $this->post['returnCode']!="" ? trim($this->post['returnCode']):"";
        if($bkcode!=""){
            $where[]=['returnCode',"like", "%{$bkcode}%"];
        }
        $status = isset($this->post['status']) && $this->post['status']!=="" ? intval($this->post['status']):"";
        if($status!==""){
            $where[]=['status',"=", $status];
        }
        $orderCode = isset($this->post['orderCode']) && $this->post['orderCode']!="" ? trim($this->post['orderCode'])
            :"";
        if($orderCode!=""){
            $where[]=['orderCode',"like", "%{$orderCode}%"];
        }
        $apply_name = isset($this->post['apply_name']) && $this->post['apply_name']!="" ? trim($this->post['apply_name'])
            :"";
        if($apply_name!=""){
            $where[]=['apply_name',"like", "%{$apply_name}%"];
        }
        $start =isset($this->post['start'])&&$this->post['start']!='' ? $this->post['start']:"";
        if($start!==""){
            $where[]=['addtime',">=", $start];
        }
        $end =isset($this->post['end'])&&$this->post['end']!='' ? $this->post['end']:"";
        if($end!==""){
            $where[]=['addtime',"<=", $end];
        }
        $count=Db::name("sale_return")->where($where)->count();
        $total = ceil($count/$size);
        $page = $total>=$page ? $page :$total;
        $list = Db::name("sale_return")->where($where)->order("addtime desc")->page($page,$size)->select();
       // echo Db::name("sale_return")->getLastSql();
        $data=[];
        foreach ($list as $value){
            $value['error_msg']='';
            if($value['error_code']!=''){
                $error = Db::name("result_info")->where(["result_code"=>$value['error_code']])->find();
                $value['error_msg']= isset($error['result'])?$error['result']:"";
            }
            $order =Db::name("sale")->where(["orderCode"=>$value['orderCode'],"is_del"=>0])->find();
            $value['sale_price'] = isset($order['sale_price']) ?$order['sale_price']:0;
            $value['return_total'] =$value['sale_price']*$value['num'] ;
            $value['total_num'] =$order['good_num'] ;
            $data[]=$value ;
        }
        return app_show(0,"获取成功",['list'=>$data,"count"=>$count]);
    }

    public function info(){
        $code =  isset($this->post['returnCode']) && $this->post['returnCode'] !=="" ? trim($this->post['returnCode'])
            :"";
        if($code==""){
            return error_show(1004,"参数returnCode不能为空");
        }
        $info = Db::name("sale_return")->where(["returnCode"=>$code,"is_del"=>0])->find();
       if(empty($info)){
           return error_show(1004,"未找到退货数据");
       }
       $orderinfo = Db::name("sale")->where(["orderCode"=>$info["orderCode"]])->find();
        if($orderinfo['order_type']==3|| $orderinfo['order_type']==4){
            $goon = Db::name("good_zixun")->where(["spuCode"=>$orderinfo['good_code'],"is_del"=>0])->find();

        }else {
            $goon = Db::name('good_platform')->alias('a')->join('good b', 'b.spuCode=a.spuCode', 'left')
                ->where(['a.skuCode' => $orderinfo['skuCode']])->find();
        }
        if ($goon==false) {
            return error_show(1003, "未找到商品数据");
        }
        $int = isset($goon['cat_id']) && $goon['cat_id'] != 0 ? made($goon['cat_id']) : [];
        $info['is_stock']=isset($goon['is_stock'])?$goon['is_stock']:'0';
       $info['good_code'] = isset($orderinfo['good_code'])?$orderinfo['good_code']:'';
       $info['skuCode'] = isset($orderinfo['skuCode'])?$orderinfo['skuCode']:'';
       $info['good_name'] = isset($orderinfo['good_name'])?$orderinfo['good_name']:'';
       $info['good_num'] = isset($orderinfo['good_num'])?$orderinfo['good_num']:'';
       $info['sale_price'] = isset($orderinfo['sale_price'])?$orderinfo['sale_price']:'0';
       $info['origin_price'] = isset($orderinfo['origin_price'])?$orderinfo['origin_price']:'0';
       $info['return_total'] = $info['sale_price']*$info['num'] ;
       $info['send_num'] = isset($orderinfo['send_num'])?$orderinfo['send_num']:'0';
       $info['wsend_num'] = isset($orderinfo['wsend_num'])?$orderinfo['wsend_num']:'0';
       $info['send_status'] = isset($orderinfo['send_status'])?$orderinfo['send_status']:'';
       $info['total_price'] = isset($orderinfo['total_price'])?$orderinfo['total_price']:'0';
       $info['post_fee'] = isset($orderinfo['post_fee'])?$orderinfo['post_fee']:'0';
       $info['customer_code'] = isset($orderinfo['customer_code'])?$orderinfo['customer_code']:'';
       $info['customer_name']='';
        if(isset($orderinfo['customer_code'])&&$orderinfo['customer_code']!=''){
            $customerinfo = Db::name("customer_info")->where(['companyNo'=>$orderinfo['customer_code']])->find();
            $info['customer_name'] = isset($customerinfo['companyName']) ? $customerinfo['companyName']:"";
        }
        $info['supplierNo'] = isset($orderinfo['supplierNo'])?$orderinfo['supplierNo']:'';
        $info['supplier_name']='';
        if(isset($orderinfo['supplierNo'])&&$orderinfo['supplierNo']!=''){
            $customerinfo = Db::name("business")->where(['companyNo'=>$orderinfo['supplierNo']])->find();
            $info['supplier_name'] = isset($customerinfo['company']) ? $customerinfo['company']:"";
        }
        $info['platform_name']='';
        $info['platform_id']=$orderinfo['platform_id'];
        if($orderinfo['platform_id']!=0){
            $plat=Db::name("platform")->where(['id'=>$orderinfo['platform_id']])->find();
            $info['platform_name']=isset($plat['platform_name'])?$plat['platform_name']:"";
        }
        $info['cgd_wsend']="";
        $info['cgd_send']="";
        $info['cgd_total']="";
        if($orderinfo['order_type']==2){
            $cgd = Db::name("purchease_order")->where(["bkcode"=>$info["orderCode"],"order_type"=>2])->find();
            $info['cgd_wsend'] = isset($cgd['wsend_num']) ? $cgd['wsend_num']:0;
            $info['cgd_send'] = isset($cgd['send_num']) ? $cgd['send_num']:0;
            $info['cgd_total'] = isset($cgd['good_num']) ? $cgd['good_num']:0;
        }
        $info['error_msg']='';
        if($info['error_code']!=''){
            $error = Db::name("result_info")->where(["result_code"=>$info['error_code']])->find();
            $info['error_msg']= isset($error['result'])?$error['result']:"";
        }

        if($info['return_wsm']!=""){
            $wsmcode = Db::name("warehouse_info")->alias("a")->leftJoin("supplier b","a.supplierNo=b.code")
                ->where(["a.wsm_code"=>$info['return_wsm']])->field("a.name as wsm_name,b.name,b.code")->find();
        }
        $info['wsm_name'] =isset($wsmcode['wsm_name']) ? $wsmcode['wsm_name']:"";
//        $info['wsm_supplier'] =isset($wsmcode['name']) ? $wsmcode['name']:"";
//        $info['wsm_supplierNo'] =isset($wsmcode['code']) ? $wsmcode['code']:"";

        $wsm_return = Db::name("sale_returninfo")->where(["returnCode"=>$info["returnCode"],"is_del"=>0])->select()->toArray();
        $wsm=[];
        if(!empty($wsm_return)){

            foreach ($wsm_return as $value){
                $value['wsm_name']="";
                $value['wsm_supplier']="";
                $value['wsm_supplierNo']="";
                if($value['wsm_code']!=""){
                    $wsmcode = Db::name("warehouse_info")->alias("a")->leftJoin("supplier b","a.supplierNo=b.code")
                        ->where(["a.wsm_code"=>$value['wsm_code']])->field("a.name as wsm_name,b.name,b.code")->find();
                    $value['wsm_name'] =isset($wsmcode['wsm_name']) ? $wsmcode['wsm_name']:"";
                    $value['wsm_supplier'] =isset($wsmcode['name']) ? $wsmcode['name']:"";
                    $value['wsm_supplierNo'] =isset($wsmcode['code']) ? $wsmcode['code']:"";
                }
                $orderwsm = Db::name("sale_info")->where(["orderCode"=>$info["orderCode"],"wsm_code"=>$value["wsm_code"]])->find();
                $value["wsm_total"] = isset($orderwsm["num"]) ? $orderwsm["num"]:0;
                $send = Db::name("order_out")->where(["wsm_code" => $value['wsm_code'], 'orderCode' => $info['orderCode']])->sum("send_num");
                $value['wsm_send'] = $send ?? 0;
                $value['wsm_wsend'] = $value['wsm_total'] - $value['wsm_send'];
                $wsm[]=$value;
            }
        }
        $info['wsminfo']=$wsm;
        $addr =Db::name("sale_returnaddr")->where(["returnCode"=>$info["returnCode"],"is_del"=>0])->select()->toArray();
        $addrinfo=[];
        if(!empty($addr)){
            foreach ( $addr as $value){
                $addrlist = Db::name("order_addr")->where(["id"=>$value["addrid"]])->find();
                $value['addr']=isset($addrlist['addr'])?$addrlist['addr']:"";
                $value['addr_code']=isset($addrlist['addr_code'])?$addrlist['addr_code']:"";
                $value['contactor']=isset($addrlist['contactor'])?$addrlist['contactor']:"";
                $value['mobile']=isset($addrlist['mobile'])?$addrlist['mobile']:"";
                $value['post_fee']=isset($addrlist['post_fee'])?$addrlist['post_fee']:"";
                $value['addive_time']=isset($addrlist['addive_time'])?$addrlist['addive_time']:"";
                $value['customer_code']=isset($addrlist['customer_code']) ?$addrlist['customer_code']:"" ;
                $value['receipt_quantity']=isset($addrlist['receipt_quantity']) ?$addrlist['receipt_quantity']:"" ;
                $send = Db::name("order_out")->where(['addrid' => $addrlist['id'], 'orderCode' => $addrlist['orderCode']])->sum("send_num");
                $value['addr_send'] = $send ?? 0;
                $value['addr_wsend'] = $value['receipt_quantity'] - $value['addr_send'];
                $customer = Db::name("customer_info")->where(['companyNo'=>$addrlist['customer_code']])->find();
                $value['customer_name'] = isset($customer['companyName']) ? $customer['companyName']:"";
                $addrinfo[]=$value;
            }

        }
        $info['addrinfo']=$addrinfo;
        $info['can']=$int;
        return app_show(0,"获取成功",$info);
    }

    /**
     * @return \think\response\Json|void
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function delete(){
        $code =  isset($this->post['returnCode']) && $this->post['returnCode'] !=="" ? trim($this->post['returnCode'])
            :"";
        if($code==""){
            return error_show(1004,"参数returnCode不能为空");
        }
        $info = Db::name("sale_return")->where(["returnCode"=>$code,"is_del"=>0])->find();
        if(empty($info)){
            return error_show(1004,"未找到退货数据");
        }
        $info["is_del"]=1;
        $info["updatetime"]=date("Y-m-d H:i:s");
        $del = Db::name("sale_return")->save($info);
        if($del){
            $ste = ["order_code"=>$code,"status"=>0,"action_remark"=>'',"action_type"=>"delete"];
            ActionLog::logAdd($this->post['token'],$ste,$info['order_type'] == 2?"ZXTHD":"QRTHD",0,$ste);
            $process=["order_code"=>$code,"order_id"=>$info['id'],"order_status"=>0,"order_type"=>$info['order_type'] == 2?"ZXTHD":"QRTHD"];
            ProcessOrder::workdel($process);
            return app_show(0,"删除成功");
        }else{
            return error_show(1004,"删除失败");
        }
    }

    /**审核
     * @return \think\response\Json|void
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function exam(){
        $code =  isset($this->post['returnCode']) && $this->post['returnCode'] !=="" ? trim($this->post['returnCode'])
            :"";
        if($code==""){
            return error_show(1004,"参数returnCode不能为空");
        }
        $info = Db::name("sale_return")->where(["returnCode"=>$code,"is_del"=>0])->find();
        if(empty($info)){
            return error_show(1004,"未找到退货数据");
        }
        $status =  isset($this->post['status']) && $this->post['status'] !=="" ? intval($this->post['status'])
            :"";
        if($status===""){
            return error_show(1004,"参数status不能为空");
        }
        $remark =  isset($this->post['remark']) && $this->post['remark'] !="" ? trim($this->post['remark']) :"";

       $var = $info['status'];

       $token = isset($this->post['token']) && $this->post['token'] !=="" ?trim($this->post['token']):"";
        $apply_id =GetUserInfo($token);
        if(empty($apply_id)||$apply_id['code']!=0){
            return error_show(1002,"申请人数据不存在");
        }
        $rid= isset($apply_id["data"]['id']) ?  $apply_id["data"]['id'] : "";
        $rname= isset($apply_id["data"]['nickname']) ?  $apply_id["data"]['nickname'] : "";

        $orderinfo = Db::name("sale")->where(["orderCode"=>$info["orderCode"]])->find();
        if($orderinfo==false){
            return error_show(1004,"未找到订单数据");
        }
        if($status==4){
            $cgd=Db::name("order_num")->where(['orderCode'=>$info["orderCode"],"is_del"=>0])->find();
            if(empty($cgd)){
                return error_show(1004,"未找到商品库存数据");
            }
            $wsm =Db::name("purchease_order")->where(["cgdNo"=>$cgd['cgdNo'],"is_del"=>0])->find();
            if(empty($wsm)){
                return error_show(1004,"未找到商品仓库库存数据");
            }
            $good_stock = Db::name("good_stock")->where(["spuCode"=>$orderinfo['good_code'],"wsm_code"=>$wsm,"is_del"=>0])
                ->select()->toArray();
            if(empty($good_stock)){
                return error_show(1004,"未找到商品库存数据");
            }
            if($orderinfo['is_stock']==1){
                $bk =Db::name("purchease_order")->where(["bkcode"=>$cgd['bkcode'],"order_type"=>5,"is_del"=>0])
                    ->find();
                if($bk==false){
                    return error_show(1004,"未找到备库库存数据");
                }
                $bkorder=Db::name("order_bk")->where(["cgdNo"=>$bk['cgdNo']])->find();
                if($bk==false){
                    return error_show(1004,"未找到备库库存数据");
                }
            }
            if($info['is_addr']==1){
                $addr=Db::name("sale_returnaddr")->where(['returnCode'=>$info['returnCode'],"is_del"=>0])->select()
                    ->toArray();
                if(empty($addr)){
                    return error_show(1004,"未找到发货单地址数据");
                }

            }

        }

        if($status==3){
            $is_th =isset($this->post['is_th'])&&$this->post['is_th']!=="" ? intval($this->post['is_th']):"";
            if($is_th===""){
                return error_show(1004,"参数is_th不能为空");
            }

            $return_wsm =isset($this->post['return_wsm'])&&$this->post['return_wsm']!=="" ? trim($this->post['return_wsm']):"";
            if($return_wsm===""){
                return error_show(1004,"参数return_wsm 不能为空");
            }
            $wsmcode = Db::name("warehouse_info")->where(['wsm_code'=>$return_wsm])->find();
            if($wsmcode==false){
                return error_show(1004,"为找到仓库数据");
            }
            $info['return_wsm'] =$return_wsm ;
            $info['is_th'] =$is_th ;
        }

        Db::startTrans();
        try{
            $temp= $info['status'];
            $info['status'] =$status;
            $remark!=""? $info['remark'] =$remark:"";
            $info["updatetime"]=date("Y-m-d H:i:s");
            $up = Db::name("sale_return")->save($info);
            if($up){
                $process=["order_code"=>$code,"order_id"=>$info['id'],"order_status"=>$status,"order_type"=>$info['order_type'] == 2?"ZXTHD":"QRTHD"];
                ProcessOrder::AddProcess($this->post['token'],$process);
                $ste = ["order_code"=>$code,"status"=>$temp,"action_remark"=>'',"action_type"=>"status"];
                ActionLog::logAdd($this->post['token'],$ste,$info['order_type'] == 2?"ZXTHD":"QRTHD",$status,$info);
                if($status==4){
                    if($info['is_addr']==0){
                        $orderinfo['wsend_num']-=$info['num'];
                    }

                    $orderinfo['th_num']+=$info['num'];
                    $orderinfo['th_fee']+=round($info['num']*$orderinfo['sale_price'],2);
                    $orderinfo['send_status'] = $orderinfo['send_num'] == 0 ? 1 : $orderinfo['wsend_num'] == 0 ? 3 : 2;
                    $old_status = $orderinfo['status'];
                    $orderinfo['status'] = $orderinfo['send_num'] == 0 ?0 : $orderinfo['wsend_num'] == 0 ? 2 : 1;
                    $orderinfo['updatetime']=date("Y-m-d H:i:s");
                    $return = Db::name("sale")->save($orderinfo);
                    if($return==false){
                        Db::rollback();
                        return error_show(1004,"更新失败");
                    }else{
                        //修改状态,添加待办
                        ActionLog::logAdd($this->post['token'], [
                            "order_code" => $orderinfo['orderCode'],//销售单code
                            "status" => $old_status,//这里的status是之前的值
                            "action_remark" => '',//备注
                            "action_type" => "status"//新建create,编辑edit,更改状态status
                        ], "XSQRD", $orderinfo['status'], $orderinfo);

                        ProcessOrder::AddProcess($this->post['token'], [
                            "order_type" => 'XSQRD',
                            "order_code" => $orderinfo['orderCode'],//销售单code
                            "order_id" => $orderinfo['id'],
                            "order_status" => $orderinfo['status']
                        ]);
                    }
                    if($info['is_th']==1 && $orderinfo['is_stock']==0){

                    }

                    foreach ($good_stock as $value){
                        if($value['wait_out_stock']>=$info['num']){
                            $value['usable_stock']+=$info['num'];
                            $value['wait_out_stock']-=$info['num'];
                            $value['updatetime']=date("Y-m-d H:i:s");
                            $info["num"]=0;
                        }else{
                            $value['usable_stock']+=$value['wait_out_stock'];
                            $value['wait_out_stock']=0;
                            $value['updatetime']=date("Y-m-d H:i:s");
                            $info["num"]-=$value['wait_out_stock'];
                        }

                        $stock = Db::name("good_stock")->save($value);
                        if($stock==false){
                            Db::rollback();
                            return error_show(1004,"更新失败");
                        }
                        if($info['num']==0){
                            break;
                        }
                    }

                }
                Db::commit();
                return app_show(0,"更新成功");
            }
                Db::rollback();
                return error_show(1004,"更新失败");
        }catch (\Exception $e){
            Db::rollback();
            return error_show(1004,"更新失败");
        }

    }

    public function zxcreate(){
        $ordeCode = isset($this->post['orderCode']) &&$this->post['orderCode']!=''?trim($this->post['orderCode']) :"";
        if($ordeCode==''){
            return error_show(1004,"参数orderCode 不能为空");
        }
        $order= Db::name("sale")->where(["orderCode"=>$ordeCode,"is_del"=>0])->find();
        if(empty($order)){
            return error_show(1005,"未找到订单数据");
        }
        $errorCode = isset($this->post['errorCode']) &&$this->post['errorCode']!=''?trim($this->post['errorCode']) :"";
        if($errorCode==''){
            return error_show(1004,"参数errorCode 不能为空");
        }
        $error =Db::name('result_info')->where(["result_code"=>$errorCode,"is_del"=>0])->find();
        if(empty($error)){
            return error_show(1005,"未找到退货原因数据");
        }
        $remark =isset($this->post['remark']) &&$this->post['remark']!=''?trim($this->post['remark']) :"";
        $token = isset($this->post['token'])&&$this->post['token']!='' ? trim($this->post['token']):"";
        if($token==''){
            return error_show(105,"参数token不能为空");
        }
        $user =GetUserInfo($token);
        if(empty($user)||$user['code']!=0){
            return error_show(1002,"申请人数据不存在");
        }
        $rm= isset($user["data"]['id']) ?  $user["data"]['id'] : "";
        $ri= isset($user["data"]['nickname']) ?  $user["data"]['nickname'] : "";
        $num = isset($this->post['num'])&&$this->post['num']!='' ? intval($this->post['num']):"";
        if($num==''){
            return error_show(1005,"参数num不能为空");
        }
        if($order['wsend_num']<$num){
            return error_show(1002,"仓库未发货数量不足退货");
        }
        $returnCode=makeNo("RS");
        Db::startTrans();
        try{
            $in = [
                "returnCode"=>$returnCode,
                "orderCode"=>$ordeCode,
                "good_code"=>$order['good_code'],
                "good_name"=>$order['good_name'],
                "apply_id"=>$rm,
                "apply_name"=>$ri,
                "error_code"=>$errorCode,
                "num"=>$num,
                "remark"=>$remark,
                "order_type"=>2,
                "status"=>0,
                "is_del"=>0,
                "addtime"=>date("Y-m-d H:i:s"),
                "updatetime"=>date("Y-m-d H:i:s")
            ];
            $create = Db::name("sale_return")->insert($in,true);
            if($create>0) {
                $process=["order_code"=>$returnCode,"order_id"=>$create,"order_status"=>0,"order_type"=>'ZXTHD'];
                ProcessOrder::AddProcess($this->post['token'],$process);
                $ste = ["order_code"=>$returnCode,"status"=>0,"action_remark"=>'',
                    "action_type"=>"create"];
                ActionLog::logAdd($this->post['token'],$ste,"ZXTHD",3,$in);
                if ($order['send_type'] == 1) {
                    $wsend = Db::name("order_out")->where(['orderCode' => $ordeCode, "status" => 1, "order_type"
                    =>2])->select();
                       // ->save(["status" => 0, "updatetime" => date("Y-m-d H:i:s")]);
                    if(!empty($wsend)){
                        foreach ($wsend as $value){
                            $tt = $value['status'];
                            $value['status']=0;
                            $value['updatetime']=date("Y-m-d H:i:s");
                           $up =Db::name("order_out")->save($value);
                           if($up){
                               $process=["order_code"=> $value['outCode'],"order_id"=>$value['id'],"order_status"=>0,"order_type"=>'CKD'];
                               ProcessOrder::AddProcess($this->post['token'],$process);
                               $ste = ["order_code"=>$value['outCode'],"status"=>$tt,"action_remark"=>'',"action_type"=>"status"];
                               ActionLog::logAdd($this->post['token'],$ste,"CKD",0,$value);
                           }else{
                               Db::rollback();
                               return error_show(1005,"退货单新建失败");
                           }
                        }
                    }
                }
                Db::commit();
                return error_show(0,"退货单新建成功");
            }
            Db::rollback();
            return error_show(1005,"退货单新建失败");
        }catch (\Exception $e){
            Db::rollback();
            return error_show(1005,$e->getMessage());
        }
    }



}