<?php

namespace app\admin\controller;

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

class Cat extends BaseController
{
public $post="";
public function __construct(App $app)
{
    parent::__construct($app);
    $this->post=$this->request->post();
}
public function list(){
    $where=[["is_del","=",0]];
    $pid =  isset($this->post['pid']) &&$this->post['pid']!=="" ?intval($this->post['pid']): "0";
    $where[]=["pid","=",$pid];

    $cat_name=isset($this->post['cat_name']) && $this->post['cat_name'] !==""? intval($this->post['cat_name']) :"";
    if($cat_name!==""){
        $where[]=['cat_name',"like","%$cat_name%"];
    }
    $data = Db::name("cat")->where($where)->select();
    $vmp = [];
    foreach ($data as $sts){
        $vmp[]=stro($sts);
    }
    return app_show(0,"获取成功",$vmp);
}
public function plist(){
    $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]];
    $cat_name=isset($this->post['cat_name']) && $this->post['cat_name'] !==""? trim($this->post['cat_name']) :"";
    if($cat_name!==""){
        $where[]=['cat_name',"like","%$cat_name%"];
    }
    $pid=isset($this->post['pid']) && $this->post['pid'] !==""? intval($this->post['pid']) :"";
    if($pid!==""){
        $where[]=['pid',"=",$pid];
    }
    $status=isset($this->post['status']) && $this->post['status'] !==""? intval($this->post['status']) :"";
    if($status!==""){
        $where[]=['status',"=",$status];
    }
    $count = Db::name("cat")->where($where)->count();
    $total = ceil($count / $size);
    $page = $page >= $total ? $total : $page;
    $list = Db::name('cat')->where($where)->page($page, $size)->select();
    $var =[];
    foreach ($list as $value){
        $info = Db::name('cat_specs')->where(['cat_id'=>$value['id'],'is_del'=>0])->column('specs_id');
        $temp = Db::name('specs')->where(['id'=>$info,'is_del'=>0])->field("id as specid,spec_name")->select()->toArray();
        if(empty($temp)){
            $temp=[];
        }
        $value['im']=$temp;
        $var[]=$value;
    }
    return app_show(0, "获取成功", ['list' =>$var, 'count' => $count]);
}

    public function wlist(){
        $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],['level',"=",3]];
        $cat_name=isset($this->post['cat_name']) && $this->post['cat_name'] !==""? trim($this->post['cat_name']) :"";
        if($cat_name!==""){
            $where[]=['cat_name',"like","%$cat_name%"];
        }
        $search=isset($this->post['search']) && $this->post['search'] !==""? trim($this->post['search']) :"";
        if($search!==""){
            $where[]=['search',"like","%$search%"];
        }
        $pid=isset($this->post['pid']) && $this->post['pid'] !==""? intval($this->post['pid']) :"";
        if($pid!==""){
            $where[]=['pid',"=",$pid];
        }
        $status=isset($this->post['status']) && $this->post['status'] !==""? intval($this->post['status']) :"";
        if($status!==""){
            $where[]=['status',"=",$status];
        }
        $count = Db::name("cat")->where($where)->count();
        $total = ceil($count / $size);
        $page = $page >= $total ? $total : $page;
        $list = Db::name('cat')->where($where)->page($page, $size)->select();
        $data=[];
        foreach ($list as $value){
            $temp= isset($value['id']) && $value['id'] !=0 ? made($value['id']):[];
            $value['item'] = array_column($temp,'id');
            $data[]=$value;
        }
        return app_show(0, "获取成功", ['list' =>$data, 'count' => $count]);
    }

