DataController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <?php
  2. namespace addons\Area\backend\controllers;
  3. use addons\Area\common\enums\AreaEnum;
  4. use addons\Area\common\models\AreaAgent;
  5. use addons\Area\common\models\AreaCommissionLog;
  6. use addons\Area\common\models\AreaRegional;
  7. use addons\Area\common\service\CommunityService;
  8. use common\enums\OrderStatusEnum;
  9. use common\enums\RefundStatusEnum;
  10. use common\enums\StatusEnum;
  11. use common\models\order\Order;
  12. use common\models\order\OrderDetail;
  13. use common\models\order\OrderRefund;
  14. use common\models\user\User;
  15. /**
  16. * 社区
  17. */
  18. class DataController extends BaseController
  19. {
  20. public $enableCsrfValidation = false;
  21. public function actionIndex()
  22. {
  23. if (\Yii::$app->request->isAjax) {
  24. if (\Yii::$app->request->isGet) {
  25. $params = \Yii::$app->request->get();
  26. $mall_id = $this->mall_id;
  27. $where[] = ['mall_id' => $mall_id];
  28. $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]];
  29. $user_ids = [];
  30. if (!empty($params['level'])) $where[] = ['level' => $params['level']];
  31. if (!empty($params['keyword'])) {
  32. $is_search = 1;
  33. $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], [
  34. 'or',
  35. ['=', 'id', $params['keyword']],
  36. ['like', 'nickname', $params['keyword'] . '%', false],
  37. ['like', 'mobile', $params['keyword'] . '%', false]
  38. ]], 'select' => 'id']);
  39. $user_ids = array_column($user_list, 'id');
  40. }
  41. if (!empty($is_search)) $where[] = ['user_id' => $user_ids];
  42. $params['limit'] = 10;
  43. $params['where'] = $where;
  44. $params['order'] = 'id DESC';
  45. $params['select'] = 'id,user_id,realname,mobile,level,address,regional_id,province_id,city_id,district_id,town_id,total_commission,created_at,community_id, is_enable_dividend';
  46. $params['with'] = ['user' => function ($query) use ($mall_id) {
  47. $query->where(['mall_id' => $mall_id])->select('id,nickname,avatar_url,mobile,parent_id')->with(['parent']);
  48. }, 'goods' => function($query) {
  49. $query->with(['goods']);
  50. }];
  51. $pageData = AreaAgent::listPage($params, false);
  52. if ($pageData === false) return $this->error(AreaAgent::getStaticError());
  53. $pageData['level_map'] = AreaEnum::getLevelMap(null, $this->mall_id);
  54. if (!empty($pageData['list'])) {
  55. foreach ($pageData['list'] as &$item) {
  56. $_where = [
  57. 'and',
  58. ['mall_id' => $mall_id],
  59. ['status' => StatusEnum::ENABLED],
  60. ['pay_status' => StatusEnum::ENABLED],
  61. ['store_id' => 0],
  62. ['mch_id' => 0]
  63. ];
  64. switch ($item['level']) {
  65. case AreaEnum::PROVINCE:
  66. $_where[] = ['province' => $item['province_id']];
  67. break;
  68. case AreaEnum::CITY:
  69. $_where[] = ['city' => $item['city_id']];
  70. break;
  71. case AreaEnum::DISTRICT:
  72. $_where[] = ['area' => $item['district_id']];
  73. break;
  74. case AreaEnum::TOWN:
  75. $_where[] = ['town' => $item['town_id']];
  76. break;
  77. case AreaEnum::COMMUNITY:
  78. $_where[] = ['community' => $item['community_id']];
  79. break;
  80. case AreaEnum::REGIONAL:
  81. $res = AreaRegional::findOne($item['regional_id']);
  82. if(empty($res->province_ids) == false){
  83. $_where[] = ['in', 'province', explode(',',$res->province_ids)];
  84. }else{
  85. $_where[] = ['province' => -1]; //防止数据为空
  86. }
  87. break;
  88. default:
  89. $_where[] = ['id' => 0];
  90. }
  91. if (!empty($params['start'])) $_where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')];
  92. if (!empty($params['end'])) $_where[] = ['<=', 'created_at', strtotime($params['end'] . ' 23:59:59')];
  93. $order_ids = Order::find()->where($_where)->select('id')->column();
  94. $item['order_num'] = count($order_ids);
  95. $order_amount = Order::find()->where($_where)->sum('goods_price');
  96. $item['order_amount'] = !empty($order_amount)? $order_amount : 0;
  97. $pay_amount = Order::find()->where($_where)->sum('pay_money');
  98. $item['order_pay_amount'] = !empty($pay_amount)? $pay_amount : 0;
  99. $refund_amount = OrderRefund::find()->where(['order_id' => $order_ids, 'status' => StatusEnum::ENABLED, 'step_status' => [RefundStatusEnum::STEP_4, RefundStatusEnum::STEP_6]])->sum('refund_price');
  100. $item['refund_amount'] = !empty($refund_amount)? $refund_amount : 0;
  101. $item['date'] = date('Y-m-d');
  102. }
  103. }
  104. return $this->success('操作成功', $pageData);
  105. }
  106. }
  107. return $this->render('index');
  108. }
  109. /**
  110. * 不分页获取数据
  111. * @return mixed|void|null
  112. */
  113. public function actionList()
  114. {
  115. if (\Yii::$app->request->isAjax) {
  116. $params = \Yii::$app->request->get();
  117. if (!\Yii::$app->services->validate->validate($params, [
  118. [['user_id', 'order_status', 'page', 'limit'], 'integer'],
  119. [['user_id'], 'required'],
  120. [['order_no'], 'string'],
  121. [['keyword', 'start', 'end'], 'safe'],
  122. ])) {
  123. return $this->error(\Yii::$app->services->validate->getErrorMessage());
  124. }
  125. $agent = AreaAgent::findOne(['user_id' => $params['user_id'], 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]);
  126. if (!$agent) {
  127. return $this->error('代理不存在');
  128. }
  129. $where = [
  130. ['mall_id' => $this->mall_id],
  131. ['status' => StatusEnum::ENABLED],
  132. ['pay_status' => StatusEnum::ENABLED],
  133. ['store_id' => 0],
  134. ['mch_id' => 0]
  135. ];
  136. switch ($agent->level) {
  137. case AreaEnum::PROVINCE:
  138. $where[] = ['province' => $agent->province_id];
  139. break;
  140. case AreaEnum::CITY:
  141. $where[] = ['city' => $agent->city_id];
  142. break;
  143. case AreaEnum::DISTRICT:
  144. $where[] = ['area' => $agent->district_id];
  145. break;
  146. case AreaEnum::TOWN:
  147. $where[] = ['town' => $agent->town_id];
  148. break;
  149. case AreaEnum::COMMUNITY:
  150. $where[] = ['community' => $agent->community_id];
  151. break;
  152. case AreaEnum::REGIONAL:
  153. $res = AreaRegional::findOne($agent->regional_id);
  154. if(empty($res->province_ids) == false){
  155. $where[] = ['in', 'province', explode(',',$res->province_ids)];
  156. }else{
  157. $where[] = ['province' => -1]; //防止数据为空
  158. }
  159. break;
  160. default:
  161. $where[] = ['id' => 0];
  162. }
  163. if (!empty($params['keyword'])) {
  164. $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], [
  165. 'or',
  166. ['=', 'id', $params['keyword']],
  167. ['like', 'nickname', $params['keyword'] . '%', false],
  168. ['like', 'mobile', $params['keyword'] . '%', false]
  169. ]], 'select' => 'id']);
  170. $user_ids = array_column($user_list, 'id');
  171. if (!empty($user_ids)) {
  172. $where[] = ['user_id' => $user_ids];
  173. } else {
  174. $where[] = ['id' => 0];
  175. }
  176. }
  177. if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')];
  178. if (!empty($params['end'])) $where[] = ['<=', 'created_at', strtotime($params['end'] . ' 23:59:59')];
  179. if (!empty($params['order_status'])) {
  180. $where[] = ['order_status' => $params['order_status']];
  181. }
  182. if (!empty($params['order_no'])) {
  183. $where[] = ['like', 'order_no', $params['order_no']];
  184. }
  185. $ret = Order::listPage([
  186. 'where' => $where,
  187. 'select' => 'id,order_no,user_id,pay_money,goods_price,out_trade_no,created_at,order_source,order_status',
  188. 'order' => 'id desc',
  189. 'limit' => $params['limit'] ?? 10,
  190. 'with' => ['detail' => function($query) {
  191. $query->select('order_id,goods_name,num,goods_price,price,id');
  192. }, 'user' => function($query) {
  193. $query->select('id,nickname,avatar_url,mobile');
  194. }]
  195. ]);
  196. if (!$ret) return $this->error(Order::getStaticError());
  197. if (!empty($ret['list'])) {
  198. $order_ids = array_column($ret['list'], 'id');
  199. $refund_list = OrderRefund::lists([
  200. 'where' => [
  201. ['order_id' => $order_ids],
  202. ['step_status' => [RefundStatusEnum::STEP_4, RefundStatusEnum::STEP_6]],
  203. ['status' => StatusEnum::ENABLED]
  204. ],
  205. 'select' => 'order_detail_id,refund_price',
  206. 'index' => 'order_detail_id',
  207. ]);
  208. foreach ($ret['list'] as &$item) {
  209. foreach ($item['detail'] as &$detail) {
  210. $detail['refund_price'] = isset($refund_list[$detail['id']])? $refund_list[$detail['id']]['refund_price'] : 0;
  211. }
  212. unset($detail);
  213. }
  214. unset($item);
  215. }
  216. $ret['order_status_map'] = OrderStatusEnum::getMap();
  217. return $this->success('获取成功', $ret);
  218. }
  219. return $this->render('list');
  220. }
  221. }