| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <?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\admin\models\cashier;
- use app\models\Attr;
- use app\models\Goods;
- use app\models\GoodsFullMinus;
- use app\models\MdGoods;
- use app\models\SeckillActivity;
- use app\models\SeckillActivityGoods;
- use app\models\SupplierSetting;
- use app\modules\client\models\v1\common\CommonGoods;
- use yii\base\Model;
- use app\models\User;
- use app\models\Level;
- use app\constants\OptionSetting;
- use app\models\Option;
- use app\models\SaasUser;
- class GoodsAttrInfoForm extends Model
- {
- public $goods_id;
- public $attr_list;
- public $type;
- public $number = 1;
- public $user_id;
- public $store_id;
- protected $user;
- protected $level;
- protected $address;
- protected $integral;
- protected $saas_user;
- public $miaosha_goods;
- public function rules()
- {
- return [
- [['goods_id', 'attr_list'], 'required'],
- [['user_id'], 'safe'],
- [['type'], 'default', 'value' => 's']
- ];
- }
- // 走过验证后 查询相应数据
- public function afterValidate()
- {
- $this->user = User::findOne($this->user_id);
- $this->level = $this->getLevelData();
- $this->integral = [
- 'forehead' => 0,
- 'forehead_integral' => 0,
- 'integration' => Option::get(OptionSetting::STORE_INTEGRATION, get_store_id(), 'gift', Option::get(OptionSetting::STORE_INTEGRATION, get_store_id(), 'store')['value'])['value']
- ];
- $this->saas_user = SaasUser::findOne(['mobile' => $this->user->binding]);
- parent::afterValidate();
- }
- protected function getLevelData()
- {
- $level = Level::find()->select([
- 'name', 'level', 'discount',
- ])->where(['level' => $this->user->level, 'store_id' => $this->store_id, 'is_delete' => 0])
- ->asArray()->one();
- return $level;
- }
- public function search()
- {
- if (!$this->validate()) {
- return ['code' => 1, 'msg' => $this->getErrorSummary(false)[0]];
- }
- $this->attr_list = json_decode($this->attr_list, true);
- $goods = Goods::findOne($this->goods_id);
- if (!$goods) {
- return [
- 'code' => 0,
- 'msg' => '商品不存在'
- ];
- }
- // $res = $goods->getAttrInfo($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 = 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], ['>', 'sa.end_time', time()], ['sag.is_delete' => 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'] - $seckill_activity_arr['sale_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'];
- // }
- }
- $otherData = [
- 'goods_id' => $goods->id,
- 'user_id' => $this->user_id
- ];
- $this->user && $otherData = array_merge($otherData, ['user'=> $this->user]);
- $goodsData = [
- 'attr' => $attr,
- 'price' => $price,
- 'is_level' => $goods->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, $otherData, $this->number);
- foreach($res['attr_list'] as &$item){
- $item['attr_group_id'] = Attr::findOne($item['attr_id'])->attr_group_id;
- }
- $warn_goods_timeout = Goods::warn_goods_timeout($goods->store_id);
- $res['timeout_day'] = $goods->time_made_day ? date('Y-m-d', $goods->time_made_day + 86400 * $goods->time_shelf_life) : '';
- $res['is_warn_goods_timeout'] = ($goods->time_made_day && ($goods->time_made_day + 86400 * $goods->time_shelf_life) < (time() + $warn_goods_timeout * 86400)) ? 1 : 0;
- return [
- 'code' => 0,
- 'data' => $res
- ];
- }
- }
|