WithdrawController.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 2017/3/30
  6. * Time: 下午9:07
  7. */
  8. namespace app\frontend\modules\finance\controllers;
  9. use app\common\components\ApiController;
  10. use app\common\components\BaseController;
  11. use app\common\models\Income;
  12. use app\common\models\Store;
  13. use app\frontend\modules\finance\models\Withdraw;
  14. use Yunshop\Auction\models\AuctioneerModel;
  15. use Yunshop\Auction\models\AuctionOrderModel;
  16. use Yunshop\Hotel\common\models\CashierOrder;
  17. use Yunshop\Hotel\common\models\Hotel;
  18. use Yunshop\Hotel\common\models\HotelOrder;
  19. use Yunshop\StoreCashier\common\models\StoreOrder;
  20. use app\common\helpers\PaginationHelper;
  21. use Yunshop\StoreCashier\frontend\store\models\Goods;
  22. //use Yunshop\StoreCashier\common\models\CashierOrder;
  23. class WithdrawController extends ApiController
  24. {
  25. public $pageSize = 15;
  26. public function withdrawLog()
  27. {
  28. $status = \YunShop::request()->status;
  29. $request = Withdraw::getWithdrawLog($status)->orderBy('created_at', 'desc')->paginate($this->pageSize);
  30. if ($request) {
  31. return $this->successJson('获取数据成功!', $request->toArray());
  32. }
  33. return $this->errorJson('未检测到数据!');
  34. }
  35. public function withdrawInfo()
  36. {
  37. $id = \YunShop::request()->id;
  38. $request = Withdraw::getWithdrawInfoById($id)
  39. ->addSelect('reject_reason')
  40. ->first();
  41. if ($request) {
  42. $request = $request->toArray();
  43. if ($request['status'] == 0) {//未审核
  44. $request['actual_poundage'] = $request['poundage'];
  45. $request['actual_servicetax'] = $request['servicetax'];
  46. $request['actual_amounts'] = bcsub($request['amounts'],(bcadd($request['poundage'],$request['servicetax'],2)),2);
  47. }
  48. return $this->successJson('获取数据成功!', $request);
  49. }
  50. return $this->errorJson('未检测到数据!');
  51. }
  52. /**
  53. * 提成列表
  54. */
  55. public function withdrawList()
  56. {
  57. $status = \YunShop::request()->status;
  58. $type = \YunShop::request()->withdrawal_type;
  59. $date = $this->timeData();
  60. switch ($type){
  61. case 'store' :
  62. if (app('plugins')->isEnabled('store-cashier')) {
  63. return $this->storeData($date,$status);
  64. }
  65. break;
  66. case 'store_cashier' :
  67. if (app('plugins')->isEnabled('store-cashier')) {
  68. return $this->storeCashier($date,$status);
  69. }
  70. break;
  71. case 'hotel' :
  72. if (app('plugins')->isEnabled('hotel')) {
  73. return $this->hotel($date,$status);
  74. }
  75. break;
  76. case 'hotel_cashier' :
  77. if (app('plugins')->isEnabled('hotel')) {
  78. return $this->hotelashier($date,$status);
  79. }
  80. case 'auction' :
  81. if (app('plugins')->isEnabled('auction')) {
  82. return $this->auction($date,$status);
  83. }
  84. break;
  85. }
  86. }
  87. /**
  88. * 获取月周,昨天,今天的起始时间戳
  89. */
  90. public function timeData()
  91. {
  92. $date = [];
  93. //今日起始时间
  94. $date['begin_today'] = mktime(0,0,0,date('m'),date('d'),date('Y'));
  95. $date['end_today'] = mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
  96. //获取一周的时间
  97. $date['begin_lastweek'] = mktime(0,0,0,date('m'),date('d')-date('w')+1,date('Y'));
  98. $date['end_lastweek'] = mktime(23,59,59,date('m'),date('d')-date('w')+7,date('Y'));
  99. //获取昨天的时间
  100. $date['begin_yesterday'] = mktime(0,0,0,date('m'),date('d')-1,date('Y'));
  101. $date['end_yesterday'] = mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
  102. //获取当前月起始时间
  103. $date['begin_thismonth'] = mktime(0,0,0,date('m'),1,date('Y'));
  104. $date['end_thismonth'] = mktime(23,59,59,date('m'),date('t'),date('Y'));
  105. return $date;
  106. }
  107. /**
  108. * 门店数据
  109. */
  110. public function storeData($date,$status)
  111. {
  112. $stro = new StoreOrder();
  113. $store = Store::where('uid',\YunShop::app()->getMemberId())->first();
  114. $store_order = StoreOrder::where(['store_id'=>$store['id']]);
  115. $store_search['store_id'] = $store['id'];
  116. if (!empty($status) && $status != 3 || $status == 0){
  117. $store_order->where('has_settlement',$status);
  118. }
  119. $data = $store_order->select(['yz_plugin_store_order.id','yz_plugin_store_order.order_id','yz_plugin_store_order.store_id','yz_plugin_store_order.has_settlement','yz_plugin_store_order.amount','yz_plugin_store_order.created_at','yz_order.order_sn'])->join('yz_order','yz_plugin_store_order.order_id','yz_order.id')->where('plugin_id',32)->orderBy('yz_plugin_store_order.created_at', 'desc')->paginate(15)->toArray();
  120. foreach ($data['data'] as $key => $item){
  121. $datas[$key]['order_sn'] = $item['order_sn'];
  122. $datas[$key]['amount'] = $item['amount'];
  123. $datas[$key]['status'] = $item['has_settlement'];
  124. switch ($item['has_settlement']){
  125. case 0 : $datas[$key]['settlement'] = '未结算'; break;
  126. case 1 : $datas[$key]['settlement'] = '已结算'; break;
  127. case -1 : $datas[$key]['settlement'] = '已失效'; break;
  128. }
  129. }
  130. $data['data'] = $datas ?: [];
  131. //获取一月的提成
  132. $data['thismonth'] = $stro->join('yz_order','yz_plugin_store_order.order_id','yz_order.id')->where('yz_order.plugin_id',32)->where(['store_id'=>$store['id']])->whereBetween('yz_plugin_store_order.created_at',[ $date['begin_thismonth'] , $date['end_thismonth'] ])->sum('yz_plugin_store_order.amount');
  133. //获取一周的提成
  134. $data['lastweek'] = $stro->join('yz_order','yz_plugin_store_order.order_id','yz_order.id')->where('yz_order.plugin_id',32)->where(['store_id'=>$store['id']])->whereBetween('yz_plugin_store_order.created_at',[ $date['begin_lastweek'] , $date['end_lastweek'] ])->sum('yz_plugin_store_order.amount');
  135. //获取昨天的提成
  136. $data['yesterday'] = $stro->join('yz_order','yz_plugin_store_order.order_id','yz_order.id')->where('yz_order.plugin_id',32)->where(['store_id'=>$store['id']])->whereBetween('yz_plugin_store_order.created_at',[ $date['begin_yesterday'] , $date['end_yesterday'] ])->sum('yz_plugin_store_order.amount');
  137. //获取今天的提成
  138. $data['today'] = $stro->join('yz_order','yz_plugin_store_order.order_id','yz_order.id')->where('yz_order.plugin_id',32)->where(['store_id'=>$store['id']])->whereBetween('yz_plugin_store_order.created_at',[ $date['begin_today'] , $date['end_today'] ])->sum('yz_plugin_store_order.amount');
  139. if ($data['data']){
  140. return $this->successJson('查询成功',$data);
  141. }
  142. return $this->errorJson('查询失败',$data);
  143. }
  144. /**
  145. * 收银台数据
  146. */
  147. public function storeCashier($date,$status)
  148. {
  149. $data = [];
  150. $store = Store::where('uid',\YunShop::app()->getMemberId())->first();
  151. // 找到店主
  152. $cashier_order = new \Yunshop\StoreCashier\common\models\CashierOrder();
  153. $cashier_order_builder = $cashier_order->select(['yz_plugin_cashier_order.id','yz_plugin_cashier_order.order_id','yz_plugin_cashier_order.cashier_id','yz_plugin_cashier_order.has_settlement','yz_plugin_cashier_order.amount','yz_plugin_cashier_order.created_at','yz_order.order_sn'])->where('cashier_id',$store['cashier_id']);
  154. if (!empty($status) && $status != 3 || $status == 0){
  155. $cashier_order_builder->where('has_settlement',$status);
  156. }
  157. $data = $cashier_order_builder->join('yz_order','yz_order.id','yz_plugin_cashier_order.order_id')->orderBy('yz_plugin_cashier_order.created_at', 'desc')->paginate(15)->toArray();
  158. foreach ($data['data'] as $key => $item){
  159. $datas[$key]['order_sn'] = $item['order_sn'];
  160. $datas[$key]['created_at'] = $item['created_at'];
  161. $datas[$key]['status'] = $item['has_settlement'];
  162. $datas[$key]['amount'] = $item['amount'];
  163. switch ($item['has_settlement']){
  164. case 0 : $datas[$key]['settlement'] = '未结算'; break;
  165. case 1 : $datas[$key]['settlement'] = '已结算'; break;
  166. case -1 : $datas[$key]['settlement'] = '已失效'; break;
  167. }
  168. }
  169. $data['data'] = $datas ?: [];
  170. //获取一月的提成
  171. $data['thismonth'] = $cashier_order->where('cashier_id',$store['cashier_id'])->whereBetween('yz_plugin_cashier_order.created_at',[ $date['begin_thismonth'] , $date['end_thismonth'] ])->sum('yz_plugin_cashier_order.amount');
  172. //获取一周的提成
  173. $data['lastweek'] = $cashier_order->where('cashier_id',$store['cashier_id'])->whereBetween('yz_plugin_cashier_order.created_at',[ $date['begin_lastweek'] , $date['end_lastweek'] ])->sum('yz_plugin_cashier_order.amount');
  174. //获取昨天的提成
  175. $data['yesterday'] = $cashier_order->where('cashier_id',$store['cashier_id'])->whereBetween('yz_plugin_cashier_order.created_at',[ $date['begin_yesterday'] , $date['end_yesterday'] ])->sum('yz_plugin_cashier_order.amount');
  176. //获取今天的提成
  177. $data['today'] = $cashier_order->where('cashier_id',$store['cashier_id'])->whereBetween('yz_plugin_cashier_order.created_at',[ $date['begin_today'] , $date['end_today'] ])->sum('yz_plugin_cashier_order.amount');
  178. if ($data['data']){
  179. return $this->successJson('查询成功',$data);
  180. }
  181. return $this->successJson('查询失败',$data);
  182. }
  183. /**
  184. * j酒店数据
  185. */
  186. public function hotel($date,$status)
  187. {
  188. $data = [];
  189. $hotel = Hotel::where('uid',\YunShop::app()->getMemberId())->first();
  190. $hotel_order = HotelOrder::with('hasOneOrder')->where('hotel_id',$hotel['id']);
  191. if (!empty($status) && $status != 3 || $status == 0){
  192. $hotel_order->where('has_settlement',$status);
  193. }
  194. $data = $hotel_order->orderBy('created_at', 'desc')->paginate(15)
  195. ->toArray();
  196. $pager = PaginationHelper::show($data['total'], $data['currentPage'], $data['perPage']);
  197. foreach ($data['data'] as $key => $itme){
  198. // dd($itme);
  199. $datas[$key]['order_sn'] = $itme['has_one_order']['order_sn'];
  200. $datas[$key]['created_at'] = $itme['created_at'];
  201. $datas[$key]['amount'] = $itme['amount'];
  202. $datas[$key]['status'] = $itme['has_settlement'];
  203. switch ($itme['has_settlement']){
  204. case 0 : $datas[$key]['settlement'] = '未结算'; break;
  205. case 1 : $datas[$key]['settlement'] = '已结算'; break;
  206. case -1 : $datas[$key]['settlement'] = '已失效'; break;
  207. }
  208. }
  209. $data['data'] = $datas ?: [];
  210. //获取一月的提成
  211. $data['thismonth'] = $hotel_order->whereBetween('created_at',[ $date['begin_thismonth'] , $date['end_thismonth'] ])->sum('amount');
  212. //获取一周的提成
  213. $data['lastweek'] = $hotel_order->whereBetween('created_at',[ $date['begin_lastweek'] , $date['end_lastweek'] ])->sum('amount');
  214. //获取昨天的提成
  215. $data['yesterday'] = $hotel_order->whereBetween('created_at',[ $date['begin_yesterday'] , $date['end_yesterday'] ])->sum('amount');
  216. //获取今天的提成
  217. $data['today'] = $hotel_order->whereBetween('created_at',[ $date['begin_today'] , $date['end_today'] ])->sum('amount');
  218. if ($data['data']){
  219. return $this->successJson('查询成功',$data);
  220. }
  221. return $this->successJson('查询失败',$data);
  222. }
  223. /**
  224. * 酒店收银台数据
  225. */
  226. public function hotelashier($date,$status)
  227. {
  228. $data = [];
  229. $hotel = Hotel::where('uid',\YunShop::app()->getMemberId())->first();
  230. $hotel_order = CashierOrder::with('hasOneOrder')->where('cashier_id',$hotel['cashier_id']);
  231. if (!empty($status) && $status != 3 || $status == 0){
  232. $hotel_order->where('has_settlement',$status);
  233. }
  234. $data = $hotel_order->orderBy('created_at', 'desc')->paginate(15)
  235. ->toArray();
  236. $pager = PaginationHelper::show($data['total'], $data['currentPage'], $data['perPage']);
  237. foreach ($data['data'] as $key => $itme){
  238. // dd($itme);
  239. $datas[$key]['order_sn'] = $itme['has_one_order']['order_sn'];
  240. $datas[$key]['created_at'] = $itme['created_at'];
  241. $datas[$key]['amount'] = $itme['amount'];
  242. $datas[$key]['status'] = $itme['has_settlement'];
  243. switch ($itme['has_settlement']){
  244. case 0 : $datas[$key]['settlement'] = '未结算'; break;
  245. case 1 : $datas[$key]['settlement'] = '已结算'; break;
  246. case -1 : $datas[$key]['settlement'] = '已失效'; break;
  247. }
  248. }
  249. $data['data'] = $datas ?: [];
  250. //获取一月的提成
  251. $data['thismonth'] = $hotel_order->whereBetween('created_at',[ $date['begin_thismonth'] , $date['end_thismonth'] ])->sum('amount');
  252. //获取一周的提成
  253. $data['lastweek'] = $hotel_order->whereBetween('created_at',[ $date['begin_lastweek'] , $date['end_lastweek'] ])->sum('amount');
  254. //获取昨天的提成
  255. $data['yesterday'] = $hotel_order->whereBetween('created_at',[ $date['begin_yesterday'] , $date['end_yesterday'] ])->sum('amount');
  256. //获取今天的提成
  257. $data['today'] = $hotel_order->whereBetween('created_at',[ $date['begin_today'] , $date['end_today'] ])->sum('amount');
  258. if ($data['data']){
  259. return $this->successJson('查询成功',$data);
  260. }
  261. return $this->successJson('查询失败',$data);
  262. }
  263. /**
  264. * 拍卖数据
  265. */
  266. public function auction($date,$status)
  267. {
  268. $data = [];
  269. $auction_order = AuctionOrderModel::with('hasOneOrder')->where('auctioneer_id',\YunShop::app()->getMemberId());
  270. if (!empty($status) && $status != 3 || $status == 0){
  271. $auction_order->where('has_settlement',$status);
  272. }
  273. $data = $auction_order->orderBy('created_at', 'desc')->paginate(15)
  274. ->toArray();
  275. $pager = PaginationHelper::show($data['total'], $data['currentPage'], $data['perPage']);
  276. foreach ($data['data'] as $key => $itme){
  277. // dd($itme);
  278. $datas[$key]['order_sn'] = $itme['has_one_order']['order_sn'];
  279. $datas[$key]['created_at'] = $itme['created_at'];
  280. $datas[$key]['amount'] = $itme['amount'];
  281. $datas[$key]['status'] = $itme['has_settlement'];
  282. switch ($itme['has_settlement']){
  283. case 0 : $datas[$key]['settlement'] = '未结算'; break;
  284. case 1 : $datas[$key]['settlement'] = '已结算'; break;
  285. case -1 : $datas[$key]['settlement'] = '已失效'; break;
  286. }
  287. }
  288. $data['data'] = $datas ?: [];
  289. //获取一月的提成
  290. $data['thismonth'] = $auction_order->whereBetween('created_at',[ $date['begin_thismonth'] , $date['end_thismonth'] ])->sum('amount');
  291. //获取一周的提成
  292. $data['lastweek'] = $auction_order->whereBetween('created_at',[ $date['begin_lastweek'] , $date['end_lastweek'] ])->sum('amount');
  293. //获取昨天的提成
  294. $data['yesterday'] = $auction_order->whereBetween('created_at',[ $date['begin_yesterday'] , $date['end_yesterday'] ])->sum('amount');
  295. //获取今天的提成
  296. $data['today'] = $auction_order->whereBetween('created_at',[ $date['begin_today'] , $date['end_today'] ])->sum('amount');
  297. if ($data['data']){
  298. return $this->successJson('查询成功',$data);
  299. }
  300. return $this->successJson('查询失败',$data);
  301. }
  302. /**
  303. * 提现收入列表
  304. * @return mixed
  305. */
  306. public function incomeList()
  307. {
  308. $id = \YunShop::request()->id;
  309. $request = Withdraw::getWithdrawInfoById($id)
  310. ->first();
  311. $incomeModels = Income::getIncomeByIds($request->type_id)
  312. ->select(['id','pay_status','amount','created_at'])->paginate(15);
  313. return $this->successJson('success',$incomeModels);
  314. }
  315. }