CloudStockGiftPlanService.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <?php
  2. namespace addons\CloudStock\common\services;
  3. use addons\CloudStock\common\enums\CloudStockEnum;
  4. use addons\CloudStock\common\events\order\CloudStockChangeSyncEvent;
  5. use addons\CloudStock\common\models\CloudStockAgent;
  6. use addons\CloudStock\common\models\CloudStockAgentGoods;
  7. use addons\CloudStock\common\models\CloudStockGiftPlan;
  8. use addons\CloudStock\common\models\CloudStockLevel;
  9. use common\enums\AddonsEnum;
  10. use common\enums\StatusEnum;
  11. use common\models\goods\Goods;
  12. use common\models\user\User;
  13. use yii\db\Expression;
  14. class CloudStockGiftPlanService extends BaseService
  15. {
  16. public function index($params)
  17. {
  18. $mall_id = $this->mall_id;
  19. $where[] = ['mall_id' => $mall_id];
  20. $where[] = ['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]];
  21. if (!empty($params['goods_id'])) {
  22. $goods_id = trim($params['goods_id']);
  23. $where[] = new Expression("FIND_IN_SET({$goods_id},goods_id)");
  24. }
  25. $params['where'] = $where;
  26. $params['order'] = 'id desc';
  27. $page_data = CloudStockGiftPlan::listPage($params, false);
  28. if (!empty($page_data['list'])) {
  29. $goods_ids = [];
  30. $level_arr = [];
  31. foreach ($page_data['list'] as &$item) {
  32. $item['goods_id'] = explode(',', $item['goods_id']);
  33. $item['give_goods_id'] = explode(',', $item['give_goods_id']);
  34. foreach ($item['goods_id'] as $g_id) {
  35. $goods_ids[] = $g_id;
  36. }
  37. foreach ($item['give_goods_id'] as $g_id) {
  38. $goods_ids[] = $g_id;
  39. }
  40. $item['gift_condition_level'] = json_decode($item['gift_condition_level'], true);
  41. $level_arr = array_merge($level_arr, $item['gift_condition_level']);
  42. }
  43. $level_list = CloudStockLevel::lists([
  44. 'where' => [
  45. ['mall_id' => $params['mall_id']],
  46. ['level' => $level_arr],
  47. ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]
  48. ],
  49. 'index' => 'level',
  50. 'select' => 'level,name'
  51. ]);
  52. $goods_list = Goods::lists(['where' => [['id' => $goods_ids]], 'index' => 'id', 'select' => 'id,goods_name,cover_pic']);
  53. foreach ($page_data['list'] as &$item) {
  54. $temp_goods_list = [];
  55. $give_goods_list = [];
  56. $give_goods_num = json_decode($item['give_goods_num'], true);
  57. foreach ($item['goods_id'] as $g_id) {
  58. if (isset($goods_list[$g_id])) {
  59. $temp_goods_list[] = $goods_list[$g_id];
  60. }
  61. }
  62. foreach ($item['give_goods_id'] as $g_id) {
  63. if (isset($goods_list[$g_id])) {
  64. $temp_give_goods_list = $goods_list[$g_id];
  65. $temp_give_goods_list['num'] = $give_goods_num[$g_id] ?? 0;
  66. $give_goods_list[] = $temp_give_goods_list;
  67. }
  68. }
  69. $item['goods_list'] = $temp_goods_list;
  70. $item['give_goods_list'] = $give_goods_list;
  71. $gift_condition_text = '直推上级达到如下云库存代理等级';
  72. foreach ($item['gift_condition_level'] as $level) {
  73. if (isset($level_list[$level])) {
  74. $gift_condition_text .= $level_list[$level]['name'] . '、';
  75. }
  76. }
  77. $gift_condition_text = trim($gift_condition_text, '、');
  78. $item['gift_condition_text'] = $gift_condition_text;
  79. $item['gift_recipient'] = '平台';
  80. }
  81. }
  82. return $page_data;
  83. }
  84. public function edit($params)
  85. {
  86. $params['goods_id'] = implode(',', $params['goods_id']);
  87. $params['give_goods_id'] = implode(',', $params['give_goods_id']);
  88. $params['give_goods_num'] = json_encode(array_column($params['give_goods_list'], 'num', 'id'));
  89. if (empty($params['gift_condition_level'])) {
  90. $params['gift_condition_level'] = [];
  91. }
  92. $params['gift_condition_level'] = json_encode($params['gift_condition_level']);
  93. $res = CloudStockGiftPlan::setData($params);
  94. if (empty($res)) {
  95. throw new \Exception(CloudStockGiftPlan::$static_error);
  96. }
  97. return $res;
  98. }
  99. public function switchStatus($params)
  100. {
  101. $res = CloudStockGiftPlan::updateAll(['status' => $params['status']], ['id' => $params['id'], 'mall_id' => $this->mall_id]);
  102. if ($res === false) {
  103. throw new \Exception(CloudStockGiftPlan::$static_error);
  104. }
  105. return true;
  106. }
  107. public function del($params)
  108. {
  109. $mall_id = $this->mall_id;
  110. $model = CloudStockGiftPlan::findOne(['id' => $params['id'], 'mall_id' => $mall_id]);
  111. if (!empty($model)) {
  112. $model->status = StatusEnum::DELETE;
  113. $res = $model->save();
  114. if ($res == false) {
  115. throw new \Exception($model->getErrorMessage());
  116. }
  117. }
  118. return true;
  119. }
  120. public function detail($params)
  121. {
  122. $id = $params['id'];
  123. $data = CloudStockGiftPlan::getOne([['id' => $id]], true);
  124. $data['goods_id'] = explode(',', $data['goods_id']);
  125. $data['give_goods_id'] = explode(',', $data['give_goods_id']);
  126. $data['gift_condition_level'] = json_decode($data['gift_condition_level'], true);
  127. $goods_ids = [];
  128. foreach ($data['goods_id'] as $g_id) {
  129. $goods_ids[] = $g_id;
  130. }
  131. foreach ($data['give_goods_id'] as $g_id) {
  132. $goods_ids[] = $g_id;
  133. }
  134. $give_goods_num = json_decode($data['give_goods_num'], true);
  135. $main_goods_list = Goods::lists(['where' => [['id' => $goods_ids]], 'index' => 'id', 'select' => 'id,goods_name,cover_pic']);
  136. $goods_list = $give_goods_list = [];
  137. foreach ($data['goods_id'] as $id) {
  138. if (isset($main_goods_list[$id])) {
  139. $goods_list[] = $main_goods_list[$id];
  140. }
  141. }
  142. foreach ($data['give_goods_id'] as $id) {
  143. if (isset($main_goods_list[$id])) {
  144. $temp_give_goods_list = $main_goods_list[$id];
  145. $temp_give_goods_list['num'] = $give_goods_num[$id] ?? 0;
  146. $give_goods_list[] = $temp_give_goods_list;
  147. }
  148. }
  149. $data['goods_list'] = $goods_list;
  150. $data['give_goods_list'] = $give_goods_list;
  151. return $data;
  152. }
  153. public function give($params)
  154. {
  155. $mall_id = $this->mall_id;
  156. $user_id = $this->user_id;
  157. $gift_plan_give_type = $params['gift_plan_give_type'];
  158. $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic');
  159. $configs['gift_plan_give_type'] = $configs['gift_plan_give_type'] ?? 0;
  160. if ($gift_plan_give_type != $configs['gift_plan_give_type']) {
  161. return false;
  162. }
  163. $user = User::findOne(['id' => $user_id]);
  164. if (empty($user['parent_id'])){
  165. return false;
  166. }
  167. $agent = CloudStockAgent::findOne(['user_id' => $user['parent_id'], 'status' => StatusEnum::ENABLED]);
  168. if (empty($agent)) {
  169. return false;
  170. }
  171. $where[] = ['mall_id' => $mall_id];
  172. $where[] = ['status' => StatusEnum::ENABLED];
  173. $goods_id = trim($params['goods_id']);
  174. $where[] = new Expression("FIND_IN_SET({$goods_id},goods_id)");
  175. $params['where'] = $where;
  176. $params['order'] = 'id desc';
  177. $list = CloudStockGiftPlan::lists($params);
  178. foreach ($list as &$item) {
  179. $gift_condition_level = json_decode($item['gift_condition_level'], true);
  180. if (!in_array($agent['level'], $gift_condition_level)) {
  181. continue;
  182. }
  183. $item['give_goods_id'] = explode(',', $item['give_goods_id']);
  184. $give_goods_num = json_decode($item['give_goods_num'], true);
  185. foreach ($item['give_goods_id'] as $g_id) {
  186. if (empty($give_goods_num[$g_id])) {
  187. continue;
  188. }
  189. $num = $give_goods_num[$g_id];
  190. $params = [
  191. 'mall_id' => $mall_id,
  192. 'user_id' => $user['parent_id'],
  193. 'goods_id' => $g_id,
  194. 'num' => $num,
  195. 'order_id' => $params['order_id'],
  196. 'changes_type' => CloudStockEnum::STOCK_CHANGE_TYPE107,
  197. 'changes_dir' => CloudStockEnum::STOCK_CHANGE_ADD,
  198. 'order_type' => CloudStockEnum::STOCK_ORDER_TYPE_USER,
  199. ];
  200. $res = CloudStockAgentGoods::addData($params, $increase_detail);
  201. if (!$res) throw new \Exception(CloudStockAgentGoods::getStaticError());
  202. //触发库存变动事件
  203. if (isset($increase_detail)) {
  204. $event = new CloudStockChangeSyncEvent($params['mall_id']);
  205. $event_data = [
  206. 'id' => $increase_detail->id,
  207. 'type' => CloudStockEnum::STOCK_CHANGE_ADD,
  208. 'mall_id' => $params['mall_id'],
  209. ];
  210. \Yii::$app->services->events->dispatch($event, $event_data, $event->listeners);
  211. }
  212. }
  213. }
  214. CloudStockAgent::fixStock($mall_id, $user['parent_id']);
  215. }
  216. }