| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\alliance\models\purchase;
- use app\modules\admin\models\PlatformForm;
- use app\models\PurchaseCart;
- use yii\base\Model;
- class CartForm extends Model
- {
- public $saas_id;
- public $store_id;
- public $goods_id;
- public $attr;
- public $num;
- public $cart_id_list;
- public $attr_list;
- public function rules()
- {
- return [
- //[['goods_id', 'attr', 'num','cart_id_list'], 'required'],
- [['goods_id', 'num','saas_id'], 'integer'],
- [['num'], 'integer', 'min' => 1],
- [['attr'],'string'],
- [['cart_id_list', 'attr_list'],'safe']
- ];
- }
- public function save()
- {
- try {
- if (!$this->validate()) {
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0]
- ];
- }
- $form = new PlatformForm();
- $form->id = $this->goods_id;
- $glist = $form->goodsInfo();
- $goods = '';
- if($glist['code'] == 0 && $glist['data']['count'] == 1){
- $goods = $glist['data']['list'][0];
- }
- if (!$goods) {
- return [
- 'code' => 1,
- 'msg' => '商品不存在或已下架',
- ];
- }
- $this->attr = json_decode($this->attr, true);
- $attr = [];
- foreach ($this->attr as $item) {
- if (!empty($item['attr_id'])) {
- $attr[] = intval($item['attr_id']);
- }
- }
- sort($attr);
- $attr = json_encode($attr, JSON_UNESCAPED_UNICODE);
- $cart = PurchaseCart::findOne([
- 'store_id' => $this->store_id,
- 'goods_id' => $this->goods_id,
- 'saas_id' => $this->saas_id,
- //'md_id' => get_md_id(),
- 'is_delete' => 0,
- 'attr' => $attr,
- ]);
- if (!$cart) {
- $cart = new PurchaseCart();
- $cart->store_id = $this->store_id;
- $cart->goods_id = $this->goods_id;
- $cart->saas_id = $this->saas_id;
- $cart->num = 0;
- $cart->created_at = time();
- $cart->is_delete = 0;
- $cart->attr = $attr;
- // if (get_md_id()) {
- // $cart->md_id = get_md_id();
- // }
- }
- $cart->num += $this->num;
- if ($cart->save()) {
- return [
- 'code' => 0,
- 'msg' => '添加购物车成功',
- ];
- } else {
- return ['code' => 1, 'msg' => $cart->errors[0]];
- }
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage() . 'line=' . $e->getLine()
- ];
- }
- }
- public function del()
- {
- if (!$this->validate()) {
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0]
- ];
- }
- $del = PurchaseCart::updateAll(['is_delete'=>1], [
- 'is_delete' => 0,
- 'saas_id' => $this->saas_id,
- 'id' => $this->cart_id_list,
- ]);
- if($del){
- return [
- 'code' => 0,
- 'msg' => '删除完成',
- ];
- }
- return [
- 'code' => 1,
- 'msg' => '操作失败',
- ];
- }
- public function search()
- {
- if(isset($this->attr_list) && !empty($this->attr_list) && !empty($this->goods_id)){
- $list = [];
- foreach ($this->attr_list as $value){
- $attr = [];
- foreach (json_decode($value['attr'], true) as $item) {
- if (!empty($item['attr_id'])) {
- $attr[] = intval($item['attr_id']);
- }
- }
- sort($attr);
- $list[] = [
- 'id' => 0,
- 'goods_id' => $this->goods_id,
- 'attr' => json_encode($attr),
- 'num' => $value['num'],
- ];
- }
- $count = count($this->attr_list);
- }else{
- $query = PurchaseCart::find()->asArray()->where(['saas_id' => $this->saas_id, 'is_delete' => 0]);
- if($this->store_id > 0){
- $query->andWhere(['store_id' => $this->store_id]);
- }
- if($this->cart_id_list){
- $query->andWhere(['id' => $this->cart_id_list]);
- }
- $count = $query->count();
- $list = $query->orderBy('created_at DESC')->all();
- }
- $form = new PlatformForm();
- $form->ids = implode(',', array_column($list, 'goods_id'));
- $form->is_self = 1;
- $goods_list = $form->goodsInfo();
- if ($goods_list['code'] == 0) {
- foreach ($list as $i => &$goods_item) {
- foreach ($goods_list['data']['list'] as $cloud_goods) {
- if (intval($goods_item['goods_id']) === intval($cloud_goods['id'])) {
- $goods_item['goods'] = $cloud_goods;
- }
- }
- }
- }
- $price_total = 0;
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'count' => $count,
- 'data' => self::cartGoodsList($list, $price_total),
- 'price_total' => $price_total,
- ];
- }
-
- public static function cartGoodsList($goodsList = [], &$priceTotal = 0) {
- $glist = [];
- foreach ($goodsList as $item){
- if (!$item['goods']) {
- continue;
- }
- $_glist = [
- 'attr' => $item['attr'],
- 'num' => $item['num'],
- 'cart_id' => $item['id'],
- ];
- $goodsId = $item['goods_id'];
- $supplier = \app\models\Supplier::findOne(['cloud_supplier_id' => $item['goods']['supplier']['id']]);
- if($supplier){
- $item['goods'] = \app\modules\admin\models\jushuitan\JuShuiTanForm::syncSupplierJstGoodsQty($supplier['id'], $item['goods']);
- }
- $glist[$goodsId]['goods'] = $item['goods'];
- $glist[$goodsId]['cart_num'] = 0;
- $_attrParent = [];
- foreach($item['goods']['AttrGroupList'] as $ag){
- foreach ($ag['attr_list'] as $at) {
- $_attrParent[$at['attr_id']] = $ag;
- }
- }
- $attrs = json_decode($item['goods']['attrs'], true);
- foreach ($attrs as $gattr){
- $_attrs = [];
- $_arr = [];
- foreach ($gattr['attr_list'] as $_item){
- $_arr[] = intval($_item['attr_id']);
- $_attrs[] = [
- 'attr_group_id' => $_attrParent[intval($_item['attr_id'])]['attr_group_id'],
- 'attr_group_name' => $_attrParent[intval($_item['attr_id'])]['attr_group_name'],
- 'attr_id' => intval($_item['attr_id']),
- 'attr_name' => $_item['attr_name'],
- ];
- }
- sort($_arr);
- if($item['attr'] == json_encode($_arr)){
- $_glist['price'] = sprintf("%.2f",($gattr['wholesale_price'] ?? $gattr['price']));
- $_glist['pic'] = $gattr['pic'];
- $_glist['stock'] = $gattr['num'];
- $_glist['attr_list'] = $_attrs;
- $priceTotal += $_glist['price'] * $_glist['num'];
- $glist[$goodsId]['cart_num'] += $_glist['num'];
- }
- }
- $give_goods_list = [];
- if (intval($item['goods']['goods_full_give_switch']) === 1) {
- foreach ($item['goods']['give_goods_list'] as $give_goods_item) {
- if ($give_goods_item['num'] <= $glist[$goodsId]['cart_num']) {
- $give_goods_list[] = $give_goods_item;
- }
- }
- }
- $glist[$goodsId]['give_goods_list'] = $give_goods_list;
- $glist[$goodsId]['cart'][] = $_glist;
- }
- $res = [];
- foreach ($glist as $g) {
- $supplier = $g['goods']['supplier'];
- $res[$supplier['id']]['supplier'] = $supplier;
- $res[$supplier['id']]['supplier_price'] = 0;
- $discount = 1;
- if(!empty($g['goods']['wholesale_ladder_rebate']) && (int)$g['goods']['wholesale_rebate_switch'] === 1){
- $last_names = array_column($g['goods']['wholesale_ladder_rebate'],'num');
- array_multisort($last_names, SORT_ASC, $g['goods']['wholesale_ladder_rebate']);
- foreach($g['goods']['wholesale_ladder_rebate'] as $item){
- if($g['cart_num'] >= $item['num']){
- $discount = sprintf("%.2f",$item['discount'] / 10);
- if ((int)$g['goods']['wholesale_ladder_type'] === 1) {
- $discount = $item['discount'];
- }
- }
- }
- }
- foreach($g['cart'] as &$value){
- $value['original_price'] = $value['price'];
- $value['price'] = sprintf("%.2f",$value['price'] * 1);
- $value['cart_price'] = sprintf("%.2f",$value['price'] * $value['num']);
- if ((int)$g['goods']['wholesale_ladder_type'] === 1) {
- $res[$supplier['id']]['supplier_price'] += sprintf("%.2f",($discount * $value['num'])) * 1;
- } else {
- $res[$supplier['id']]['supplier_price'] += sprintf("%.2f",($value['price'] * $value['num'] * $discount)) * 1;
- }
- }
- $res[$supplier['id']]['goods_list'][] = $g;
- }
- $res = array_values($res);
- return $res;
- }
- }
|