| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- <?php
- namespace app\frontend\controllers;
- use app\common\components\BaseController;
- use Illuminate\Support\Arr;
- use Illuminate\Support\Facades\DB;
- use Yunshop\Commission\models\Commission;
- use Yunshop\Integral\Common\Models\IntegralGoodsModel;
- class MessageDetailController extends BaseController {
- protected $pageSize = 2000;
- public function getMsgDetail(){
- $data=$this->makeMsgTemplate($this->getGoodsList());
- $str='<!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>商品异常数据</title>
- <meta name="keywords" content="" />
- <meta name="description" content="" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
- <meta name="format-detection" content="telephone=no" />
- <meta name="apple-mobile-web-app-capable" content="yes" />
- <meta name="apple-mobile-web-app-status-bar-style" content="black">
- <meta name="author" content="CSS5, css5.com.cn" />
- <style>
- body{font-size:62.5%;font-family:"Microsoft YaHei",Arial; overflow-x:hidden; overflow-y:auto;}
- .viewport{ max-width:640px; min-width:300px; margin:0 auto;}
- </style>
- </head>
- <body>
- <div>
- <h1 style="text-align: center" style="font-size: 20px">商品价格异常数据</h1>
- <table class="table" style="font-size: 16em">
- <thead>
- <tr>
- <th>商品ID</th>
- <th>商品规格ID</th>
- <th>商品价格</th>
- <th>成品价格</th>
- <th>峰值金额</th>
- </tr>
- </thead>
- <tbody>';
- foreach ($data as $d){
- $str.='<tr>
- <td>'.$d["goods_id"].'</td>
- <td>'.$d["goods_option_id"].'</td>
- <td>'.$d["product_price"].'</td>
- <td>'.$d["cost_price"].'</td>
- <td>'.$d["max_price"].'</td>
- </tr>';
- }
- $str.='
- </tbody>
- </table>
- </div>
- </body>
- </html>';
- echo $str;exit;
- }
- private function makeMsgTemplate(array $data): array
- {
- // $template = '商品id:1,现价:122,会员:100,VIP:82,成本:90,VIP会员利润报警';
- \Log::info($data);
- $templates = [];
- foreach (array_chunk($data, 4) as $chunk) {
- $template = '下架异常商品:';
- foreach ($chunk as $item) {
- if($item['goods_option_id']){
- $template .= sprintf('商品id:%d,商品规格id:%d,商品规格现价:%.2F,峰值金额:%.2f,商品规格成本:%.2f,利润报警|', $item['goods_id'],$item['goods_option_id'], $item['product_price'],$item['max_price'], $item['cost_price']);
- }else{
- $template .= sprintf('商品id:%d,商品现价:%.2F,峰值金额:%.2f,成本:%.2f,利润报警|', $item['goods_id'], $item['product_price'],$item['max_price'], $item['cost_price']);
- }
- }
- $templates[] = rtrim($template, "|");
- }
- return $templates;
- }
- private function getGoodsList(): array
- {
- $requestSearch = [];
- /*$list = Goods::Search($requestSearch)->with(['hasOneSmallCodeUrl', 'hasManyOptions', 'hasManyGoodsDiscount', 'hasOneYzGoods' => function ($query) {
- $query->with('hasOneMiddlegroundConfiguration');
- }])->pluginId()->orderBy('display_order', 'desc')->orderBy('yz_goods.id', 'desc');
- if (!empty($requestSearch['middleground_configuration_id'])) {
- $list = $list->whereHas('hasOneYzGoods', function ($query) use ($requestSearch) {
- $query->where('middleground_configuration_id', $requestSearch['middleground_configuration_id']);
- });
- }*/
- $list=DB::table('yz_goods')
- ->select('yz_goods.id','yz_goods.status','yz_goods.price','yz_goods.cost_price','yz_goods_option.id as goods_option_id','yz_goods_option.title as goods_option_title','yz_goods_option.product_price as goods_option_product_price','yz_goods_option.cost_price as goods_option_cost_price','yz_goods_option.market_price as goods_option_market_price',
- 'yz_community_marketing_goods.is_open as qtj_status','yz_community_marketing_goods.alone_rule','yz_community_marketing_goods.alone_rule_rate','yz_community_marketing_goods.cashier_rate',
- 'yz_goods_sale.max_point_deduct')
- ->leftJoin('yz_goods_option','yz_goods_option.goods_id','=','yz_goods.id')
- ->leftJoin('yz_community_marketing_goods','yz_community_marketing_goods.goods_id','=','yz_goods.id')
- ->leftJoin('yz_goods_sale','yz_goods_sale.goods_id','=','yz_goods.id')
- ->where(['yz_goods.status'=>1,'yz_goods.uniacid'=>4])
- ->whereNull('yz_goods.deleted_at');
- $result = [];
- while (($data = $list->paginate($this->pageSize)) && $data->currentPage() <= $data->lastPage()) {
- $result[] = $this->processData($data->items());
- $currentPage = $data->currentPage();
- request()->offsetSet('page', ++$currentPage);
- }
- return Arr::collapse($result);
- }
- /**
- * 处理数据
- * @param $data
- * @return array
- */
- private function processData($data): array
- {
- $alert = [];
- $deduction_set=0;
- $deduction_set_max='0';
- foreach ($data as $l) {
- $price=$l['goods_option_product_price']?$l['goods_option_product_price']:$l['price'];
- $cost_price=$l['goods_option_cost_price']?$l['goods_option_cost_price']:$l['cost_price'];
- $goods_discount=DB::table('yz_goods_discount')->select('discount_method','level_id','discount_value')->where(['goods_id'=>$l['id']])->get();
- $max_member_price='0';
- $integralData=IntegralGoodsModel::uniacid()->select('deduction_set','deduction_set_max')->where('goods_id',$l['id'])->first();
- if($integralData){
- $integralData=$integralData->toArray();
- if($integralData['deduction_set']==1){
- $deduction_set=$integralData['deduction_set'];
- $deduction_set_max=$integralData['deduction_set_max'];
- }else{
- $deduction_set=\Setting::get('integral.deduction_set');
- $deduction_set_max=\Setting::get('integral.deduction_set_max');
- }
- }
- foreach ($goods_discount as $v => $d){
- if($d['discount_value']){
- if($d['discount_method']==1){
- //$value=$d['discount_value'].'折';
- //$member_price=$price-($price*$d['discount_value']/10);
- $member_yh_price=$price-$price*$d['discount_value']/10;
- }elseif ($d['discount_method']==2){
- //$value=$d['discount_value'].'元';
- //$member_price=$price-$d['discount_value'];
- $member_yh_price=$d['discount_value'];
- }elseif ($d['discount_method']==3){
- //$value=$d['discount_value'].'%';
- //$member_price=$price-($cost_price*$d['discount_value']/100);
- $member_yh_price=$cost_price*$d['discount_value']/100;
- }
- if($max_member_price<$member_yh_price){
- $max_member_price=$member_yh_price;
- }
- /*$member_hyj_lr=$member_price-$cost_price;
- $member_hyj_lrl=round(($member_price-$cost_price)*100/$cost_price.'%',2);
- $arr[]=$level_name.':'.$value;
- $arr1[]=$level_name.":".$member_price.'元';
- $arr2[]=$level_name.":".$member_yh_price.'元';
- $arr3[]=$level_name.":".$member_hyj_lr.'元';
- $arr4[]=$level_name.":".$member_hyj_lrl.'%';*/
- }
- }
- $qyjyh=$price*$l['alone_rule_rate']/100;
- if (strpos($l['max_point_deduct'], '%') !== false) {
- $jfzgdkje=$price*$l['max_point_deduct']/100;
- }else{
- $jfzgdkje=$l['max_point_deduct'];
- }
- $commission_goods = Commission::getGoodsSet($l['id'])->toArray();
- $commission_goods_rule=unserialize($commission_goods['rule']);
- $commission_first_arr1=$commission_first_arr2=$commission_first_arr3=$commission_first_arr4=[];
- $commission_second_arr1=$commission_second_arr2=$commission_second_arr3=$commission_second_arr4=[];
- // $commission_third_arr1=$commission_third_arr2=$commission_third_arr3=$commission_third_arr4=[];
- $max_commission_first_price=$max_first_rate='0';
- $max_commission_second_price=$max_second_rate='0';
- foreach ($commission_goods_rule as $cc){
- // $levelName=$cc['levelName'];
- if($max_first_rate <$cc['first_level_rate']){
- $max_first_rate=$cc['first_level_rate'];
- }
- if($max_second_rate <$cc['second_level_rate']){
- $max_second_rate=$cc['first_level_rate'];
- }
- /*if(isset($cc['first_level_rate'])&&$cc['first_level_rate']>0){
- $first_level_rate=$cc['first_level_rate'];
- $commission_first_arr1[]=$levelName.':'.$first_level_rate.'%';
- $commission_first_arr2[]=$levelName.':'.$first_level_rate/100*$price.'元';
- $commission_first_arr3[]=$levelName.':'.($price-($first_level_rate/100*$price)-$cost_price).'元';
- $commission_first_arr4[]=$levelName.':'.round(($price-($first_level_rate/100*$cost_price)-$cost_price)/$cost_price,2).'%';
- }
- if(isset($cc['second_level_rate'])&&$cc['second_level_rate']>0){
- $second_level_rate=$cc['second_level_rate'];
- $commission_second_arr1[]=$levelName.':'.$second_level_rate.'%';
- $commission_second_arr2[]=$levelName.':'.$second_level_rate/100*$price.'元';
- $commission_second_arr3[]=$levelName.':'.($price-($second_level_rate/100*$price)-$cost_price).'元';
- $commission_second_arr4[]=$levelName.':'.round(($price-($second_level_rate/100*$cost_price)-$cost_price)/$cost_price,2).'%';
- }*/
- /* if(isset($cc['third_level_rate'])&&$cc['third_level_rate']>0){
- $third_level_rate=$cc['third_level_rate'];
- $commission_third_arr1[]=$levelName.':'.$third_level_rate.'%';
- $commission_third_arr2[]=$levelName.':'.$third_level_rate/100*$price.'元';
- $commission_third_arr3[]=$levelName.':'.($price-($third_level_rate/100*$price)-$cost_price).'元';
- $commission_third_arr4[]=$levelName.':'.round(($price-($third_level_rate/100*$cost_price)-$cost_price)/$cost_price,2).'%';
- }*/
- }
- $max_commission_first_price=$max_first_rate/100*$price;
- $max_commission_second_price=$max_second_rate/100*$price;
- $max_price_arr=[$max_member_price,$jfzgdkje];
- if($l['qtj_status']==1&&$l['alone_rule']==1){
- array_push($max_price_arr,$qyjyh);
- }
- if($deduction_set==1){
- array_push($max_price_arr,$price*$deduction_set_max/100);
- }
- if($commission_goods['is_commission']==1&& $commission_goods['has_commission']==1){
- array_push($max_price_arr,$max_commission_first_price,$max_commission_second_price);
- }
- $max_price=array_sum($max_price_arr);
- $record = [
- 'goods_id' => $l['id'],
- 'goods_option_id'=>$l['goods_option_id'],
- 'product_price' => $price,
- 'cost_price' => $cost_price,
- 'max_price'=>$max_price
- ];
- $sf_price=$price-$max_price;
- if ($record['product_price'] <= $record['cost_price']||$sf_price<=$record['cost_price']) {
- //DB::table('yz_goods')->where('id',$record['goods_id'])->update(['status'=>0]);
- $alert[] = $record;
- }
- }
- return $alert;
- }
- }
|