# 動植物防疫檢疫局檢疫申報發證系統委外維運服務 ## 尚未完成 * 角色權限管理 * 登入時 會跳出不必要的認證視窗 ## 一、注意事項 ### 1. 登入後的所有請求,請務必都帶上Authorization請求頭(身分令牌) | 參數名稱 | 必填 | 類型 | 備註 | 範例 | | ------------- | ---- | ------ | -------- | ------------------------------------------------------------ | | Authorization | Y | String | 身分令牌 | Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjU5ODI2YjU5LTkzZWYtNDFmOC1iYTFmLTZhNWNjZGUyM2E2ZiJ9.DH1NwnSo3JoTCjf-6WJL_XhcAyplNaezeRJz0IaEeVma65n1cJGBsoUUOjdx1fg8IX7otd3MBxAlk7ONDmq-Ng | ### 2. 所有返回值都是Json字串 範例 ```json { "msg":"操作成功", "code":"0000", "uuid":"6f68d0a646064ce3962110ddd0130de0" } ``` ### 3. 訊息狀態碼 (在返回值中,不是看HTTP Header) ### 4. 測試環境資訊 http://172.31.70.232:9201 ## 二、系統流程 ### 1.登入後發送api #### a. 於首頁輸入使用者名稱、密碼、驗證碼後,點選"登入"鈕發送auth/oauth/token請求,成功登入後取得token #### b. 於Request Header中設定Authorization,將token以'Bearer ' + token帶入,之後便可以登入者之授權身份發送後續Api Request #### 1.1 圖形驗證 | 請求路徑 | | -------- | | /kaptcha | #### 1.2 登入 | 方法 | 請求路徑 | | ---- | -------- | | POST | /auth/oauth/token | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | grant_type | string | Y | |固定是 : password| | client_id | string | Y | |固定是 : client-app | | client_secret | string | Y | |固定是 : 123456 | | userName | string | Y | 帳號 |admin | | password | string | Y | 密碼 |123456 | | userType | int | Y | 使用者別 |1:檢疫人員 2:業者 | | verifyId | string | Y | 圖形驗證 id | 從 /kaptcha 那取得的id | | verifyCode | string | Y | 圖形驗證 code | 圖形內容6碼 | #### 1.3 token 過期刷新(記住我) | 方法 | 請求路徑 | | ---- | -------- | | POST | /auth/oauth/token | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | client_id | string | Y | |固定是 : client-app | | client_secret | string | Y | |固定是 : 123456 | | grant_type | string | Y | |固定是 : refresh_token | | refresh_token | string | Y | 刷新token | 登入成功後返回的 refreshToken | ### 2. 忘記密碼(發送mail) #### a. 使用者點選首頁"忘記密碼?" #### b. ... 待補充... ## 三、布告欄 ### 1.新增/儲存 (需身分令牌及權限) | 方法 | 請求路徑 | | ---- | -------- | | POST | /bulletinboard/news/save | #### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | id | int | N |編號 |有帶id時為編輯 | | title | string | Y | 標題 | | | content | string | Y | 內文 | | | newsType | int | Y | 類型 |類型 1:公告資訊 2:FAQ 3:系統公告 4:GTP'| | ownerGroup | int | Y | 對象 |擁有群組 1:檢疫人員 2:業者 3:民眾 | | status | int | Y | 狀態 |狀態 1:草稿 2:待上架 3:上架 4:下架| | ontop | int | Y | 置頂 |置頂 0:否 1:是| | beginDate | string | N | 起日 |yyyy/MM/dd| | endDate | string | N | 訖日 |yyyy/MM/dd| | deletedFiles | string | N | 被刪除檔案 | 1,2,3,...| | files | File | N | 上傳的檔案 || ### 2.上下架狀態變更 (需身分令牌及權限) | 方法 | 請求路徑 | | ---- | -------- | | PUT | /bulletinboard/news/{id}/status/{status} | #### 請求參數(path variable) | 參數名稱 | 類型 | 中文 | | -------- | -------- | -------- | | id | int | 公告編號 | | status | int | 狀態 | ### 3.查詢 (需身分令牌及權限) | 方法 | 請求路徑 | | ---- | -------- | | GET | /bulletinboard/news/query | #### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | beginDate | string | N |起日| yyyy/MM/dd | | endDate | string | N |訖日| yyyy/MM/dd | | newsType | int | N |類型| | | status | int | N |狀態| | | pageNum | int | N |頁數| | | pageSize | int | N |筆數| | ### 3.單筆詳細查詢 (需身分令牌及權限) | 方法 | 請求路徑 | | ---- | -------- | | GET | /bulletinboard/news/edit/{id} | #### 請求參數(path variable) | 參數名稱 | 類型 | 中文 | | -------- | -------- | -------- | | id | int | 公告編號 | ### 4.刪除 (需身分令牌及權限) | 方法 | 請求路徑 | | ---- | -------- | | PUT | /bulletinboard/news/remove | #### 請求參數(form data) | 參數名稱 | 類型 | 中文 | | -------- | -------- | -------- | | ids | int array | 公告編號清單 | ### 5.單筆詳細查詢 (需身分令牌及權限) | 方法 | 請求路徑 | | ---- | -------- | | GET | /bulletinboard/news/get/{id} | #### 請求參數(path variable) | 參數名稱 | 類型 | 中文 | | -------- | -------- | -------- | | id | int | 公告編號 | ### 6.查詢前幾筆 (有無身分令牌皆能查詢) | 方法 | 請求路徑 | | ---- | -------- | | GET | /bulletinboard/news/getTop/{top} | #### 請求參數(path variable) | 參數名稱 | 類型 | 中文 | | -------- | -------- | -------- | | top | int | 筆數 | ### 7.分頁查詢 (有無身分令牌皆能查詢) | 方法 | 請求路徑 | | ---- | -------- | | GET | /bulletinboard/news/getAll | #### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | pageSize | int | N |筆數| | | pageNum | int | N |頁數| | | newsType | int | N |類型| | ### 8.檔案下載 (有無身分令牌皆能下載) | 方法 | 請求路徑 | | ---- | -------- | | GET | /bulletinboard/news/file/download/{id} | #### 請求參數(path variable) | 參數名稱 | 類型 | 中文 | | -------- | -------- | -------- | | id | int | 檔案編號 | ## 四、帳號管理 ### 1.外部業者管理 #### 1.1 新增/儲存 (有無身分令牌皆能做新增) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/trader/save | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | id | int | N |編號| 編輯時 需要帶編號 | | name | string | Y |帳號| | | password | string | Y |密碼| | | email | string | Y |郵件| | | cName | string | Y | 公司中文全稱(姓名)| | | eName | string | N | 公司英文全稱 | | | mailingAddress | string | N | 通訊地址 | | | personInCharge | string | Y | 負責人姓名 | | | guiNo | string | Y | 統一編號(身份證字號) | | | establishmentDate | string | Y | 核准設立登記日期(個人出生日期) | yyyy/MM/dd | | amountOfCapital | string | N | 資本額度 | | | permanentAddress | string | Y | 登記地址 | | | tel | string | Y | 聯絡電話 | | | mobile | string | N | 手機 | | | fax | string | N | 傳真 | | | reviewOffice | int | Y | 審核機關 | 北:1 南:2 中:3 東:4 | | definedType | int | Y | 用戶類型 | 1: 報關行 2: 代理人 3:自然人 | | remark | string | N | 備註 | | | file | File | N | 檔案 | 新增時必須上傳檔案 | | fileDeleted | string | N | true/false | 編輯時 有更新檔案 | #### 1.2 查詢 (需要身分令牌) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/trader/query | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | guiNo | string | N || | | email | string | N || | | cName | string | N || | | reviewOffice | int | Y || | | definedType | int | Y || | | pageNum | int | N || | | pageSize | int | N || | #### 1.3 單筆詳細查詢 (需要身分令牌) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/trader/edit/{id} | ##### 請求參數(path variable) | 參數名稱 | 類型 | 中文 | | -------- | -------- | -------- | | id | int | 業者編號 | #### 1.4 變更狀態 (需要身分令牌) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/trader/updateStatus | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | userIds | int array | Y || | | status | int | Y || | #### 1.5 審核狀態變更 (需要身分令牌) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/trader/audit | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | id | int | Y |業者編號| | | validNum | int | Y | 審查結果 | 1:通過 2:補件 3:拒絕 | | message | string | N | 審查訊息 | | ### 2.檢疫人員管理 #### 2.1 新增/儲存 (需要身分令牌) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/staff/save | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | id | int | N |編號| 編輯時 需要帶編號 | | name | string | Y |帳號| | | email | string | Y |郵件| | | status | int | Y | 狀態 | 0:停用 1:啟用 | | fullname | string | Y | 姓名 | | | title | string | N | 職稱 | | | office_zone | int | N | 直屬部門 | 1:總部 2:北 3:中 4:南 5:東 | #### 2.2 查詢 (需要身分令牌) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/staff/query | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | userName | string | N | 帳號 | | | fullName | string | N |使用者名稱| | | email | string | N |郵件| | | pageNum | int | Y | 第幾頁 | | | pageSize | int | Y | 筆數 | | #### 2.3 單筆查詢 (需要身分令牌) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/staff/edit/{id} | ##### 請求參數(path variable) | 參數名稱 | 類型 | 中文 | | -------- | -------- | -------- | | id | string | 檢疫人員編號 | #### 2.4 狀態變更 (需要身分令牌) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/staff/changeStatus | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | userIds | string array | Y | 檢疫人員編號 | | | status | int | Y | 狀態 | | #### 2.5 預設角色功能清單 (需要身分令牌) | 方法 | 請求路徑 | | ---- | -------- | | POST | /user/staff/getDefaultAuthorizedUrl/{roleId} | ##### 請求參數(path variable) | 參數名稱 | 類型 | 中文 | | -------- | -------- | -------- | | roleId | int | 角色編號 | ### 3.忘記密碼 #### 3.1 申請 | 方法 | 請求路徑 | | ---- | -------- | | POST/GET | /user/forgotPassword | * 此功能會寄忘記密碼信到信箱,信裡帶url,url有帶token跟email ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | email | string | Y | email | | | verifyId | string | Y | 圖形驗證 id | 從 /kaptcha 那取得的id | | verifyCode | string | Y | 圖形驗證 code | 圖形內容6碼 | #### 3.2 驗證 | 方法 | 請求路徑 | | ---- | -------- | | POST/GET | /user/validateToken | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | email | string | Y | email | email 信裡的url取出 | | token | string | Y | token | token 信裡的url取出 | #### 3.2 儲存新密碼 | 方法 | 請求路徑 | | ---- | -------- | | POST/GET | /user/savePassword | ##### 請求參數(form data) | 參數名稱 | 類型 | 必填 |中文 |備註 | | ----------- | -------- | -------- |-----|-----------| | email | string | Y | | email 信裡的url取出 | | token | string | Y | | token 信裡的url取出 | | password | string | Y | 新密碼 | | ---------------------------------------------------------------- 資料表 DROP TABLE IF EXISTS user_main; CREATE TABLE user_main ( id varchar(20) NOT NULL COMMENT '使用者編號', name varchar(30) NOT NULL COMMENT '使用者名稱', email varchar(255) NOT NULL COMMENT '使用者信箱', user_type tinyint(2) NOT NULL COMMENT '使用者類別 1:檢疫人員 2: 業者', user_detail_id varchar(64) NOT NULL COMMENT 'uuid 對應到 detail 的 id', status tinyint(2) NOT NULL COMMENT '狀態 0:停用 1:啟用', create_date timestamp NOT NULL COMMENT '建立日期', create_user varchar(20) NOT NULL COMMENT '建立人員', update_date timestamp NULL COMMENT '更新日期', update_user varchar(20) NULL COMMENT '更新人員', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='使用者主表'; DROP TABLE IF EXISTS trader_detail; CREATE TABLE trader_detail ( id varchar(64) NOT NULL COMMENT 'user_detail_id', --name varchar(30) NOT NULL COMMENT '使用者名稱', --email varchar(255) NOT NULL COMMENT '使用者信箱', valid tinyint(2) NOT NULL COMMENT '狀態 0:未審核 1:通過 2:補件 3:拒絕', --status tinyint(2) NOT NULL COMMENT '狀態 0:停用 1: 啟用', c_name varchar(255) NOT NULL COMMENT '公司中文全稱(姓名)', e_name varchar(255) NULL COMMENT '公司英文全稱(姓名)', mailing_address varchar(255) NULL COMMENT '通訊地址', person_in_charge varchar(30) NOT NULL COMMENT '負責人', gui_no varchar(20) NOT NULL COMMENT '統一編號(身份證字號)', establishment_date timestamp NOT NULL COMMENT '核准設立登記日期(個人出生日期)', amount_of_capital varchar(50) NULL COMMENT '資本額度', permanent_address varchar(255) NOT NULL COMMENT '登記地址', tel_no varchar(20) NOT NULL COMMENT '聯絡電話', mobile_no varchar(20) NULL COMMENT '行動電話', fax_no varchar(20) NULL COMMENT '傳真號碼', review_office tinyint(2) NOT NULL COMMENT '審核機關 北:1 南:2 中:3 東:4', defined_type tinyint(2) NOT NULL COMMENT '用戶類型 1: 報關行 2: 代理人 3:自然人 ', file_reference varchar(64) NOT NULL COMMENT '附件', remark varchar(3000) NULL COMMENT '備註說明', --create_date timestamp NOT NULL COMMENT '建立日期', --create_user varchar(64) NOT NULL COMMENT '建立人員', --update_date timestamp NULL COMMENT '更新日期', --update_user varchar(64) NULL COMMENT '更新人員', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='業者資訊'; DROP TABLE IF EXISTS staff_detail; CREATE TABLE staff_detail ( id varchar(64) NOT NULL COMMENT 'uuid', --name varchar(30) NOT NULL COMMENT '使用者名稱', --email varchar(255) NOT NULL COMMENT '使用者信箱', --status tinyint(2) NOT NULL COMMENT '狀態 0:停用 1:啟用', fullname varchar(30) NOT NULL COMMENT '姓名', title varchar(64) NULL COMMENT '職稱', office_zone tinyint(2) NULL COMMENT '直屬部門 1:總部 2:北 3:中 4:南 5:東', --create_date timestamp NOT NULL COMMENT '建立日期', --create_user varchar(64) NOT NULL COMMENT '建立人員', --update_date timestamp NULL COMMENT '更新日期', --update_user varchar(64) NULL COMMENT '更新人員', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='檢疫人員資訊'; DROP TABLE IF EXISTS user_secret; CREATE TABLE user_secret ( id int NOT NULL AUTO_INCREMENT, user_id varchar(20) NOT NULL COMMENT '使用者代號', password varchar(100) NOT NULL COMMENT '使用者密碼', create_date timestamp NOT NULL COMMENT '建立日期', create_user varchar(20) NOT NULL COMMENT '建立人員', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='密碼表'; DROP TABLE IF EXISTS login_record; CREATE TABLE login_record ( id int NOT NULL AUTO_INCREMENT, user_name varchar(30) NOT NULL COMMENT '使用者名稱', ip varchar(64) NOT NULL COMMENT 'ip 位置', status tinyint(2) NOT NULL COMMENT '狀態 0: 失敗 1: 成功', create_date timestamp NOT NULL COMMENT '建立日期', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='登入狀態'; DROP TABLE IF EXISTS password_token; CREATE TABLE password_token ( token varchar(64) NOT NULL COMMENT 'token', email varchar(500) NOT NULL COMMENT 'email', expired int NOT NULL COMMENT '0:未過期 1:已過期', create_date timestamp NOT NULL COMMENT '建立日期', PRIMARY KEY (token) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='忘記密碼'; DROP TABLE IF EXISTS user_roles; CREATE TABLE user_roles ( id int NOT NULL AUTO_INCREMENT, user_id varchar(20) NOT NULL COMMENT '使用者代號', role_id int NOT NULL COMMENT '角色代號', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='使用者角色'; DROP TABLE IF EXISTS role; CREATE TABLE role ( id int NOT NULL AUTO_INCREMENT COMMENT '角色編號', name varchar(64) NOT NULL COMMENT '角色名稱', note varchar(500) NULL COMMENT '備註', user_type tinyint(2) NOT NULL COMMENT '類別 1:檢疫人員 2:業者', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='角色'; DROP TABLE IF EXISTS app; -- CREATE TABLE app ( id int NOT NULL AUTO_INCREMENT, name varchar(64) NOT NULL COMMENT '功能名稱', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='系統清單'; DROP TABLE IF EXISTS menu; -- CREATE TABLE menu ( id int NOT NULL AUTO_INCREMENT, name varchar(64) NOT NULL COMMENT '功能名稱', app_id int NOT NULL COMMENT '系統編號', p_id int NOT NULL COMMENT '父層編號', level_no int NOT NULL COMMENT '層級', sort_no int NOT NULL COMMENT '排序', is_end tinyint NOT NULL COMMENT '是否末端 0:否 1:是', url varchar(500) NULL COMMENT '路徑', note varchar(3000) NULL COMMENT '備註', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='功能表'; DROP TABLE IF EXISTS default_role_func; CREATE TABLE default_role_func ( id int NOT NULL AUTO_INCREMENT, role_id int NOT NULL COMMENT '角色編號', menu_id int NOT NULL COMMENT '功能編號', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='角色對應功能'; DROP TABLE IF EXISTS user_func; -- CREATE TABLE user_func ( id int NOT NULL AUTO_INCREMENT, user_id varchar(20) NOT NULL COMMENT '使用者代號', menu_id int NOT NULL COMMENT '選單編號', create_user varchar(20) NULL COMMENT '建立人員', create_date timestamp NOT NULL COMMENT '建立日期', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='使用者對應功能'; DROP TABLE IF EXISTS capq.news; CREATE TABLE capq.news ( id int NOT NULL AUTO_INCREMENT, title varchar(500) NOT NULL COMMENT '標題', content varchar(5000) NOT NULL COMMENT '內容', news_type tinyint(2) NOT NULL COMMENT '類型 1:公告資訊 2:FAQ 3:系統公告 4:GTP', owner_group tinyint(2) NOT NULL COMMENT '擁有群組 1:檢疫人員 2:業者 3:民眾 ', status tinyint(2) NOT NULL COMMENT '狀態 1:草稿 2:待上架 3:上架 4:下架', ontop tinyint(2) DEFAULT 0 NOT NULL COMMENT '置頂 0:否 1:是', deleted tinyint(2) DEFAULT 0 NOT NULL COMMENT '刪除狀態 0:否 1:是(僅備用)', begin_date timestamp NULL COMMENT '公告起始日', end_date timestamp NULL COMMENT '公告結束日', file_reference varchar(64) NULL COMMENT '附件', create_date timestamp NOT NULL COMMENT '建立日期', create_user varchar(20) NOT NULL COMMENT '建立人員', update_date timestamp NULL COMMENT '更新日期', update_user varchar(20) NULL COMMENT '更新人員', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='布告欄訊息'; -- 更前記得備份 mapper DROP TABLE IF EXISTS file_detail; CREATE TABLE file_detail ( id int NOT NULL AUTO_INCREMENT, file_reference varchar(64) NOT NULL COMMENT 'uuid', file_name varchar(100) NOT NULL COMMENT '檔案名稱', file_size int NOT NULL COMMENT '檔案大小(byte)', file_path varchar(500) NOT NULL COMMENT '本地路徑', create_date timestamp NOT NULL COMMENT '建立日期', create_user varchar(20) NOT NULL COMMENT '建立人員', update_date timestamp NULL COMMENT '更新日期', update_user varchar(20) NULL COMMENT '更新人員', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='檔案路徑';