mall_id; $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]; if (!empty($params['goods_id'])) { $goods_id = trim($params['goods_id']); $where[] = new Expression("FIND_IN_SET({$goods_id},goods_id)"); } $params['where'] = $where; $params['order'] = 'id desc'; $page_data = CloudStockGiftPlan::listPage($params, false); if (!empty($page_data['list'])) { $goods_ids = []; $level_arr = []; foreach ($page_data['list'] as &$item) { $item['goods_id'] = explode(',', $item['goods_id']); $item['give_goods_id'] = explode(',', $item['give_goods_id']); foreach ($item['goods_id'] as $g_id) { $goods_ids[] = $g_id; } foreach ($item['give_goods_id'] as $g_id) { $goods_ids[] = $g_id; } $item['gift_condition_level'] = json_decode($item['gift_condition_level'], true); $level_arr = array_merge($level_arr, $item['gift_condition_level']); } $level_list = CloudStockLevel::lists([ 'where' => [ ['mall_id' => $params['mall_id']], ['level' => $level_arr], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]] ], 'index' => 'level', 'select' => 'level,name' ]); $goods_list = Goods::lists(['where' => [['id' => $goods_ids]], 'index' => 'id', 'select' => 'id,goods_name,cover_pic']); foreach ($page_data['list'] as &$item) { $temp_goods_list = []; $give_goods_list = []; $give_goods_num = json_decode($item['give_goods_num'], true); foreach ($item['goods_id'] as $g_id) { if (isset($goods_list[$g_id])) { $temp_goods_list[] = $goods_list[$g_id]; } } foreach ($item['give_goods_id'] as $g_id) { if (isset($goods_list[$g_id])) { $temp_give_goods_list = $goods_list[$g_id]; $temp_give_goods_list['num'] = $give_goods_num[$g_id] ?? 0; $give_goods_list[] = $temp_give_goods_list; } } $item['goods_list'] = $temp_goods_list; $item['give_goods_list'] = $give_goods_list; $gift_condition_text = '直推上级达到如下云库存代理等级'; foreach ($item['gift_condition_level'] as $level) { if (isset($level_list[$level])) { $gift_condition_text .= $level_list[$level]['name'] . '、'; } } $gift_condition_text = trim($gift_condition_text, '、'); $item['gift_condition_text'] = $gift_condition_text; $item['gift_recipient'] = '平台'; } } return $page_data; } public function edit($params) { $params['goods_id'] = implode(',', $params['goods_id']); $params['give_goods_id'] = implode(',', $params['give_goods_id']); $params['give_goods_num'] = json_encode(array_column($params['give_goods_list'], 'num', 'id')); if (empty($params['gift_condition_level'])) { $params['gift_condition_level'] = []; } $params['gift_condition_level'] = json_encode($params['gift_condition_level']); $res = CloudStockGiftPlan::setData($params); if (empty($res)) { throw new \Exception(CloudStockGiftPlan::$static_error); } return $res; } public function switchStatus($params) { $res = CloudStockGiftPlan::updateAll(['status' => $params['status']], ['id' => $params['id'], 'mall_id' => $this->mall_id]); if ($res === false) { throw new \Exception(CloudStockGiftPlan::$static_error); } return true; } public function del($params) { $mall_id = $this->mall_id; $model = CloudStockGiftPlan::findOne(['id' => $params['id'], 'mall_id' => $mall_id]); if (!empty($model)) { $model->status = StatusEnum::DELETE; $res = $model->save(); if ($res == false) { throw new \Exception($model->getErrorMessage()); } } return true; } public function detail($params) { $id = $params['id']; $data = CloudStockGiftPlan::getOne([['id' => $id]], true); $data['goods_id'] = explode(',', $data['goods_id']); $data['give_goods_id'] = explode(',', $data['give_goods_id']); $data['gift_condition_level'] = json_decode($data['gift_condition_level'], true); $goods_ids = []; foreach ($data['goods_id'] as $g_id) { $goods_ids[] = $g_id; } foreach ($data['give_goods_id'] as $g_id) { $goods_ids[] = $g_id; } $give_goods_num = json_decode($data['give_goods_num'], true); $main_goods_list = Goods::lists(['where' => [['id' => $goods_ids]], 'index' => 'id', 'select' => 'id,goods_name,cover_pic']); $goods_list = $give_goods_list = []; foreach ($data['goods_id'] as $id) { if (isset($main_goods_list[$id])) { $goods_list[] = $main_goods_list[$id]; } } foreach ($data['give_goods_id'] as $id) { if (isset($main_goods_list[$id])) { $temp_give_goods_list = $main_goods_list[$id]; $temp_give_goods_list['num'] = $give_goods_num[$id] ?? 0; $give_goods_list[] = $temp_give_goods_list; } } $data['goods_list'] = $goods_list; $data['give_goods_list'] = $give_goods_list; return $data; } public function give($params) { $mall_id = $this->mall_id; $user_id = $this->user_id; $gift_plan_give_type = $params['gift_plan_give_type']; $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic'); $configs['gift_plan_give_type'] = $configs['gift_plan_give_type'] ?? 0; if ($gift_plan_give_type != $configs['gift_plan_give_type']) { return false; } $user = User::findOne(['id' => $user_id]); if (empty($user['parent_id'])){ return false; } $agent = CloudStockAgent::findOne(['user_id' => $user['parent_id'], 'status' => StatusEnum::ENABLED]); if (empty($agent)) { return false; } $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; $goods_id = trim($params['goods_id']); $where[] = new Expression("FIND_IN_SET({$goods_id},goods_id)"); $params['where'] = $where; $params['order'] = 'id desc'; $list = CloudStockGiftPlan::lists($params); foreach ($list as &$item) { $gift_condition_level = json_decode($item['gift_condition_level'], true); if (!in_array($agent['level'], $gift_condition_level)) { continue; } $item['give_goods_id'] = explode(',', $item['give_goods_id']); $give_goods_num = json_decode($item['give_goods_num'], true); foreach ($item['give_goods_id'] as $g_id) { if (empty($give_goods_num[$g_id])) { continue; } $num = $give_goods_num[$g_id]; $params = [ 'mall_id' => $mall_id, 'user_id' => $user['parent_id'], 'goods_id' => $g_id, 'num' => $num, 'order_id' => $params['order_id'], 'changes_type' => CloudStockEnum::STOCK_CHANGE_TYPE107, 'changes_dir' => CloudStockEnum::STOCK_CHANGE_ADD, 'order_type' => CloudStockEnum::STOCK_ORDER_TYPE_USER, ]; $res = CloudStockAgentGoods::addData($params, $increase_detail); if (!$res) throw new \Exception(CloudStockAgentGoods::getStaticError()); //触发库存变动事件 if (isset($increase_detail)) { $event = new CloudStockChangeSyncEvent($params['mall_id']); $event_data = [ 'id' => $increase_detail->id, 'type' => CloudStockEnum::STOCK_CHANGE_ADD, 'mall_id' => $params['mall_id'], ]; \Yii::$app->services->events->dispatch($event, $event_data, $event->listeners); } } } CloudStockAgent::fixStock($mall_id, $user['parent_id']); } }