12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Description: 商业智能-回款分析
  4. // +----------------------------------------------------------------------
  5. // | Author: Michael_xu | gengxiaoxu@5kcrm.com
  6. // +----------------------------------------------------------------------
  7. namespace app\bi\controller;
  8. use app\admin\controller\ApiCommon;
  9. use think\Hook;
  10. use think\Request;
  11. class Receivables extends ApiCommon
  12. {
  13. /**
  14. * 用于判断权限
  15. * @permission 无限制
  16. * @allow 登录用户可访问
  17. * @other 其他根据系统设置
  18. **/
  19. public function _initialize()
  20. {
  21. $action = [
  22. 'permission'=>[''],
  23. 'allow'=>['statistics','statisticlist']
  24. ];
  25. Hook::listen('check_auth',$action);
  26. $request = Request::instance();
  27. $a = strtolower($request->action());
  28. if (!in_array($a, $action['permission'])) {
  29. parent::_initialize();
  30. }
  31. if (!checkPerByAction('bi', 'receivables' , 'read')) {
  32. header('Content-Type:application/json; charset=utf-8');
  33. exit(json_encode(['code'=>102,'error'=>'无权操作']));
  34. }
  35. }
  36. //回款统计列表
  37. public function statisticList()
  38. {
  39. $receivablesModel = new \app\crm\model\Receivables();
  40. $param = $this->param;
  41. $ret = $receivablesModel->getstatisticsData($param);
  42. return resultArray(['data'=>$ret]);
  43. }
  44. /**
  45. * 回款统计 柱状图
  46. * @author Michael_xu
  47. * @param year 年份 , month 月份
  48. * @return
  49. */
  50. public function statistics()
  51. {
  52. $receivablesModel = new \app\crm\model\Receivables();
  53. $userModel = new \app\admin\model\User();
  54. $param = $this->param;
  55. $adminModel = new \app\admin\model\Admin();
  56. $perUserIds = $userModel->getUserByPer('bi', 'receivables', 'read'); //权限范围内userIds
  57. $whereData = $adminModel->getWhere($param, '', $perUserIds); //统计条件
  58. $userIds = $whereData['userIds'];
  59. $year = $param['year'];
  60. //时间段
  61. if ($param['month']) {
  62. //根据月份计算天数
  63. $days = getmonthdays(strtotime($param['month']));
  64. //获取时间范围内的每日时间戳数组(当月)
  65. $start = strtotime($param['month'].'-'.'01');
  66. $end = (strtotime($param['month'].'-'.$days) > time()) ? time() : strtotime($date.'-'.$days);
  67. $create_time = array($start,$end);
  68. } elseif ($param['year']) {
  69. $next_year = $param['year']+1;
  70. $create_time = array(strtotime($param['year'].'-01-01'),strtotime($next_year.'-01-01'));
  71. } else {
  72. $create_time = getTimeByType('year');
  73. }
  74. unset($param['month']);
  75. unset($param['year']);
  76. $param['create_time']['start'] = $create_time[0];
  77. $param['create_time']['end'] = $create_time[1];
  78. $chartParam = $param;
  79. $chartParam['year'] = $year;
  80. $chartParam['userIds'] = $userIds ? : [];
  81. $chartList = $receivablesModel->getStatistics($chartParam); //柱状图
  82. return resultArray(['data' => $chartList]);
  83. }
  84. }