IndexController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  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\Goods;
  23. use app\common\model\Distribution;
  24. use think\facade\Config;
  25. /**
  26. * 配置控制器
  27. * Class ConfigController
  28. * @package app\adminapi\controller
  29. */
  30. class IndexController extends BaseAdminController
  31. {
  32. public array $notNeedLogin = ['index'];
  33. public function index()
  34. {
  35. /** 商品统计 start **/
  36. // 获取上个月的第一天
  37. $firstDayOfLastMonth = strtotime(date('Y-m-01', strtotime('last month')));
  38. // 获取上个月最后一天
  39. $lastDayOfLastMonth = strtotime(date('Y-m-t', strtotime('last month')) . ' 23:59:59');
  40. // 获取上个月的第一天
  41. $firstDayOfNowMonth = strtotime(date('Y-m-01'));
  42. // 获取上个月最后一天
  43. $lastDayOfNowMonth = strtotime(date('Y-m-t') . ' 23:59:59');
  44. $where = [];
  45. $whereTime = [];
  46. $whereLastTime[] = ['o.create_time', 'between', [$firstDayOfLastMonth, $lastDayOfLastMonth]];
  47. $whereNowTime[] = ['o.create_time', 'between', [$firstDayOfNowMonth, $lastDayOfNowMonth]];
  48. $where[]=['o.pay_status','=',1];
  49. //上月销量
  50. $lastOrderGoodsInfo = OrderGoods::alias('og')->leftJoin('order o','o.id = og.order_id')
  51. ->field('og.goods_id,og.goods_name name,sum(og.goods_num) last_total_num')
  52. ->where($where)->where($whereLastTime)
  53. ->group('og.goods_id,og.goods_name')
  54. ->order('last_total_num desc')
  55. ->select()->toArray();
  56. //本月销量
  57. $nowOrderGoodsInfo = OrderGoods::alias('og')->leftJoin('order o','o.id = og.order_id')
  58. ->field('og.goods_id,og.goods_name name,sum(og.goods_num) now_total_num')
  59. ->where($where)->where($whereNowTime)
  60. ->group('og.goods_id,og.goods_name')
  61. ->order('now_total_num desc')
  62. ->select()->toArray();
  63. $newGoodsData = [];
  64. if(count($lastOrderGoodsInfo)>5){
  65. foreach($lastOrderGoodsInfo as $lk=>$lv){
  66. if($lk>4)break;
  67. foreach($nowOrderGoodsInfo as $nk=>$nv){
  68. $lastOrderGoodsInfo[$lk]['now_total_num'] = 0;
  69. if($lv['goods_id'] == $nv['goods_id'] ){
  70. $lv['now_total_num'] = $nv['now_total_num'];
  71. break;
  72. }
  73. }
  74. $newGoodsData[] =$lv;
  75. }
  76. }
  77. else{
  78. if(empty($lastOrderGoodsInfo)){
  79. foreach($nowOrderGoodsInfo as $nk=>$nv){
  80. if($nk>4)break;
  81. $nv['last_total_num'] = 0;
  82. $newGoodsData[] = $nv;
  83. }
  84. }else{
  85. $count = 0;
  86. $lastGoodsIdArr = [];
  87. foreach($lastOrderGoodsInfo as $lk=>$lv){
  88. $count++;
  89. array_push($lastGoodsIdArr,$lv['goods_id']);
  90. if($lk>4)break;
  91. foreach($nowOrderGoodsInfo as $nk=>$nv){
  92. $lv['now_total_num'] = 0;
  93. if($lv['goods_id'] == $nv['goods_id'] ){
  94. $lv['now_total_num'] = $nv['now_total_num'];
  95. break;
  96. }
  97. }
  98. $newGoodsData[] =$lv;
  99. }
  100. if($count<5){
  101. foreach($nowOrderGoodsInfo as &$nv){
  102. if($count>=5) break;
  103. if(in_array($nv['goods_id'],$lastGoodsIdArr)) continue;
  104. $nv['last_total_num'] = 0;
  105. $nv['growth'] = '100%';
  106. $nv['type'] = 1;
  107. $count ++;
  108. $newGoodsData[] = $nv;
  109. }
  110. }
  111. }
  112. }
  113. foreach ($newGoodsData as &$ngv){
  114. if($ngv['last_total_num']==0){
  115. $ngv['growth'] = '100%';
  116. $ngv['type'] = 1;
  117. }else{
  118. if($ngv['last_total_num'] < $ngv['now_total_num']){
  119. $ngv['growth'] = round(($ngv['now_total_num'] - $ngv['last_total_num'])/$ngv['last_total_num']*100 ,0). '%';
  120. $ngv['type'] = 1;
  121. }else if($ngv['last_total_num'] > $ngv['now_total_num']){
  122. $ngv['growth'] = round(($ngv['last_total_num'] - $ngv['now_total_num'])/$ngv['last_total_num']*100 ,0). '%';
  123. $ngv['type'] = 0;
  124. }else{
  125. $ngv['growth'] = 0;
  126. $ngv['type'] = 1;
  127. }
  128. }
  129. $ngv['name'] = mb_substr( $ngv['name'], 0, 6, "UTF-8") . '....' ;
  130. }
  131. $data['newGoodsData'] = $newGoodsData;
  132. /** 商品统计 end **/
  133. /** 分类销量排名 start**/
  134. $ogcwhere = [];
  135. $ogcwhere[]=['gc.level','=','1'];
  136. $OrderGoodsCategoryInfo = OrderGoods::alias('og')
  137. ->leftJoin('order o','o.id = og.order_id')
  138. ->leftJoin('goods g','g.id = og.goods_id')
  139. ->leftJoin('goods_category_index gci','gci.goods_id=g.id')
  140. ->leftJoin('goods_category gc','gc.id = gci.category_id')
  141. ->field('gc.`name` ,sum( og.goods_num) total_num')
  142. ->where($where)->where($ogcwhere)
  143. ->group('gc.name')
  144. ->select()->toArray();
  145. $goods_category_data = array_column($OrderGoodsCategoryInfo,'total_num');
  146. $data['order_goods_category'] = $OrderGoodsCategoryInfo;
  147. $count = count($goods_category_data);
  148. while($count){
  149. if($count<3 ) {
  150. array_push($goods_category_data,0);
  151. }else{
  152. break;
  153. }
  154. $count = count($goods_category_data);
  155. }
  156. $data['goods_category_data'] = json_encode($goods_category_data);
  157. $ogcK = 0;
  158. $chars_category = [];
  159. foreach ($OrderGoodsCategoryInfo as $ogcv){
  160. $ogcK++;
  161. $random_data = [30,20,50,40,100,200,300];
  162. shuffle($random_data);
  163. $randomValue = $random_data[2];
  164. $max = substr($ogcv['total_num'] + $randomValue, 0, -1).'0';
  165. $ogcv['max'] = $max;
  166. unset($ogcv['total_num']);
  167. $chars_category[]=$ogcv;
  168. }
  169. while($ogcK){
  170. $categorys['name']='填充';
  171. $categorys['max']='0';
  172. if($ogcK<3 ) {
  173. $chars_category[]=$categorys;
  174. }else{
  175. break;
  176. }
  177. $ogcK++;
  178. }
  179. $data['chars_category'] = json_encode($chars_category);
  180. /** 分类销量排名 end**/
  181. /** middle start **/
  182. //商品数量
  183. $goodswhere = [] ;
  184. $goodswhere[] = ['status','=',1];
  185. $goodswhere[] = ['delete_time','=',NULL];
  186. $goods_count = Goods::where($goodswhere)->count();
  187. $middle['goods_number'] = $goods_count;
  188. //合作商
  189. $diswhere = [] ;
  190. $diswhere[] = ['is_distribution','=',1];
  191. $diswhere[] = ['delete_time','=',NULL];
  192. $distribution_count = Distribution::where($diswhere)->count();
  193. $middle['distribution_number'] = $distribution_count;
  194. //订单数
  195. $order_where = [] ;
  196. $order_where[] = ['pay_status','=',1];
  197. $order_count = Order::where($order_where)->count();
  198. $middle['order_number'] = $order_count;
  199. //派送订单
  200. $orderwhere = [] ;
  201. $orderwhere[] = ['order_status','=',2];
  202. $order_delivery_count = Order::where($orderwhere)->count();
  203. $middle['delivery_number'] = $order_delivery_count;
  204. //农资供应
  205. $middle['agricultural_supply_number'] = 0;
  206. $nowYear = date('Y');
  207. $nowMonth = date('n');
  208. $monthData = [];
  209. $monthArr = [];
  210. for($i=1;$i<=$nowMonth;$i++){
  211. array_push($monthArr,$i);
  212. $monthFat = $i.'月';
  213. array_push($monthData,$monthFat);
  214. }
  215. $middle['YearData'] = $nowYear;
  216. $middle['MonthFormatData'] = json_encode($monthData);
  217. $month_data = [];
  218. foreach ($monthArr as $mv){
  219. $date = getMonthFirstAndLastDay($nowYear,$mv);
  220. $startTime = strtotime($date['firstDay']);
  221. $endTime = strtotime($date['lastDay'].' 23:59:59');
  222. $create_time_date = [$startTime,$endTime];
  223. $salewhere = [];
  224. $salewhere[]=['create_time','between',$create_time_date];
  225. $month_order_number = Order::alias('o')->where($where)->where($salewhere)->count();
  226. array_push($month_data,$month_order_number);
  227. }
  228. $middle['MonthOrderData'] = json_encode($month_data);
  229. $nowTime = time();
  230. $todayStartDate = date('Y-m-d');
  231. $todaywhere= [];
  232. $todaywhere[]=['create_time','between',[strtotime($todayStartDate),$nowTime]];
  233. $todayOrderInfo = Order::alias('o')->where($where)->where($todaywhere)->field('count(id) number,sum(total_amount) total_money')->find();
  234. $middle['today_order_number']=$todayOrderInfo['number'];
  235. $middle['today_total_amount']=$todayOrderInfo['total_money']??0;
  236. $thisMonth = date('n');
  237. $this_month_date = getMonthFirstAndLastDay($nowYear,$thisMonth);
  238. $startTime = strtotime($this_month_date['firstDay']);
  239. $endTime = strtotime($this_month_date['lastDay'].' 23:59:59');
  240. $create_time_date = [$startTime,$endTime];
  241. $thisMonthWhere = [];
  242. $thisMonthWhere[]=['create_time','between',$create_time_date];
  243. $thisMonthOrderInfo = Order::alias('o')->where($where)->where($thisMonthWhere)->field('count(id) number,sum(total_amount) total_money')->find();
  244. $middle['this_month_order_number']=$thisMonthOrderInfo['number'];
  245. $middle['this_month_total_amount']=$thisMonthOrderInfo['total_money']??0;
  246. $data['middle'] = $middle;
  247. /** middle end **/
  248. return view('/count/index', $data);
  249. }
  250. }