DefaultController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <?php
  2. namespace addons\Sudoku\api\modules\v1\controllers;
  3. use addons\Sudoku\common\enums\SudokuEnum;
  4. use addons\Sudoku\common\logic\LotteryLogic;
  5. use addons\Sudoku\common\logic\order\OrderFormLogic;
  6. use addons\Sudoku\common\logic\order\OrderInitDataLogic;
  7. use addons\Sudoku\common\logic\order\OrderMarketingLogic;
  8. use addons\Sudoku\common\models\AddonsSudoku;
  9. use addons\Sudoku\common\models\AddonsSudokuLog;
  10. use common\enums\AppEnum;
  11. use common\enums\GoodsTypeEnum;
  12. use common\enums\PreviewTypeEnum;
  13. use common\enums\ShippingTypeEnum;
  14. use common\enums\StatusEnum;
  15. use common\logic\order\marketing\FreeShippingMarketing;
  16. use common\models\common\PlatformSetting;
  17. use common\models\goods\GoodsAttr;
  18. use common\models\order\Order;
  19. use common\models\user\User;
  20. use common\models\user\UserAddress;
  21. use Yii;
  22. use api\controllers\OnAuthController;
  23. /**
  24. * 默认控制器
  25. *
  26. * Class DefaultController
  27. * @package addons\Sudoku\api\modules\v1\controllers
  28. */
  29. class DefaultController extends OnAuthController
  30. {
  31. public $modelClass = '';
  32. /**
  33. * 不用进行登录验证的方法
  34. *
  35. * 例如: ['index', 'update', 'create', 'view', 'delete']
  36. * 默认全部需要验证
  37. *
  38. * @var array
  39. */
  40. protected $authOptional = ['index','get-prize-log'];
  41. /**
  42. * 首页
  43. *
  44. * @return string
  45. */
  46. public function actionIndex()
  47. {
  48. return 'Hello world';
  49. }
  50. /**
  51. * ltm
  52. * 2021/12/22 14:39
  53. * 获取九空格的配置文件
  54. * @return string
  55. */
  56. public function actionGetConfig()
  57. {
  58. if (\Yii::$app->request->isGet) {
  59. $config = Yii::$app->services->setting->addons->get($this->mall_id, SudokuEnum::ADDONS_NAME, 'basic');
  60. //统计会员剩余次数
  61. if($config['type'] == StatusEnum::ENABLED){
  62. $params['where'][] = ['>','created_at',strtotime(date('Y-m-d'))];
  63. }
  64. if(!isset($config['is_show'])) $config['is_show'] = 1;
  65. $params['where'][] = ['=','user_id',$this->user_id];
  66. $count_times = AddonsSudokuLog::count($params);
  67. $limit_times = $config['lucky_number'] - $count_times;
  68. if($limit_times < 0) $limit_times = 0;
  69. $Sudokuparams['where'][] = ['mall_id'=>$this->mall_id];
  70. $Sudokuparams['order'] = 'id asc';
  71. $Sudokuparams['with'] = ['goods','coupon'];
  72. $list = AddonsSudoku::lists($Sudokuparams,true);
  73. $get_system_setting = PlatformSetting::getConfByGroup('system', true);
  74. if(empty($list)){
  75. for ($i = 0; $i<8; $i++){
  76. $arr['name'] = '';
  77. $arr['image_url'] = $get_system_setting['api_url']['value'].'/resources/addons/sudoku/img/sudoku'.$i.'.png';
  78. $arr['type'] = '';
  79. $arr['goods_id'] = '';
  80. $arr['score'] = '';
  81. $arr['red_packet_amount'] = '';
  82. $arr['coupon_id'] = '';
  83. $arr['probability'] = '0';
  84. $arr['stock'] = '';
  85. $arr['prize_id'] = $i;
  86. $list[$i] = $arr;
  87. };
  88. }
  89. if($list){
  90. foreach ($list as $k=>$v){
  91. switch ($v['type']){
  92. case '1': //奖励金额
  93. $list[$k]['name'] = $v['name']?$v['name']:'现金¥'.$v['red_packet_amount'].'';
  94. break;
  95. case '2': //奖励优惠卷
  96. $list[$k]['name'] = $v['name']?$v['name']:$v['coupon']['name'];
  97. break;
  98. case '3': //奖励积分
  99. $list[$k]['name'] = $v['name']?$v['name']:'积分'.$v['score'];
  100. break;
  101. case '4': //奖励商品
  102. $list[$k]['name'] = $v['name']?$v['name']:$v['goods']['goods_name'].'商品一件';
  103. break;
  104. case '5': //谢谢参与
  105. $list[$k]['name'] = '谢谢参与';
  106. break;
  107. }
  108. }
  109. }
  110. $this->success('获取成功', compact('config','list','limit_times'));
  111. }
  112. }
  113. /**
  114. * ltm
  115. * 2021/12/22 15:39
  116. * 获取九空格的配置文件
  117. * @return string
  118. */
  119. public function actionGetPrizeLog()
  120. {
  121. if (\Yii::$app->request->isGet) {
  122. $get = Yii::$app->request->get();
  123. $res = Yii::$app->services->validate->validate($get,[
  124. [['user_id','type','page'], 'safe'],
  125. ]);
  126. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  127. $params['where'][] = ['mall_id' => $this->mall_id];
  128. if($get['type']) $params['where'][] = ['=','type',$get['type']]; else $params['where'][] = ['<','type','5'];
  129. if($get['user_id']) $params['where'][] = ['user_id' => $get['user_id']];
  130. $params['with'] = ['goods','coupon','user','order'];
  131. $params['order'] = 'id desc';
  132. $list = AddonsSudokuLog::listPage($params);
  133. $list['list'] = AddonsSudoku::getPrizeName($list['list']);
  134. return $this->success('操作成功', $list);
  135. }
  136. }
  137. /**
  138. * ltm
  139. * 2021/12/22 15:39
  140. * 获取九空格的配置文件
  141. * @return string
  142. */
  143. public function actionPreview()
  144. {
  145. if (\Yii::$app->request->isGet) {
  146. $get = Yii::$app->request->get();
  147. $res = Yii::$app->services->validate->validate($get,[
  148. [['id'], 'required'],
  149. [['address_id'], 'safe'],
  150. ]);
  151. $get = AddonsSudokuLog::exceptNullVal($get);
  152. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  153. // 对象处理
  154. $orderFormLogic = new OrderFormLogic();
  155. $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id);
  156. $form->id = $get['id'];
  157. $form->attributes = $get;
  158. $form['action'] = AppEnum::ACTION_PREVIEW;
  159. !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS;
  160. // 订单初始化
  161. $orderInitDataLogic = new OrderInitDataLogic();
  162. $form = $orderInitDataLogic->execute($form, PreviewTypeEnum::BUY_NOW);
  163. if ($form === false) return $this->error($orderInitDataLogic->getError());
  164. if($get['address_id']) {
  165. $form->address_id = $get['address_id'];
  166. $address_info = UserAddress::getUserAddress($this->user_id, $get['address_id']);
  167. }else {
  168. $address_info = $form->address_default;
  169. }
  170. // 运费
  171. $orderMarketingLogic = new OrderMarketingLogic();
  172. $form = $orderMarketingLogic->run($form);
  173. //获取九宫格的配置
  174. $config = Yii::$app->services->setting->addons->get($this->mall_id, SudokuEnum::ADDONS_NAME, 'basic');
  175. if($config['shipping_type'] == StatusEnum::ENABLED){
  176. $marketing['deduct']['shipping_fee']['name'] = "运费";
  177. $marketing['deduct']['shipping_fee']['money'] = "0";
  178. }else{
  179. $marketing = $form['marketing'];
  180. }
  181. $pay_type_list = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform);
  182. $shipping_type_list = ShippingTypeEnum::getMap();
  183. $info = compact('marketing', 'address_info', 'pay_type_list', 'shipping_type_list');
  184. if($config['shipping_type'] == StatusEnum::ENABLED) $info['total_pay_money'] = "0"; else $info['total_pay_money'] = $form['total_pay_money'];
  185. $info['is_address'] = $form['is_address'] ?? 0;
  186. $info['order'] = $form->order;
  187. $info['status'] = $form->status;
  188. $form->goods['num'] = 1;
  189. $info['goods'] = $form->goods;
  190. return $this->success('操作成功', $info);
  191. }
  192. }
  193. /**
  194. * ltm
  195. * 2021/12/22 15:39
  196. * 获取九空格的配置文件
  197. * @return string
  198. */
  199. public function actionCreate()
  200. {
  201. if (\Yii::$app->request->isPost) {
  202. $post = Yii::$app->request->post();
  203. $res = Yii::$app->services->validate->validate($post,[
  204. [['id','address_id'],'required'],
  205. [['remark'], 'safe'],
  206. ]);
  207. $post = AddonsSudokuLog::exceptNullVal($post);
  208. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  209. //对象处理
  210. $orderFormLogic = new OrderFormLogic();
  211. $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id);
  212. $form -> id = $post['id'];
  213. $form -> remark = $post['remark'];
  214. $form->attributes = $post;
  215. if($post['address_id']) $form->address_id = $post['address_id'];
  216. $form['action'] = AppEnum::ACTION_CREATE;
  217. !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS;
  218. //订单初始化
  219. $orderInitDataLogic = new OrderInitDataLogic();
  220. $form = $orderInitDataLogic->execute($form, PreviewTypeEnum::BUY_NOW);
  221. if ($form === false) return $this->error($orderInitDataLogic->getError());
  222. //运费
  223. $orderMarketingLogic = new OrderMarketingLogic();
  224. $form = $orderMarketingLogic->run($form);
  225. //获取九宫格的配置
  226. $config = Yii::$app->services->setting->addons->get($this->mall_id, SudokuEnum::ADDONS_NAME, 'basic');
  227. if($config['shipping_type'] == StatusEnum::ENABLED){
  228. $form->group_order_goods['0']['mch_order_info']['shipping_money'] = "0";
  229. }else{
  230. $form->group_order_goods['0']['mch_order_info']['shipping_money'] = $form['total_pay_money'];
  231. }
  232. if($form->status=='1') return $this->error('订单已经领取但未支付,请到订单支付列表进行支付', $res);
  233. $res = Order::createOrder($form);
  234. if ($res === false) return $this->error(Order::getStaticError());
  235. $update_log = AddonsSudokuLog::findOne([['id'=>$post['id']]]);
  236. $update_log -> status = 1;
  237. $update_log -> receive_at = time();
  238. $update_log -> order_id = $res['transaction']['order_ids'];
  239. if(!$update_log->save()) return $this->error($update_log->getErrorMessage());//更新领奖记录
  240. return $this->success('领取成功', $res);
  241. }
  242. }
  243. /**
  244. * 抽奖接口
  245. * @Author: ltm
  246. * @DateTime: 2021/12/23 0023 10:26
  247. * @Copyright: copyright (c) 2021 广东七件事集团
  248. * @param $data
  249. * @return bool
  250. */
  251. public function actionLottery(){
  252. if (\Yii::$app->request->isGet) {
  253. $lotteryData['mall_id'] = $this->mall_id;
  254. $lotteryData['user_id'] = $this->user_id;
  255. $lotteryLogic = new LotteryLogic();
  256. $res = $lotteryLogic->execute($lotteryData);//执行抽奖
  257. if ($res === false) return $this->error($lotteryLogic->error);
  258. return $this->success('操作成功',$res);
  259. }
  260. }
  261. /**
  262. * 抽奖接口 测试抽奖接口
  263. * @Author: ltm
  264. * @DateTime: 2021/12/23 0023 10:26
  265. * @Copyright: copyright (c) 2021 广东七件事集团
  266. * @param $data
  267. * @return bool
  268. */
  269. public function actionLotterytest(){
  270. for ($i = 0; $i<100;$i++){
  271. $this->actionLottery();
  272. }
  273. }
  274. }