| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- /*
- * @Author: your name
- * @Date: 2021-03-02 09:50:20
- * @LastEditTime: 2021-05-12 10:48:03
- * @LastEditors: Please set LastEditors
- * @Description: In User Settings Edit
- * @FilePath: \admin_php\modules\client\models\v1\GoodsAttrInfoForm.php
- */
- namespace app\modules\alliance\models;
- use app\models\ActivityNewUser;
- use app\models\ActivityNewUserGoods;
- use app\models\Goods;
- use app\models\GoodsFullMinus;
- use app\models\MdGoods;
- use app\models\PtActivity;
- use app\models\PtActivityGoods;
- use app\models\SeckillActivity;
- use app\models\SeckillActivityGoods;
- use app\models\SupplierSetting;
- use app\models\User;
- use app\modules\alliance\models\common\CommonGoods;
- use yii\base\Model;
- class GoodsAttrInfoForm extends Model
- {
- public $goods_id;
- public $attr_list;
- public $type;
- public $number;
- public $is_pt;
- public $is_seckill;
- public $miaosha_goods;
- public function rules()
- {
- return [
- [['goods_id', 'attr_list','number'], 'required'],
- [['type'], 'default', 'value' => 's'],
- [['is_pt', 'is_seckill'], 'safe']
- ];
- }
- public function search()
- {
- if (!$this->validate()) {
- return ['code' => 1, 'msg' => $this->getErrorSummary(false)[0]];
- }
- // app端传递$this->attr_list="a,b" 或 a,小程序端传递参数$this->attr_list="[a,b]"
- $attr_list = json_decode($this->attr_list, true);
- if (!is_array($attr_list)) {
- $attr_list = explode(',', $this->attr_list);
- }
- $this->attr_list = $attr_list;
- $goods = Goods::findOne($this->goods_id);
- if (!$goods) {
- return [
- 'code' => 0,
- 'msg' => '商品不存在'
- ];
- }
- // $res = $goods->getAttrInfo($this->attr_list);
- foreach ($this->attr_list as $index => $value) {
- if ($value < 0) {
- unset($this->attr_list[$index]);
- }
- }
- $this->attr_list = array_values($this->attr_list);
- $GoodsFullMinus = GoodsFullMinus::find()
- ->select('*')
- ->where(['store_id' => get_store_id(),'goods_id' => $goods->id])
- ->orderBy('full_minus_num ASC')->asArray()->all();
- // 门店逻辑
- $attr = $goods->attr;
- $price = $goods->price;
- if (get_md_id()) {
- $md_goods = MdGoods::findOne(['goods_id' => $goods->id, 'md_id' => get_md_id()]);
- if ($md_goods) {
- $attr = $md_goods->attr;
- $price = $md_goods->price;
- }
- }
- $seckill_activity_goods = [];
- if ($this->is_seckill) {
- //秒杀活动
- $seckill_activity_goods = SeckillActivityGoods::find()->alias('sag')->where(['sag.goods_id' => $goods->id])
- ->leftJoin(['sa' => SeckillActivity::tableName()], 'sag.activity_id = sa.id')
- ->andWhere(['AND', ['sa.is_delete' => 0, 'sag.is_delete' => 0], ['>', 'sa.end_time', time()]])
- ->andWhere(['OR', ['sa.is_platform' => 1, 'sa.is_platform_audit' => 1, 'sa.status' => 1], ['sa.is_platform' => 0]])
- ->select('sa.id, sa.self_limit_num, sa.order_limit_num, sa.start_time, sa.end_time, sag.attr, sag.seckill_num, sag.seckill_price, sag.use_attr, sag.sale_num, sag.virtual_sales')->asArray()->all();
- }
- $seckill_activity_arr = [];
- if (!empty($seckill_activity_goods)) {
- $last_names = array_column($seckill_activity_goods,'start_time');
- array_multisort($last_names, SORT_ASC, $seckill_activity_goods);
- foreach ($seckill_activity_goods as $activity_good) {
- $activity_good['progress'] = sprintf('%.2f', (($activity_good['sale_num'] + $activity_good['virtual_sales']) / ($activity_good['seckill_num'] + $activity_good['virtual_sales'])) * 100);
- $activity_good['price'] = $goods->price;
- if ($activity_good['start_time'] < time()) { //活动进行中 前端展示距离结束
- $activity_good['status'] = 1;
- $seckill_activity_arr = $activity_good;
- goto seckill_activity_arr;
- }
- if ($activity_good['start_time'] >= time()) {//活动进行中 前端展示距离开始
- $activity_good['status'] = 2;
- $seckill_activity_arr = $activity_good;
- goto seckill_activity_arr;
- }
- }
- seckill_activity_arr:
- }
- if (!empty($seckill_activity_arr)) {
- $seckill_activity_arr['attr'] = json_decode($seckill_activity_arr['attr'], true);
- $GoodsFullMinus = [];
- $goods->is_level = 0;
- // if ((int)$goods->use_attr === 1 && !empty($seckill_activity_arr['attr'])) {
- $open = false;
- foreach ($seckill_activity_arr['attr'] as $sag_attr) {
- $sag_attr_id = array_column($sag_attr['attr_list'], 'attr_id');
- $new_attr[] = $sag_attr;
- //与购物车添加的规格id数组比较
- if (empty(array_diff($sag_attr_id, $this->attr_list))) {
- $open = true;
- }
- }
- if ($open) {
- foreach ($seckill_activity_arr['attr'] as &$sag_attr) {
- $num = $sag_attr['seckill_num'];
- $sag_attr['price'] = $sag_attr['seckill_price'];
- $sag_attr['num'] = $num > 0 ? $num : 0;
- }
- $attr = json_encode($seckill_activity_arr['attr']);
- }
- $price = $seckill_activity_arr['attr'][0]['seckill_price'];
- // } else {
- // $price = $seckill_activity_arr['attr'][0]['seckill_price'];
- // }
- }
- $is_level = $goods->is_level;
- //新人专享活动
- $activityAt = ActivityNewUser::activityAt($goods->store_id);
- if ($activityAt) {
- $goods_ext = ActivityNewUserGoods::findOne(['activity_id' => $activityAt->id, 'goods_id' => $goods->id, 'is_delete' => 0]);
- if ($goods_ext) {
- $ext_attrs = json_decode($goods_ext->attr, true);
- $ext_price = 0;
- foreach($ext_attrs as $ext_attr){
- $ext_attr_id = array_column($ext_attr['attr_list'], 'attr_id');
- sort($ext_attr_id);
- sort($this->attr_list);
- //与购物车添加的规格id数组比较
- // array_splice($this->attr_list, 0, 1);
- if (empty(array_diff($ext_attr_id, $this->attr_list))) {
- $ext_price = $ext_attr['price'];
- }
- }
- $buy_limit = $activityAt->buy_limit;
- if ($buy_limit && $buy_limit > 0) {
- //部分享受优惠
- $user = User::findOne(['binding' => get_saas_user()->mobile, 'store_id' => $goods->store_id, 'is_delete' => 0]);
- $goodsNum = intval(Goods::getBuyNum($user, $goods->id));
- if ($goodsNum < $buy_limit) {
- $price = $ext_price ?: $price;
- $attr = json_encode($ext_attrs);
- }
- }
- }
- }
- //拼团活动
- if ((int)$this->is_pt) {
- $pt_activity_goods = PtActivityGoods::find()->alias('pag')->where(['pag.goods_id' => $goods->id])
- ->leftJoin(['pa' => PtActivity::tableName()], 'pag.activity_id = pa.id')
- ->andWhere(['AND', ['pa.is_delete' => 0, 'pag.is_delete' => 0], ['>', 'pa.end_time', time()], ['<', 'start_time', time()]])
- ->andWhere(['OR', ['pa.is_platform' => 1, 'pa.is_platform_audit' => 1, 'pa.status' => 1], ['pa.is_platform' => 0]])
- ->select('pa.id, pa.party_size, pa.party_type, pa.party_goods_count, pa.join_num, pa.start_time, pa.end_time, pag.attr, pag.pt_price, pag.use_attr, pag.sale_num, pag.virtual_sales')->asArray()->one();
- if (!empty($pt_activity_goods)) {
- $pt_activity_goods['attr'] = json_decode($pt_activity_goods['attr'], true);
- $open = false;
- foreach ($pt_activity_goods['attr'] as &$pt_attr) {
- $pt_attr_id = array_column($pt_attr['attr_list'], 'attr_id');
- sort($pt_attr_id);
- sort($this->attr_list);
- //与购物车添加的规格id数组比较
- // array_splice($this->attr_list, 0, 1);
- if (empty(array_diff($pt_attr_id, $this->attr_list))) {
- $open = true;
- $pt_attr['price'] = $pt_attr['pt_price'];
- }
- }
- if ($open) {
- $attr = json_encode($pt_activity_goods['attr']);
- }
- $price = $pt_activity_goods['attr'][0]['pt_price'];
- }
- $is_level = false;
- }
- $goodsData = [
- 'attr' => $attr,
- 'price' => $price,
- 'is_level' => $is_level,
- 'mch_id' => $goods->mch_id,
- 'full_minus' => $GoodsFullMinus,
- 'unit' => $goods->unit,
- 'use_attr' => $goods->use_attr,
- ];
- $res = CommonGoods::currentGoodsAttr($goodsData, (array) $this->attr_list, [], $this->number);
- return [
- 'code' => 0,
- 'data' => $res
- ];
- }
- }
|