Product.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. <?php
  2. namespace app\controller\admin\gong;
  3. use app\common\repositories\store\product\ProductRepository;
  4. use crmeb\basic\BaseController;
  5. use think\facade\Db;
  6. class Product extends BaseController
  7. {
  8. protected $chengben = 0.13;
  9. protected $lingshou = 0.65;
  10. protected $ot = 0.8;
  11. //商品列表
  12. public function lst()
  13. {
  14. $mer_id=$this->request->merId();
  15. $chengbenjiabili=0.04;
  16. $lingshoujiabili=0.3;
  17. [$page, $limit] = $this->getPage();
  18. $params=$this->request->param();
  19. $product_sql=Db::name('douhuomall')->where('status',1)->field('spu_id,title,cost_price,market_price,profit,spuId_info');
  20. $count=$product_sql->count('spu_id');
  21. $product_sql=$this->product_where($product_sql,$params);
  22. $product_lst=$product_sql->page($page,$limit)->select()->toArray();
  23. foreach ($product_lst as $k=>&$v){
  24. if(isset($v['is_show'])){
  25. $v['is_show']=(int)$v['is_show'];
  26. }
  27. //商品图片处理
  28. $v['spuId_info']=json_decode($v['spuId_info'],true);
  29. $v['img']=$v['spuId_info']['cover_url'];
  30. unset($v['spuId_info']);
  31. $store_product_data=Db::name('store_product')->where('mer_id',$mer_id)->where('spu_id',$v['spu_id'])->value('product_id');
  32. if($store_product_data){
  33. $v['is_join']=0;
  34. }else{
  35. $v['is_join']=1;
  36. }
  37. $cost_price = $v['cost_price'];
  38. //成本价 加价
  39. $product_lst[$k]['cost_price'] = sprintf("%01.2f", $cost_price + $cost_price * $this -> chengben);//四舍五入保留两位小数
  40. //零售价 加价
  41. $product_lst[$k]['market_price']= sprintf("%01.2f", $cost_price + $cost_price * $this -> lingshou);//四舍五入保留两位小数
  42. //最小利润
  43. $product_lst[$k]['small_profit']=bcsub($product_lst[$k]['market_price'],$product_lst[$k]['cost_price'],2);
  44. //利润率
  45. $product_lst[$k]['profit'] = sprintf("%01.2f", ($product_lst[$k]['market_price'] - $product_lst[$k]['cost_price']) / $product_lst[$k]['cost_price']);//四舍五入保留两位小数
  46. // //利润率处理
  47. // $v['profit']=explode('.',$v['profit']);
  48. // if($v['profit'][1]=='00'){
  49. // $v['profit']=$v['profit'][0].'%';
  50. // }else{
  51. // $v['profit']=$v['profit'][0].'.'.$v['profit'][1].'%';
  52. // }
  53. }
  54. $retrun_data=[
  55. 'count'=>$count,
  56. 'data'=>$product_lst
  57. ];
  58. return app('json')->success($retrun_data);
  59. }
  60. public function product_where($sql,$where)
  61. {
  62. //商品名称
  63. if (isset($where['title'])&&$where['title']!=''){
  64. $sql->whereLike('title','%'.$where['title'].'%');
  65. }
  66. //商品分类
  67. if (isset($where['cate_ids'])&&$where['cate_ids']!==''){
  68. $sql->whereLike('cate_ids',$where['cate_ids'].',%');
  69. }
  70. //最高利润率
  71. if(isset($where['profit_max'])&&$where['profit_max']){
  72. $sql->where('profit','<',$where['profit_max']);
  73. }
  74. //最低利润率
  75. if(isset($where['profit_small'])&&$where['profit_small']){
  76. $sql->where('profit','>',$where['profit_small']);
  77. }
  78. //成本价
  79. if (isset($where['cost_price'])&&$where['cost_price']==1){
  80. $sql->order('cost_price','desc');
  81. }elseif(isset($where['cost_price'])&&$where['cost_price']==2){
  82. $sql->order('cost_price','asc');
  83. }
  84. //零售价
  85. if (isset($where['market_price'])&&$where['market_price']==1){
  86. $sql->order('market_price','desc');
  87. }elseif(isset($where['cost_price'])&&$where['market_price']==2){
  88. $sql->order('market_price','asc');
  89. }
  90. return $sql;
  91. }
  92. //分类列表
  93. public function get_category()
  94. {
  95. [$page, $limit] = $this->getPage();
  96. $data=Db::name('douhuomall_category')->page($page,$limit)->select()->toArray();
  97. $count=Db::name('douhuomall_category')->count('id');
  98. $retrun_data=[
  99. 'count'=>$count,
  100. 'data'=>$data
  101. ];
  102. return app('json')->success($retrun_data);
  103. }
  104. //商品详情
  105. public function product_details($spu_id)
  106. {
  107. $chengbenjiabili=0.04;
  108. $lingshoujiabili=0.3;
  109. $product_data=Db::name('douhuomall')->where('spu_id',$spu_id)->field('skuId_info,spuId_info,cost_price,market_price,profit')->find();
  110. $product_data['spuId_info']=json_decode($product_data['spuId_info'],true);
  111. // foreach ($product_data['spuId_info'] as $k=> &$spuid){
  112. //成本价 成本价=供应链成本价+供应链成本价*成本价加价比例
  113. // $product_data['cost_price']=bcadd(bcmul($product_data['cost_price'],$chengbenjiabili,2),$product_data['cost_price'],2);
  114. // //零售价 零售价=平台成本价+平台成本价*零售价格加价比例
  115. // $product_data['market_price']=bcadd($product_data['cost_price'],bcmul($product_data['cost_price'],$lingshoujiabili,2),2);
  116. // $product_data['retail_price']=$product_data['market_price'];
  117. $cost_price = $product_data['cost_price'];
  118. //成本价 加价45%
  119. $product_data['cost_price'] = sprintf("%01.2f", $cost_price + $cost_price * $this -> chengben);//四舍五入保留两位小数
  120. //零售价 加价65%
  121. $product_data['market_price']= sprintf("%01.2f", $cost_price + $cost_price * $this -> lingshou);//四舍五入保留两位小数
  122. $product_data['retail_price']=$product_data['market_price'];
  123. // }
  124. $product_data['skuId_info']=json_decode($product_data['skuId_info'],true);
  125. foreach ($product_data['skuId_info'] as &$skuId){
  126. // //成本价 成本价=供应链成本价+供应链成本价*成本价加价比例
  127. // $skuId['cost_price']=bcadd(bcmul($skuId['cost_price'],$chengbenjiabili,2),$skuId['cost_price'],2);
  128. // //零售价 零售价=平台成本价+平台成本价*零售价格加价比例
  129. // $skuId['market_price']=bcadd($skuId['cost_price'],bcmul($skuId['cost_price'],$lingshoujiabili,2),2);
  130. // $skuId['retail_price']=$skuId['market_price'];
  131. // $sku_cost_price = $product_data['cost_price'];
  132. // //成本价 加价45%
  133. // $product_data['cost_price'] = sprintf("%01.2f", $sku_cost_price + $sku_cost_price * 0.45);//四舍五入保留两位小数
  134. // //零售价 加价65%
  135. // $product_data['market_price']= sprintf("%01.2f", $sku_cost_price + $sku_cost_price * 0.65);//四舍五入保留两位小数
  136. // $product_data['retail_price']=$product_data['market_price'];
  137. $name='';
  138. foreach($skuId['attribute_json'] as $k=>$v){
  139. // $skuId['attribute_json']=$skuId['attribute_json'][0]['val'].$skuId['attribute_json'][1]['val'];
  140. $name.=$v['val'];
  141. }
  142. $skuId['attribute_json']=$name;
  143. }
  144. return app('json')->success($product_data);
  145. }
  146. //加入选品库
  147. public function join_selection_library()
  148. {
  149. $data = $this->request->params(['spu_id']);
  150. $spu_id = $data['spu_id'];
  151. $mer_id=$this->request->merId();
  152. $store_product_data=Db::name('store_product')->where('mer_id',$mer_id)->where('spu_id',$spu_id)->value('product_id');
  153. if($store_product_data)
  154. return app('json')->fail('此商品已加入选品库');
  155. $cate_id=$this->request->param('cate_id','');
  156. if($cate_id==''){
  157. return app('json')->fail('请选择分类ID');
  158. }
  159. $chengbenjiabili=0.04;
  160. $lingshoujiabili=0.3;
  161. $data=Db::name('douhuomall')->where('spu_id',$spu_id)->find();
  162. //最低售价
  163. $sku_data=json_decode($data['skuId_info'],true);
  164. $spec_type=count($sku_data);
  165. if($spec_type>1){
  166. $spec_type=1;
  167. }else{
  168. $spec_type=0;
  169. }
  170. // $price=array_column($sku_data,'cost_price_f');//使用加完运费的成本价 原成本价字段是 cost_price
  171. // //成本价 成本价=供应链成本价+供应链成本价*成本价加价比例
  172. // $cost_price=bcadd(bcmul(min($price),$chengbenjiabili,2),min($price),2);
  173. // //零售价 零售价=平台成本价+平台成本价*零售价格加价比例
  174. // $price=bcadd($cost_price,bcmul($cost_price,$lingshoujiabili,2),2);
  175. $cost_price_g = $data['cost_price'];
  176. //成本价 加价
  177. $cost_price = sprintf("%01.2f", $cost_price_g + $cost_price_g * $this -> chengben);//四舍五入保留两位小数
  178. //零售价 加价
  179. $price= sprintf("%01.2f", $cost_price_g + $cost_price_g * $this -> lingshou);//四舍五入保留两位小数
  180. //零售价 加价
  181. $ot_price= sprintf("%01.2f", $cost_price_g + $cost_price_g * $this -> ot);//四舍五入保留两位小数
  182. //商品主图
  183. $spuId_info=json_decode($data['spuId_info'],true);
  184. $slider_image=$spuId_info['detail_img_list']??'';
  185. $image=$spuId_info['cover_url']??'';
  186. try {
  187. $slider_image = implode(',',json_decode($slider_image,true));
  188. }catch (\Exception $exception){
  189. $slider_image = $image;
  190. }
  191. //商品入库数据
  192. $product_insert_data=[
  193. 'mer_id'=>$mer_id,
  194. 'image'=>$image,
  195. 'slider_image'=>$slider_image,
  196. 'store_name'=>$data['title'],
  197. 'store_info'=>1,
  198. 'keyword'=>mb_substr($data['title'],0,3),
  199. 'is_show'=>0,
  200. 'status'=>1,
  201. 'cate_id'=>$cate_id,
  202. 'unit_name'=>'个',
  203. 'price'=>$price,
  204. 'cost'=>$cost_price,
  205. 'ot_price'=>$ot_price,
  206. 'stock'=>'1000',
  207. 'spec_type'=>$spec_type,
  208. 'extension_type'=>1,
  209. 'mer_status'=>1,
  210. 'is_used'=>1,
  211. 'old_product_id'=>$data['id'],
  212. 'volunteer'=>0,
  213. 'type'=>1,
  214. 'pension'=>'0.00',
  215. 'commission'=>5,
  216. 'spu_id'=>$data['spu_id'],
  217. 'temp_id' => 105
  218. ];
  219. $insert_id=Db::name('store_product')->insertGetId($product_insert_data);
  220. // $insert_id=440;
  221. $detail = $spuId_info['detail'];
  222. if(!is_null(json_decode($detail))){
  223. $detail_list = json_decode($detail);
  224. $detail = '';
  225. foreach($detail_list as $value){
  226. $detail .= '<img src="'.$value.'"></img>';
  227. }
  228. }
  229. Db::name('store_product_content')->insert(['content'=>$detail,'product_id'=>$insert_id]);
  230. $this->insert_sku($insert_id,$sku_data);
  231. return app('json')->success('操作成功');
  232. }
  233. public function insert_sku($id,$data)
  234. {
  235. $chengbenjiabili=0.04;
  236. $lingshoujiabili=0.3;
  237. $sku_attr_data=array_column($data,'attribute_json');
  238. $name='';
  239. $ProductRepository = app()->make(ProductRepository::class);
  240. if(empty($sku_attr_data[0][0])){
  241. Db::name('store_product_attr')->insert(['product_id'=>$id,'attr_name'=>'规格','attr_values'=>$name]);
  242. $key='';
  243. $num=1;
  244. foreach ($data as $k=>$v){
  245. // $cost=bcadd(bcmul($v['cost_price_f'],$chengbenjiabili,2),$v['cost_price_f'],2);
  246. // $price=bcadd($cost,bcmul($cost,$lingshoujiabili,2),2);
  247. $cost = $v['cost_price'];
  248. //成本价 加价45%
  249. $v['cost_price'] = sprintf("%01.2f", $cost + $cost * $this -> chengben);//四舍五入保留两位小数
  250. //销售价 加价65%
  251. $price = sprintf("%01.2f", $cost + $cost * $this -> lingshou);//四舍五入保留两位小数
  252. //原价
  253. $ot_price = sprintf("%01.2f", $cost + $cost * $this -> ot);//四舍五入保留两位小数
  254. Db::name('store_product_attr_value')->insert([
  255. 'product_id'=>$id,
  256. 'detail'=>json_encode(['规格'=>$key]),
  257. 'sku'=>$key,
  258. 'image'=>$v['img_url'],
  259. 'cost'=>$v['cost_price'],
  260. 'ot_price'=>$ot_price,
  261. 'price'=>$price,
  262. 'unique'=>$ProductRepository->setUnique($id,'',0),
  263. 'stock'=>100,
  264. 'cost_price'=>$cost,
  265. 'extension_one'=>5,
  266. 'gong_sku_id'=>$v['sku_sn']
  267. ]);
  268. $key='';
  269. $num++;
  270. }
  271. }else{
  272. foreach ($sku_attr_data as $kk=>$vv){
  273. foreach ($vv as $k1=>$v1){
  274. $name.=$v1['val'];
  275. }
  276. $name.='-!-';
  277. }
  278. $name=rtrim($name,'-!-');
  279. Db::name('store_product_attr')->insert(['product_id'=>$id,'attr_name'=>'规格','attr_values'=>$name]);
  280. $key='';
  281. $num=1;
  282. foreach ($data as $k=>$v){
  283. foreach ($v['attribute_json'] as $k2=>$v2){
  284. $key.=$v2['val'];
  285. }
  286. // $cost=bcadd(bcmul($v['cost_price_f'],$chengbenjiabili,2),$v['cost_price_f'],2);
  287. // $price=bcadd($cost,bcmul($cost,$lingshoujiabili,2),2);
  288. $cost = $v['cost_price'];
  289. //成本价 加价45%
  290. $v['cost_price'] = sprintf("%01.2f", $cost + $cost * $this -> chengben);//四舍五入保留两位小数
  291. //销售价 加价65%
  292. $price = sprintf("%01.2f", $cost + $cost * $this -> lingshou);//四舍五入保留两位小数
  293. //原价
  294. $ot_price = sprintf("%01.2f", $cost + $cost * $this -> ot);//四舍五入保留两位小数
  295. Db::name('store_product_attr_value')->insert([
  296. 'product_id'=>$id,
  297. 'detail'=>json_encode(['规格'=>$key]),
  298. 'sku'=>$key,
  299. 'image'=>$v['img_url'],
  300. 'cost'=>$v['cost_price'],
  301. 'ot_price'=>$ot_price,
  302. 'price'=>$price,
  303. 'unique'=>$ProductRepository->setUnique($id,'',0),
  304. 'stock'=>100,
  305. 'cost_price'=>$cost,
  306. 'extension_one'=>5,
  307. 'gong_sku_id'=>$v['sku_sn']
  308. ]);
  309. $key='';
  310. $num++;
  311. }
  312. }
  313. }
  314. }