ShopController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: leo
  5. * Date: 2018/2/24
  6. * Time: 下午12:48
  7. */
  8. namespace frontendApi\modules\v1\controllers;
  9. use common\helpers\Date;
  10. use common\helpers\Form;
  11. use common\helpers\user\Info;
  12. use common\models\DealType;
  13. use common\models\DecOrder;
  14. use common\models\forms\DeclarationForm;
  15. use common\models\forms\OrderForm;
  16. use common\models\Order;
  17. use common\models\OrderGoods;
  18. use common\models\ReceiveAddress;
  19. use common\models\Region;
  20. use common\models\ShopGoods;
  21. use common\models\User;
  22. use common\models\UserBonus;
  23. use common\models\UserWallet;
  24. class ShopController extends BaseController {
  25. public $modelClass = DecOrder::class;
  26. /**
  27. * 商品列表
  28. * @return mixed
  29. * @throws \yii\web\HttpException
  30. */
  31. public function actionIndex() {
  32. // 商品分类
  33. $categoryType = \Yii::$app->request->get('categoryType', 1);
  34. $condition = ' AND STATUS=1 AND (FIND_IN_SET(2,GIFT_TYPE)>0';
  35. $isStudio = User::getEnCodeInfo(\Yii::$app->user->id)['IS_STUDIO'];
  36. if($isStudio==1){
  37. $condition.= " OR FIND_IN_SET(4,GIFT_TYPE)>0";
  38. }
  39. $condition .= ") AND CATEGORY_TYPE = :CATEGORY_TYPE";
  40. $params[':CATEGORY_TYPE'] = intval($categoryType);
  41. $data = ShopGoods::lists($condition, $params, [
  42. 'orderBy' => 'SORT ASC,CREATED_AT DESC',
  43. 'from' => ShopGoods::tableName(),
  44. ]);
  45. foreach ($data['list'] as $key => $value) {
  46. if ($value['TYPE'] == 1 || $value['TYPE'] == 2) {
  47. $data['list'][$key]['DISCOUNT'] = ShopGoods::GOODS_TYPE[$value['TYPE']]['discount'];
  48. } else {
  49. $data['list'][$key]['DISCOUNT'] = $value['SELL_DISCOUNT']*100;
  50. }
  51. // $data['list'][$key]['DISCOUNT'] = ShopGoods::GOODS_TYPE[$value['TYPE']]['discount'];
  52. }
  53. return static::notice($data);
  54. }
  55. /**
  56. * 获取商品详情
  57. * @return mixed
  58. * @throws \yii\web\HttpException
  59. */
  60. public function actionGoodsDetail(){
  61. $id = \Yii::$app->request->get('id');
  62. $data = null;
  63. if($id){
  64. $data = ShopGoods::findOneAsArray('ID=:ID AND STATUS=1', [':ID'=>$id]);
  65. }
  66. return static::notice($data);
  67. }
  68. /**
  69. * 购物车订单展示
  70. * @throws \yii\web\HttpException
  71. */
  72. public function actionShowCart(){
  73. $userId = \Yii::$app->user->id;
  74. $payList = ShopGoods::payTypes();
  75. $allAddress = ReceiveAddress::findAllAsArray('USER_ID=:USER_ID', [':USER_ID'=>$userId]);
  76. if($allAddress) {
  77. foreach ($allAddress as $key => $row) {
  78. $allAddress[$key]['PROVINCE_NAME'] = Region::getCnName($row['PROVINCE']);
  79. $allAddress[$key]['CITY_NAME'] = Region::getCnName($row['CITY']);
  80. $allAddress[$key]['COUNTY_NAME'] = Region::getCnName($row['COUNTY']);
  81. }
  82. }
  83. $userBalance = [
  84. 'points' => 0,
  85. 'cash' => 0,
  86. 'exchange' => 0,
  87. 'travel_points' => 0,
  88. 'car_points' => 0,
  89. 'house_points' => 0,
  90. ];
  91. if ($userBonusResult = UserBonus::findOneAsArray(['USER_ID' => $userId])) {
  92. $userBalance['points'] = $userBonusResult['RECONSUME_POINTS'];
  93. $userBalance['exchange'] = $userBonusResult['EXCHANGE_POINTS'];
  94. $userBalance['travel_points'] = $userBonusResult['TRAVEL_POINTS'];
  95. $userBalance['car_points'] = $userBonusResult['CAR_POINTS'];
  96. $userBalance['house_points'] = $userBonusResult['HOUSE_POINTS'];
  97. }
  98. if ($userCashResult = UserWallet::findOneAsArray(['USER_ID' => $userId])) {
  99. $userBalance['cash'] = $userCashResult['CASH'];
  100. }
  101. return static::notice(
  102. [
  103. 'payList'=>$payList,
  104. 'allAddress'=>$allAddress,
  105. 'userBalance'=>$userBalance,
  106. 'sellType' => ShopGoods::CATEGORY_TYPE,
  107. ]);
  108. }
  109. /**
  110. * 确认订单
  111. */
  112. public function actionSureOrder(){
  113. if (\Yii::$app->request->isPost) {
  114. $formModel = new OrderForm();
  115. $formModel->scenario = 'userOrder';
  116. $formModel->remark = '复销备注';
  117. $post = \Yii::$app->request->post();
  118. $post['type'] = DeclarationForm::TYPE_FX;
  119. if ($formModel->load($post, '') && $formModel->add()) {
  120. return static::notice('购物成功');
  121. } else {
  122. return static::notice(Form::formatErrorsForApi($formModel->getErrors()),400);
  123. }
  124. }
  125. }
  126. /**
  127. * 订单支付成功
  128. * @throws \yii\web\HttpException
  129. */
  130. public function actionPaySuccess(){
  131. $orderSn = \Yii::$app->request->get('orderSn');
  132. $data = null;
  133. if($orderSn){
  134. $data = Order::findOneAsArray('SN=:SN', [':SN'=>$orderSn]);
  135. }
  136. return static::notice($data);
  137. }
  138. /**
  139. * 我的报单
  140. * @return mixed
  141. * @throws \yii\web\HttpException
  142. */
  143. public function actionDecOrderList() {
  144. $condition = ' AND USER_ID=:USER_ID AND IS_DEL=0';
  145. $params[':USER_ID'] = \Yii::$app->user->id;
  146. $data = DecOrder::lists($condition, $params, [
  147. 'select' => 'DO.*,U.USER_NAME USER_NAME,U.REAL_NAME REAL_NAME,RU.USER_NAME REC_USER_NAME,RU.REAL_NAME REC_REAL_NAME,CU.USER_NAME CON_USER_NAME,CU.REAL_NAME CON_REAL_NAME,OG.*',
  148. 'orderBy' => 'DO.CREATED_AT DESC',
  149. 'from' => DecOrder::tableName() . ' AS DO',
  150. 'join' => [
  151. ['LEFT JOIN', User::tableName() . ' AS U', 'DO.TO_USER_ID=U.ID'],
  152. ['LEFT JOIN', User::tableName() . ' AS RU', 'DO.REC_USER_ID=RU.ID'],
  153. ['LEFT JOIN', User::tableName() . ' AS CU', 'DO.CON_USER_ID=CU.ID'],
  154. ['LEFT JOIN', OrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=DO.ORDER_SN'],
  155. ],
  156. ]);
  157. return static::notice($data);
  158. }
  159. /**
  160. * 我的订单
  161. * @return mixed
  162. * @throws \yii\web\HttpException
  163. */
  164. public function actionOrderList() {
  165. $uname = Info::getUserNameByUserId(\Yii::$app->user->id);
  166. $condition = " AND ORDER_TYPE='FX' AND (USER_ID=:USER_ID OR CREATE_USER='$uname')";
  167. $params[':USER_ID'] = \Yii::$app->user->id;
  168. $data = Order::lists($condition, $params, [
  169. 'select' => 'O.*,U.REAL_NAME,OG.*,SG.CATEGORY_TYPE',
  170. 'orderBy' => 'O.CREATED_AT DESC',
  171. 'from' => Order::tableName() . ' AS O',
  172. 'join' => [
  173. ['LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID'],
  174. ['LEFT JOIN', OrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN'],
  175. ['LEFT JOIN', ShopGoods::tableName() . ' AS SG', 'SG.ID=OG.GOODS_ID'],
  176. ],
  177. ]);
  178. foreach ($data['list'] as $key => $value) {
  179. //$data['list'][$key]['PROVINCE_NAME'] = $value['PROVINCE'] ? Region::getCnName($value['PROVINCE']) : '';
  180. //$data['list'][$key]['CITY_NAME'] = $value['CITY'] ? Region::getCnName($value['CITY']) : '';
  181. //$data['list'][$key]['COUNTY_NAME'] = $value['COUNTY'] ? Region::getCnName($value['COUNTY']) : '';
  182. $data['list'][$key]['PAY_AT'] = Date::convert($value['PAY_AT'],'Y-m-d H:i:s');
  183. $data['list'][$key]['CATEGORY_TYPE'] = intval($value['CATEGORY_TYPE']);
  184. $data['list'][$key]['CATEGORY'] = array_column(ShopGoods::CATEGORY_TYPE, NULL, 'id')[$value['CATEGORY_TYPE']]['name'] ?? '普通商品';
  185. }
  186. return static::notice($data);
  187. }
  188. /**
  189. * 会员复消
  190. */
  191. public function actionReconsume() {
  192. $condition = ' AND STATUS=1 AND (FIND_IN_SET(2,GIFT_TYPE)>0 OR FIND_IN_SET(4,GIFT_TYPE)>0)';
  193. $data = ShopGoods::lists($condition, [], [
  194. 'orderBy' => 'SORT ASC,CREATED_AT DESC',
  195. 'from' => ShopGoods::tableName(),
  196. ]);
  197. foreach ($data['list'] as $key => $value) {
  198. if ($value['TYPE'] == 1 || $value['TYPE'] == 2) {
  199. $data['list'][$key]['DISCOUNT'] = ShopGoods::GOODS_TYPE[$value['TYPE']]['discount'];
  200. } else {
  201. $data['list'][$key]['DISCOUNT'] = $value['SELL_DISCOUNT']*100;
  202. }
  203. //$data['list'][$key]['DISCOUNT'] = ShopGoods::GOODS_TYPE[$value['TYPE']]['discount'];
  204. }
  205. return static::notice($data);
  206. }
  207. /**
  208. * 帮会员复消购物车
  209. * @throws \yii\web\HttpException
  210. */
  211. public function actionReconsumeCart(){
  212. $userId = \Yii::$app->user->id;
  213. $payList = ['cash'=>['name'=>'余额支付'],];
  214. $userBalance = [
  215. 'points' => 0,
  216. 'cash' => 0
  217. ];
  218. if ($userBonusResult = UserBonus::findOneAsArray(['USER_ID' => $userId])) {
  219. $userBalance['points'] = $userBonusResult['RECONSUME_POINTS'];
  220. }
  221. if ($userCashResult = UserWallet::findOneAsArray(['USER_ID' => $userId])) {
  222. $userBalance['cash'] = $userCashResult['CASH'];
  223. }
  224. return static::notice(['payList'=>$payList,'userBalance'=>$userBalance]);
  225. }
  226. /**
  227. * 帮会员复消确认订单
  228. */
  229. public function actionReconsumeSureOrder(){
  230. if (\Yii::$app->request->isPost) {
  231. $formModel = new OrderForm();
  232. $formModel->scenario = 'reconsumeOrder';
  233. $formModel->remark = '帮会员复销';
  234. $post = \Yii::$app->request->post();
  235. $post['type'] = DeclarationForm::TYPE_FX;
  236. if ($formModel->load($post, '') && $formModel->reconsumeAdd()) {
  237. return static::notice('帮会员复消成功');
  238. } else {
  239. return static::notice(Form::formatErrorsForApi($formModel->getErrors()),400);
  240. }
  241. }
  242. }
  243. /**
  244. * 商品列表tabs分类
  245. * @return mixed
  246. * @throws \yii\web\HttpException
  247. */
  248. public function actionGoodsActive()
  249. {
  250. $data = [
  251. // [
  252. // 'name' => 'bonus',
  253. // 'label' => '奖金商品',
  254. // ],
  255. [
  256. 'name' => '1',
  257. 'label' => '普通商品列表',
  258. ],
  259. [
  260. 'name' => '4',
  261. 'label' => '旅游积分商品',
  262. ],
  263. [
  264. 'name' => '5',
  265. 'label' => '名车积分商品',
  266. ],
  267. [
  268. 'name' => '6',
  269. 'label' => '豪宅积分商品',
  270. ],
  271. ];
  272. return static::notice($data);
  273. }
  274. }