public function title(){
    $where =[["is_del","=",0]];
    $cat_name=isset($this->post['cat_name']) && $this->post['cat_name'] !==""? trim($this->post['cat_name']) :"";
    if($cat_name!==""){
        $where[]=['cat_name',"like","%$cat_name%"];
    }
    $pid=isset($this->post['pid']) && $this->post['pid'] !==""? intval($this->post['pid']) :"";
    if($pid!==""){
        $where[]=["pid","=",$pid];
    }
    $status=isset($this->post['status']) && $this->post['status'] !==""? intval($this->post['status']) :"";
    if($status!==""){
        $where[]=['status',"=",$status];
    }
    $list = Db::name('cat')->where($where)->select();
    return app_show(0, "获取成功",$list);
}
    public function tlist(){
        $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]];
        $cat_name=isset($this->post['cat_name']) && $this->post['cat_name'] !==""? trim($this->post['cat_name']) :"";
        if($cat_name!==""){
            $where[]=['cat_name',"like","%$cat_name%"];
        }
        $status=isset($this->post['status']) && $this->post['status'] !==""? intval($this->post['status']) :"";
        if($status!==""){
            $where[]=['status',"=",$status];
        }
        $creater=isset($this->post['creater']) && $this->post['creater'] !==""? trim($this->post['creater']) :"";
        if($creater!==""){
            $where[]=['creater',"like","%$creater%"];
        }

        $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('cat')->where($where)->count();
        $total = ceil($count / $size);
        $page = $page >= $total ? $total : $page;
        $list = Db::name('cat')->where($where)->page($page, $size)->select();
        $var =[];
        foreach ($list as $value){
            $info = Db::name('cat_specs')->where(['cat_id'=>$value['id'],'is_del'=>0])->column('specs_id');
            $temp = Db::name('specs')->where(['id'=>$info,'is_del'=>0])->field("id as specid,spec_name")->select()->toArray();
            if(empty($temp)){
                 $temp=[];
            }
            $value['im']=$temp;
            $var[]=$value;
        }
        return app_show(0, "获取成功", ['list' => $var, 'count' => $count]);
    }
public function create()
{
    $cat_name = isset($this->post['cat_name']) && $this->post['cat_name'] !== "" ? trim($this->post['cat_name']) : "";
    if ($cat_name == "") {
        return error_show(1002, "参数cat_name不能为空");
    }
    $pid = isset($this->post['pid']) && $this->post['pid'] !== "" ? intval($this->post['pid']) : "0";
    if ($pid === "") {
        return error_show(1002, "参数pid不能为空");
    }

    $cat_desc = isset($this->post['cat_desc']) && $this->post['cat_desc'] !== "" ? trim($this->post['cat_desc']) : "";
    $fund_code = isset($this->post['fund_code']) && $this->post['fund_code'] !== "" ? trim($this->post['fund_code']) : "";

    $level =1;
    if ($pid !== 0) {
        $levl=Db::name('cat')->where(['id'=>$pid])->find();
        if(empty($levl)){
            return error_show(1002,"未找到父级数据");
        }
        $level =$levl['level']+1;
        $temp = $levl['search'];
    }
    if($level==1){
        $search = $cat_name;
    }else{
        $search= $temp."-".$cat_name;
    }
    $repeat_name = Db::name("cat")->where(["is_del"=>0,"cat_name"=>$cat_name])->find();
    $int =isset($repeat_name['id']) && $repeat_name['id'] != 0 ? made($repeat_name['id']) : [];
    $im = array_column($int,'name');
    $in=implode('/',$im);
    if(!empty($repeat_name)){
        return error_show(1004,"分类名称已在{$in}存在");
    }
    $specs_id = isset($this->post['specs_id']) && $this->post['specs_id'] !== "" ? $this->post['specs_id'] : [];
    if (empty($specs_id)) {
        return error_show(1002, "参数specs_id不能为空");
    }
    $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(102,"创建人数据不存在");
    }
    $createrid= isset($user["data"]['id']) ?  $user["data"]['id'] : "";
    $creater= isset($user["data"]['nickname']) ?  $user["data"]['nickname'] : "";
