Compare commits
5 Commits
79854a2618
...
87a2c35300
| Author | SHA1 | Date | |
|---|---|---|---|
| 87a2c35300 | |||
| 7d57e292fe | |||
| 63cab37c87 | |||
| cd1e5c2cd0 | |||
| d7b0f29296 |
26
data/memo/report-view.md
Normal file
26
data/memo/report-view.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# 報表系統規劃
|
||||||
|
為每場活動(法會)建立報名到舉辦過程的報表,
|
||||||
|
要涵蓋以下面向的統計分析資訊
|
||||||
|
|
||||||
|
- 以單一場法會為核心
|
||||||
|
- 時間面向: 當前狀況, 指定期間狀況
|
||||||
|
- 維度:
|
||||||
|
- 信眾: 報名數量, 金額, 收款狀態
|
||||||
|
- 牌位型態(活動品項表): 報名數量, 金額, 收款狀態
|
||||||
|
- 收款狀態: 己收/未收 統計明細
|
||||||
|
|
||||||
|
## 法會報表系統查詢規劃**
|
||||||
|
|
||||||
|
### 1. 核心基礎 VIEW
|
||||||
|
1. `vw_activity_registration_base` - 單一活動的完整報名基礎資料
|
||||||
|
2. `vw_activity_payment_detail` - 單一活動的完整收款明細資料
|
||||||
|
### 2. 統計分析 VIEW
|
||||||
|
3. `vw_activity_follower_statistics` - 按信眾統計報名情況
|
||||||
|
4. `vw_activity_item_statistics` - 按品項統計報名情況
|
||||||
|
5. `vw_activity_payment_status` - 收款狀態統計分析
|
||||||
|
### 3. 時間維度分析 VIEW
|
||||||
|
6. `vw_activity_registration_trend` - 按日期統計報名趨勢
|
||||||
|
7. `vw_activity_payment_trend` - 按收款日期統計收款趨勢
|
||||||
|
### 4. 詳細查詢 VIEW
|
||||||
|
8. `vw_activity_unpaid_detail` - 未收款明細清單
|
||||||
|
9. `vw_activity_transfer_reconciliation` - 匯款對帳明細
|
||||||
252
data/memo/report-view.sql
Normal file
252
data/memo/report-view.sql
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
drop view if exists vw_activity_registration_base;
|
||||||
|
drop view if exists vw_activity_payment_detail;
|
||||||
|
drop view if exists vw_activity_follower_statistics;
|
||||||
|
drop view if exists vw_activity_item_statistics;
|
||||||
|
drop view if exists vw_activity_payment_status;
|
||||||
|
drop view if exists vw_activity_registration_trend;
|
||||||
|
drop view if exists vw_activity_payment_trend;
|
||||||
|
drop view if exists vw_activity_unpaid_detail;
|
||||||
|
drop view if exists vw_activity_transfer_reconciliation;
|
||||||
|
GO
|
||||||
|
-- 1. 法會報名基礎資料 VIEW
|
||||||
|
CREATE VIEW vw_activity_registration_base AS
|
||||||
|
SELECT
|
||||||
|
a.num AS 活動編號,
|
||||||
|
a.subject AS 活動名稱,
|
||||||
|
a.startDate_solar AS 活動開始日期,
|
||||||
|
a.endDate_solar AS 活動結束日期,
|
||||||
|
po.order_no AS 報名單號,
|
||||||
|
po.up_time AS 報名日期,
|
||||||
|
po.keyin1 AS 報名狀態,
|
||||||
|
f.num AS 信眾編號,
|
||||||
|
f.f_number AS 信眾代號,
|
||||||
|
f.u_name AS 信眾姓名,
|
||||||
|
f.phone AS 聯絡電話,
|
||||||
|
f.identity_type AS 身分別,
|
||||||
|
f.country AS 國籍,
|
||||||
|
pod.num AS 報名明細編號,
|
||||||
|
ai.num AS 品項編號,
|
||||||
|
ai.subject AS 品項名稱,
|
||||||
|
ai.category AS 品項分類,
|
||||||
|
pod.price AS 單價,
|
||||||
|
pod.qty AS 數量,
|
||||||
|
pod.price * pod.qty AS 應繳金額,
|
||||||
|
pod.pay AS 已收金額,
|
||||||
|
(pod.price * pod.qty - ISNULL(pod.pay, 0)) AS 未收金額,
|
||||||
|
pod.pay_date AS 付款期限,
|
||||||
|
pod.start_date AS 開始日期,
|
||||||
|
pod.due_date AS 到期日期,
|
||||||
|
pod.keyin1 AS 明細狀態,
|
||||||
|
pod.demo AS 備註
|
||||||
|
FROM activity a
|
||||||
|
INNER JOIN pro_order po ON a.num = po.activity_num
|
||||||
|
INNER JOIN followers f ON po.f_num = f.num
|
||||||
|
INNER JOIN pro_order_detail pod ON po.order_no = pod.order_no
|
||||||
|
INNER JOIN actItem ai ON pod.actItem_num = ai.num;
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 2. 收款明細基礎資料 VIEW
|
||||||
|
CREATE VIEW vw_activity_payment_detail AS
|
||||||
|
SELECT
|
||||||
|
a.num AS 活動編號,
|
||||||
|
a.subject AS 活動名稱,
|
||||||
|
po.order_no AS 報名單號,
|
||||||
|
f.u_name AS 信眾姓名,
|
||||||
|
pod.num AS 報名明細編號,
|
||||||
|
ai.subject AS 品項名稱,
|
||||||
|
por.num AS 收款記錄編號,
|
||||||
|
por.price AS 收款金額,
|
||||||
|
por.payment AS 付款方式,
|
||||||
|
por.pay_date AS 收款日期,
|
||||||
|
por.organization AS 收款機構,
|
||||||
|
por.bank_code AS 銀行代碼,
|
||||||
|
por.transfer_id AS 匯款記錄ID,
|
||||||
|
por.reconcile_memo AS 對帳備註,
|
||||||
|
tr.name AS 匯款人姓名,
|
||||||
|
tr.phone AS 匯款人電話,
|
||||||
|
tr.amount AS 匯款金額,
|
||||||
|
tr.check_date AS 入帳日期,
|
||||||
|
tr.status AS 匯款狀態
|
||||||
|
FROM activity a
|
||||||
|
INNER JOIN pro_order po ON a.num = po.activity_num
|
||||||
|
INNER JOIN followers f ON po.f_num = f.num
|
||||||
|
INNER JOIN pro_order_detail pod ON po.order_no = pod.order_no
|
||||||
|
INNER JOIN actItem ai ON pod.actItem_num = ai.num
|
||||||
|
LEFT JOIN pro_order_record por ON pod.num = por.detail_num
|
||||||
|
LEFT JOIN transfer_register tr ON por.transfer_id = tr.id;
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 3. 信眾報名統計 VIEW
|
||||||
|
CREATE VIEW vw_activity_follower_statistics AS
|
||||||
|
SELECT
|
||||||
|
活動編號,
|
||||||
|
活動名稱,
|
||||||
|
信眾編號,
|
||||||
|
信眾代號,
|
||||||
|
信眾姓名,
|
||||||
|
聯絡電話,
|
||||||
|
身分別,
|
||||||
|
國籍,
|
||||||
|
COUNT(DISTINCT 報名單號) AS 報名單數,
|
||||||
|
COUNT(報名明細編號) AS 報名品項數,
|
||||||
|
SUM(應繳金額) AS 應繳總金額,
|
||||||
|
SUM(已收金額) AS 已收總金額,
|
||||||
|
SUM(未收金額) AS 未收總金額,
|
||||||
|
CASE
|
||||||
|
WHEN SUM(未收金額) = 0 THEN '已繳清'
|
||||||
|
WHEN SUM(未收金額) = SUM(應繳金額) THEN '未繳'
|
||||||
|
ELSE '部分繳款'
|
||||||
|
END AS 繳款狀態
|
||||||
|
FROM vw_activity_registration_base
|
||||||
|
GROUP BY 活動編號, 活動名稱, 信眾編號, 信眾代號, 信眾姓名, 聯絡電話, 身分別, 國籍;
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 4. 品項報名統計 VIEW
|
||||||
|
CREATE VIEW vw_activity_item_statistics AS
|
||||||
|
SELECT
|
||||||
|
活動編號,
|
||||||
|
活動名稱,
|
||||||
|
品項編號,
|
||||||
|
品項名稱,
|
||||||
|
品項分類,
|
||||||
|
單價,
|
||||||
|
COUNT(報名明細編號) AS 報名數量,
|
||||||
|
SUM(數量) AS 總數量,
|
||||||
|
SUM(應繳金額) AS 應繳總金額,
|
||||||
|
SUM(已收金額) AS 已收總金額,
|
||||||
|
SUM(未收金額) AS 未收總金額,
|
||||||
|
CASE
|
||||||
|
WHEN COUNT(報名明細編號) = 0 THEN 0
|
||||||
|
ELSE AVG(已收金額)
|
||||||
|
END AS 平均已收金額,
|
||||||
|
CASE
|
||||||
|
WHEN SUM(未收金額) = 0 THEN '已收齊'
|
||||||
|
WHEN SUM(未收金額) = SUM(應繳金額) THEN '未收款'
|
||||||
|
ELSE '部分收款'
|
||||||
|
END AS 收款狀態
|
||||||
|
FROM vw_activity_registration_base
|
||||||
|
GROUP BY 活動編號, 活動名稱, 品項編號, 品項名稱, 品項分類, 單價;
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 5. 收款狀態統計 VIEW
|
||||||
|
CREATE VIEW vw_activity_payment_status AS
|
||||||
|
SELECT
|
||||||
|
活動編號,
|
||||||
|
活動名稱,
|
||||||
|
'總計' AS 統計項目,
|
||||||
|
COUNT(DISTINCT 報名單號) AS 報名單數,
|
||||||
|
COUNT(報名明細編號) AS 報名品項數,
|
||||||
|
SUM(應繳金額) AS 應繳總金額,
|
||||||
|
SUM(已收金額) AS 已收總金額,
|
||||||
|
SUM(未收金額) AS 未收總金額,
|
||||||
|
CASE
|
||||||
|
WHEN SUM(應繳金額) = 0 THEN 0
|
||||||
|
ELSE ROUND(SUM(已收金額) * 100.0 / SUM(應繳金額), 2)
|
||||||
|
END AS 收款率
|
||||||
|
FROM vw_activity_registration_base
|
||||||
|
GROUP BY 活動編號, 活動名稱
|
||||||
|
|
||||||
|
UNION ALL
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
活動編號,
|
||||||
|
活動名稱,
|
||||||
|
CASE
|
||||||
|
WHEN 未收金額 = 0 THEN '已繳清'
|
||||||
|
WHEN 未收金額 = 應繳金額 THEN '未繳'
|
||||||
|
ELSE '部分繳款'
|
||||||
|
END AS 統計項目,
|
||||||
|
COUNT(DISTINCT 報名單號) AS 報名單數,
|
||||||
|
COUNT(報名明細編號) AS 報名品項數,
|
||||||
|
SUM(應繳金額) AS 應繳總金額,
|
||||||
|
SUM(已收金額) AS 已收總金額,
|
||||||
|
SUM(未收金額) AS 未收總金額,
|
||||||
|
CASE
|
||||||
|
WHEN SUM(應繳金額) = 0 THEN 0
|
||||||
|
ELSE ROUND(SUM(已收金額) * 100.0 / SUM(應繳金額), 2)
|
||||||
|
END AS 收款率
|
||||||
|
FROM vw_activity_registration_base
|
||||||
|
GROUP BY 活動編號, 活動名稱,
|
||||||
|
CASE
|
||||||
|
WHEN 未收金額 = 0 THEN '已繳清'
|
||||||
|
WHEN 未收金額 = 應繳金額 THEN '未繳'
|
||||||
|
ELSE '部分繳款'
|
||||||
|
END;
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 6. 報名趨勢分析 VIEW
|
||||||
|
CREATE VIEW vw_activity_registration_trend AS
|
||||||
|
SELECT
|
||||||
|
活動編號,
|
||||||
|
活動名稱,
|
||||||
|
CAST(報名日期 AS DATE) AS 報名日期,
|
||||||
|
COUNT(DISTINCT 報名單號) AS 當日報名單數,
|
||||||
|
COUNT(報名明細編號) AS 當日報名品項數,
|
||||||
|
SUM(應繳金額) AS 當日應繳金額,
|
||||||
|
SUM(已收金額) AS 當日已收金額,
|
||||||
|
SUM(未收金額) AS 當日未收金額
|
||||||
|
FROM vw_activity_registration_base
|
||||||
|
GROUP BY 活動編號, 活動名稱, CAST(報名日期 AS DATE);
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 7. 收款趨勢分析 VIEW
|
||||||
|
CREATE VIEW vw_activity_payment_trend AS
|
||||||
|
SELECT
|
||||||
|
活動編號,
|
||||||
|
活動名稱,
|
||||||
|
CAST(收款日期 AS DATE) AS 收款日期,
|
||||||
|
COUNT(收款記錄編號) AS 當日收款筆數,
|
||||||
|
SUM(收款金額) AS 當日收款金額,
|
||||||
|
COUNT(DISTINCT 報名單號) AS 當日收款單數,
|
||||||
|
CASE
|
||||||
|
WHEN COUNT(收款記錄編號) = 0 THEN 0
|
||||||
|
ELSE AVG(收款金額)
|
||||||
|
END AS 平均收款金額
|
||||||
|
FROM vw_activity_payment_detail
|
||||||
|
WHERE 收款日期 IS NOT NULL
|
||||||
|
GROUP BY 活動編號, 活動名稱, CAST(收款日期 AS DATE);
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 8. 未收款明細 VIEW
|
||||||
|
CREATE VIEW vw_activity_unpaid_detail AS
|
||||||
|
SELECT
|
||||||
|
活動編號,
|
||||||
|
活動名稱,
|
||||||
|
報名單號,
|
||||||
|
信眾姓名,
|
||||||
|
聯絡電話,
|
||||||
|
品項名稱,
|
||||||
|
應繳金額,
|
||||||
|
已收金額,
|
||||||
|
未收金額,
|
||||||
|
付款期限,
|
||||||
|
CASE
|
||||||
|
WHEN 付款期限 < GETDATE() THEN '已逾期'
|
||||||
|
WHEN 付款期限 <= DATEADD(DAY, 3, GETDATE()) THEN '即將到期'
|
||||||
|
ELSE '未到期'
|
||||||
|
END AS 到期狀態
|
||||||
|
FROM vw_activity_registration_base
|
||||||
|
WHERE 未收金額 > 0;
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 9. 匯款對帳明細 VIEW
|
||||||
|
CREATE VIEW vw_activity_transfer_reconciliation AS
|
||||||
|
SELECT
|
||||||
|
活動編號,
|
||||||
|
活動名稱,
|
||||||
|
匯款記錄ID,
|
||||||
|
匯款人姓名,
|
||||||
|
匯款人電話,
|
||||||
|
匯款金額,
|
||||||
|
入帳日期,
|
||||||
|
匯款狀態,
|
||||||
|
COUNT(收款記錄編號) AS 關聯收款筆數,
|
||||||
|
SUM(收款金額) AS 已對帳金額,
|
||||||
|
CASE
|
||||||
|
WHEN SUM(收款金額) IS NULL THEN 匯款金額
|
||||||
|
ELSE 匯款金額 - SUM(收款金額)
|
||||||
|
END AS 剩餘金額
|
||||||
|
FROM vw_activity_payment_detail
|
||||||
|
WHERE 匯款記錄ID IS NOT NULL
|
||||||
|
GROUP BY 活動編號, 活動名稱, 匯款記錄ID, 匯款人姓名, 匯款人電話, 匯款金額, 入帳日期, 匯款狀態;
|
||||||
|
GO
|
||||||
484
data/memo/report.md
Normal file
484
data/memo/report.md
Normal file
@@ -0,0 +1,484 @@
|
|||||||
|
# 相關頁面
|
||||||
|
## 基本功能
|
||||||
|
admin/order/index.aspx
|
||||||
|
admin/activity/index.aspx
|
||||||
|
admin/follower/index.aspx
|
||||||
|
admin/activity/index2.aspx
|
||||||
|
admin/transfer/index.aspx
|
||||||
|
|
||||||
|
## 入帳沖帳
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\balance_reconcile_query.aspx
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\balance_reconcile.aspx
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\group_reconcile.aspx
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\index.aspx
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\personal_reconcile.aspx
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\register.aspx
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\verify_order_record_query.aspx
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\verify.aspx
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\verify1.aspx
|
||||||
|
D:\dev\ez\17168erp\git_17888\web\admin\transfer\verify2.aspx
|
||||||
|
|
||||||
|
# 資料結構
|
||||||
|
|
||||||
|
## 📊 17168ERP 系統使用的資料表架構
|
||||||
|
|
||||||
|
### 🎯 **核心業務資料表**
|
||||||
|
|
||||||
|
#### 1. **報名管理系統** (`order/index.aspx`)
|
||||||
|
**主要資料表:**
|
||||||
|
- **`pro_order`** - 報名主表
|
||||||
|
- `order_no` (單號)、`up_time` (報名日期)、`keyin1` (單據狀態)
|
||||||
|
- `f_num` (信眾編號)、`activity_num` (活動編號)、`phone` (聯絡電話)
|
||||||
|
|
||||||
|
- **`pro_order_detail`** - 報名明細表
|
||||||
|
- `order_no` (關聯主表)、`actItem_num` (活動品項)、`f_num` (報名者)
|
||||||
|
- `price` (金額)、`qty` (數量)、`pay` (已收金額)、`pay_date` (付款期限)
|
||||||
|
|
||||||
|
- **`activity`** - 活動主表
|
||||||
|
- `num`、`subject` (活動名稱)、`start_date` (開始日期)、`end_date` (結束日期)
|
||||||
|
|
||||||
|
- **`actItem`** - 活動品項表
|
||||||
|
- `num`、`subject` (品項名稱)、`category` (品項分類)
|
||||||
|
|
||||||
|
#### 2. **信眾管理系統** (`follower/index.aspx`)
|
||||||
|
**主要資料表:**
|
||||||
|
- **`followers`** - 信眾基本資料表
|
||||||
|
- `num`、`f_number` (信眾編號)、`u_name` (姓名)、`sex` (性別)
|
||||||
|
- `identity_type` (身分別)、`birthday` (生日)、`phone` (電話)
|
||||||
|
- `address` (地址)、`country` (國籍)、`refugedate` (皈依日期)
|
||||||
|
|
||||||
|
- **`countries`** - 國籍資料表
|
||||||
|
- `ID`、`name_zh` (中文名稱)、`name_en` (英文名稱)
|
||||||
|
|
||||||
|
#### 3. **活動管理系統** (`activity/index.aspx`)
|
||||||
|
**主要資料表:**
|
||||||
|
- **`activity`** - 活動主表
|
||||||
|
- `num`、`subject` (活動名稱)、`startDate_solar` (國曆開始日期)
|
||||||
|
- `startDate_lunar` (農曆開始日期)、`endDate_solar` (國曆結束日期)
|
||||||
|
- `endDate_lunar` (農曆結束日期)、`dueDate` (報名截止日期)
|
||||||
|
|
||||||
|
- **`activity_kind`** - 活動分類表
|
||||||
|
- `num`、`subject` (分類名稱)
|
||||||
|
|
||||||
|
#### 4. **匯款沖帳系統** (`transfer/index.aspx`)
|
||||||
|
**主要資料表:**
|
||||||
|
- **`transfer_register`** - 匯款登錄表
|
||||||
|
- `id`、`name` (匯款人姓名)、`phone` (電話)、`amount` (匯款金額)
|
||||||
|
- `pay_type` (付款方式)、`account_last5` (帳號後五碼)
|
||||||
|
- `proof_img` (匯款證明圖片)、`status` (狀態)
|
||||||
|
- `f_num_match` (配對信眾編號)、`check_amount` (核對金額)
|
||||||
|
|
||||||
|
- **`accounting`** - 會計帳務表
|
||||||
|
- `num`、`category` (科目分類)、`kind` (收支類型)
|
||||||
|
- `price` (金額)、`debtor` (債務人)、`activity_num` (關聯活動)
|
||||||
|
|
||||||
|
- **`pro_order_record`** - 報名收款記錄表
|
||||||
|
- `num`、`detail_num` (關聯明細)、`price` (金額)、`payment` (付款方式)
|
||||||
|
- `pay_date` (收款日期)、`transfer_id` (關聯匯款記錄)
|
||||||
|
|
||||||
|
### 🔗 **關聯關係**
|
||||||
|
|
||||||
|
#### **主要外鍵關聯:**
|
||||||
|
```
|
||||||
|
pro_order → followers (f_num)
|
||||||
|
pro_order → activity (activity_num)
|
||||||
|
pro_order_detail → pro_order (order_no)
|
||||||
|
pro_order_detail → actItem (actItem_num)
|
||||||
|
pro_order_detail → followers (f_num)
|
||||||
|
transfer_register → followers (f_num)
|
||||||
|
transfer_register → activity (activity_num)
|
||||||
|
accounting → pro_order_detail (pro_order_detail_num)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📈 **資料表統計**
|
||||||
|
|
||||||
|
| 功能模組 | 主要資料表數量 | 核心業務表 |
|
||||||
|
|---------|-------------|-----------|
|
||||||
|
| 報名管理 | 5個 | `pro_order`, `pro_order_detail` |
|
||||||
|
| 信眾管理 | 2個 | `followers`, `countries` |
|
||||||
|
| 活動管理 | 2個 | `activity`, `activity_kind` |
|
||||||
|
| 匯款沖帳 | 3個 | `transfer_register`, `accounting`, `pro_order_record` |
|
||||||
|
|
||||||
|
### 🎯 **系統特色**
|
||||||
|
|
||||||
|
1. **模組化設計**:每個功能模組都有獨立的資料表群組
|
||||||
|
2. **關聯完整**:透過外鍵建立完整的業務關聯關係
|
||||||
|
3. **狀態管理**:多個狀態表支援複雜的業務流程
|
||||||
|
4. **UUID設計**:新模組採用UUID作為主鍵,提升擴展性
|
||||||
|
5. **軟刪除機制**:使用`IsDeleted`欄位而非物理刪除
|
||||||
|
|
||||||
|
這個資料表架構支援了一個完整的宗教活動管理ERP系統,涵蓋了從信眾管理、活動報名、床位安排到財務沖帳的全流程管理。
|
||||||
|
|
||||||
|
# 入帳沖帳
|
||||||
|
```
|
||||||
|
報名者匯款 → transfer_register (status: pending)
|
||||||
|
↓
|
||||||
|
出納核對身份 → transfer_register (status: verified, f_num_match)
|
||||||
|
↓
|
||||||
|
出納核對金額 → transfer_register (status: confirmed, check_amount)
|
||||||
|
↓
|
||||||
|
會計個人沖帳 → pro_order_record + accounting
|
||||||
|
↓
|
||||||
|
會計共同沖帳 → pro_order_record + accounting (多筆)
|
||||||
|
↓
|
||||||
|
會計餘額核銷 → transfer_register (remain_amount)
|
||||||
|
↓
|
||||||
|
查詢統計報表 → 各表關聯查詢
|
||||||
|
```
|
||||||
|
|
||||||
|
# DB SCHEMA
|
||||||
|
我來為您使用 Mermaid 語法繪製 17168ERP 系統的 ER 圖,展示各個資料表之間的關聯關係。
|
||||||
|
|
||||||
|
|
||||||
|
[1 tool called]
|
||||||
|
|
||||||
|
我無法直接創建 Mermaid 圖表,但我可以為您提供完整的 Mermaid ER 圖代碼,您可以複製到支援 Mermaid 的工具中查看(如 GitHub、GitLab、或 Mermaid Live Editor)。
|
||||||
|
|
||||||
|
以下是 17168ERP 系統的 ER 圖 Mermaid 代碼:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
%% 信眾管理系統
|
||||||
|
followers {
|
||||||
|
int num PK
|
||||||
|
string f_number
|
||||||
|
string u_name
|
||||||
|
string sex
|
||||||
|
int identity_type
|
||||||
|
datetime birthday
|
||||||
|
string phone
|
||||||
|
string email
|
||||||
|
datetime refugedate
|
||||||
|
string refuge_name
|
||||||
|
string address
|
||||||
|
string demo
|
||||||
|
int leader
|
||||||
|
string socialid1
|
||||||
|
string socialid2
|
||||||
|
string tab
|
||||||
|
string contactor
|
||||||
|
string contactor_phone
|
||||||
|
string blood
|
||||||
|
string customize_data
|
||||||
|
}
|
||||||
|
|
||||||
|
countries {
|
||||||
|
int ID PK
|
||||||
|
string name_zh
|
||||||
|
string name_en
|
||||||
|
string range
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 活動管理系統
|
||||||
|
activity {
|
||||||
|
int num PK
|
||||||
|
string subject
|
||||||
|
datetime startDate_solar
|
||||||
|
datetime startDate_lunar
|
||||||
|
datetime endDate_solar
|
||||||
|
datetime endDate_lunar
|
||||||
|
datetime dueDate
|
||||||
|
int kind
|
||||||
|
string demo
|
||||||
|
string customize_data
|
||||||
|
}
|
||||||
|
|
||||||
|
activity_kind {
|
||||||
|
int num PK
|
||||||
|
string subject
|
||||||
|
string demo
|
||||||
|
}
|
||||||
|
|
||||||
|
actItem {
|
||||||
|
int num PK
|
||||||
|
int activity_num FK
|
||||||
|
string subject
|
||||||
|
int category
|
||||||
|
string demo
|
||||||
|
string customize_data
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 報名管理系統
|
||||||
|
pro_order {
|
||||||
|
string order_no PK
|
||||||
|
datetime up_time
|
||||||
|
datetime reg_time
|
||||||
|
string keyin1
|
||||||
|
int f_num FK
|
||||||
|
string phone
|
||||||
|
int activity_num FK
|
||||||
|
string address
|
||||||
|
string demo
|
||||||
|
string customize_data
|
||||||
|
int introducer FK
|
||||||
|
boolean send_receipt
|
||||||
|
string receipt_title
|
||||||
|
}
|
||||||
|
|
||||||
|
pro_order_detail {
|
||||||
|
int num PK
|
||||||
|
string order_no FK
|
||||||
|
int actItem_num FK
|
||||||
|
int f_num FK
|
||||||
|
string f_num_tablet
|
||||||
|
string address
|
||||||
|
int from_id FK
|
||||||
|
string from_id_tablet
|
||||||
|
datetime due_date
|
||||||
|
int bed_type
|
||||||
|
float price
|
||||||
|
int qty
|
||||||
|
datetime start_date
|
||||||
|
datetime extend_date
|
||||||
|
float pay
|
||||||
|
datetime pay_date
|
||||||
|
int keyin1
|
||||||
|
string demo
|
||||||
|
datetime UpdateTime
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 匯款沖帳系統
|
||||||
|
transfer_register {
|
||||||
|
int id PK
|
||||||
|
int activity_num FK
|
||||||
|
string name
|
||||||
|
string phone
|
||||||
|
string pay_type
|
||||||
|
string account_last5
|
||||||
|
decimal amount
|
||||||
|
string pay_mode
|
||||||
|
string note
|
||||||
|
string proof_img
|
||||||
|
string status
|
||||||
|
datetime create_time
|
||||||
|
int f_num_match FK
|
||||||
|
int f_num FK
|
||||||
|
int acc_num
|
||||||
|
datetime check_date
|
||||||
|
decimal check_amount
|
||||||
|
string check_memo
|
||||||
|
string check_status
|
||||||
|
int acc_kind
|
||||||
|
int member_num
|
||||||
|
datetime verify_time
|
||||||
|
string verify_note
|
||||||
|
string draft
|
||||||
|
decimal remain_amount
|
||||||
|
int balance_act_item FK
|
||||||
|
int balance_pro_order_detail FK
|
||||||
|
}
|
||||||
|
|
||||||
|
accounting {
|
||||||
|
int num PK
|
||||||
|
datetime uptime
|
||||||
|
int category
|
||||||
|
int kind
|
||||||
|
int kind2
|
||||||
|
float price
|
||||||
|
float tax
|
||||||
|
string demo
|
||||||
|
int mem_num
|
||||||
|
string debtor
|
||||||
|
int activity_num FK
|
||||||
|
string excerpt
|
||||||
|
datetime reg_time
|
||||||
|
int pro_order_detail_num FK
|
||||||
|
}
|
||||||
|
|
||||||
|
pro_order_record {
|
||||||
|
int num PK
|
||||||
|
int detail_num FK
|
||||||
|
float price
|
||||||
|
int payment
|
||||||
|
datetime reg_time
|
||||||
|
datetime pay_date
|
||||||
|
string organization
|
||||||
|
string bank_code
|
||||||
|
int transfer_id FK
|
||||||
|
string reconcile_memo
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 區域床位管理系統
|
||||||
|
Region {
|
||||||
|
Guid Uuid PK
|
||||||
|
string Name
|
||||||
|
boolean Gender
|
||||||
|
boolean IsActive
|
||||||
|
boolean IsDeleted
|
||||||
|
}
|
||||||
|
|
||||||
|
Room {
|
||||||
|
Guid Uuid PK
|
||||||
|
string Name
|
||||||
|
boolean Gender
|
||||||
|
int BedCount
|
||||||
|
boolean IsActive
|
||||||
|
datetime CreatedAt
|
||||||
|
datetime UpdatedAt
|
||||||
|
boolean IsDeleted
|
||||||
|
Guid RegionUuid FK
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionRoomBed {
|
||||||
|
Guid Uuid PK
|
||||||
|
string Name
|
||||||
|
boolean IsActive
|
||||||
|
boolean Gender
|
||||||
|
boolean IsDeleted
|
||||||
|
Guid RoomUuid FK
|
||||||
|
string StatusCode FK
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionRoomBedStatus {
|
||||||
|
string Code PK
|
||||||
|
string Name
|
||||||
|
string Description
|
||||||
|
int Category
|
||||||
|
boolean IsDeleted
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 掛單管理系統
|
||||||
|
GuaDanOrder {
|
||||||
|
Guid Uuid PK
|
||||||
|
datetime StartDate
|
||||||
|
datetime EndDate
|
||||||
|
int CreateUser FK
|
||||||
|
datetime CreatedAt
|
||||||
|
datetime UpdatedAt
|
||||||
|
string Notes
|
||||||
|
string GuaDanOrderNo
|
||||||
|
int BookerFollowerNum FK
|
||||||
|
string BookerName
|
||||||
|
string BookerPhone
|
||||||
|
boolean IsDeleted
|
||||||
|
int ActivityNum FK
|
||||||
|
boolean IsCancel
|
||||||
|
}
|
||||||
|
|
||||||
|
GuaDanOrderGuest {
|
||||||
|
Guid Uuid PK
|
||||||
|
string GuaDanOrderNo FK
|
||||||
|
int FollowerNum FK
|
||||||
|
boolean IsDeleted
|
||||||
|
Guid RoomUuid FK
|
||||||
|
Guid BedUuid FK
|
||||||
|
datetime CheckInAt
|
||||||
|
datetime CheckOutAt
|
||||||
|
string StatusCode FK
|
||||||
|
}
|
||||||
|
|
||||||
|
RegionAndRoomAndBedSchedule {
|
||||||
|
Guid Uuid PK
|
||||||
|
Guid TargetUuid FK
|
||||||
|
string GuaDanOrderNo
|
||||||
|
date ScheduleDate
|
||||||
|
boolean IsCancel
|
||||||
|
boolean IsDeleted
|
||||||
|
int UseType
|
||||||
|
string Title
|
||||||
|
string Description
|
||||||
|
string CreatedBy
|
||||||
|
datetime CreatedAt
|
||||||
|
Guid GuaDanOrderGuestUuid FK
|
||||||
|
}
|
||||||
|
|
||||||
|
%% 關聯關係
|
||||||
|
followers ||--o{ pro_order : "報名"
|
||||||
|
followers ||--o{ pro_order_detail : "報名明細"
|
||||||
|
followers ||--o{ transfer_register : "匯款人"
|
||||||
|
followers ||--o{ GuaDanOrderGuest : "掛單客人"
|
||||||
|
|
||||||
|
activity ||--o{ pro_order : "活動報名"
|
||||||
|
activity ||--o{ actItem : "活動品項"
|
||||||
|
activity ||--o{ transfer_register : "活動匯款"
|
||||||
|
activity ||--o{ GuaDanOrder : "掛單活動"
|
||||||
|
|
||||||
|
pro_order ||--o{ pro_order_detail : "報名明細"
|
||||||
|
pro_order ||--o{ pro_order_record : "收款記錄"
|
||||||
|
|
||||||
|
pro_order_detail ||--o{ pro_order_record : "明細收款"
|
||||||
|
pro_order_detail ||--o{ accounting : "會計分錄"
|
||||||
|
pro_order_detail ||--o{ transfer_register : "沖帳明細"
|
||||||
|
|
||||||
|
transfer_register ||--o{ pro_order_record : "匯款記錄"
|
||||||
|
transfer_register ||--o{ accounting : "會計記錄"
|
||||||
|
|
||||||
|
Region ||--o{ Room : "區域房間"
|
||||||
|
Room ||--o{ RegionRoomBed : "房間床位"
|
||||||
|
RegionRoomBedStatus ||--o{ RegionRoomBed : "床位狀態"
|
||||||
|
RegionRoomBedStatus ||--o{ GuaDanOrderGuest : "客人狀態"
|
||||||
|
|
||||||
|
GuaDanOrder ||--o{ GuaDanOrderGuest : "掛單客人"
|
||||||
|
GuaDanOrderGuest ||--o{ RegionAndRoomAndBedSchedule : "床位排程"
|
||||||
|
|
||||||
|
countries ||--o{ followers : "國籍"
|
||||||
|
activity_kind ||--o{ activity : "活動分類"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 **ER 圖說明**
|
||||||
|
|
||||||
|
### **主要實體群組:**
|
||||||
|
|
||||||
|
1. **信眾管理群組**
|
||||||
|
- `followers` (信眾基本資料)
|
||||||
|
- `countries` (國籍資料)
|
||||||
|
|
||||||
|
2. **活動管理群組**
|
||||||
|
- `activity` (活動主表)
|
||||||
|
- `activity_kind` (活動分類)
|
||||||
|
- `actItem` (活動品項)
|
||||||
|
|
||||||
|
3. **報名管理群組**
|
||||||
|
- `pro_order` (報名主表)
|
||||||
|
- `pro_order_detail` (報名明細)
|
||||||
|
|
||||||
|
4. **財務管理群組**
|
||||||
|
- `transfer_register` (匯款登錄)
|
||||||
|
- `accounting` (會計帳務)
|
||||||
|
- `pro_order_record` (收款記錄)
|
||||||
|
|
||||||
|
5. **床位管理群組**
|
||||||
|
- `Region` (區域)
|
||||||
|
- `Room` (房間)
|
||||||
|
- `RegionRoomBed` (床位)
|
||||||
|
- `RegionRoomBedStatus` (床位狀態)
|
||||||
|
|
||||||
|
6. **掛單管理群組**
|
||||||
|
- `GuaDanOrder` (掛單主表)
|
||||||
|
- `GuaDanOrderGuest` (掛單客人)
|
||||||
|
- `RegionAndRoomAndBedSchedule` (床位排程)
|
||||||
|
|
||||||
|
### **關鍵關聯關係:**
|
||||||
|
|
||||||
|
- **一對多關係**:使用 `||--o{` 表示
|
||||||
|
- **外鍵關聯**:FK 標記顯示主要的外鍵關聯
|
||||||
|
- **業務流程**:從信眾報名 → 匯款 → 沖帳 → 床位安排的完整流程
|
||||||
|
|
||||||
|
您可以将這個 Mermaid 代碼複製到 [Mermaid Live Editor](https://mermaid.live/) 或其他支援 Mermaid 的工具中查看完整的 ER 圖表。
|
||||||
|
|
||||||
|
---
|
||||||
|
# 報表系統規劃
|
||||||
|
為每場活動(法會)建立報名到舉辦過程的報表,
|
||||||
|
要涵蓋以下面向的統計分析資訊
|
||||||
|
|
||||||
|
- 以單一場法會為核心
|
||||||
|
- 時間面向: 當前狀況, 指定期間狀況
|
||||||
|
- 維度:
|
||||||
|
- 信眾: 報名數量, 金額, 收款狀態
|
||||||
|
- 牌位型態(活動品項表): 報名數量, 金額, 收款狀態
|
||||||
|
- 收款狀態: 己收/未收 統計明細
|
||||||
|
|
||||||
|
## 執行方式:
|
||||||
|
- 類似excel, 詳細資料->pivot table
|
||||||
|
- 先建立一個(或數個)最核心的sql view, 包含各項:報名資料, 收款明細
|
||||||
|
- 先以單一活動編號為固定FILTER : activity.num=59
|
||||||
|
- 再依不同面向, 建立第二級的sql view
|
||||||
|
- 再人工將以上:第一, 第二級的SQL VIEW, 以EXCEL查詢, 做資料分析/整理
|
||||||
|
- 相關英文欄名, 在VIEW中以中文別名顯示
|
||||||
|
|
||||||
|
## 相關SQL VIEW
|
||||||
|
- (查詢清單)
|
||||||
|
### (查詢)
|
||||||
|
(說明)
|
||||||
|
```sql
|
||||||
|
```
|
||||||
73
web/App_Code/api/ActivityStatisticsController.cs
Normal file
73
web/App_Code/api/ActivityStatisticsController.cs
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web;
|
||||||
|
using System.Web.Http;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ActivityStatisticsController 的摘要描述
|
||||||
|
/// </summary>
|
||||||
|
public class ActivityStatisticsController: ApiController
|
||||||
|
{
|
||||||
|
private Model.ezEntities _db = new Model.ezEntities();
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("api/activity/statistics/summary")]
|
||||||
|
public IHttpActionResult GetStatisticsSummary([FromUri] int? activity_num =null)
|
||||||
|
{
|
||||||
|
if (activity_num == null)
|
||||||
|
{
|
||||||
|
return BadRequest("活动Id不能为空");
|
||||||
|
}
|
||||||
|
var now = DateTime.Now;
|
||||||
|
var pre_order_query = _db.pro_order.Where(a => a.activity_num == activity_num);
|
||||||
|
var totalApplicants = pre_order_query.Count();
|
||||||
|
var maleApplicants = pre_order_query.Where(a => a.follower.sex == "男眾").Count();
|
||||||
|
|
||||||
|
var pro_order_detail_query = _db.pro_order_detail
|
||||||
|
.Where(d => d.pro_order.activity_num == activity_num);
|
||||||
|
var result = new
|
||||||
|
{
|
||||||
|
reportDate = now.ToString("yyyy/MM/dd HH:mm:ss"),
|
||||||
|
totalApplicants = totalApplicants, //报名总人数
|
||||||
|
maleApplicants = maleApplicants, //男
|
||||||
|
femaleApplicants = totalApplicants - maleApplicants,//女
|
||||||
|
donation = new
|
||||||
|
{
|
||||||
|
total = 158000,//总功德金
|
||||||
|
received = 150000,//已收功德金
|
||||||
|
unreceived = 8000//未收功德金
|
||||||
|
},
|
||||||
|
items = new[]//功德项目,这个的功德项目要根据活动预设的功德项目来做统计,就是这个活动有那些可报名的功德项目
|
||||||
|
{
|
||||||
|
new { name = "總功德主", count = "10人" },
|
||||||
|
new { name = "利益主", count = "15人" },
|
||||||
|
new { name = "個人大牌", count = "50人" },
|
||||||
|
new { name = "供僧", count = "45人" }
|
||||||
|
},
|
||||||
|
plaques = new[]//牌位
|
||||||
|
{
|
||||||
|
new { name = "總牌位數", count = pro_order_detail_query.Count() },
|
||||||
|
new { name = "消災-大牌位", count = 101 },
|
||||||
|
new { name = "超冤-大牌位", count =10 },
|
||||||
|
new { name = "消災-個人大牌", count =10 },
|
||||||
|
new { name = "超冤-個人大牌", count = 10 },
|
||||||
|
new { name = "超薦-個人大牌", count = 10 },
|
||||||
|
new { name = "消災-個人中牌", count = 10 },
|
||||||
|
new { name = "超冤-個人中牌", count = 10 },
|
||||||
|
new { name = "超薦-個人中牌", count = 10 },
|
||||||
|
new { name = "消災-隨喜牌位", count = 10 },
|
||||||
|
new { name = "超冤-隨喜牌位", count = 10 },
|
||||||
|
new { name = "超薦-隨喜牌位", count = 10 },
|
||||||
|
new { name = "消災-常年牌位", count = 10 },
|
||||||
|
new { name = "超冤-常年牌位", count = 10 },
|
||||||
|
new { name = "超薦-常年牌位", count = 10 },
|
||||||
|
new { name = "消災-急立牌位", count = 10 },
|
||||||
|
new { name = "超薦-急立牌位", count = 10 },
|
||||||
|
new { name = "超冤-急立牌位", count = 101 },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -69,15 +69,18 @@ public class guadanOrderController : ApiController
|
|||||||
.Where(c => c.RegionRoomBedStatus.Code != GuaDanOrderGuest.STATUS_CANCELLED)
|
.Where(c => c.RegionRoomBedStatus.Code != GuaDanOrderGuest.STATUS_CANCELLED)
|
||||||
.Count(),
|
.Count(),
|
||||||
statusName = _db.GuaDanOrderGuest
|
statusName = _db.GuaDanOrderGuest
|
||||||
.Where(g => g.GuaDanOrderNo == a.GuaDanOrderNo)
|
.Where(g => g.GuaDanOrderNo == a.GuaDanOrderNo && a.IsDeleted == false)
|
||||||
.All(g => g.StatusCode == "404") ? "預約" :
|
.Where(g => g.StatusCode != GuaDanOrderGuest.STATUS_CANCELLED)
|
||||||
|
.All(g => g.StatusCode == "401") ? "預約" :
|
||||||
_db.GuaDanOrderGuest
|
_db.GuaDanOrderGuest
|
||||||
.Where(g => g.GuaDanOrderNo == a.GuaDanOrderNo)
|
.Where(g => g.GuaDanOrderNo == a.GuaDanOrderNo && a.IsDeleted == false)
|
||||||
|
.Where(g => g.StatusCode != GuaDanOrderGuest.STATUS_CANCELLED)
|
||||||
.All(g => g.StatusCode == "403") ? "全部退房" :
|
.All(g => g.StatusCode == "403") ? "全部退房" :
|
||||||
_db.GuaDanOrderGuest
|
_db.GuaDanOrderGuest
|
||||||
.Where(g => g.GuaDanOrderNo == a.GuaDanOrderNo)
|
.Where(g => g.GuaDanOrderNo == a.GuaDanOrderNo && a.IsDeleted == false)
|
||||||
.Any(g => g.StatusCode == "401") ? "正在入住" :
|
.Where(g => g.StatusCode != GuaDanOrderGuest.STATUS_CANCELLED)
|
||||||
"混合狀態"
|
.Any(g => g.StatusCode == "402" && a.IsCancel == false) ? "正在入住" :
|
||||||
|
"部分退房"
|
||||||
})
|
})
|
||||||
.Skip((search.page - 1) * search.pageSize)
|
.Skip((search.page - 1) * search.pageSize)
|
||||||
.Take(search.pageSize)
|
.Take(search.pageSize)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
:server-items-length="activity_statistics.totalItems"
|
:server-items-length="activity_statistics.totalItems"
|
||||||
:items="activity_statistics.items">
|
:items="activity_statistics.items">
|
||||||
<template #item.detail_btn="{item}">
|
<template #item.detail_btn="{item}">
|
||||||
<a :href="'activity.aspx?num='+item.id" class="btn btn-outline-secondary btn-sm" target="_blank">詳細統計</a>
|
<a :href="'statistics.aspx?num='+item.id + '&activity_name=' + encodeURIComponent(item.activity_name)" class="btn btn-outline-secondary btn-sm" target="_blank">詳細統計</a>
|
||||||
</template>
|
</template>
|
||||||
<template #item.duetime="{item}">
|
<template #item.duetime="{item}">
|
||||||
{{item.startdate|timeString("YYYY/MM/DD")}}-{{item.enddate|timeString("YYYY/MM/DD")}}
|
{{item.startdate|timeString("YYYY/MM/DD")}}-{{item.enddate|timeString("YYYY/MM/DD")}}
|
||||||
|
|||||||
186
web/admin/activity/statistics/statistics.aspx
Normal file
186
web/admin/activity/statistics/statistics.aspx
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
<%@ Page Title="" Language="C#" MasterPageFile="~/admin/Templates/TBS5ADM001/MasterPage.master" AutoEventWireup="true" CodeFile="statistics.aspx.cs" Inherits="admin_activity_statistics_statistics" %>
|
||||||
|
|
||||||
|
<asp:Content ID="Content1" ContentPlaceHolderID="page_header" Runat="Server">
|
||||||
|
</asp:Content>
|
||||||
|
<asp:Content ID="Content2" ContentPlaceHolderID="page_nav" Runat="Server">
|
||||||
|
<div class="ms-5">
|
||||||
|
<span>
|
||||||
|
活動名稱: {{ activity_name }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="me-5">
|
||||||
|
<button class="btn btn-primary" type="button">匯出表格資料</button>
|
||||||
|
</div>
|
||||||
|
</asp:Content>
|
||||||
|
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
|
||||||
|
<div id="content" class="container-fluid">
|
||||||
|
<div class="card shadow-sm my-2" id="sec2">
|
||||||
|
<div class="card-header py-0">
|
||||||
|
<nav class="navbar py-0">
|
||||||
|
<div class="nav nav-tabs">
|
||||||
|
<button class="nav-link active" id="sec2-tab1" data-bs-toggle="tab" data-bs-target="#sec2-page1"
|
||||||
|
type="button" role="tab" aria-controls="home" aria-selected="true">
|
||||||
|
活動統計總表</button>
|
||||||
|
<button class="nav-link" id="sec2-tab2" data-bs-toggle="tab" data-bs-target="#sec2-page2"
|
||||||
|
type="button" role="tab" aria-controls="profile" aria-selected="false">
|
||||||
|
活動統計數量明細 </button>
|
||||||
|
<button class="nav-link" id="sec2-tab3" data-bs-toggle="tab" data-bs-target="#sec2-page3"
|
||||||
|
type="button" role="tab" aria-controls="profile" aria-selected="false">
|
||||||
|
活動統計報名人明細 </button>
|
||||||
|
<button class="nav-link" id="sec2-tab4" data-bs-toggle="tab" data-bs-target="#sec2-page4"
|
||||||
|
type="button" role="tab" aria-controls="profile" aria-selected="false">
|
||||||
|
活動牌位明細</button>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
<div class="tab-content" id="myTabContent">
|
||||||
|
<div class="tab-pane fade show active noedit p-4" id="sec2-page1" role="tabpanel" aria-labelledby="sec2-tab1">
|
||||||
|
<h5 class="mb-4"> {{ activity_name }}(截至 {{summaryStats?.reportDate }})</h5>
|
||||||
|
<!-- 基本資訊 + 功德金 統計 -->
|
||||||
|
<table class="table table-bordered table-sm w-auto mb-4">
|
||||||
|
<tbody>
|
||||||
|
<!-- 基本資訊 -->
|
||||||
|
<tr class="table-primary">
|
||||||
|
<th colspan="4">基本資訊</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>類別</th>
|
||||||
|
<td>報名人數</td>
|
||||||
|
<td>男眾人數</td>
|
||||||
|
<td>女眾人數</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>數量</th>
|
||||||
|
<td>{{ summaryStats?.totalApplicants }}</td>
|
||||||
|
<td>{{ summaryStats?.maleApplicants }}</td>
|
||||||
|
<td>{{ summaryStats?.femaleApplicants }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<table class="table table-bordered table-sm w-auto mb-4">
|
||||||
|
<tbody>
|
||||||
|
<!-- 功德金 -->
|
||||||
|
<tr class="table-primary">
|
||||||
|
<th colspan="4">功德金統計</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>類別</th>
|
||||||
|
<td>總功德金</td>
|
||||||
|
<td>已收</td>
|
||||||
|
<td>未收</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>金額</th>
|
||||||
|
<td>{{ summaryStats?.donation.total }}</td>
|
||||||
|
<td>{{ summaryStats?.donation.received }}</td>
|
||||||
|
<td>{{ summaryStats?.donation.unreceived }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<!-- 功德項目 -->
|
||||||
|
<table class="table table-bordered table-sm w-auto mb-4">
|
||||||
|
<tbody>
|
||||||
|
<tr class="table-primary">
|
||||||
|
<th colspan="100%">功德項目</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>功德項目</th>
|
||||||
|
<td v-for="(item, index) in summaryStats?.items" :key="'name-' + index">
|
||||||
|
{{ item.name }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>人數</th>
|
||||||
|
<td v-for="(item, index) in summaryStats?.items" :key="'count-' + index">
|
||||||
|
{{ item.count }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- 牌位數量 -->
|
||||||
|
<table class="table table-bordered table-sm w-auto">
|
||||||
|
<tbody>
|
||||||
|
<tr class="table-primary">
|
||||||
|
<th colspan="100%">牌位數量</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>牌位名稱</th>
|
||||||
|
<td v-for="(plaque, index) in summaryStats?.plaques" :key="'plaque-name-' + index">
|
||||||
|
{{ plaque.name }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>數量</th>
|
||||||
|
<td v-for="(plaque, index) in summaryStats?.plaques" :key="'plaque-count-' + index">
|
||||||
|
{{ plaque.count }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-pane fade" id="sec2-page2" role="tabpanel" aria-labelledby="sec2-tab2">
|
||||||
|
sec2-page2
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane fade" id="sec2-page3" role="tabpanel" aria-labelledby="sec2-tab3">
|
||||||
|
sec2-page3
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane fade" id="sec2-page4" role="tabpanel" aria-labelledby="sec2-tab4">
|
||||||
|
sec2-page4
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</asp:Content>
|
||||||
|
<asp:Content ID="Content4" ContentPlaceHolderID="offCanvasRight" Runat="Server">
|
||||||
|
</asp:Content>
|
||||||
|
<asp:Content ID="Content5" ContentPlaceHolderID="footer_script" Runat="Server">
|
||||||
|
<script>
|
||||||
|
new Vue({
|
||||||
|
el: '#app',
|
||||||
|
vuetify: new Vuetify(vuetify_options),
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activity_num: '<%= Request["num"] %>',
|
||||||
|
activity_name: '<%= Request["activity_name"] %>',
|
||||||
|
summaryStats: null, //匯總統計(總覽)
|
||||||
|
quantityDetails: [], // 數量明細(分類數量)
|
||||||
|
applicantList: [], // 報名人清單
|
||||||
|
plaqueList: [], //牌位清單
|
||||||
|
loadingSummary: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetchSummaryStats() {
|
||||||
|
//獲取匯總明細
|
||||||
|
this.loadingSummary = true;
|
||||||
|
|
||||||
|
axios.get(HTTP_HOST + 'api/activity/statistics/summary',
|
||||||
|
{
|
||||||
|
params: {
|
||||||
|
activity_num: this.activity_num
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
)
|
||||||
|
.then(res => {
|
||||||
|
this.summaryStats = res.data;
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error(err);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.loadingSummary = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.fetchSummaryStats(); // 頁面載入時就獲取
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
</asp:Content>
|
||||||
|
|
||||||
14
web/admin/activity/statistics/statistics.aspx.cs
Normal file
14
web/admin/activity/statistics/statistics.aspx.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web;
|
||||||
|
using System.Web.UI;
|
||||||
|
using System.Web.UI.WebControls;
|
||||||
|
|
||||||
|
public partial class admin_activity_statistics_statistics : MyWeb.config
|
||||||
|
{
|
||||||
|
protected void Page_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user