-
-
-
- 资源数量
-
-
-
-
-
- 昨日新增
- {{info.customerResources_day_count}}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{list.month}}月业绩完成情况
+
+
+
+
+ | 序号 |
+ 校区 |
+ 任务 |
+ 完成 |
+ 完成率 |
+
+
+
+
+ | {{rIndex+1}} |
+ {{row.campus_name}} |
+ {{row.month_task_num}} |
+ {{row.month_complete_num}} |
+ {{row.month_complete}}% |
+
+
+
+ | 合计 |
+ |
+ |
+ |
+ {{list.month_complete_rate}}% |
+
+
+
+
+
+
-
-
-
-
-
- 学员数量
-
-
-
-
- 昨日新增
- {{info.student_day_count}}
-
+
+ {{list.month}}月月卡续费完成情况
+
+
+
+
+ | 序号 |
+ 校区 |
+ 到期 |
+ 续费 |
+ 续费率 |
+ 流失率 |
+
+
+
+
+ | {{rIndex+1}} |
+ {{row.campus_name}} |
+ {{row.month_expire_num}} |
+ {{row.month_renew_num}} |
+ {{row.month_xf_complete}}% |
+ {{row.ls_month_xf_complete}}% |
+
+
+
+ | 合计 |
+ |
+ |
+ |
+ {{list.month_xf_complete_rate}}% |
+ {{list.ls_month_xf_complete_rate}}% |
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{list.month}}月销售业绩完成排名
+
+
+
+
+ | 序号 |
+ 销售 |
+ 月度 |
+ 年度 |
+
+
+
+
+ | {{rIndex+1}} |
+ {{row.name}} |
+ {{row.complete_num}} |
+ {{row.year_complete_num}} |
+
+
+
+
+
+
+
+
+
+ {{list.month}}月销售月卡续费完成排名
+
+
+
+
+ | 序号 |
+ 销售 |
+ 到期 |
+ 续费 |
+ 续费率 |
+ 流失率 |
+
+
+
+
+ | {{rIndex+1}} |
+ {{row.name}} |
+ {{row.expire_num}} |
+ {{row.renew_num}} |
+ {{row.xf_complete}}% |
+ {{row.ls_xf_complete}}% |
+
+
+
+
+
+
+
+ {{list.month}}月教练月卡续费完成排名
+
+
+
+
+ | 序号 |
+ 教练 |
+ 到期 |
+ 续费 |
+ 续费率 |
+ 流失率 |
+
+
+
+
+ | {{rIndex+1}} |
+ {{row.name}} |
+ {{row.expire_num}} |
+ {{row.renew_num}} |
+ {{row.xf_complete}}% |
+ {{row.ls_xf_complete}}% |
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
周
-
月
-
年
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {{list.month}}月资源完成情况
+
+
+
+
+ | 序号 |
+ 校区 |
+ 任务 |
+ 完成 |
+ 完成率 |
+
+
+
+
+ | {{rIndex+1}} |
+ {{row.campus_name}} |
+ {{row.month_task_num}} |
+ {{row.month_zy_complete_num}} |
+ {{row.month_zy_complete}}% |
+
+
+
+ | 合计 |
+ |
+ |
+ |
+ {{list.zy_complete_rate}}% |
+
+
+
-
-
-
+
+
+
+
+
+ {{list.month}}月资源到访情况
+
+
+
+
+ | 序号 |
+ 校区 |
+ 资源 |
+ 到访 |
+ 到访率 |
+
+
+
+
+ | {{rIndex+1}} |
+ {{row.campus_name}} |
+ {{row.month_resource_num}} |
+ {{row.month_visit_num}} |
+ {{row.visit_num_rate}}% |
+
+
+
+ | 合计 |
+ |
+ |
+ |
+ {{list.zy_visit_complete_rate}}% |
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
-
-
\ No newline at end of file
+ Init();
+
\ No newline at end of file
diff --git a/admin/src/app/views/statistics/home1.vue b/admin/src/app/views/statistics/home1.vue
new file mode 100644
index 00000000..afd8effa
--- /dev/null
+++ b/admin/src/app/views/statistics/home1.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+ 查看校区、员工、资源和学员的实时数据
+
+
+
+
+
+
+
+
+ 校区数量
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 员工数量
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 资源数量
+
+
+
+
+
+ 昨日新增
+ {{info.customerResources_day_count}}
+
+
+
+
+
+
+
+
+
+ 学员数量
+
+
+
+
+ 昨日新增
+ {{info.student_day_count}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 周
+ 月
+ 年
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/niucloud/app/adminapi/controller/campus_person_role/CampusPersonRole.php b/niucloud/app/adminapi/controller/campus_person_role/CampusPersonRole.php
index 146aa2a6..6b1f4019 100644
--- a/niucloud/app/adminapi/controller/campus_person_role/CampusPersonRole.php
+++ b/niucloud/app/adminapi/controller/campus_person_role/CampusPersonRole.php
@@ -72,6 +72,7 @@ class CampusPersonRole extends BaseAdminController
["person_id",0],
["role_id",0],
["dept_id",0],
+ ["tasks",'']
]);
$this->validate($data, 'app\validate\campus_person_role\CampusPersonRole.edit');
diff --git a/niucloud/app/adminapi/controller/sys/System.php b/niucloud/app/adminapi/controller/sys/System.php
index 84a7c71f..388f9a63 100644
--- a/niucloud/app/adminapi/controller/sys/System.php
+++ b/niucloud/app/adminapi/controller/sys/System.php
@@ -184,4 +184,7 @@ class System extends BaseAdminController
+ public function personnel_summary(){
+ return success(data: (new SystemService())->personnel_summary());
+ }
}
diff --git a/niucloud/app/adminapi/route/sys.php b/niucloud/app/adminapi/route/sys.php
index 7a4d9408..97fea0d1 100644
--- a/niucloud/app/adminapi/route/sys.php
+++ b/niucloud/app/adminapi/route/sys.php
@@ -312,6 +312,8 @@ Route::group('sys', function() {
//系统环境(不效验登录状态)
Route::group('sys', function() {
+
+
Route::get('person_all', 'sys.System/person_all');
Route::get('role_all', 'sys.System/role_all');
Route::get('departments_all', 'sys.System/departments_all');
@@ -362,4 +364,7 @@ Route::group('sys', function() {
Route::get('web/copyright', 'sys.Config/getCopyright');
// 获取install.php配置
Route::get('install/config', 'sys.Config/getInstallConfig');
+
+
+ Route::get('personnel_summary', 'sys.System/personnel_summary');
});
diff --git a/niucloud/app/common.php b/niucloud/app/common.php
index 9050de97..bba165f5 100644
--- a/niucloud/app/common.php
+++ b/niucloud/app/common.php
@@ -2,6 +2,7 @@
use app\model\campus_person_role\CampusPersonRole;
use app\model\personnel\Personnel;
+use app\model\personnel\PersonnelSummary;
use app\model\sys\SysConfig;
use think\Container;
use think\Response;
@@ -1236,3 +1237,16 @@ function get_dict_value($key,$value){
return $map[$value];
}
+
+
+//$date = 年月 $campus_person_role_id 人员角色表id
+//$field complete_num 完成数量 expire_num 到期数量 renew_num 续费数量 resource_num 分配的资源数量 visit_num 到访数量
+//$num 增加数量 默认1
+function set_summary($date,$campus_person_role_id,$field,$num=1){
+ $personnel_summary = new PersonnelSummary();
+ $personnel_summary->where([
+ ['task_date','=',$date],
+ ['campus_person_role_id','=',$campus_person_role_id]
+ ])->inc($field,$num)->update();
+ return true;
+}
diff --git a/niucloud/app/model/personnel/PersonnelSummary.php b/niucloud/app/model/personnel/PersonnelSummary.php
new file mode 100644
index 00000000..0f5bd9e0
--- /dev/null
+++ b/niucloud/app/model/personnel/PersonnelSummary.php
@@ -0,0 +1,41 @@
+model->field($field)->where([['id', "=", $id]])->with(['campus','personnel','sysRole','departments'])->findOrEmpty()->toArray();
+
+ $info['tasks'] = $personnel_summary->where(['campus_person_role_id' => $info['id']])->order("id desc")->findOrEmpty()->toArray();
return $info;
}
@@ -108,10 +112,15 @@ class CampusPersonRoleService extends BaseAdminService
*/
public function edit(int $id, array $data)
{
-
+ $tasks = $data['tasks'];
+ unset($data['tasks']);
if($this->model->where([['id', '<>', $id]])->where(['person_id' => $data['person_id']])->find()){
return fail("重复操作");
}
+ if($tasks){
+ $personnel_summary = new PersonnelSummary();
+ $personnel_summary->where(['id' => $tasks['id']])->update(['task_num' => $tasks['task_num']]);
+ }
$this->model->where([['id', '=', $id]])->update($data);
return success("操作成功");
diff --git a/niucloud/app/service/admin/sys/SystemService.php b/niucloud/app/service/admin/sys/SystemService.php
index c6bf5d5c..998ead47 100644
--- a/niucloud/app/service/admin/sys/SystemService.php
+++ b/niucloud/app/service/admin/sys/SystemService.php
@@ -19,8 +19,11 @@ use app\model\communication_records\CommunicationRecords;
use app\model\customer_resources\CustomerResources;
use app\model\departments\Departments;
use app\model\market_performance\MarketPerformance;
+use app\model\order_table\OrderTable;
use app\model\personnel\Personnel;
+use app\model\personnel\PersonnelSummary;
use app\model\student\Student;
+use app\model\student_courses\StudentCourses;
use app\model\sys\SysConfig;
use app\model\sys\SysRole;
use app\service\core\sys\CoreSysConfigService;
@@ -239,7 +242,7 @@ class SystemService extends BaseAdminService
return $data;
}
- public function home(array $arr){
+ public function home1(array $arr){
$campus = new Campus();
$personnel = new Personnel();
$customerResources = new CustomerResources();
@@ -288,9 +291,276 @@ class SystemService extends BaseAdminService
$data['customer'][ 'value' ] = $value;
$data['customer'][ 'time' ] = $time;
+
+
+
+
+
+ $y = date('Y');
+ $m = date('m');
+ $campus = new Campus();
+ $campusPersonnelRole = new CampusPersonRole();
+ $order = new OrderTable();
+ $studentCourses = new StudentCourses();
+ $campus_list = $campus->select()->toArray();
+ $table = [
+ 'table_1' => [],
+ 'table_1_total' => 0,
+
+ 'table_2' => [],
+ 'table_2_total' => 0,
+ ];
+ //年年度业绩完成情况
+ $total_task = 0;
+ $total_complete = 0;
+ //年年度月卡续费完成情况
+ $m_total_task = 0;
+ $m_total_complete = 0;
+
+ foreach ($campus_list as $key => $item) {
+ $task = $campusPersonnelRole->where(['campus_id' => $item['id']])->sum("task_num");
+ $complete = $order->alias("a")
+ ->join(['school_customer_resources' => 'b'], 'a.resource_id = b.id', 'left')
+ ->where(['b.campus' => $item['id'], 'order_status' => 'paid'])
+ ->count();
+ $rate = $complete > 0 ? round($task / $complete, 2) : 0;
+
+ $table['table_1'][] = [
+ "序号" => $key + 1,
+ "校区" => $item['campus_name'],
+ "任务" => $task,
+ "完成" => $complete,
+ "完成率" => $rate.'%',
+ ];
+
+ $total_task += $task;
+ $total_complete += $complete;
+
+
+ $m_task = $studentCourses
+ ->alias("a")
+ ->join(['school_student' => 'b'],'a.student_id = b.id','left')
+ ->where([
+ ['b.campus_id', '=',$item['id']],
+ ['a.end_date','<',date("Y-m-d")]
+ ])
+ ->count();
+
+ $m_complete = $order->alias("a")
+ ->join(['school_customer_resources' => 'b'], 'a.resource_id = b.id', 'left')
+ ->where(['b.campus' => $item['id'], 'order_status' => 'paid','order_type' => '2'])
+ ->count();
+
+ $m_rate = $m_complete > 0 ? round($m_task / $m_complete, 2) : 0;
+
+ $m_total_task += $m_task;
+ $m_total_complete += $m_complete;
+ $table['table_2'][] = [
+ "序号" => $key + 1,
+ "校区" => $item['campus_name'],
+ "到期" => $m_task,
+ "续费" => $m_complete,
+ "续费率" => $m_rate.'%',
+ ];
+
+ }
+
+ $table['table_1_total'] = $total_complete > 0 ? round($total_task / $total_complete, 2) : '0';
+
+ $table['table_2_total'] = $m_total_complete > 0 ? round($m_total_task / $m_total_complete, 2) : '0';
+
+
+
return $data;
}
+ public function home(array $arr){
+ $personnel_summary = new PersonnelSummary();
+ $campus = new Campus();
+ $campusPersonnelRole = new CampusPersonRole();
+ $order = new OrderTable();
+ $studentCourses = new StudentCourses();
+ $campus_list = $campus->where(['campus_status' => 1])->field("id,campus_name")->select()->toArray();
+
+ foreach ($campus_list as &$item) {
+ $item['year_task_num'] = 0; //任务数量
+ $item['year_complete_num'] = 0; //完成数量
+ $item['year_expire_num'] = 0; //到期数量
+ $item['year_renew_num'] = 0; //续费数量
+ $item['year_resource_num'] = 0; //分配的资源数量
+ $item['year_visit_num'] = 0; //分配的资源数量
+ $item['year_complete'] = 0; //完成率
+
+ $item['month_task_num'] = 0; //任务数量
+ $item['month_complete_num'] = 0; //完成数量
+ $item['month_expire_num'] = 0; //到期数量
+ $item['month_renew_num'] = 0; //续费数量
+ $item['month_resource_num'] = 0; //分配的资源数量
+ $item['month_visit_num'] = 0; //分配的资源数量
+ $item['month_complete'] = 0; //完成率
+ $item['month_zy_complete_num'] = 0; //资源完成数量
+ $item['month_zy_complete'] = 0; //资源完成率
+ $item['visit_num_rate'] = 0; //到访率
+
+
+
+
+
+ $list = $personnel_summary
+ ->alias("a")
+ ->join(['school_campus_person_role' => 'b'], 'a.campus_person_role_id = b.id', 'left')
+ ->where(['a.role_type' => 1,'b.campus_id' => $item['id']])
+ ->field("a.*")
+ ->select();
+
+ foreach ($list as $val) {
+ $date = explode('-', $val['task_date']);
+
+ if($date[0] == date("Y")) {
+ $item['year_task_num'] += $val['task_num'];
+ $item['year_complete_num'] += $val['complete_num'];
+ $item['year_expire_num'] += $val['expire_num'];
+ $item['year_renew_num'] += $val['renew_num'];
+ $item['year_resource_num'] += $val['resource_num'];
+ $item['year_visit_num'] += $val['visit_num'];
+ if($date[1] == date("m")){
+ $item['month_task_num'] += $val['task_num'];
+ $item['month_complete_num'] += $val['complete_num'];
+ $item['month_expire_num'] += $val['expire_num'];
+ $item['month_renew_num'] += $val['renew_num'];
+ $item['month_resource_num'] += $val['resource_num'];
+ $item['month_visit_num'] += $val['visit_num'];
+ $complete = $order->alias("a")
+ ->join(['school_customer_resources' => 'b'], 'a.resource_id = b.id', 'left')
+ ->where(['b.campus' => $item['id'], 'order_status' => 'paid','order_type' => 1])
+ ->count();
+ $item['month_zy_complete_num'] += $complete;
+ }
+ }
+
+
+
+
+ }
+
+ $item['complete'] = $item['year_complete_num'] > 0 ? round($item['year_complete_num'] / $item['year_task_num'], 2) : 0;
+ $item['xf_complete'] = $item['year_renew_num'] > 0 ? round($item['year_renew_num'] / $item['year_expire_num'], 2) : 0;
+
+ $item['month_complete'] = $item['month_complete_num'] > 0 ? round($item['month_complete_num'] / $item['month_task_num'], 2) : 0;
+ $item['month_xf_complete'] = $item['month_renew_num'] > 0 ? round($item['month_renew_num'] / $item['month_expire_num'], 2) : 0;
+ $item['ls_month_xf_complete'] = $item['month_expire_num'] > 0 ? round(($item['month_expire_num'] - $item['month_renew_num']) / $item['month_expire_num'], 2) : 0;
+
+ $item['month_zy_complete'] = ($item['month_zy_complete_num'] > 0 and $item['month_task_num'] > 0) ? round($item['month_zy_complete_num'] / $item['month_task_num'], 2) : 0;
+
+ $item['visit_num_rate'] = $item['month_visit_num'] > 0 ? round($item['month_visit_num'] / $item['month_resource_num'], 2) : 0;
+
+ }
+
+ //年度合计
+ $total_task = array_sum(array_column($campus_list, 'year_task_num'));
+ $total_complete = array_sum(array_column($campus_list, 'year_complete_num'));
+ $complete_rate = $total_complete > 0 ? round($total_complete / $total_task, 2) : 0;
+ $total_expire = array_sum(array_column($campus_list, 'year_expire_num'));
+ $total_renew = array_sum(array_column($campus_list, 'year_renew_num'));
+ $xf_complete_rate = $total_renew > 0 ? round($total_renew / $total_expire, 2) : 0;
+ //月度合计
+ $month_total_task = array_sum(array_column($campus_list, 'month_task_num'));
+ $month_total_complete = array_sum(array_column($campus_list, 'month_complete_num'));
+ $month_complete_rate = $month_total_complete > 0 ? round($month_total_complete / $month_total_task, 2) : 0;
+
+ $month_total_expire = array_sum(array_column($campus_list, 'month_expire_num'));
+ $month_total_renew = array_sum(array_column($campus_list, 'month_renew_num'));
+ $month_xf_complete_rate = $month_total_renew > 0 ? round($month_total_renew / $month_total_expire, 2) : 0;
+ $ls_month_xf_complete_rate = $month_total_expire > 0 ? round(($month_total_expire - $month_total_renew) / $month_total_expire, 2) : 0;
+
+
+ //资源合计
+ $zy_total_task = array_sum(array_column($campus_list, 'month_task_num'));
+ $zy_total_complete = array_sum(array_column($campus_list, 'month_zy_complete_num'));
+ $zy_complete_rate = $zy_total_complete > 0 ? round($zy_total_complete / $zy_total_task, 2) : 0;
+
+
+ $zy_month_visit_num = array_sum(array_column($campus_list, 'month_visit_num'));
+ $zy_month_resource_num = array_sum(array_column($campus_list, 'month_resource_num'));
+ $zy_visit_complete_rate = $zy_month_visit_num > 0 ? round($zy_month_visit_num / $zy_month_resource_num, 2) : 0;
+
+
+ //月度个人业绩情况
+
+ $personnel_summary_list = $personnel_summary
+ ->alias("a")
+ ->join(['school_campus_person_role' => 'b'], 'a.campus_person_role_id = b.id', 'left')
+ ->join(['school_personnel' => 'c'], 'c.id = b.person_id', 'left')
+ ->where(['a.role_type' => 1,'a.task_date' => date("Y-m")])
+ ->field("a.*,c.name")
+ ->select();
+ $year = date('Y');
+
+ foreach ($personnel_summary_list as &$row) {
+ $row['year_complete_num'] = $personnel_summary
+ ->where(['campus_person_role_id' => $row['campus_person_role_id']])
+ ->where('task_date', 'like', "$year-%")
+ ->sum("complete_num");
+
+ $row['xf_complete'] = $row['renew_num'] > 0 ? round($row['renew_num'] / $row['expire_num'], 2) : 0;
+ $row['ls_xf_complete'] = $row['expire_num'] > 0 ? round(($row['expire_num'] - $row['renew_num']) / $row['expire_num'], 2) : 0;
+
+ }
+
+
+ $wx_summary_list = $personnel_summary_list->toArray();
+ usort($wx_summary_list, function($a, $b) {
+ return $b['complete_num'] <=> $a['complete_num'];
+ });
+ $xf_summary_list = $personnel_summary_list->toArray();
+ usort($xf_summary_list, function($a, $b) {
+ return $b['renew_num'] <=> $a['renew_num'];
+ });
+
+
+ $jl_personnel_summary_list = $personnel_summary
+ ->alias("a")
+ ->join(['school_campus_person_role' => 'b'], 'a.campus_person_role_id = b.id', 'left')
+ ->join(['school_personnel' => 'c'], 'c.id = b.person_id', 'left')
+ ->where(['a.role_type' => 2,'a.task_date' => date("Y-m")])
+ ->field("a.*,c.name")
+ ->select();
+ $year = date('Y');
+
+ foreach ($jl_personnel_summary_list as &$row) {
+ $row['year_complete_num'] = $personnel_summary
+ ->where(['campus_person_role_id' => $row['campus_person_role_id']])
+ ->where('task_date', 'like', "$year-%")
+ ->sum("complete_num");
+
+ $row['xf_complete'] = $row['renew_num'] > 0 ? round($row['renew_num'] / $row['expire_num'], 2) : 0;
+ $row['ls_xf_complete'] = $row['expire_num'] > 0 ? round(($row['expire_num'] - $row['renew_num']) / $row['expire_num'], 2) : 0;
+
+ }
+
+ $xf_jl_summary_list = $jl_personnel_summary_list->toArray();
+ usort($xf_summary_list, function($a, $b) {
+ return $b['renew_num'] <=> $a['renew_num'];
+ });
+
+ return [
+ 'year' => date("Y"),
+ 'month' => date("m"),
+ 'campus_list' => $campus_list,
+ 'complete_rate' => $complete_rate,
+ 'xf_complete_rate' => $xf_complete_rate,
+ 'month_complete_rate' => $month_complete_rate,
+ 'month_xf_complete_rate' => $month_xf_complete_rate,
+ 'ls_month_xf_complete_rate' => $ls_month_xf_complete_rate,
+ 'wx_summary_list' => $wx_summary_list,
+ 'xf_summary_list' => $xf_summary_list,
+ 'xf_jl_summary_list' => $xf_jl_summary_list,
+ 'zy_complete_rate' => $zy_complete_rate,
+ 'zy_visit_complete_rate' => $zy_visit_complete_rate
+ ];
+
+ }
+
public function scsjtj(array $row){
$customerResources = new CustomerResources();
@@ -360,4 +630,30 @@ class SystemService extends BaseAdminService
return $departments->select()->toArray();
}
+ //数据汇总表
+ public function personnel_summary(){
+ $campus_person_role = new CampusPersonRole();
+ $personnel_summary = new PersonnelSummary();
+ $role = [5,6];
+ $campus_person_role_list = $campus_person_role->where([
+ ['role_id','in',$role]
+ ])->select();
+
+
+ $insertArr = [];
+ foreach ($campus_person_role_list as $k => $v) {
+ $insertArr[] = [
+ 'task_date' => date("Y-m"),
+ 'campus_person_role_id' => $v['id'],
+ 'role_type' => $v['role_id'] == 6 ? 1 : 2,
+ ];
+ }
+
+
+ $personnel_summary->insertAll($insertArr);
+
+ return true;
+
+ }
+
}