IndexController.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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 think\facade\Config;
  23. /**
  24. * 配置控制器
  25. * Class ConfigController
  26. * @package app\adminapi\controller
  27. */
  28. class IndexController extends BaseAdminController
  29. {
  30. public array $notNeedLogin = ['index'];
  31. public function index()
  32. {
  33. /** 商品统计 start **/
  34. // 获取上个月的第一天
  35. $firstDayOfLastMonth = strtotime(date('Y-m-01', strtotime('last month')));
  36. // 获取上个月最后一天
  37. $lastDayOfLastMonth = strtotime(date('Y-m-t', strtotime('last month')) . ' 23:59:59');
  38. // 获取上个月的第一天
  39. $firstDayOfNowMonth = strtotime(date('Y-m-01'));
  40. // 获取上个月最后一天
  41. $lastDayOfNowMonth = strtotime(date('Y-m-t') . ' 23:59:59');
  42. $where = [];
  43. $whereTime = [];
  44. $whereLastTime[] = ['o.create_time', 'between', [$firstDayOfLastMonth, $lastDayOfLastMonth]];
  45. $whereNowTime[] = ['o.create_time', 'between', [$firstDayOfNowMonth, $lastDayOfNowMonth]];
  46. $where[]=['o.pay_status','=',1];
  47. //上月销量
  48. $lastOrderGoodsInfo = OrderGoods::alias('og')->leftJoin('order o','o.id = og.order_id')
  49. ->field('og.goods_id,og.goods_name name,sum(og.goods_num) last_total_num')
  50. ->where($where)->where($whereLastTime)
  51. ->group('og.goods_id,og.goods_name')
  52. ->order('last_total_num desc')
  53. ->select()->toArray();
  54. //本月销量
  55. $nowOrderGoodsInfo = OrderGoods::alias('og')->leftJoin('order o','o.id = og.order_id')
  56. ->field('og.goods_id,og.goods_name name,sum(og.goods_num) now_total_num')
  57. ->where($where)->where($whereNowTime)
  58. ->group('og.goods_id,og.goods_name')
  59. ->order('now_total_num desc')
  60. ->select()->toArray();
  61. $newGoodsData = [];
  62. if(count($lastOrderGoodsInfo)>5){
  63. foreach($lastOrderGoodsInfo as $lk=>$lv){
  64. if($lk>4)break;
  65. foreach($nowOrderGoodsInfo as $nk=>$nv){
  66. $lastOrderGoodsInfo[$lk]['now_total_num'] = 0;
  67. if($lv['goods_id'] == $nv['goods_id'] ){
  68. $lv['now_total_num'] = $nv['now_total_num'];
  69. break;
  70. }
  71. }
  72. $newGoodsData[] =$lv;
  73. }
  74. }
  75. else{
  76. if(empty($lastOrderGoodsInfo)){
  77. foreach($nowOrderGoodsInfo as $nk=>$nv){
  78. if($nk>4)break;
  79. $nv['last_total_num'] = 0;
  80. $newGoodsData[] = $nv;
  81. }
  82. }else{
  83. $count = 0;
  84. $lastGoodsIdArr = [];
  85. foreach($lastOrderGoodsInfo as $lk=>$lv){
  86. $count++;
  87. array_push($lastGoodsIdArr,$lv['goods_id']);
  88. if($lk>4)break;
  89. foreach($nowOrderGoodsInfo as $nk=>$nv){
  90. $lv['now_total_num'] = 0;
  91. if($lv['goods_id'] == $nv['goods_id'] ){
  92. $lv['now_total_num'] = $nv['now_total_num'];
  93. break;
  94. }
  95. }
  96. $newGoodsData[] =$lv;
  97. }
  98. if($count<5){
  99. foreach($nowOrderGoodsInfo as &$nv){
  100. if($count>=5) break;
  101. if(in_array($nv['goods_id'],$lastGoodsIdArr)) continue;
  102. $nv['last_total_num'] = 0;
  103. $nv['growth'] = '100%';
  104. $nv['type'] = 1;
  105. $count ++;
  106. $newGoodsData[] = $nv;
  107. }
  108. }
  109. }
  110. }
  111. foreach ($newGoodsData as &$ngv){
  112. if($ngv['last_total_num']==0){
  113. $ngv['growth'] = '100%';
  114. $ngv['type'] = 1;
  115. }else{
  116. if($ngv['last_total_num'] < $ngv['now_total_num']){
  117. $ngv['growth'] = round(($ngv['now_total_num'] - $ngv['last_total_num'])/$ngv['last_total_num']*100 ,0). '%';
  118. $ngv['type'] = 1;
  119. }else if($ngv['last_total_num'] > $ngv['now_total_num']){
  120. $ngv['growth'] = round(($ngv['last_total_num'] - $ngv['now_total_num'])/$ngv['last_total_num']*100 ,0). '%';
  121. $ngv['type'] = 0;
  122. }else{
  123. $ngv['growth'] = 0;
  124. $ngv['type'] = 1;
  125. }
  126. }
  127. $ngv['name'] = mb_substr( $ngv['name'], 0, 6, "UTF-8") . '....' ;
  128. }
  129. $data['newGoodsData'] = $newGoodsData;
  130. /** 商品统计 end **/
  131. /** 分类销量排名 start**/
  132. $ogcwhere = [];
  133. $ogcwhere[]=['gc.level','=','1'];
  134. $OrderGoodsCategoryInfo = OrderGoods::alias('og')
  135. ->leftJoin('order o','o.id = og.order_id')
  136. ->leftJoin('goods g','g.id = og.goods_id')
  137. ->leftJoin('goods_category_index gci','gci.goods_id=g.id')
  138. ->leftJoin('goods_category gc','gc.id = gci.category_id')
  139. ->field('gc.`name` ,sum( og.goods_num) total_num')
  140. ->where($where)->where($ogcwhere)
  141. ->group('gc.name')
  142. ->select()->toArray();
  143. $goods_category_data = array_column($OrderGoodsCategoryInfo,'total_num');
  144. $data['order_goods_category'] = $OrderGoodsCategoryInfo;
  145. $count = count($goods_category_data);
  146. while($count){
  147. if($count<3 ) {
  148. array_push($goods_category_data,0);
  149. }else{
  150. break;
  151. }
  152. $count = count($goods_category_data);
  153. }
  154. $data['goods_category_data'] = json_encode($goods_category_data);
  155. $ogcK = 0;
  156. $chars_category = [];
  157. foreach ($OrderGoodsCategoryInfo as $ogcv){
  158. $ogcK++;
  159. $random_data = [30,20,50,40,100,200,300];
  160. shuffle($random_data);
  161. $randomValue = $random_data[2];
  162. $max = substr($ogcv['total_num'] + $randomValue, 0, -1).'0';
  163. $ogcv['max'] = $max;
  164. unset($ogcv['total_num']);
  165. $chars_category[]=$ogcv;
  166. }
  167. while($ogcK){
  168. $categorys['name']='填充';
  169. $categorys['max']='0';
  170. if($ogcK<3 ) {
  171. $chars_category[]=$categorys;
  172. }else{
  173. break;
  174. }
  175. $ogcK++;
  176. }
  177. $data['chars_category'] = json_encode($chars_category);
  178. /** 分类销量排名 end**/
  179. return view('/count/index', $data);
  180. }
  181. }