ShoppingCartService.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace addons\QiJuhe\common\service;
  3. use addons\QiJuhe\common\enums\QiJuheEnum;
  4. use addons\QiJuhe\common\models\GoodsModel;
  5. use addons\QiJuhe\common\models\GoodsSkuModel;
  6. use addons\QiJuhe\common\models\SupplysModel;
  7. use common\enums\AddonsEnum;
  8. use common\enums\StatusEnum;
  9. use yii\helpers\Json;
  10. class ShoppingCartService
  11. {
  12. public function cartListAppendFields($params)
  13. {
  14. $data = $params['data'];
  15. if (empty($data)) return $data;
  16. $mall_id = $params['mall_id'];
  17. $config = (new SettingService(['mall_id' => $mall_id]))->getSetting();
  18. if (empty($config['is_enable_shopping_cart_settle'])) return $data;
  19. $source_list = [];
  20. $rate = 1;
  21. foreach ($data as $k => $v) {
  22. $list = $v['list'];
  23. foreach ($list as $lk => $item) {
  24. if ($item['goods_source'] == AddonsEnum::ADDONS_NAME_QI_JUHE) {
  25. // 取出当前商品所属供应链
  26. $sku = GoodsSkuModel::getSku($item['goods_id'], $item['attr_id']);
  27. $g = GoodsModel::findOne(['goods_id' => $sku->supply_goods_id, 'mall_id' => $mall_id]);
  28. $item['cost_price'] = $item['price']; // 销售价
  29. $item['member_buy_limit_num'] = $g->min_buy_qty; // 最低加购量
  30. if ($g->source == QiJuheEnum::FREE_SHIPPING_SOURCE && $g->source_name == QiJuheEnum::FREE_SHIPPING_SOURCE_NAME) { // 满59 免邮
  31. $item['supply_chain'] = $g->source;
  32. // $supply = SupplysModel::findOne(['id' => $sku->supply_id]);
  33. // $sell = Json::decode(!empty($supply->sell) ? $supply->sell : '[]');
  34. // if (!empty($sell['sell_agreement'])) {
  35. // $rate = bcmul($sell['sell_agreement'], 0.01, 2);
  36. // }
  37. // $item['cost_price'] = bcmul($g->agreement_price, $rate * 0.01, 2);
  38. // $api = ApiService::getConnect($mall_id, $sku->supply_id);
  39. // $goodsInfo = $api->goodsInfo([$sku->supply_goods_id]);
  40. // if (!empty($goodsInfo[0])) {
  41. // $item['cost_price'] = bcmul($goodsInfo[0]['agreement_price'], $rate * 0.01, 2); // 取协议价
  42. // }
  43. }
  44. // 需要加一个
  45. $source_list[] = $item;
  46. unset($list[$lk]);
  47. }
  48. }
  49. if (!empty($list)) {
  50. $data[$k]['list'] = $list;
  51. } else {
  52. unset($data[$k]);
  53. }
  54. }
  55. if (!empty($source_list)) {
  56. $data[] = [
  57. 'id' => AddonsEnum::ADDONS_NAME_QI_JUHE,
  58. 'mch_name' => $config['shopping_cart_mall_name'],
  59. 'mch_pic' => $config['shopping_cart_mall_logo'],
  60. 'list' => $source_list,
  61. 'deduct' => [
  62. 'free_shipping' => [
  63. 120 => bcmul($config['shopping_cart_free_amount'] ?? 59, $rate, 2)
  64. ]
  65. ]
  66. ];
  67. }
  68. foreach ($data as &$datum) {
  69. $datum['list'] = array_values($datum['list']);
  70. }
  71. $data = array_values($data);
  72. return $data;
  73. }
  74. /**
  75. * @param array $params
  76. * @return array
  77. */
  78. public function globalGoodsDetail($params)
  79. {
  80. if (empty($params)) return $params;
  81. $goods = $params['goods'];
  82. if (!empty($goods['goods_source']) && $goods['goods_source'] != QiJuheEnum::PLUGIN_SIGN) return $params;
  83. $mall_id = $params['mall_id'];
  84. $params['goods'] = ShoppingCartService::getCanAddToCart($params['goods'], $mall_id);
  85. return $params;
  86. }
  87. /**
  88. * 判断是否能过加入到购物车
  89. * @param $goods
  90. * @param $mall_id
  91. * @return mixed
  92. */
  93. public static function getCanAddToCart($goods, $mall_id)
  94. {
  95. $config = (new SettingService(['mall_id' => $mall_id]))->getSetting();
  96. if (!empty($config['is_enable_shopping_cart_settle'])) $goods['can_add_to_cart'] = StatusEnum::ENABLED;
  97. // 最低限购
  98. $sku = GoodsSkuModel::findOne(['goods_id' => $goods['id'], 'mall_id' => $mall_id]);
  99. if (!empty($sku)) {
  100. $goods['member_buy_limit_setting']['nums'] = (int) GoodsModel::find()->where(['goods_id' => $sku->supply_goods_id, 'mall_id' => $mall_id])
  101. ->select('min_buy_qty')->scalar();
  102. }
  103. return $goods;
  104. }
  105. }