¶Ô±ÈÐÂÎļþ |
| | |
| | | # Transactionç»æåæ |
| | | |
| | | ## 1. äºå¡åºç¡æ¶æ |
| | | |
| | | 项ç®éç¨äºåå±çäºå¡å¤çæ¶æï¼ä¸»è¦å
æ¬ä»¥ä¸å ä¸ªå±æ¬¡ï¼ |
| | | |
| | | ### 1.1 åºç¡æ¥å£åç±» |
| | | - **ITransactionæ¥å£**ï¼å®ä¹äºææäºå¡çåºæ¬è¡ä¸ºå屿§ï¼å
æ¬äºå¡IDãéæºå¶ãåå²è®°å½ç®¡ççã |
| | | - **TransactionBaseæ½è±¡ç±»**ï¼å®ç°äºITransactionæ¥å£ï¼æä¾äºäºå¡çåºç¡åè½ï¼å¦åå²è®°å½ç®¡çãäºå¡å
³éåèµæºéæ¾çã |
| | | |
| | | ### 1.2 é¢åç¹å®äºå¡æ¥å£ååºç±» |
| | | - **IMESTransaction/IWMSTransactionæ¥å£**ï¼ç»§æ¿èªITransactionï¼ä¸ºç¹å®é¢åï¼MES/WMSï¼å®ä¹äºå¡è¡ä¸ºã |
| | | - **MESTransactionBase/WMSTransactionBaseç±»**ï¼ç»§æ¿èªTransactionBaseï¼å®ç°äºé¢åç¹å®çäºå¡åºç¡åè½ã |
| | | |
| | | ### 1.3 å
·ä½ä¸å¡äºå¡ç±» |
| | | - åç§å
·ä½çä¸å¡äºå¡ç±»ï¼å¦InReceiptãOutSaleãLoadingMaterialçï¼ï¼ç»§æ¿èªé¢åç¹å®çäºå¡åºç±»ï¼å®ç°å
·ä½ä¸å¡é»è¾ã |
| | | |
| | | ## 2. äºå¡ç®¡çæºå¶ |
| | | |
| | | ### 2.1 äºå¡å建å管ç |
| | | - **BizContext**ï¼ç»´æ¤å
¨å±çäºå¡åå
¸ï¼TransactionDicï¼ï¼ç®¡çæææ´»å¨çäºå¡å®ä¾ã |
| | | - **WMSContext/MESContext**ï¼ç®¡çç¹å®é¢åçäºå¡ï¼æä¾äºå¡åå»ºåæ¥è¯¢åè½ã |
| | | |
| | | ### 2.2 äºå¡çå½å¨æ |
| | | 1. **å建**ï¼éè¿Controllerè°ç¨ç¸åºçInitæ¹æ³åå§åäºå¡ï¼å¹¶éè¿Context.NewTransaction注åå°äºå¡åå
¸ä¸ã |
| | | 2. **使ç¨**ï¼éè¿äºå¡IDä»äºå¡åå
¸ä¸è·åäºå¡å®ä¾ï¼æ§è¡ä¸å¡æä½ã |
| | | 3. **å
³é**ï¼è°ç¨Closeæ¹æ³å
³éäºå¡ï¼å¯éæ©æ¯å¦ä¿ååå²è®°å½ã |
| | | 4. **éæ¾**ï¼éè¿Disposeæ¹æ³éæ¾èµæºï¼å¹¶ä»äºå¡åå
¸ä¸ç§»é¤ã |
| | | |
| | | ## 3. äºå¡åæ¥åå¹¶åæ§å¶ |
| | | |
| | | ### 3.1 äºå¡é |
| | | - æ¯ä¸ªäºå¡å®ä¾é½æä¸ä¸ªTransLock对象ï¼ç¨äºåæ¥è®¿é®ã |
| | | - å¨Controllerä¸ï¼é弿¥æä½éè¿lock(trans.TransLock)ç¡®ä¿äºå¡æä½çååæ§ã |
| | | |
| | | ### 3.2 客æ·ç«¯å¯ä¸æ§æ§å¶ |
| | | - å建äºå¡æ¶å¯ä»¥æå®IsUniqueInSameClientåæ°ï¼æ§å¶åä¸å®¢æ·ç«¯æ¯å¦åªè½æä¸ä¸ªåç±»åçäºå¡ã |
| | | - å¦æè®¾ç½®ä¸ºtrueï¼ä¼å
³éåä¸å®¢æ·ç«¯å·²æçåç±»åäºå¡ã |
| | | |
| | | ## 4. äºå¡åå²è®°å½ |
| | | |
| | | ### 4.1 åå²è®°å½ç®¡ç |
| | | - äºå¡ä¼è®°å½ææAPIè°ç¨çåå²ï¼å
æ¬è¯·æ±åååºä¿¡æ¯ã |
| | | - éè¿AddHistoryæ¹æ³æ·»å åå²è®°å½ï¼SaveHistoryæ¹æ³å°åå²ä¿åå°æä»¶ã |
| | | |
| | | ### 4.2 æ¥å¿è®°å½ |
| | | - äºå¡æä½ä¼è®°å½è¯¦ç»çæ¥å¿ï¼å
æ¬å建ãå
³éåå¼å¸¸æ
åµã |
| | | - æ¥å¿æä»¶ä¿åå¨åºç¨ç¨åºç®å½çLogs/Transactionæä»¶å¤¹ä¸ã |
| | | |
| | | ## 5. äºå¡è¶
æ¶å¤ç |
| | | |
| | | - ç³»ç»éè¿é
ç½®æä»¶è®¾ç½®äºå¡è¶
æ¶æ¶é´ï¼Transaction:TimeoutHoursï¼ã |
| | | - äºå¡è®°å½æåæä½æ¶é´ï¼LastActionTimeï¼ï¼å¯ç¨äºå¤æäºå¡æ¯å¦è¶
æ¶ã |
| | | |
| | | ## 6. äºå¡ä½¿ç¨æ¨¡å¼ |
| | | |
| | | ### 6.1 Controllerä¸çäºå¡ä½¿ç¨æ¨¡å¼ |
| | | 1. **è·å/å建äºå¡**ï¼ |
| | | ```csharp |
| | | if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) |
| | | { |
| | | trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IInReceipt; |
| | | } |
| | | else |
| | | { |
| | | trans = AutoFacContainer.Instance.Resolve<IInReceipt>().Init(action.ID, action.Data?.USER_CODE, Request.Host.Value, action.Data?.ORG_CODE); |
| | | iBiz.WMS.Context.NewTransaction(HttpContext, trans); |
| | | } |
| | | ``` |
| | | |
| | | 2. **æ§è¡äºå¡æä½**ï¼ |
| | | ```csharp |
| | | if (action.IsAsync) |
| | | { |
| | | response = action.GetResponse(await trans.ScanItem(action.Data)); |
| | | } |
| | | else |
| | | { |
| | | lock (trans.TransLock) { response = action.GetResponse(trans.ScanItem(action.Data).Result); } |
| | | } |
| | | ``` |
| | | |
| | | 3. **è®°å½åå²å¹¶è¿åç»æ**ï¼ |
| | | ```csharp |
| | | trans?.AddHistory(Request, action); |
| | | return Ok(response); |
| | | ``` |
| | | |
| | | ### 6.2 äºå¡åå§åæ¨¡å¼ |
| | | ```csharp |
| | | public IInReceipt Init(string id, string userCode, string apiHost, string orgCode) |
| | | { |
| | | TransID = id; |
| | | UserCode = userCode; |
| | | ApiHost = apiHost; |
| | | OrgCode = orgCode; |
| | | Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]"); |
| | | return this; |
| | | } |
| | | ``` |
| | | |
| | | ## 7. äºå¡çä¼å¿åç¹ç¹ |
| | | |
| | | 1. **ç¶æç»´æ¤**ï¼äºå¡å¯ä»¥å¨å¤ä¸ªè¯·æ±ä¹é´ç»´æ¤ç¶æï¼éåéè¦å¤æ¥éª¤å®æçä¸å¡æµç¨ã |
| | | 2. **å¹¶åæ§å¶**ï¼éè¿äºå¡éæºå¶ç¡®ä¿åä¸äºå¡çæä½ä¸ä¼å¹¶åæ§è¡ï¼ä¿è¯æ°æ®ä¸è´æ§ã |
| | | 3. **åå²è®°å½**ï¼å®æ´è®°å½äºå¡çæææä½ï¼ä¾¿äºå®¡è®¡åé®é¢ææ¥ã |
| | | 4. **èµæºç®¡ç**ï¼äºå¡å®æåèªå¨éæ¾èµæºï¼é¿å
èµæºæ³æ¼ã |
| | | 5. **é¢åå离**ï¼éè¿ä¸åçäºå¡åºç±»ï¼MESTransactionBase/WMSTransactionBaseï¼å®ç°é¢åé»è¾å离ã |
| | | |
| | | ## 8. æ»ç» |
| | | |
| | | 项ç®çTransactionç»æéç¨äºé¢å对象ç设计模å¼ï¼éè¿æ¥å£åæ½è±¡ç±»æå»ºäºçµæ´»çäºå¡å¤çæ¡æ¶ãè¿ç§è®¾è®¡ä½¿å¾äºå¡å¤çé»è¾ä¸ä¸å¡é»è¾å离ï¼ä¾¿äºç»´æ¤åæ©å±ãåæ¶ï¼éè¿äºå¡åå
¸åéæºå¶ï¼ç¡®ä¿äºäºå¡æä½çå®å
¨æ§åä¸è´æ§ã |
| | | |
| | | è¿ç§äºå¡æ¨¡å¼ç¹å«éåéè¦è·¨å¤ä¸ªè¯·æ±ç»´æ¤ç¶æç夿ä¸å¡æµç¨ï¼å¦ä»åºç®¡çãç产管ççé¢åãéè¿äºå¡æºå¶ï¼å¯ä»¥ææç®¡çè¿äºé¿æ¶é´è¿è¡çä¸å¡æµç¨ï¼ç¡®ä¿æ°æ®çä¸è´æ§å宿´æ§ã |