post; $catid =isset($post['cat_id'])&&$post['cat_id']!=="" ? intval($post['cat_id']):""; if($catid==""){ return error_show(1004,"参数 cat_id 不能为空"); } $catinfo = Db::name("cat")->where(["id"=>$catid,"is_del"=>0])->find(); if($catinfo==false){ return error_show(1004,"分类信息不存在"); } $plat_id =isset($post['platform_id'])&&$post['platform_id']!=="" ? intval($post['platform_id']):""; if($plat_id==""){ return error_show(1004,"参数 plat_id 不能为空"); } $platform = Db::name("platform")->where(["id"=>$plat_id,"is_del"=>0])->find(); if($platform==false){ return error_show(1004,"平台信息不存在"); } if ($platform['platform_type']!=1) return error_show(1004,"平台为非对接平台"); $ist = Db::name("cat_plat")->where([["cat_id","=",$catid],["platform_id","=",$plat_id],["is_del","=",0]])->find(); if($ist!=false){ return error_show(1004,"该平台下已存在此分类"); } $rate =isset($post['rate'])&&$post['rate']!=="" ? floor($post['rate']):""; if($rate==""){ return error_show(1004,"参数 rate 不能为空"); } $order_rate =isset($post['order_rate'])&&$post['order_rate']!=="" ? floor($post['order_rate']):""; if($order_rate==""){ return error_show(1004,"参数 order_rate 不能为空"); } $money_rate =isset($post['money_rate'])&&$post['money_rate']!=="" ? floor($post['money_rate']):""; if($money_rate==""){ return error_show(1004,"参数 money_rate 不能为空"); } $sale_rate =isset($post['sale_rate'])&&$post['sale_rate']!=="" ? floor($post['sale_rate']):""; if($sale_rate==""){ return error_show(1004,"参数 sale_rate 不能为空"); } $low_rate =isset($post['low_rate'])&&$post['low_rate']!=="" ? floor($post['low_rate']):""; if($low_rate==""){ return error_show(1004,"参数 low_rate 不能为空"); } $fund_code =isset($post['fund_code'])&&$post['fund_code']!=="" ? $post['fund_code']:""; if($fund_code==""){ return error_show(1004,"参数 fund_code 不能为空"); } $data=[ "cat_id"=>$catid, "platform_id"=>$plat_id, "rate"=>$rate, "order_rate"=>$order_rate, "money_rate"=>$money_rate, "sale_rate"=>$sale_rate, "low_rate"=>$low_rate, "fund_code"=>$fund_code, "status"=>1, "is_del"=>0, "apply_id"=>$this->uid, "apply_name"=>$this->uname, "addtime"=>date("Y-m-d H:i:s"), "updatetime"=>date("Y-m-d H:i:s"), ]; $int = Db::name("cat_plat")->insert($data); return $int ? app_show(0,"新建成功"): error_show(1003,"新建失败"); } /** * @return \think\response\Json|void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function edit(){ $post = $this->post; // $catid =isset($post['id'])&&$post['id']!=="" ? intval($post['id']):""; // if($catid==""){ // return error_show(1004,"参数 id 不能为空"); // } // $cat = Db::name("cat_plat")->where(["id"=>$catid,"is_del"=>0])->find(); // if($cat==false){ // return error_show(1004,"未找到平台分类信息"); // } $cat_id =isset($post['cat_id'])&&$post['cat_id']!=="" ? intval($post['cat_id']):""; if($cat_id==""){ return error_show(1004,"参数 cat_id 不能为空"); } $catinfo = Db::name("cat")->where(["id"=>$cat_id,"is_del"=>0])->find(); if($catinfo==false){ return error_show(1004,"分类信息不存在"); } $plat_id =isset($post['platform_id'])&&$post['platform_id']!=="" ? intval($post['platform_id']):""; if($plat_id==""){ return error_show(1004,"参数 platform_id 不能为空"); } $platform = Db::name("platform")->where(["id"=>$plat_id,"is_del"=>0])->find(); if($platform==false){ return error_show(1004,"平台信息不存在"); } if ($platform['platform_type']!=1) return error_show(1004,"平台为非对接平台"); $rate =isset($post['rate'])&&$post['rate']!=="" ? floor($post['rate']):""; // if($rate==""){ // return error_show(1004,"参数 rate 不能为空"); // } $ist = Db::name("cat_plat")->where([["cat_id","=",$cat_id],["platform_id","=",$plat_id],["is_del","=",0]])->find(); if($ist==false){ return error_show(1004,"未找到平台下分类"); } $order_rate =isset($post['order_rate'])&&$post['order_rate']!=="" ? floor($post['order_rate']):""; // if($order_rate==""){ // return error_show(1004,"参数 order_rate 不能为空"); // } $money_rate =isset($post['money_rate'])&&$post['money_rate']!=="" ? floor($post['money_rate']):""; // if($money_rate==""){ // return error_show(1004,"参数 money_rate 不能为空"); // } $sale_rate =isset($post['sale_rate'])&&$post['sale_rate']!=="" ? floor($post['sale_rate']):""; if($sale_rate==""){ return error_show(1004,"参数 sale_rate 不能为空"); } $low_rate =isset($post['low_rate'])&&$post['low_rate']!=="" ? floor($post['low_rate']):""; // if($low_rate==""){ // return error_show(1004,"参数 low_rate 不能为空"); // } $fund_code =isset($post['fund_code'])&&$post['fund_code']!=="" ? $post['fund_code']:""; // if($fund_code==""){ // return error_show(1004,"参数 fund_code 不能为空"); // } if($sale_rate> $ist['sale_rate']){ $list= $this->checkGood($cat_id,$sale_rate,$plat_id); if(!empty($list)){ return app_show(10004,"存在不满足毛利率得商品价格",["skuCode"=>$list]); } } $data=[ "cat_id"=>$cat_id, "platform_id"=>$plat_id, "rate"=>$rate, "order_rate"=>$order_rate, "money_rate"=>$money_rate, "sale_rate"=>$sale_rate, "low_rate"=>$low_rate, "fund_code"=>$fund_code, "updatetime"=>date("Y-m-d H:i:s") ]; $int = Db::name("cat_plat")->where($ist)->update($data); return $int ? app_show(0,"更新成功"): error_show(1003,"更新失败"); } /**列表 * @return \think\response\Json|void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function list(){ $post=$this->post; $page = isset($post['page'])&&$post['page']!=""?intval($post['page']) :"1"; $size = isset($post['size'])&&$post['size']!=""?intval($post['size']) :"15"; $condition = [["is_del","=",0]]; $catid= isset($post['cat_id'])&&$post['cat_id']!=""?intval($post['cat_id']) :""; if($catid!="") $condition[]=["cat_id","=",$catid]; $platid= isset($post['platform_id'])&&$post['platform_id']!=""?intval($post['platform_id']) :""; if($platid!="") $condition[]=["platform_id","=",$platid]; $status= isset($post['status'])&&$post['status']!==""?intval($post['status']) :""; if($status!=="") $condition[]=["status","=",$status]; $count = Db::name("cat_plat")->where($condition)->count(); $total = ceil($count/$size); $page = $total> $page ? $page: intval($total); $list =Db::name("cat_plat")->where($condition)->page($page,$size)->select()->toArray(); $catKey=[]; $platKey=[]; if(!empty($list)){ $catArr = array_column($list,"cat_id"); $platArr = array_column($list,"platform_id"); $catKey= Db::name("cat")->where(["id"=>$catArr,"is_del"=>0])->column("cat_name","id"); $platKey= Db::name("platform")->where(["id"=>$platArr,"is_del"=>0])->column("platform_name","id"); } $data=[]; foreach ($list as $key=>$value){ $value['cat_name'] = isset($catKey[$value['cat_id']]) ?$catKey[$value['cat_id']]:""; $value['platform_name'] = isset($platKey[$value['platform_id']]) ?$platKey[$value['platform_id']]:""; $data[]=$value; } return app_show(0,"获取成功",["list"=>$data,"count"=>$count]); } //启禁用分类平台信息 public function status(){ $post = $this->post; $catid =isset($post['id'])&&$post['id']!=="" ? intval($post['id']):""; if($catid==""){ return error_show(1004,"参数 id 不能为空"); } $cat = Db::name("cat_plat")->where(["id"=>$catid,"is_del"=>0])->find(); if($cat==false){ return error_show(1004,"未找到平台分类信息"); } $status = isset($post['status'])&&$post['status']!=="" ? intval($post['status']):""; if($status===""){ return error_show(1004,"参数 status 不能为空"); } if(!in_array($status,[0,1])){ return error_show(1004,"参数 status 无效值"); } $cat['status']=$status; $cat['updatetime']=date("Y-m-d H:i:s"); $int = Db::name("cat_plat")->save($cat); return $int ? app_show(0,"更新成功"): error_show(1003,"更新失败"); } //删除分类平台信息 public function delete(){ $post = $this->post; $catid =isset($post['id'])&&$post['id']!=="" ? intval($post['id']):""; if($catid==""){ return error_show(1004,"参数 id 不能为空"); } $cat = Db::name("cat_plat")->where(["id"=>$catid,"is_del"=>0])->find(); if($cat==false){ return error_show(1004,"未找到平台分类信息"); } $cat['is_del']=1; $cat['updatetime']=date("Y-m-d H:i:s"); $int = Db::name("cat_plat")->save($cat); return $int ? app_show(0,"删除成功"): error_show(1003,"删除失败"); } //根据毛利率计算平台价格 public function PlatPrice(){ $spuCode=isset($this->post['spuCode'])&&$this->post['spuCode']!=""? trim($this->post['spuCode']):""; if($spuCode==""){ return error_show(1005,"参数spuCode不能为空"); } $platid= isset($this->post['platform_id'])&&$this->post['platform_id']!=""?intval($this->post['platform_id']) :""; if($platid=="") return error_show(1005,"参数 platform_id 不能为空"); $platform = Db::name("platform")->where(["id"=>$platid,"is_del"=>0])->find(); if($platform==false){ return error_show(1004,"平台信息不存在"); } $num=isset($this->post['min_num'])&&$this->post['min_num']!=="" ? intval($this->post['min_num']):""; if($num==""){ return error_show(1005,"参数min_num不能为空"); } if ($platform['platform_type']!=1) return error_show(1004,"平台为非对接平台"); $good =Db::name("good_basic")->where(["spuCode"=>$spuCode,"is_del"=>0])->find(); if($good==false){ return error_show(1005,"商品数据未找到"); } $nakelist = Db::name("good_nake") ->where(['spuCode'=>$spuCode,"is_del"=>0]) ->where("min_num","<=",$num) ->order("min_num desc") ->find(); if($nakelist==false){ $nakelist = Db::name("good_nake")->where(['spuCode'=>$spuCode,"is_del"=>0])->order("min_num asc")->find(); //非库存品的话,继续校验最小起订量 //库存品的话,不足采购起订量的时候,取采购最小起订量 if ($good['is_stock'] == 0) return error_show(1010, "起订量不足{$nakelist['min_num']}"); } // $catinfo = Db::name("cat_plat")->where(["cat_id"=>$good['cat_id'],"is_del"=>0,"platform_id"=>$platid])->find(); // if ($catinfo==false || $catinfo['sale_rate']==0) return error_show(1005,"分类未设置平台毛利率"); $companyNo = isset($this->post['relaComNo']) && $this->post['relaComNo'] !== "" ? trim($this->post['relaComNo']) : ""; if($companyNo=='') return error_show(1004,'关联公司不能为空'); //计算毛利率 $budget = get_budget($good['cat_id'], $companyNo, $platid); // $budget = isset($catinfo['sale_rate']) ? $catinfo['sale_rate']/100:0; $top_cat_id = made($good['cat_id']);//获取所有分类 $top_cat_id = isset($top_cat_id[0]['id']) ? $top_cat_id[0]['id'] : 0;//获取顶级分类id $sale_cost_fee = 0; if ($good['is_gold_price'] == 1 && $top_cat_id == 6) { // $saleprice = $good['noble_weight']*$good["cgd_gold_price"] + $nakelist['cost_fee']/(1-$budget)*$good['noble_weight']+$nakelist['mark_fee']+$nakelist['package_fee']+$nakelist['cert_fee']+$nakelist['nake_fee']+$nakelist['delivery_fee']; //系统售价=(贵金属重量*供应商采购金价 + 工艺费*贵金属重量+加标费+包装费+证书费+成本裸价+运费+其他费用)/(1-成本售价/100) $saleprice = ($good['noble_weight'] * $good["cgd_gold_price"] + $nakelist['cost_fee'] * $good['noble_weight'] + $nakelist['mark_fee'] + $nakelist['package_fee'] + $nakelist['cert_fee'] + $nakelist['nake_fee'] + $nakelist['delivery_fee'] + $nakelist['other_fee']) / (1 - $budget); //计算工艺费 //销售工艺费=(( 商品重量* 供应商采购金价 + 采购成本工艺费* 商品重量+包装费+加标费+证书费+产品裸价+其他费用)/(1-成本售价/100)-(包装费+加标费+证书费+产品裸价0+运费+其他费用) )/商品重量-供应商采购金价 $sale_cost_fee = (($good['noble_weight'] * $good["cgd_gold_price"] + $nakelist['cost_fee'] * $good['noble_weight'] + $nakelist['package_fee'] + $nakelist['mark_fee'] + $nakelist['cert_fee'] + $nakelist['nake_fee'] + $nakelist['other_fee'] + $nakelist['delivery_fee']) / (1 - $budget) - ($nakelist['package_fee'] + $nakelist['mark_fee'] + $nakelist['cert_fee'] + $nakelist['nake_fee'] + $nakelist['delivery_fee'] + $nakelist['other_fee'])) / $good['noble_weight'] - $good["cgd_gold_price"]; }else{ // $saleprice = ($nakelist['mark_fee'] + $nakelist['package_fee'] + $nakelist['cert_fee'] + $nakelist['delivery_fee'] + $nakelist['nake_fee']) / (1 - $budget); // (加标费+包装费+证书费+成本裸价+运费)/(1-成本售价/100)=系统售价 // $saleprice = (加标费 + 包装费 + 证书费 + 运费 + 成本裸价+其他费用) / (1 - $budget); $saleprice = $nakelist['nake_total'] / (1 - $budget); } return app_show(0, "获取成功", ["sale_price" => round($saleprice, 2), 'new_cost_fee' => round($sale_cost_fee, 2)]); } public function catlist(){ $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']) :""; $plat_id=isset($this->post['platform_id']) && $this->post['platform_id'] !==""? intval($this->post['platform_id']) :""; if($pid!==""){ $where[]=["pid","=",$pid]; if ($pid!=0){ $pcat = Db::name('cat')->where(['id'=>$pid,"is_del"=>0])->find(); if($pcat==false){ return error_show(1004,"未找到分类数据"); } if($plat_id==''){ return error_show(1004,"参数 platform_id 不能为空"); } } } if($plat_id!=""){ $platform = Db::name("platform")->where(["id"=>$plat_id,"is_del"=>0])->find(); if($platform==false){ return error_show(1004,"未找到平台数据"); } } $status=isset($this->post['status']) && $this->post['status'] !==""? intval($this->post['status']) :""; if($status!==""){ $where[]=['status',"=",$status]; } $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']) :"15"; $count = Db::name("cat")->where($where)->count(); $total = ceil($count/$size); $page = $total> $page ? $page: intval($total); $list = Db::name('cat')->where($where)->page($page,$size)->select(); $data=[]; foreach ($list as $key=>$value){ $catplat= Db::name("cat_plat")->where(["cat_id"=>$value['id'],"platform_id"=>$plat_id,"is_del"=>0]) ->find(); if($catplat==false){ continue; } $value['rate']= $catplat['rate']; $value['order_rate']= $catplat['order_rate']; $value['low_rate']= $catplat['low_rate']; $value['money_rate']= $catplat['money_rate']; $value['sale_rate']= $catplat['sale_rate']; $value['platform_name'] = isset($platform['platform_name']) ? $platform['platform_name']:""; $value['platform_id'] = $plat_id; $data[]=$value; } return app_show(0, "获取成功",["list"=>$data,"count"=>$count]); } public function checkGood($catid,$sale_rate,$plat_id){ $good =Db::name("platform_youzan")->alias("a")->leftJoin("good_basic b","a.spuCode=b.spuCode") ->where(["b.cat_id"=>$catid,"a.platform_id"=>$plat_id,"a.exam_status"=>6,"a.is_del"=>0])->field("a.spuCode,a.skuCode,b.good_name,a.start_sale_num,final_price") ->select()->toArray(); $spucode=[]; if(!empty($good)){ foreach ($good as $key=>$value){ $salec=Db::name("good_nake")->where([["spuCode","=",$value['spuCode'],["min_num","<=",$value['start_sale_num']],["is_del","=",0]]])->find(); if($salec){ $rate =round( ($value['final_price'] - $salec['nake_total']) / $value['final_price'],2)/100; if ($rate>=$sale_rate){ continue; } } $temp=["skuCode"=>$value['skuCode'],"good_name"=>$value['good_name'],"spuCode"=>$value['good_name']]; $spucode[]=$temp; } } return $spucode; } }