# ACWテーブル設計(最新版)
## 概要
Backlog
https://scenelive.backlog.com/board/SL?selectedIssueKey=SL-289&category=237835
今回のACW のタスクで、**架電状況(発信準備時間, 発信時間, 通話時間, ACW)**と**OPの画面閲覧**保存をし、そのデータを管理画面等で表示して分析等に利用してもらう。そのために追加が必要なSQL をまとめています
#### ACWで新たに登録するデータについて
上記経緯によって今回の実装で今回DB保存で必要になりそうなデータをまとめました。
- オペレーターの架電状況
OPごとで必要な値
- 架電準備時間
- 鳴動時間(duration - billsec で計算)
- 通話時間
- ACW
- OPの画面閲覧時間情報とログイン・ログアウト
OPごとで必要な値
- 架電画面表示時間
- リスト検索表示時間
- 離席画面表示時間
- 再コール確認時間
- プレディクティブ待機時間(プレディクティブ画面の表示時間)
- ログイン
- ログアウト
又、これらデータについてはモニタリング画面でリアルタイムで表示が切り替わるようにしたいという要望があり、Websocket で対応
# 追加するSQL
## list_navi_user_masterへの追加SQL
### side_menu (データ追加)
==is_adminより右のフラグに関しては現在確認中==
**DB名: listnavi_user_master**
**テーブル名: side_menu**
| side_menu_id | parent_menu_id | name | page | icon | sort | is_admin | is_company | is_sub_admin | is_sub_company |
| --------------- | -------------- | ------------------------ | ---- | ---- | ---- | -------- | ---------- | ------------ | --- |
| 44 | 6 | オペレーター分析 | operator_analysis | NULL | 5 | 1 | 1 | 1 | 1 |
サイドメニューの表示に必要。
設定内容ではサブ管理でも設定が可能というフラグで登録しています。
#### SQL
```
INSERT INTO listnavi_user_master.side_menu
VALUES(
44, 6, 'オペレーター分析', 'operator_analysis', NULL, 5, 1, 1, 1, 1
);
```
---
### operator_action (テーブル作成、データ追加)
**DB名: listnavi_user_master**
**テーブル名: operator_action**
| カラム名 | 型 | OPTION | COMMENT |
| ------------------- | ------------------- | -------------------- | --- |
| operator_action_id | int(11) | NOT NULL | 主キー |
| name | varchar(20) | NOT NULL UNIQUE | 操作内容 |
| display_name | varchar(20) | NOT NULL | 表示名 |
**追加されるデータ**
| operator_action_id | name | display_name |
| ------- | ------------------ |------------------ |
| 1 | op_call | 架電画面 |
| 2 | list_search | リスト検索画面 |
| 3 | recall_search | 再コールリスト画面 |
| 4 | waiting_predictive | プレディクティブ待機画面 |
| 998 | login | ログイン |
| 999 | logout | ログアウト |
#### SQL
```
# テーブルの作成
create table listnavi_user_master.operator_action (
operator_action_id int auto_increment,
name varchar(20) not null UNIQUE COMMENT "操作内容",
display_name varchar(20) not null COMMENT "表示名",
primary key(operator_action_id) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT="オペレーターの操作ログ取得データ定義";
# データinsert
INSERT INTO listnavi_user_master.operator_action (`operator_action_id`, `name`, `display_name`)
VALUES
(1, 'op_call', '架電画面'),
(2, 'list_search', 'リスト検索画面'),
(3, 'recall_search', '再コールリスト画面'),
(4, 'waiting_predictive', 'プレディクティブ待機時間'),
(998, 'login', 'ログイン'),
(999, 'logout', 'ログアウト');
```
---
## 各ユーザーDBに必要なSQL
### history (カラム追加)
**DB名: ユーザーDB 全て**
**テーブル名: history**
(追加するカラムのみ追記)
| カラム名 | 型 | OPTION | COMMENT |
| ---------------- | ------- | ----------------- | ------------ |
| call_preparation | int(11) | NOT NULL UNSIGNED | 発信準備時間 |
| acw | int(11) | NOT NULL UNSIGNED | ACW |
#### SQL(例)
```
ALTER TABLE listnavi_user_takagi.history
ADD call_preparation int(11) UNSIGNED not null DEFAULT 0 COMMENT '発信準備時間' AFTER actual_call_flag ,
ADD acw int(11) UNSIGNED not null DEFAULT 0 COMMENT 'ACW' AFTER billsec
;
```
---
### company_side_menu (データ追加)
**DB名: ユーザーDB 全て**
**テーブル名: company_side_menu**
※ ID が 200 より大きいサブ管理のcompanyに関しては、デフォルトで使用できないようにしておく
#### SQL(例)
```
INSERT INTO listnavi_user_takagi.company_side_menu (
side_menu_id,
company_id
)
SELECT
44,
company_id
FROM listnavi_user_takagi.company_side_menu as c
WHERE company_id < 200
GROUP BY company_id;
```
---
### operator_action_history (テーブル追加)
**DB名: ユーザー DB全て**
**テーブル名: operator_action_history**
| カラム名 | 型 | OPTION | COMMENT |
| ------------------- | ------------------- | -------------------- | --- |
| operator_action_history_id | int(11) | NOT NULL | 主キー |
| operator_id | int(11) | NOT NULL | オペレーターid |
| operator_action_id | int(11) | NOT NULL | |
| cookie | LONGTEXT | NOT NULL | ログイン時のunique cookie |
| time | int(11) | DEFAULT 0, NOT NULL | 時間(秒) |
| start | DATETIME | NOT NULL DEFAULT current_timestamp() | 開始日時 |
| end | DATETIME | NOT NULL,, DEFAULT current_timestamp() | 終了日時 |
| _created_at | current_timestamp() | | 作成日時 |
| _updated_at | current_timestamp() | | 更新日時 |
#### SQL(例)
```
# テーブルの作成
CREATE TABLE listnavi_user_takagi.operator_action_history (
`operator_action_history_id` int(11) NOT NULL AUTO_INCREMENT,
`operator_id` int(11) NOT NULL,
`operator_action_id` int(11) NOT NULL,
`cookie` longtext NOT NULL COMMENT 'ログイン時のunique cookie',
`time` longtext NOT NULL COMMENT '時間(秒)',
`start` datetime NOT NULL DEFAULT current_timestamp() COMMENT '開始日時',
`end` datetime NOT NULL DEFAULT current_timestamp() COMMENT '終了日時',
`_created_at` datetime NOT NULL DEFAULT current_timestamp() COMMENT '作成日時',
`_updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '更新日時',
PRIMARY KEY (`operator_action_history_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='オペレーター操作ログ';
```
---
### operator_leave_page (テーブル追加)
**DB名: ユーザー DB全て**
**テーブル名: operator_leave_page**
| カラム名 | 型 | OPTION | COMMENT |
| ------------------- | ------------------- | -------------------- | --- |
| operator_leave_page_id | int(11) | NOT NULL | |
| operator_id | int(11) | NOT NULL | |
| cookie | longtext | NOT NULL | ログイン時のunique cookie |
| time | int(11) | DEFAULT 0, NOT NULL | 時間(秒) |
| access | DATETIME | NOT NULL | アクセス日時 |
| exit | DATETIME | NOT NULL | 離脱日時 |
| created_at | current_timestamp() | | 作成日時 |
| updated_at | current_timestamp() | | 更新日時 |
#### SQL
```
# テーブルの作成
CREATE TABLE listnavi_user_takagi.operator_leave_page (
`operator_leave_page_id` int(11) NOT NULL AUTO_INCREMENT,
`operator_id` int(11) NOT NULL,
`cookie` longtext NOT NULL COMMENT 'ログイン時のunique cookie',
`time` longtext NOT NULL COMMENT '時間(秒)',
`start` datetime NOT NULL DEFAULT current_timestamp() COMMENT '開始日時',
`end` datetime NOT NULL DEFAULT current_timestamp() COMMENT '終了日時',
`_created_at` datetime NOT NULL DEFAULT current_timestamp() COMMENT '作成日時',
`_updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '更新日時',
PRIMARY KEY (`operator_leave_page_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='オペレーター離席ログ';
```
---