//    $rate = isset($this->post['rate']) && $this->post['rate'] !== "" ? intval($this->post['rate']) : "";
//    $order_rate = isset($this->post['order_rate']) && $this->post['order_rate'] !== "" ? intval($this->post['order_rate']) : "";
//    $sale_rate = isset($this->post['sale_rate ']) && $this->post['sale_rate '] !== "" ? intval($this->post['sale_rate ']) : "";
//    $lower_rate = isset($this->post['lower_rate']) && $this->post['lower_rate'] !== "" ? intval($this->post['lower_rate']) : "";
    $weight = isset($this->post['weight']) && $this->post['weight'] !== "" ? intval($this->post['weight']) : "0";
    $status = isset($this->post['status']) && $this->post['status'] !== "" ? intval($this->post['status']) : "0";
    Db::startTrans();
    try{
        $data = [
            "cat_name" => $cat_name,
            "pid" => $pid,
            "level" => $level,
            "search" => $search,
//            "rate" => $rate,
//            "lower_rate"=>$lower_rate,
//            "order_rate"=>$order_rate,
//            "sale_rate"=>$sale_rate,
            "weight" => $weight,
            "status" => $status,
            "cat_desc"=>$cat_desc,
            "fund_code"=>$fund_code,
            "creater"=>$creater,
            "createrid"=>$createrid,
            "is_del"=>0,
            "addtime" => date("Y-m-d H:i:s"),
            "updatetime" => date("Y-m-d H:i:s"),
        ];
        $datainfo = Db::name('cat')->insert($data,true);
        $vat =[];
        if ($datainfo>0) {
            $stx = ["order_code"=>$pid,"status"=>$status,"action_remark"=>'',"action_type"=>"create"];
            ActionLog::logAdd($this->post['token'],$stx,"sxd",$status,$stx);
            $spc =[];
            $spc['cat_id']=$datainfo;
            $spc['exam_status']=0;
            $spc['status']=0;
            $spc['creater']=$creater;
            $spc['createrid']=$createrid;
            $spc['is_del']=0;
            $spc['addtime']=date("Y-m-d H:i:d");
            $spc['updatetime']=date("Y-m_d H:i:s");
            $vpn = Db::name('cat_spec')->insert($spc,true);
            if ($vpn == "") {
                Db::rollback();
                return error_show(1002, "新建失败");
            }
            foreach ($specs_id as $value){
                $item =[];
                $item['cat_id']=$datainfo;
                $item['specs_id']=$value;
                $item['is_del']=0;
                $item['addtime']=date("Y-m-d H:i:s");
                $vat[] = $item;
            }
            $vp = Db::name('cat_specs')->insertAll($vat);
            if ($vp==0) {
                Db::rollback();
                return error_show(1005, "新建失败");
            }

           Db::commit();
            return error_show(0, "新建成功");
        } else {
            Db::rollback();
            return error_show(1002, "新建失败");
        }
    }catch (\Exception $e){
        Db::rollback();
        return error_show(1005,$e->getMessage());
    }

}
public function edit(){
    $id = isset($this->post['id']) && $this->post['id'] !==""? intval($this->post['id']) :"";
    $idinfo = Db::name('cat')->where(['id'=>$id])->find();
    if($idinfo==""){
        return error_show(1002,"未找到商品数据");
    }
    $cat_name= isset($this->post['cat_name']) && $this->post['cat_name'] !=="" ? trim($this->post['cat_name']) :"";
    if($cat_name==""){
        return error_show(1002,"参数cat_name不能为空");
    }
    $pid = isset($this->post['pid']) && $this->post['pid'] !=="" ? intval($this->post['pid']) :"";
    if($pid===""){
        return error_show(1002,"参数pid不能为空");
    }
    $cat_desc = isset($this->post['cat_desc']) && $this->post['cat_desc'] !=="" ? trim($this->post['cat_desc']) :"";
    $fund_code = isset($this->post['fund_code']) && $this->post['fund_code'] !== "" ? trim($this->post['fund_code']) : "";
    $specs_id = isset($this->post['specs_id']) && $this->post['specs_id'] !== "" ? $this->post['specs_id'] : [];
    if (empty($specs_id)) {
        return error_show(1002, "参数specs_id不能为空");
    }
    $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(102,"创建人数据不存在");
    }

    $level =1;
    if ($pid !== 0) {
        $levl=Db::name('cat')->where(['id'=>$pid])->find();
        if(empty($levl)){
            return error_show(1002,"未找到父级数据");
        }
        $level =$levl['level']+1;
        $temp = $levl['search'];
    }
    if($level==1){
        $search = $cat_name;
    }else{
        $search= $temp."_".$cat_name;
    }
    $createrid= isset($user["data"]['id']) ?  $user["data"]['id'] : "";
    $creater= isset($user["data"]['nickname']) ?  $user["data"]['nickname'] : "";
    //$level = isset($this->post['level']) && $this->post['level'] !=="" ? intval($this->post['level']) :"";

    $weight = isset($this->post['weight']) && $this->post['weight']!==""? intval($this->post['weight']):"0";
    $status = isset($this->post['status']) && $this->post['status'] !==""?intval($this->post['status']) :"0";
    Db::startTrans();
    try{
        $str = [
            "id"=>$id,
            "cat_name"=>$cat_name,
            "pid"=>$pid,
            "level"=>$level,
            "weight"=>$weight,
           // "status"=>$status,
            "cat_desc"=>$cat_desc,
            "is_del"=>0,
            "fund_code"=>$fund_code,
            "updatetime"=>date("Y-m-d H:i:s"),
            "search"=>$search
        ];
        $strinfo = Db::name('cat')->where(['id'=>$id])->save($str);
        if($strinfo){
            $order = ["order_code"=>$id,"status"=>$status,"action_remark"=>'',"action_type"=>"edit"];
            ActionLog::logAdd($this->post['token'],$order,"sxd",$status,$order);

            $spc =[];
            $vp = Db::name('cat_spec')->where(['cat_id'=>$idinfo['id'],'is_del'=>0])->find();
          $str ="";
            if($vp!=false){
                isset($vp['id']) && $vp['id'] !== "" ? $spc['id'] = $vp['id'] : '';
            $spc['cat_id']=$idinfo['id'];
            $spc['exam_status']=0;
            $spc['status']=0;
            $spc['is_del']=0;
            $spc['updatetime']=date("Y-m_d H:i:s");
            $str=$vp['id'];
                $vpn = Db::name('cat_spec')->save($spc);
        }else{

                $spc['cat_id']=$idinfo['id'];
                $spc['exam_status']=0;
                $spc['status']=0;
                 $spc['creater']=$creater;
                  $spc['createrid']=$createrid;
                $spc['is_del']=0;
                $spc['addtime']=date("Y-m-d H:i:d");
                $spc['updatetime']=date("Y-m_d H:i:s");

                $vpn = Db::name('cat_spec')->insert($spc,true);
                $str=$vpn;
        }
            if ($vpn == false) {
                Db::rollback();
                return error_show(1002, "更新失败");
            }
            $db = Db::name('cat_specs')->where(['cat_id'=>$idinfo['id'],'is_del'=>0])->column("specs_id");
           if(empty($db)){
               $db=[];
           }
            $sn = array_diff($specs_id,$db);

            $st = array_diff($db,$specs_id);
            if(!empty($st)){
                $int['is_del']=1;
                $dn = Db::name('cat_specs')->where(['specs_id'=>$st,'is_del'=>0])->save($int);
                if ($dn==false) {
                    Db::rollback();
                    return error_show(1002, "编辑失败");
                }
            }
            if(!empty($sn)){
                $vat=[];
                foreach ($sn as $value){
                    $item=[];
                    $item['cat_id']=$idinfo['id'];
                    $item['specs_id']=$value;
                    $item['is_del']=0;
                    $item['addtime'] = date("Y-m-d H:i:s");
                    $vat[] = $item;
                }
                $vp = Db::name('cat_specs')->insertAll($vat);
                if ($vp==0) {
                    Db::rollback();
                    return error_show(1002, "编辑失败");
                }
            }
            $itn =sear($id);
            Db::commit();
            return error_show(0,"编辑成功");
        }else{
            Db::rollback();
            return error_show(1002,"编辑失败");
        }
    }catch (\Exception $e){
        Db::rollback();
        return error_show(1005,$e->getMessage());
    }
}

    public function ratedit(){
        $id = isset($this->post['id']) && $this->post['id'] !==""? intval($this->post['id']) :"";
        $idinfo = Db::name('cat')->where(['id'=>$id])->find();
        if($idinfo==""){
            return error_show(1002,"未找到商品数据");
        }
        $rate = isset($this->post['rate']) && $this->post['rate'] !== "" ? floatval($this->post['rate']) : "";
        $order_rate = isset($this->post['order_rate']) && $this->post['order_rate'] !== "" ? floatval($this->post['order_rate']) : "";
        $sale_rate = isset($this->post['sale_rate']) && $this->post['sale_rate'] !== "" ?  floatval($this->post['sale_rate']) : "";
        $lower_rate = isset($this->post['lower_rate']) && $this->post['lower_rate'] !== "" ?  floatval($this->post['lower_rate']) :"";
        $money_rate = isset($this->post['money_rate']) && $this->post['money_rate'] !=="" ? floatval($this->post['money_rate']):"";
        $low_rate = isset($this->post['low_rate']) && $this->post['low_rate'] !=="" ? floatval($this->post['low_rate']):"";
        if($idinfo['pid']==0){
            if($rate===""){
                return error_show(1003,"参数rate不能为空");
            }
            if($order_rate===""){
                return error_show(1003,"参数order_rate不能为空");
            }
            if($sale_rate===""){
                return error_show(1003,"参数sale_rate不能为空");
            }
            if($lower_rate===""){
                return error_show(1003,"参数lower_rate不能为空");
            }
            if($money_rate==""){
                return error_show(1003,"参数money_rate不能为空");
            }
            if($low_rate==""){
                return error_show(1003,"参数low_rate不能为空");
            }
        }
        $data =[
            "id"=>$id,
            "rate" => $rate,
            "lower_rate"=>$lower_rate,
            "order_rate"=>$order_rate,
            "sale_rate"=>$sale_rate,
            "money_rate"=>$money_rate,
            "low_rate"=>$low_rate,
            "is_del"=>0,
            "updatetime"=>date("Y-m-d H:i:s"),
        ];
        $strinfo = Db::name('cat')->where(['id'=>$id])->save($data);
        if($strinfo){
            return error_show(0,"更新成功");
        }else{
            return error_show(1002,"更新失败");
        }
    }

