StoreCasherController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. namespace addons\Happiness\backend\controllers;
  3. use addons\Coupon\common\enums\AddonsCouponEnum;
  4. use addons\Coupon\common\models\AddonsCoupon;
  5. use addons\Happiness\common\models\HappinessCashierOrder;
  6. use addons\Happiness\backend\controllers\BaseController;
  7. use addons\Happiness\common\models\HappinessStore;
  8. use addons\Happiness\common\models\HappinessStoreMiniCode;
  9. use addons\Happiness\common\models\HappinessWithdrawLog;
  10. use common\components\export\CsvTool;
  11. use common\enums\AddonsEnum;
  12. use common\enums\StatusEnum;
  13. use common\helpers\csv\CsvExportHelper;
  14. use common\helpers\MiniQrCode;
  15. use common\models\common\CapitalLog;
  16. use common\models\mall\MallAddons;
  17. use common\models\order\OrderDetail;
  18. use common\models\user\User;
  19. use common\models\user\UserLevel;
  20. class StoreCasherController extends BaseController
  21. {
  22. public function actionIndex()
  23. {
  24. if (\Yii::$app->request->isAjax) {
  25. if (\Yii::$app->request->isGet) {
  26. $params = \Yii::$app->request->get();
  27. $where[] = ['mall_id' => $this->mall_id];
  28. $where[] = ['pay_status' => 1];
  29. $where[] = ['status' => StatusEnum::ENABLED];
  30. if (!empty($params['keyword'])) {
  31. $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], [
  32. 'or',
  33. ['like', 'username', $params['keyword']],
  34. ['like', 'nickname', $params['keyword']],
  35. ]], 'select' => 'id']);
  36. $user_ids = array_column($user_list, 'id');
  37. $where[] = ['in', 'user_id', $user_ids];
  38. }
  39. if (!empty($params['start'])) $where[] = ['>=', 'pay_time', strtotime($params['start'])];
  40. if (!empty($params['end'])) $where[] = ['<=', 'pay_time', strtotime($params['end'])];
  41. if (!empty($params['min'])) $where[] = ['>=', 'pay_money', $params['min']];
  42. if (!empty($params['max'])) $where[] = ['<=', 'pay_money', $params['max']];
  43. $params['where'] = $where;
  44. $params['order'] = 'id desc';
  45. $params['with'] = ['user', 'detail'];
  46. $params['limit'] = $params['limit'] ?? $this->pageSize;
  47. $page_data = HappinessCashierOrder::listPage($params);
  48. if ($page_data === false) return $this->error(HappinessWithdrawLog::getStaticError());
  49. if (!empty($page_data['list'])) {
  50. $store_ids = array_column($page_data['list'], 'store_id');
  51. $store_list = HappinessStore::lists([
  52. 'where' => [
  53. ['id' => $store_ids]
  54. ],
  55. 'index' => 'id'
  56. ]);
  57. foreach ($page_data['list'] as &$item) {
  58. $item['extra'] = '';
  59. $item['commission'] = 0;
  60. $item['store_name'] = $store_list[$item['store_id']]['store_name']??'';
  61. }
  62. }
  63. $page_data['export_list'] = HappinessCashierOrder::fieldsList(true);
  64. return $this->success('ok', $page_data);
  65. }
  66. }
  67. if (\Yii::$app->request->post('flag') == 'EXPORT') {
  68. $params = \Yii::$app->request->post();
  69. $params['mall_id'] = $this->mall_id;
  70. $filename = '幸福小店收银订单列表-' . date('YmdHis') . '_' . rand(10000, 99999);
  71. $model = HappinessCashierOrder::find();
  72. $model->where(['mall_id' => $params['mall_id']]);
  73. $model->andWhere(['pay_status' => 1]);
  74. if (!empty($params['start'])) $model->andWhere(['>=', 'pay_time', strtotime($params['start'])]);
  75. if (!empty($params['end'])) $model->andWhere(['<=', 'pay_time', strtotime($params['end'])]);
  76. if (!empty($params['min'])) $model->andWhere(['>=', 'pay_money', $params['min']]);
  77. if (!empty($params['max'])) $model->andWhere(['<=', 'pay_money', $params['max']]);
  78. if (!empty($params['keyword'])) {
  79. $user_list = User::lists(['where' => [['mall_id' => $params['mall_id']], [
  80. 'or',
  81. ['like', 'username', $params['keyword']],
  82. ['like', 'nickname', $params['keyword']],
  83. ]], 'select' => 'id']);
  84. $user_ids = array_column($user_list, 'id');
  85. $model->andWhere(['in', 'user_id', $user_ids]);
  86. }
  87. $model->with(['user']);
  88. $fields = $params['fields'];
  89. $fields = explode(',', $fields);
  90. $fields_arr = HappinessCashierOrder::fieldsList(true);
  91. $have_select_field_arr = [];
  92. foreach ($fields as $value) {
  93. $have_select_field_arr[] = $fields_arr[$value];
  94. }
  95. $csv = new CsvTool();
  96. $csv->filename = $filename;
  97. $csv->export_mode = CsvTool::EXPORT_MODE_SYNC;
  98. $csv->header = $have_select_field_arr;
  99. $orders = $model->all();
  100. empty($csv->header) && $csv->header = array_keys($orders[0]);
  101. $data = [];
  102. $store_ids = array_column($orders, 'store_id');
  103. $store_list = HappinessStore::lists([
  104. 'where' => [
  105. ['id' => $store_ids]
  106. ],
  107. 'index' => 'id'
  108. ]);
  109. foreach ($orders as $order) {
  110. $row = [];
  111. foreach ($fields as $field) {
  112. if ($field == 'nickname') {
  113. $row[] = $order['user']['nickname'];
  114. }
  115. else if ($field == 'pay_time') {
  116. $row[] = !empty($order['pay_time']) ? date('Y-m-d H:i:s', $order['pay_time']) : '';
  117. } else if($field=='store_name'){
  118. $row[] = $store_list[$order['store_id']]['store_name']?? '';
  119. }else {
  120. if ((isset($order[$field]))) $row[] = $order[$field];
  121. }
  122. }
  123. $data[] = $row;
  124. }
  125. $csv->data = $data;
  126. $csv->export();
  127. }
  128. return $this->render($this->action->id);
  129. }
  130. public function actionCommissionAndScoreList()
  131. {
  132. $params = \Yii::$app->request->get();
  133. $wallet_type = 'commission';
  134. if (!empty($params['wallet_type'])) $wallet_type = $params['wallet_type'];
  135. $condition = [
  136. 'where' => [
  137. ['source_table' => ['store_cashier_order',StoreCashierOrder::tableName(),'store_cashier_order_detail']],
  138. ['source_table_id' => $params['order_id']]
  139. ],
  140. ];
  141. CapitalLog::$capitalType = "{$wallet_type}";
  142. $list = CapitalLog::getList($condition, 0);
  143. $level = UserLevel::find()->select("name,level")->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])->asArray()->all();
  144. $level_data = array_column($level, 'name', 'level');
  145. CapitalLog::$capitalType = "{$wallet_type}_frozen";
  146. $condition['where'][] = ['status' => 0];
  147. $frozen_list = CapitalLog::getList($condition, 1);
  148. $list = array_merge($list, $frozen_list);
  149. return $this->success('操作成功', ['list' => $list, 'user_level' => $level_data]);
  150. }
  151. public function actionGetCouponList()
  152. {
  153. $params = \Yii::$app->request->get();
  154. $type = $params['type'] ?? 2;
  155. $store_id = $this->store_id;
  156. $is_install = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_COUPON);
  157. $coupon_list = [];
  158. if ($is_install) {
  159. $coupon_list = AddonsCoupon::lists([
  160. 'where' => [
  161. ['store_id' => $store_id],
  162. ['type' => $type],
  163. ['status' => StatusEnum::ENABLED],
  164. ['coupon_status' => AddonsCouponEnum::STATUS_RECEIVING],
  165. ],
  166. 'select' => 'id,name'
  167. ]);
  168. }
  169. return $this->success('ok', ['coupon_list' => $coupon_list]);
  170. }
  171. public function actionShowMiniPromotionCode()
  172. {
  173. $request = \Yii::$app->request;
  174. if ($request->isAjax) {
  175. if ($request->isPost) {
  176. $params = \Yii::$app->request->post();
  177. // 检查提交的参数
  178. $res = \Yii::$app->services->validate->validate($params, [
  179. [['type'], 'required'],
  180. ]);
  181. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  182. $store = Store::findOne(['mall_id' => $this->mall_id, 'id' => $this->store_id]);
  183. if (empty($store)) return $this->error('店铺不存在');
  184. $model = StoreMiniCode::findOne(['store_id' => $store['id'], 'mall_id' => $this->mall_id, 'type' => $params['type']]);
  185. if (empty($model)) {
  186. $mall = $this->mall;
  187. $content = [
  188. 'mall_id' => $this->mall_id,
  189. 'store_id' => $store['id'],
  190. 'mall_sign' => $mall['mall_sign'],
  191. 'type' => $params['type'],
  192. ];
  193. $content = json_encode($content);
  194. if ($params['type'] == 1) {
  195. $page = 'plugins2/Store/store/index';
  196. } else {
  197. $page = '/plugins2/Store/pay/cashRegister';
  198. }
  199. $code = md5($content);
  200. $obj = new MiniQrCode();
  201. $applet_code = $obj->getAppletQrCode($this->mall_id, $page, $code);
  202. $params['mall_id'] = $this->mall_id;
  203. $params['code'] = $code;
  204. $params['store_id'] = $store['id'];
  205. $params['content'] = $content;
  206. $params['applet_code'] = $applet_code;
  207. $model = StoreMiniCode::setData($params);
  208. }
  209. $applet_url = $model['applet_code'];
  210. $this->success('获取成功', ['applet_url' => $applet_url]);
  211. }
  212. }
  213. }
  214. }