App007 router說明
APP007 router說明:
程式名稱: APP007Controller.cs
這段程式碼是 ASP.NET Core 中的 Controller 類別,用於處理名為 APP007
的 Web API 相關請求。這個 Controller 類別提供了各種 API 端點,以便進行檔案格式查詢、批號檢查、作業執行、維護視窗查詢及維護作業等功能。下面逐段解釋這段程式碼:
1. APP007Controller
類別
這個類別繼承自 BaseController
,並使用了 ASP.NET Core 的 API 控制器特性 [ApiController]
和路由特性 [Route("api/[controller]")]
。這意味著該控制器的所有端點都會以 api/APP007
為基礎路由。
2. 建構子
1 | public APP007Controller(APP007Service service, CommonService commonService, ILogger<APP007Controller> logger) : base(logger) |
APP007Controller
類別的建構子接收三個參數:APP007Service
、CommonService
和ILogger<APP007Controller>
。APP007Service
和CommonService
是業務邏輯層的服務,ILogger
用於記錄日誌。base(logger)
呼叫父類別BaseController
的建構子。
3. 下拉選單 => 檔案格式
1 | [ ] |
這個端點使用
GET
請求來獲取檔案格式的下拉選單數據。調用
_commonService.GetFileTypePercentListResult()
獲取檔案格式列表。 Table為 : SYS_PARM_D根據返回的狀態設置
ApiResult
的RESULT_CODE
和RESULT_MESSAGE
。程式碼:
1
2
3
4public List<SYS_PARM_D> QueryByParmId(string PARM_ID)
{
return _repository.Connection().Query<SYS_PARM_D>(@$"SELECT * FROM SYS_PARM_D WHERE PARM_ID = '{PARM_ID}' ").ToList();
}程式碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public ServiceResult<OpenCheckSeq_OutputVo> CheckOpenCheckSeqResult(OpenCheckSeq_InputVo inputVo)
{
ServiceResult<OpenCheckSeq_OutputVo> serviceResult = new ServiceResult<OpenCheckSeq_OutputVo>();
try
{
OpenCheckSeq_OutputVo result = new OpenCheckSeq_OutputVo();
//先檢查批號是否存在
var rtn = _nP_DETAILDao.HasOpenCheckSeq(inputVo.P_OPEN_CHECK_SEQ);
if (!rtn)
{
serviceResult.status = CommonEnum.ACTION_STATUS.NOTFOUND;
serviceResult.message = string.Format(SysMessage.B0010003, "批號");
} else
{
//有批號再檢查單據是否存在
var document_no = _nP_DETAILDao.QueryDocumentNo(this.CompanyId, inputVo.P_OPEN_CHECK_SEQ);
if (string.IsNullOrEmpty(document_no))
{
serviceResult.status = CommonEnum.ACTION_STATUS.NOTFOUND;
serviceResult.message = string.Format(SysMessage.B0010003, "單據號碼");
}
else
{
result.P_FILENAME_1 = inputVo.P_OPEN_CHECK_SEQ + "加密-" + document_no + ".TXT";
result.P_FILENAME_2 = inputVo.P_OPEN_CHECK_SEQ + "-" + document_no + ".TXT";
serviceResult.status = CommonEnum.ACTION_STATUS.SUCCESS;
serviceResult.message = SysMessage.S0100001;
serviceResult.result = result;
}
}
}
catch (Exception ex)
{
serviceResult.status = CommonEnum.ACTION_STATUS.FAILURE;
serviceResult.message = ex.Message;
serviceResult.ex = ex;
}
return serviceResult;
}
4. 檢查批號並取得檔案名稱
1 | [ ] |
- 這個端點使用
POST
請求來檢查批號並取得檔案名稱。
CheckOpenCheckSeqResult 方法的目的是驗證提供的批號是否存在,
並根據批號查詢相關的單據號碼,最終生成檔案名稱。
如果批號或單據號碼不存在,方法會返回相應的錯誤信息。
在 CheckOpenCheckSeqResult
方法中生成的兩個檔案名稱 P_FILENAME_1
和 P_FILENAME_2
是基於批號和單據號碼創建的檔案名稱。這些檔案名稱通常用於後續的文件處理或保存操作,具體用途取決於應用的業務邏輯。讓我們詳細看看這兩個檔案名稱的格式和含義:
檔案名稱格式
P_FILENAME_1
:1
result.P_FILENAME_1 = inputVo.P_OPEN_CHECK_SEQ + "加密-" + document_no + ".TXT";
- 格式:
批號 + "加密-" + 單據號碼 + ".TXT"
- 示例:
20230920加密-12345.TXT
- 用途: 這個檔案名稱可能用於表示一個經過加密處理的檔案。批號和單據號碼組合在一起,用於唯一標識這個檔案。
- 格式:
P_FILENAME_2
:1
result.P_FILENAME_2 = inputVo.P_OPEN_CHECK_SEQ + "-" + document_no + ".TXT";
- 格式:
批號 + "-" + 單據號碼 + ".TXT"
- 示例:
20230920-12345.TXT
- 用途: 這個檔案名稱可能用於表示原始或未經加密處理的檔案。它直接包含批號和單據號碼。
- 格式:
這些檔案的潛在用途
檔案加密和儲存:
P_FILENAME_1
可能是加密後的檔案,這意味著在生成這個檔案名稱後,系統可能會對檔案進行加密處理以保護其內容。
文件處理和記錄:
P_FILENAME_2
可能是用於保存未加密的檔案或作為記錄用途的檔案名稱。這些檔案名稱可以幫助在系統中唯一標識文件,並進行後續的檔案處理操作。
資料備份:
- 這些檔案名稱可能用於資料備份或報告生成,幫助系統根據批號和單據號碼生成對應的檔案,並進行系統內部的資料管理。
總的來說,P_FILENAME_1
和 P_FILENAME_2
是根據業務需求生成的檔案名稱,用於文件處理、加密和記錄等目的。具體的用途會根據應用的具體實現和業務需求來決定。
- 調用
_service.CheckOpenCheckSeqResult(inputVo)
獲取結果。 - 根據返回的狀態設置
ApiResult
的RESULT_CODE
和RESULT_MESSAGE
。
程式碼:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public ServiceResult<OpenCheckSeq_OutputVo> CheckOpenCheckSeqResult(OpenCheckSeq_InputVo inputVo)
{
ServiceResult<OpenCheckSeq_OutputVo> serviceResult = new ServiceResult<OpenCheckSeq_OutputVo>();
try
{
OpenCheckSeq_OutputVo result = new OpenCheckSeq_OutputVo();
//先檢查批號是否存在
var rtn = _nP_DETAILDao.HasOpenCheckSeq(inputVo.P_OPEN_CHECK_SEQ);
if (!rtn)
{
serviceResult.status = CommonEnum.ACTION_STATUS.NOTFOUND;
serviceResult.message = string.Format(SysMessage.B0010003, "批號");
} else
{
//有批號再檢查單據是否存在
var document_no = _nP_DETAILDao.QueryDocumentNo(this.CompanyId, inputVo.P_OPEN_CHECK_SEQ);
if (string.IsNullOrEmpty(document_no))
{
serviceResult.status = CommonEnum.ACTION_STATUS.NOTFOUND;
serviceResult.message = string.Format(SysMessage.B0010003, "單據號碼");
}
else
{
result.P_FILENAME_1 = inputVo.P_OPEN_CHECK_SEQ + "加密-" + document_no + ".TXT";
result.P_FILENAME_2 = inputVo.P_OPEN_CHECK_SEQ + "-" + document_no + ".TXT";
serviceResult.status = CommonEnum.ACTION_STATUS.SUCCESS;
serviceResult.message = SysMessage.S0100001;
serviceResult.result = result;
}
}
}
catch (Exception ex)
{
serviceResult.status = CommonEnum.ACTION_STATUS.FAILURE;
serviceResult.message = ex.Message;
serviceResult.ex = ex;
}
return serviceResult;
}
5. 執行 作業
1 | [ ] |
這個端點使用
POST
請求來執行作業,並且要求授權[Authorize]
。調用
_service.ExportPaymentFileResult(inputVo)
獲取結果。根據返回的狀態設置
ApiResult
的RESULT_CODE
和RESULT_MESSAGE
。
生成的檔案
在 ExportPaymentFileResult
方法中,生成了兩個檔案名稱:
- 主檔 (
fileName
): 由FileExportHelper.CreateFileFromList
方法生成,根據paymentData
列表內容產生的 TXT 檔案。 - 加密檔案: 由
DoEncryption
或DoEncryptionCUB
方法對主檔進行加密處理後生成。
6. 維護視窗 查詢
1 | [ ] |
- 這個端點使用
POST
請求來查詢維護視窗的數據,並且要求授權[Authorize]
。 - 調用
_service.QueryResult(inputVo)
獲取結果。 - 根據返回的狀態設置
ApiResult
的RESULT_CODE
和RESULT_MESSAGE
。 - 透過 _dao.Query(inputVo) 執行查詢,並將結果儲存在 list 中。
如果查詢到結果,則回傳成功狀態並記錄結果;如果查詢不到資料,則回傳「查無資料」的訊息。
7. 維護視窗 維護 作業
1 | [ ] |
- 這個端點使用 `PUT` 請求來執行維護視窗的維護作業,並且要求授權 `[Authorize]`。
- 調用 `_service.EditResult(inputVoList)` 獲取結果。
- 根據返回的狀態設置 `ApiResult` 的 `RESULT_CODE` 和 `RESULT_MESSAGE`。
- 使用兩層 for 迴圈處理多筆資料。第一層迴圈遍歷 inputVoList 中的每一筆資料,
第二層迴圈處理 BLOCK_DETAIL 裡的每一筆明細。
**更新與刪除操作:**
- 在 `BLOCK_DETAIL` 的明細中,根據 `_MARK()` 的值來決定當前明細需要更新 (`UPDATE`) 還是刪除 (`DELETE`):
- 如果是更新操作 (`UPDATE`),會呼叫 `_aPP017_DETAILDao.Update()` 方法,並檢查結果是否為 1。如果失敗,則記錄錯誤訊息並將 `status` 設為 `false`。
- 如果是刪除操作 (`DELETE`),則呼叫 `_aPP017_DETAILDao.DeleteByRowid()` 方法,並檢查結果是否為 1。如果失敗,則同樣記錄錯誤訊息並將 `status` 設為 `false`。
- - 如果所有操作成功 (`status == true`),將提交交易 `_dao.Commit()`,並將成功訊息和處理的筆數記錄在 `serviceResult` 中。
- 如果有任意一筆失敗,則會回滾操作 `_dao.RollBack()`,並回傳錯誤訊息。
8. 維護視窗 加密 作業
1 | [ ] |
這個端點使用
POST
請求來執行維護視窗的加密作業,並且要求授權[Authorize]
。調用
_service.EncryptionResult(inputVo)
獲取結果。根據返回的狀態設置
ApiResult
的RESULT_CODE
和RESULT_MESSAGE
。TXT 檔案生成:
- 如果資料查詢成功,則會根據查詢結果產生 TXT 檔案。透過
FileExportHelper.CreateFileFromList()
方法來將支付資料轉換為 CSV 格式的檔案。如果檔案生成失敗,則記錄錯誤訊息並將status
設置為false
。
- 如果資料查詢成功,則會根據查詢結果產生 TXT 檔案。透過
加密:
- 在檔案生成成功後,會根據
P_FILE_TYPE
決定使用哪個加密方法(例如DoEncryption
或DoEncryptionCUB
)。如果加密失敗,則會記錄錯誤訊息並停止處理。
- 在檔案生成成功後,會根據
總結
這個 APP007Controller
類別管理與 APP007
相關的各種 API 端點。每個端點都處理不同的業務邏輯操作,例如查詢檔案格式、檢查批號、執行作業、查詢和維護數據、加密作業等。控制器中的每個方法都通過調用相應的服務層方法來處理業務邏輯,並根據操作結果返回相應的 ApiResult
。