IndexController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeshop100%开源免费商用商城系统
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | 开源版本可自由商用,可去除界面版权logo
  7. // | 商业版本务必购买商业授权,以免引起法律纠纷
  8. // | 禁止对系统程序代码以任何目的,任何形式的再发布
  9. // | gitee下载:https://gitee.com/likeshop_gitee
  10. // | github下载:https://github.com/likeshop-github
  11. // | 访问官网:https://www.likeshop.cn
  12. // | 访问社区:https://home.likeshop.cn
  13. // | 访问手册:http://doc.likeshop.cn
  14. // | 微信公众号:likeshop技术社区
  15. // | likeshop团队 版权所有 拥有最终解释权
  16. // +----------------------------------------------------------------------
  17. // | author: likeshopTeam
  18. // +----------------------------------------------------------------------
  19. namespace app\count\controller;
  20. use app\common\model\Order;
  21. use app\common\model\OrderGoods;
  22. use app\common\model\GoodsCategory as GoodsCategoryModel;
  23. use app\common\model\Goods;
  24. use app\common\model\Distribution;
  25. use app\common\model\AfterSale;
  26. use think\facade\Config;
  27. /**
  28. * 配置控制器
  29. * Class ConfigController
  30. * @package app\adminapi\controller
  31. */
  32. class IndexController extends BaseAdminController
  33. {
  34. public array $notNeedLogin = ['index'];
  35. public function index()
  36. {
  37. /** 商品统计 start **/
  38. // 获取上个月的第一天
  39. $firstDayOfLastMonth = strtotime(date('Y-m-01', strtotime('last month')));
  40. // 获取上个月最后一天
  41. $lastDayOfLastMonth = strtotime(date('Y-m-t', strtotime('last month')) . ' 23:59:59');
  42. // 获取上个月的第一天
  43. $firstDayOfNowMonth = strtotime(date('Y-m-01'));
  44. // 获取上个月最后一天
  45. $lastDayOfNowMonth = strtotime(date('Y-m-t') . ' 23:59:59');
  46. $where = [];
  47. $whereTime = [];
  48. $whereLastTime[] = ['o.create_time', 'between', [$firstDayOfLastMonth, $lastDayOfLastMonth]];
  49. $whereNowTime[] = ['o.create_time', 'between', [$firstDayOfNowMonth, $lastDayOfNowMonth]];
  50. $where[] = ['o.pay_status', '=', 1];
  51. //上月销量
  52. $lastOrderGoodsInfo = OrderGoods::alias('og')->leftJoin('order o', 'o.id = og.order_id')
  53. ->field('og.goods_id,og.goods_name name,sum(og.goods_num) last_total_num')
  54. ->where($where)->where($whereLastTime)
  55. ->group('og.goods_id,og.goods_name')
  56. ->order('last_total_num desc')
  57. ->select()->toArray();
  58. //本月销量
  59. $nowOrderGoodsInfo = OrderGoods::alias('og')->leftJoin('order o', 'o.id = og.order_id')
  60. ->field('og.goods_id,og.goods_name name,sum(og.goods_num) now_total_num')
  61. ->where($where)->where($whereNowTime)
  62. ->group('og.goods_id,og.goods_name')
  63. ->order('now_total_num desc')
  64. ->select()->toArray();
  65. $newGoodsData = [];
  66. if (count($lastOrderGoodsInfo) > 5) {
  67. foreach ($lastOrderGoodsInfo as $lk => $lv) {
  68. if ($lk > 4) break;
  69. foreach ($nowOrderGoodsInfo as $nk => $nv) {
  70. $lastOrderGoodsInfo[$lk]['now_total_num'] = 0;
  71. if ($lv['goods_id'] == $nv['goods_id']) {
  72. $lv['now_total_num'] = $nv['now_total_num'];
  73. break;
  74. }
  75. }
  76. $newGoodsData[] = $lv;
  77. }
  78. } else {
  79. if (empty($lastOrderGoodsInfo)) {
  80. foreach ($nowOrderGoodsInfo as $nk => $nv) {
  81. if ($nk > 4) break;
  82. $nv['last_total_num'] = 0;
  83. $newGoodsData[] = $nv;
  84. }
  85. } else {
  86. $count = 0;
  87. $lastGoodsIdArr = [];
  88. foreach ($lastOrderGoodsInfo as $lk => $lv) {
  89. $count++;
  90. array_push($lastGoodsIdArr, $lv['goods_id']);
  91. if ($lk > 4) break;
  92. foreach ($nowOrderGoodsInfo as $nk => $nv) {
  93. $lv['now_total_num'] = 0;
  94. if ($lv['goods_id'] == $nv['goods_id']) {
  95. $lv['now_total_num'] = $nv['now_total_num'];
  96. break;
  97. }
  98. }
  99. $newGoodsData[] = $lv;
  100. }
  101. if ($count < 5) {
  102. foreach ($nowOrderGoodsInfo as &$nv) {
  103. if ($count >= 5) break;
  104. if (in_array($nv['goods_id'], $lastGoodsIdArr)) continue;
  105. $nv['last_total_num'] = 0;
  106. $nv['growth'] = '100%';
  107. $nv['type'] = 1;
  108. $count++;
  109. $newGoodsData[] = $nv;
  110. }
  111. }
  112. }
  113. }
  114. foreach ($newGoodsData as &$ngv) {
  115. if ($ngv['last_total_num'] == 0) {
  116. $ngv['growth'] = '100%';
  117. $ngv['type'] = 1;
  118. } else {
  119. if ($ngv['last_total_num'] < $ngv['now_total_num']) {
  120. $ngv['growth'] = round(($ngv['now_total_num'] - $ngv['last_total_num']) / $ngv['last_total_num'] * 100, 0) . '%';
  121. $ngv['type'] = 1;
  122. } else if ($ngv['last_total_num'] > $ngv['now_total_num']) {
  123. $ngv['growth'] = round(($ngv['last_total_num'] - $ngv['now_total_num']) / $ngv['last_total_num'] * 100, 0) . '%';
  124. $ngv['type'] = 0;
  125. } else {
  126. $ngv['growth'] = 0;
  127. $ngv['type'] = 1;
  128. }
  129. }
  130. $ngv['name'] = mb_substr($ngv['name'], 0, 6, "UTF-8") . '....';
  131. }
  132. $data['newGoodsData'] = $newGoodsData;
  133. /** 商品统计 end **/
  134. /** 分类销量排名 start**/
  135. $ogcwhere = [];
  136. // $ogcwhere[] = ['gc.level', '=', '1'];
  137. $OrderGoodsCategoryInfos = OrderGoods::alias('og')
  138. ->leftJoin('order o', 'o.id = og.order_id')
  139. ->leftJoin('goods g', 'g.id = og.goods_id')
  140. ->leftJoin('goods_category_index gci', 'gci.goods_id=g.id')
  141. ->leftJoin('goods_category gc', 'gc.id = gci.category_id')
  142. ->field('gc.id,gc.`name` ,gc.pid,sum( og.goods_num) total_num')
  143. ->where($where)->where($ogcwhere)
  144. ->group('gc.name')
  145. ->select()->toArray();
  146. $OrderGoodsCategoryInfo = [];
  147. foreach($OrderGoodsCategoryInfos as &$ogcv){
  148. $pid = $ogcv['pid'];
  149. $id = $ogcv['id'];
  150. $new_data=[];
  151. $name = $ogcv['name'];
  152. $total_num = $ogcv['total_num'];
  153. while($pid){
  154. if($pid == 0){
  155. break;
  156. }else{
  157. $categoryInfo = GoodsCategoryModel::find($pid);
  158. $pid = $categoryInfo['pid'];
  159. $id = $categoryInfo['id'];
  160. $name = $categoryInfo['name'];
  161. }
  162. }
  163. if(isset($OrderGoodsCategoryInfo[$id])){
  164. $new_total_num = $OrderGoodsCategoryInfo[$id]['total_num']+$total_num;
  165. $OrderGoodsCategoryInfo[$id]['total_num'] = $new_total_num;
  166. }else{
  167. $new_data['total_num'] = $total_num;
  168. $new_data['name'] = $name;
  169. $OrderGoodsCategoryInfo[$id] = $new_data;
  170. }
  171. }
  172. $goods_category_data = array_column($OrderGoodsCategoryInfo, 'total_num');
  173. $data['order_goods_category'] = $OrderGoodsCategoryInfo;
  174. $count = count($goods_category_data);
  175. while ($count) {
  176. if ($count < 3) {
  177. array_push($goods_category_data, 0);
  178. } else {
  179. break;
  180. }
  181. $count = count($goods_category_data);
  182. }
  183. $data['goods_category_data'] = json_encode($goods_category_data);
  184. $ogcK = 0;
  185. $chars_category = [];
  186. foreach ($OrderGoodsCategoryInfo as $ogcv) {
  187. $ogcK++;
  188. $random_data = [30, 20, 50, 40, 100, 200, 300];
  189. shuffle($random_data);
  190. $randomValue = $random_data[2];
  191. $max = substr($ogcv['total_num'] + $randomValue, 0, -1) . '0';
  192. $ogcv['max'] = $max;
  193. unset($ogcv['total_num']);
  194. $chars_category[] = $ogcv;
  195. }
  196. while ($ogcK) {
  197. $categorys['name'] = '填充';
  198. $categorys['max'] = '0';
  199. if ($ogcK < 3) {
  200. $chars_category[] = $categorys;
  201. } else {
  202. break;
  203. }
  204. $ogcK++;
  205. }
  206. $data['chars_category'] = json_encode($chars_category);
  207. /** 分类销量排名 end**/
  208. /** middle start **/
  209. //商品数量
  210. $goodswhere = [];
  211. $goodswhere[] = ['status', '=', 1];
  212. $goodswhere[] = ['delete_time', '=', NULL];
  213. $goods_count = Goods::where($goodswhere)->count();
  214. $middle['goods_number'] = $goods_count;
  215. //合作商
  216. $diswhere = [];
  217. $diswhere[] = ['is_distribution', '=', 1];
  218. $diswhere[] = ['delete_time', '=', NULL];
  219. $distribution_count = Distribution::where($diswhere)->count();
  220. $middle['distribution_number'] = $distribution_count;
  221. //订单数
  222. $order_where = [];
  223. $order_where[] = ['pay_status', '=', 1];
  224. $order_count = Order::where($order_where)->count();
  225. $middle['order_number'] = $order_count;
  226. //派送订单
  227. $orderwhere = [];
  228. $orderwhere[] = ['order_status', '=', 2];
  229. $order_delivery_count = Order::where($orderwhere)->count();
  230. $middle['delivery_number'] = $order_delivery_count;
  231. //农资供应
  232. $middle['agricultural_supply_number'] = 0;
  233. $nowYear = date('Y');
  234. $nowMonth = date('n');
  235. $monthData = [];
  236. $monthArr = [];
  237. for ($i = 1; $i <= $nowMonth; $i++) {
  238. array_push($monthArr, $i);
  239. $monthFat = $i . '月';
  240. array_push($monthData, $monthFat);
  241. }
  242. $middle['YearData'] = $nowYear;
  243. $middle['MonthFormatData'] = json_encode($monthData);
  244. $month_data = [];
  245. foreach ($monthArr as $mv) {
  246. $date = getMonthFirstAndLastDay($nowYear, $mv);
  247. $startTime = strtotime($date['firstDay']);
  248. $endTime = strtotime($date['lastDay'] . ' 23:59:59');
  249. $create_time_date = [$startTime, $endTime];
  250. $salewhere = [];
  251. $salewhere[] = ['create_time', 'between', $create_time_date];
  252. $month_order_number = Order::alias('o')->where($where)->where($salewhere)->count();
  253. array_push($month_data, $month_order_number);
  254. }
  255. $middle['MonthOrderData'] = json_encode($month_data);
  256. $nowTime = time();
  257. $todayStartDate = date('Y-m-d');
  258. $todaywhere = [];
  259. $todaywhere[] = ['create_time', 'between', [strtotime($todayStartDate), $nowTime]];
  260. $todayOrderInfo = Order::alias('o')->where($where)->where($todaywhere)->field('count(id) number,sum(total_amount) total_money')->find();
  261. $middle['today_order_number'] = $todayOrderInfo['number'];
  262. $middle['today_total_amount'] = $todayOrderInfo['total_money'] ?? 0;
  263. $thisMonth = date('n');
  264. $this_month_date = getMonthFirstAndLastDay($nowYear, $thisMonth);
  265. $startTime = strtotime($this_month_date['firstDay']);
  266. $endTime = strtotime($this_month_date['lastDay'] . ' 23:59:59');
  267. $create_time_date = [$startTime, $endTime];
  268. $thisMonthWhere = [];
  269. $thisMonthWhere[] = ['create_time', 'between', $create_time_date];
  270. $thisMonthOrderInfo = Order::alias('o')->where($where)->where($thisMonthWhere)->field('count(id) number,sum(total_amount) total_money')->find();
  271. $middle['this_month_order_number'] = $thisMonthOrderInfo['number'];
  272. $middle['this_month_total_amount'] = $thisMonthOrderInfo['total_money'] ?? 0;
  273. $data['middle'] = $middle;
  274. /** middle end **/
  275. /**下单退款 start**/
  276. $order_refund['MonthData'] = json_encode($monthArr);
  277. $order_month_info = [];
  278. $refund_month_info = [];
  279. foreach ($monthArr as $mv) {
  280. $date = getMonthFirstAndLastDay($nowYear, $mv);
  281. $startTime = strtotime($date['firstDay']);
  282. $endTime = strtotime($date['lastDay'] . ' 23:59:59');
  283. $create_time_date = [$startTime, $endTime];
  284. $salewhere = [];
  285. $salewhere[] = ['create_time', 'between', $create_time_date];
  286. $month_order_number = Order::alias('o')->where($where)->where($salewhere)->count();
  287. array_push($order_month_info, $month_order_number);
  288. $salewhere[]=['status','in',[1,2]];
  289. $month_refund_number = AfterSale::where($salewhere)->count();
  290. array_push($refund_month_info,$month_refund_number);
  291. }
  292. $order_refund['order_month_info'] = json_encode($order_month_info);
  293. $order_refund['refund_month_info'] = json_encode($refund_month_info);
  294. $data['order_refund_info'] = $order_refund;
  295. /**下单退款 end **/
  296. /**资产数据 start**/
  297. $leave_unused_num = 0;
  298. $unused_rate = 0;
  299. $unlease = 0;
  300. $leaseing = 0;
  301. $leaseend = 0;
  302. $demain = 'https://info.gxsmlt.com/';
  303. $asset_url = $demain.'/adminapi/asset.asset/getAssetData';
  304. $asset_info = httpRequest($asset_url);
  305. $asset_info = json_decode($asset_info,true);
  306. if($asset_info['code']==1){
  307. $a_data = $asset_info['data'];
  308. $leave_unused_num = $a_data['leave_unused_num'];
  309. $unused_rate = $a_data['unused_rate'];
  310. foreach($a_data['asset_list'] as $asv){
  311. switch ($asv['lease_status']){
  312. case 1:
  313. $unlease = $asv['total_number'];
  314. break;
  315. case 2:
  316. $leaseing = $asv['total_number'];
  317. break;
  318. case 3:
  319. $leaseend = $asv['total_number'];
  320. break;
  321. }
  322. }
  323. }
  324. $asset_infos['leave_unused_num']=$leave_unused_num;
  325. $asset_infos['unused_rate']=round($unused_rate,0);
  326. $asset_infos['unlease']=$unlease;
  327. $asset_infos['leaseing']=$leaseing;
  328. $asset_infos['leaseend']=$leaseend;
  329. $data['asset_info'] = $asset_infos;
  330. /**资产数据 end**/
  331. // dump($data);
  332. return view('/count/index', $data);
  333. }
  334. }