wistroni40-bnft
Version:
Benefit platform parameters publish job template
177 lines (176 loc) • 5.4 kB
TypeScript
/**
* 專案名稱: @wistroni40/bnft
* 部門代號: ML8100
* 檔案說明: 抽象效益計算範本
* @CREATE Thu Jan 21 2021 下午1:44:54
* @author Steve Y Lin
* @contact Steve_Y_Lin@wistron.com #1342
* -----------------------------------------------------------------------------
* @NOTE
*/
import { Observable, Subject } from 'rxjs';
import { HttpAdapter, HttpResponse } from './../http';
import { HttpProducer, ProducePayloadModel } from './../retry';
import { BaseModel as ApiBaseModel, BenefitActivedSystemModel as ActivedSystemModel, BenefitActivedSystemService, BenefitLaborCostService, BenefitLatestLaborCostResponse, BenefitPlantModel as PlantModel } from './api';
import { BenefitConfigModel, BenefitQueryModel, Bnft } from './models';
/**
* 效益上拋回傳結果
*/
export declare type BenefitResponse = {
error: any;
result: ProducePayloadModel<Bnft.BenefitSaving>;
};
/**
* 抽象效益計算範本
*/
export declare abstract class BnftTemplate<C = any> {
config: BenefitConfigModel<C>;
/**
* 日誌
*/
private readonly console;
/**
* API服務器
*/
private apiServer;
/**
* HTTP請求
*/
protected http: HttpAdapter;
/**
* HTTP拋送者
*/
protected producer: HttpProducer;
/**
* 效益激活系統服務
*/
protected activedSystemService: BenefitActivedSystemService;
/**
* 效益DL及IDL人員工時服務
*/
protected benefitLaborCostService: BenefitLaborCostService;
/**
* 排程設定
*/
protected cron: string | null;
/**
* 需要計算的廠別
*/
protected abstract enabledPlant?: string[];
/**
* 送出數據完畢
*/
sendCompleted: Subject<BenefitResponse>;
/**
* @param config 效益設定檔
*/
constructor(config: BenefitConfigModel<C>);
/**
* 取得預設的效益參數資料
*
* @method private
* @return 回傳預設的效益參數資料
*/
private getDefaultProcucePayload;
/**
* 建構效益參數實體
*
* @method protected
* @param timestamp 資料時間戳
* @param condition 效益查詢條件
* @param params 效益參數
*/
protected buildBenefitEntity(timestamp: Date, condition: BenefitQueryModel, params: Bnft.Param[]): Bnft.BenefitSaving;
/**
* 建構查詢激活系統的查詢條件
*
* @method protected
* @return 回傳查詢條件
*/
protected buildQueryActivatedSystemsFilter(): ApiBaseModel.Filter;
/**
* 查詢效益參數
*
* @method protected
* @param plant 廠別資料作為查詢條件
* @param timestamp 查詢開始時間
* @return 回傳效益參數
*/
protected queryBenefit(plant: PlantModel, timestamp?: Date): Observable<Bnft.BenefitSaving>;
/**
* 設定查詢用的HTTP
*
* @method public
* @param http HTTP請求
* @return 回傳物件本身
*/
setHttp(http: HttpAdapter): BnftTemplate;
/**
* 設定排程計算效益
*
* @method public
* @param cron 排程
* @return 回傳物件本身
*/
setSchedule(cron: string): Observable<BenefitResponse>;
/**
* 過濾無須或異常的廠別
*
* @method public
* @param plant 廠別資料
* @return 回傳該廠別是否要保留
*/
filterPlant(plant?: PlantModel): boolean;
/**
* 建構效益參數資料
*
* @method public
* @param timestamp 資料時間戳
* @param condition 效益查詢條件
* @return 回傳效益參數資料
*/
buildPayload(timestamp: Date, condition: BenefitQueryModel): Observable<Bnft.BenefitSaving>;
/**
* 取得效益參數
*
* @method public
* @param condition 效益查詢條件
* @return 回傳效益參數
*/
abstract getBenefitParams(condition: BenefitQueryModel): Promise<Bnft.Param[]>;
/**
* 處理效益參數
*
* @method public
* @param response 查詢激活的效益系統
* @param timestamp 查詢開始時間
* @return 回傳處理後效益參數
*/
processBenefitParams(response: Observable<HttpResponse<ActivedSystemModel[]>>, timestamp?: Date): Observable<ProducePayloadModel<Bnft.BenefitSaving>>;
/**
* 執行效益參數撈取
*
* @method public
* @param timestamp 查詢開始時間
* @return 回傳效益參數上拋結果
*/
execute(timestamp?: Date): Observable<BenefitResponse>;
/**
* 將效益參數上拋
*
* @method public
* @param payload 效益參數
* @param sendable 效益參數是否上拋
*/
send(payload: ProducePayloadModel<Bnft.BenefitSaving>, sendable?: boolean): Promise<void>;
/**
* 取得最新的IDL或ID人員工時
*
* @method public
* @param site Site
* @param plantCode 廠別代碼
* @param laborType 人員類別(IDL or DL)
* @return 回傳最新的IDL或ID人員工時
*/
findLatestLaborCost(site: string, plantCode: string, type: 'idl' | 'dl'): Observable<BenefitLatestLaborCostResponse>;
}