Batch.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\goods;
  11. use app\model\BaseModel;
  12. use app\model\storegoods\StoreGoods;
  13. use think\facade\Db;
  14. /**
  15. * 商品批量设置
  16. */
  17. class Batch extends BaseModel
  18. {
  19. /**
  20. * 批量设置
  21. * @param $params
  22. */
  23. public function setPrice($params)
  24. {
  25. $site_id = $params[ 'site_id' ];
  26. $type = $params[ 'type' ] ?? '';
  27. $price = $params[ 'price' ] ?? 0;
  28. $price_type = $params[ 'price_type' ] ?? '';
  29. $sign = $params[ 'sign' ] ?? '';
  30. $goods_ids = $params[ 'goods_ids' ] ?? '';
  31. $precise = $params[ 'precise' ] ?? '';
  32. $calculate_price_type = $params[ 'calculate_price_type' ] ?? '';
  33. $condition = array (
  34. [ 'site_id', '=', $site_id ],
  35. [ 'goods_id', 'in', $goods_ids ]
  36. );
  37. $price_field_data = array (
  38. 'sale' => 'price',
  39. 'cost' => 'cost_price',
  40. 'market' => 'market_price'
  41. );
  42. $price_field = $price_field_data[ $price_type ] ?? '';
  43. $todo_price = 0;
  44. switch ( $type ) {
  45. case 'money'://固定金额
  46. //批量给商品设置价格
  47. $todo_price = $price;
  48. $update_data = array (
  49. $price_field => $price
  50. );
  51. break;
  52. case 'calculate'://公式算法
  53. $calculate_price_field = $price_field_data[ $calculate_price_type ] ?? '';
  54. switch ( $sign ) {
  55. case 'add'://加法
  56. $sign_str = '+';
  57. break;
  58. case 'subtract'://减法
  59. $sign_str = '-';
  60. break;
  61. case 'multiply'://乘法
  62. $sign_str = '*';
  63. break;
  64. case 'division'://除法
  65. $sign_str = '/';
  66. break;
  67. }
  68. $calculate_str = $calculate_price_field . $sign_str . $price;
  69. switch ( $precise ) {
  70. case 1://全部保留
  71. $calculate_str = 'FLOOR((' . $calculate_str . ')*100)/100';
  72. break;
  73. case 2://抹分
  74. $calculate_str = 'FLOOR((' . $calculate_str . ')*10)/10';
  75. break;
  76. case 3://抹角
  77. $calculate_str = 'FLOOR(' . $calculate_str . ')';
  78. break;
  79. case 4://四舍五入到分
  80. $calculate_str = 'ROUND(' . $calculate_str . ', 2)';
  81. break;
  82. case 5://四舍五入到角
  83. $calculate_str = 'ROUND(' . $calculate_str . ', 1)';
  84. break;
  85. case 6://四舍五入到元
  86. $calculate_str = 'ROUND(' . $calculate_str . ')';
  87. break;
  88. }
  89. //todo mysql的 round函数和floor函数
  90. $update_data[ $price_field ] = Db::raw($calculate_str);
  91. $todo_price = $calculate_str;
  92. break;
  93. }
  94. model('goods')->update($update_data, $condition);
  95. //只有销售价被改动如果存在就忽略设置discount_price才会收到影响
  96. if ($price_type == 'sale') {
  97. //鉴于限时折扣活动的复杂性(商品关联限时折扣活动表,如果存在就忽略设置discount_price)
  98. $sku_update_data[ 'discount_price' ] = Db::raw('if(discount_price = price,' . $todo_price . ',discount_price)');
  99. $sku_update_data[ $price_field ] = $update_data[ $price_field ];
  100. model('goods_sku')->update($sku_update_data, $condition);
  101. }
  102. //如果销售价被改动,默认门店的价格也都会被改动
  103. if (in_array($price_type, [ 'sale', 'cost' ])) {
  104. $store_goods_model = new StoreGoods();
  105. $store_goods_model->syncGoodsData([ 'update_data' => $update_data, 'condition' => $condition, 'site_id' => $site_id ]);
  106. }
  107. return $this->success($update_data);
  108. }
  109. }