public function info(){
    $id = isset($this->post['id']) && $this->post['id'] !=="" ? intval($this->post['id']) :"";
    if($id==""){
        return error_show(1002,"参数id不能为空");
    }
    $idinfo = Db::name('cat')->where(['id'=>$id])->find();
    if($idinfo==""){
        return error_show(1002,"未找到数据");
    }
    $info = Db::name('cat_specs')->where(['cat_id'=>$idinfo['id'],'is_del'=>0])->column('specs_id');
    $temp = Db::name('specs')->where(['id'=>$info,'is_del'=>0])->field("id,spec_name")->select();
    //$idinfo['cat_id']=$info['cat_id'];
    $idinfo['spec']=$temp;
   // $idinfo['specs_id']=$info;
    return app_show(0,"获取成功",$idinfo);
}
public function status(){
    $id = isset($this->post['id']) && $this->post['id'] !=="" ? intval($this->post['id']):"";
    if($id===""){
        return error_show(1002,"参数id不能为空");
    }
    $stn = Db::name('cat')->where(['id'=>$id])->find();
    if(empty($stn)){
        return error_show(1002,"未找到商品数据");
    }
    $status = isset($this->post['status']) && $this->post['status'] !=="" ? intval($this->post['status']) :"";
    if($status===""){
        return error_show(1002,"参数status不能为空");
    }
    if ($stn['level']==3) {
        if($status==1){
            $can = made($stn['id']);
            $cat=array_column($can,'id');
        }else{
           $cat =$stn['id'];
        }
       // return error_show(1002, "所在级别不能启用");
    }
    if($stn['level']==2 || $stn['level']==1){
        if($status==1){
            return error_show(1002,"所在等级不能启用");
        }else{
            $db= Db::name('cat')->where(['pid'=>$stn['id'],'status'=>1,'is_del'=>0])->count();
            if($db==0){
                $cat = $stn['id'];
            }else{
                return error_show(1002,"子级分类未禁用");
            }
        }
    }
   // $pd= $stn['status'];
    $it=[];
    $it['status']=$status;
    $it['updatetime']=date("Y-m-d H:i:s");
    $str = Db::name('cat')->where(['id'=>$cat,'is_del'=>0])->save($it);
    if($str){
//        $order = ["order_code"=>$id,"status"=>$pd,"action_remark"=>'',"action_type"=>"edit"];
//        ActionLog::logAdd($this->post['token'],$order,"sxd",$stn['status'],$order);
        return error_show(0,"状态更新成功");
    }else{
        return error_show(1002,"状态更新失败");
    }
}
public function delete(){
    $id = isset($this->post['id']) && $this->post['id'] !==""? intval($this->post['id']) :"";
    $info = Db::name('cat')->where(["is_del"=>0,'id'=>$id])->find();
    if($info==false){
        return error_show(1002,"未找到数据");
    }
    $supp= Db::name('cat')->update(['id'=>$id,'is_del'=>1,"updatetime"=>date("Y-m-d H:i:s")]);
    if($supp){
        return error_show(0,"删除成功");
    }else{
        return error_show(1002,"删除失败");
    }
}
}