| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <?php
- namespace addons\CloudStock\common\services;
- use addons\CloudStock\common\enums\CloudStockEnum;
- use addons\CloudStock\common\events\order\CloudStockChangeSyncEvent;
- use addons\CloudStock\common\models\CloudStockAgent;
- use addons\CloudStock\common\models\CloudStockAgentGoods;
- use addons\CloudStock\common\models\CloudStockGiftPlan;
- use addons\CloudStock\common\models\CloudStockLevel;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use common\models\goods\Goods;
- use common\models\user\User;
- use yii\db\Expression;
- class CloudStockGiftPlanService extends BaseService
- {
- public function index($params)
- {
- $mall_id = $this->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']);
- }
- }
|