| | |
| | | # èå® MES 客æ·ç«¯å¸®å©æå |
| | | # èå® MES 客æ·ç«¯å¸®å©æå (G-MES V2.0) |
| | | |
| | | > **LanBMes MES Client** æ¯åºäº .NET Framework 4.8 å DevExpress WinForms æå»ºçä¼ä¸çº§å¶é æ§è¡ç³»ç»(MES)æ¡é¢åºç¨ç¨åº,为å¶é è½¦é´æä¾å
¨é¢çç产æ§è¡ãä»å¨ç®¡çãè´¨éæ§å¶åæ¥è¡¨åæè½åã |
| | | |
| | | ## ç®å½ |
| | | |
| | | - [1. é¡¹ç®æ¦è§](#1-é¡¹ç®æ¦è§) |
| | | - [2. è§£å³æ¹æ¡ç»æ](#2-è§£å³æ¹æ¡ç»æ) |
| | | - [3. æ ¸å¿ææ¯æ ](#3-æ ¸å¿ææ¯æ ) |
| | | - [4. å¼åç¯å¢é
ç½®](#4-å¼åç¯å¢é
ç½®) |
| | | - [5. æå»ºä¸è¿è¡](#5-æå»ºä¸è¿è¡) |
| | | - [6. DevFrm åè½æ¨¡å详解](#6-devfrm-åè½æ¨¡å详解) |
| | | - [7. æ¶æä¸è®¾è®¡æ¨¡å¼](#7-æ¶æä¸è®¾è®¡æ¨¡å¼) |
| | | - [8. å·¥å
·ç±»ä¸å
Œ
±ç»ä»¶](#8-å·¥å
·ç±»ä¸å
Œ
±ç»ä»¶) |
| | | - [9. é
置说æ](#9-é
置说æ) |
| | | - [10. é¨ç½²æå](#10-é¨ç½²æå) |
| | | - [11. å¼åè§è䏿佳å®è·µ](#11-å¼åè§è䏿佳å®è·µ) |
| | | - [12. 常è§é®é¢ä¸æ
éææ¥](#12-常è§é®é¢ä¸æ
éææ¥) |
| | | |
| | | --- |
| | | |
| | | ## 1. é¡¹ç®æ¦è§ |
| | | - **è§£å³æ¹æ¡åç§°**ï¼`GsDevSolution.sln` |
| | | - **主è¦ç¨é**ï¼é¢åå¶é ç°åºç MES Windows 客æ·ç«¯ï¼è¦çç产ãä»å¨ãè´¨æ£ãç³»ç»é
ç½®çä¸å¡ã |
| | | - **æ ¸å¿åºç¨**ï¼`Gs.DevApp`ï¼DevExpress WinForms 客æ·ç«¯ï¼ï¼è¾
以称éééç«ç¹ä¸å®è£
ç¨åºã |
| | | |
| | | ### 1.1 åºæ¬ä¿¡æ¯ |
| | | |
| | | | é¡¹ç® | 说æ | |
| | | |------|------| |
| | | | **è§£å³æ¹æ¡åç§°** | `GsDevSolution.sln` | |
| | | | **产ååç§°** | G-MES V2.0 | |
| | | | **主è¦ç¨é** | é¢åå¶é ç°åºç MES Windows 客æ·ç«¯ | |
| | | | **æ ¸å¿åºç¨** | `Gs.DevApp` (主客æ·ç«¯) | |
| | | | **è¾
å©åºç¨** | `Gs.WeightIqc` (IQCç§°é), `Gs.WeightLine` (产线称é) | |
| | | | **å¼åç¯å¢** | Visual Studio 2022+ | |
| | | | **ç®æ æ¡æ¶** | .NET Framework 4.8 | |
| | | | **æå»ºå¹³å°** | Any CPU | |
| | | |
| | | ### 1.2 æ ¸å¿ç¹æ§ |
| | | |
| | | - â
**ç°ä»£å UI**: åºäº DevExpress v22.2 ç FluentDesign çé¢ |
| | | - â
**卿å è½½**: éè¿åå°æºå¶å®ç°èååçªä½ç卿å è½½ |
| | | - â
**æéæ§å¶**: åºäºè§è²çèåæéåæä½æé管ç |
| | | - â
**å¯å¤ç¨ç»ä»¶**: 150+ ä¸å¡æ§ä»¶,æé«å¼åæç |
| | | - â
**夿°æ®åºæ¯æ**: å
¼å®¹ Oracle å SQL Server |
| | | - â
**èªå¨æ´æ°**: éæ AutoUpdater.NET å®ç°èªå¨å级 |
| | | - â
**åµå
¥å¼æµè§å¨**: CefSharp æ¯æ H5 页é¢éæ |
| | | - â
**å·¥ä¸éä¿¡**: NModbus æ¯æ Modbus TCP/RTU 设å¤éä¿¡ |
| | | - â
**éä¸å¼æ¥å¿**: ç»ä¸çæ¥å¿è®°å½åé误追踪æºå¶ |
| | | |
| | | ### 1.3 ä¸å¡è¦çèå´ |
| | | |
| | | ``` |
| | | åºç¡æ°æ®ç®¡ç â ç产计å â å·¥å管ç â ç产æ§è¡ â è´¨éæ£éª â ä»å¨ç©æµ â æ¥è¡¨åæ |
| | | â â â â â â â |
| | | 客æ·/ä¾åºå æäº§è°æ´ ä»»å¡ä¸è¾¾ å·¥åºå¼å·¥ å¤çº§è´¨æ£ åºå
¥åºç®¡ç FastReport |
| | | ç©æä¸»æ°æ® 产线åé
æµç¨å¡ æ°æ®éé 缺é·è¿½è¸ª åºåè°æ¨ ç»è®¡åæ |
| | | å·¥è£
è®¾å¤ èµæºåè° è¿åº¦è¿½è¸ª è¿å·¥ç»´ä¿® AQLæ½æ · æ¡ç 管ç èªå®ä¹æ¥è¡¨ |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 2. è§£å³æ¹æ¡ç»æ |
| | | |
| | | | ç®å½ | 说æ | |
| | | | --- | --- | |
| | | | `Gs.DevApp/` | 主客æ·ç«¯é¡¹ç®ï¼å
å«å
¨é¨ä¸å¡çªä½ãå·¥å
·åºãèµæºåé
ç½®ã | |
| | | | ââ `DevFrm/` | ä¸å¡çªä½ï¼æé¢åååï¼`BasicData/` åºç¡æ°æ®ã`Work/` å¶ç¨ã`QC/` è´¨æ£ã`Sys/` ç³»ç»è®¾ç½®çï¼ã | |
| | | | ââ `Entity/` | DTO ä¸éç¨æ¨¡åï¼å¦ `PageQueryModel`ã`ReturnModel`ï¼ã | |
| | | | ââ `ToolBox/` | å
Œ
±å·¥å
·ç±»ï¼HTTPãæ¥å¿ãModbusãå¯¹è¯æ¡å
è£
çï¼ã | |
| | | | ââ `UserControl/` | å¯å¤ç¨æ§ä»¶ï¼å·¥å
·æ ãåé¡µãæ°æ®åå
¸ãæ¥è¯¢éæ©å¨çï¼ã | |
| | | | `Gs.WeightIqc/` | IQC æ¥æç§°é客æ·ç«¯ï¼è´è´£ä¸²å£/Modbus ééä¸ä¸ä¼ ã | |
| | | | `Gs.WeightLine/` | 产线称é客æ·ç«¯ï¼æ¯æå¤æ¡çº¿ä½åæ¢ä¸å®æ¶çæ§ã | |
| | | | `Gs.Setup/` | Visual Studio Installer 项ç®ï¼`.vdproj`ï¼ï¼ç¨äºæå
åå¸ã | |
| | | | `packages/` | NuGet ç¼åç®å½ï¼å
å« DevExpressãCefSharpãNModbusãSystem.* ä¾èµã | |
| | | ### 2.1 项ç®ç»æ |
| | | |
| | | ## 3. æ ¸å¿ææ¯æ |
| | | - **.NET Framework 4.8 / C# WinForms**ï¼åºç¨åºç¡æ¡æ¶ã |
| | | - **DevExpress v22.2**ï¼UI ç»ä»¶ï¼FluentDesignãXtraGridãXtraTabãWaitDialog çï¼ã |
| | | - **CefSharp 109 + AutoUpdater.NET**ï¼åµå
¥å¼æµè§å¨ä¸å¯éçèªå¨æ´æ°è½åã |
| | | - **NModbusãSerialPort**ï¼å·¥ä¸è®¾å¤éä¿¡ï¼æ¶µç TCP ä¸ RTUã |
| | | - **Newtonsoft.JsonãConfigurationManager**ï¼API æ°æ®è§£æä¸é
置读åã |
| | | - **Oracle.ManagedDataAccessãSystem.Data.SqlClient**ï¼æåºæ¯è®¿é® Oracle æ SQL Serverã |
| | | ``` |
| | | GsDevSolution/ |
| | | âââ Gs.DevApp/ ã主客æ·ç«¯é¡¹ç®ã |
| | | â âââ DevFrm/ - 18个ä¸å¡é¢å模å (150+ çªä½) |
| | | â â âââ BasicData/ - åºç¡æ°æ® (客æ·/ä¾åºå/ç©æ/产线) |
| | | â â âââ Work/ - ç产æ§è¡ (å¼å·¥/æ°æ®éé/è¿å·¥) |
| | | â â âââ WOM/ - å·¥å管ç (ä»»å¡ä¸è¾¾/æäº§) |
| | | â â âââ QC/ - è´¨é管çéç¨æ¨¡å |
| | | â â âââ IPQC/ - å¶ç¨æ£éª (é¦ä»¶/å·¡æ£) |
| | | â â âââ FQC/ - æåç»æ£ |
| | | â â âââ RkQC/ - æ¥æè´¨æ£ |
| | | â â âââ Ck/ - åºåºç®¡ç (颿/è¡¥æ/éè´§) |
| | | â â âââ Rk/ - å
¥åºç®¡ç (æ¥æ/éåº/å
¶ä») |
| | | â â âââ Warehouse/ - ä»åºæä½ (è°æ¨/çç¹/æ¡ç ) |
| | | â â âââ Sales/ - éå®è®¢åä¸åè´§ |
| | | â â âââ WW/ - å§å¤ç®¡ç |
| | | â â âââ Rpt/ - æ¥è¡¨è®¾è®¡ä¸æ§è¡ |
| | | â â âââ Sys/ - ç³»ç»è®¾ç½® (èå/ç»ç»/åå·è§å) |
| | | â â âââ User/ - ç¨æ·ä¸æé管ç |
| | | â â âââ JJGZ/ - 夹å
·å·¥è£
ä¸è®¾å¤å°è´¦ |
| | | â â âââ BarCode/ - æ¡ç çæä¸æå° |
| | | â â âââ PDA/ - ææç»ç«¯çé¢ |
| | | â âââ Entity/ - æ°æ®ä¼ è¾å¯¹è±¡ (DTO) |
| | | â âââ ToolBox/ - å
Œ
±å·¥å
·ç±» |
| | | â âââ UserControl/ - å¯å¤ç¨æ§ä»¶åº (150+) |
| | | â âââ Resources/ - èµæºæä»¶ (徿 /å¾ç) |
| | | â âââ App.config - åºç¨é
ç½®æä»¶ |
| | | â âââ Program.cs - åºç¨ç¨åºå
¥å£ |
| | | âââ Gs.WeightIqc/ ãIQC ç§°é客æ·ç«¯ã |
| | | âââ Gs.WeightLine/ ã产线称é客æ·ç«¯ã |
| | | âââ Gs.Setup/ ãå®è£
ç¨åºé¡¹ç®ã(.vdproj) |
| | | âââ packages/ ãNuGet å
ç®å½ã |
| | | ``` |
| | | |
| | | ## 4. DevFrm åè½æ¨¡å详解 |
| | | ### 2.2 æ ¸å¿ç®å½è¯¦è§£ |
| | | |
| | | ### 4.1 ç»å½ä¸ä¸»æ¡æ¶ |
| | | - `Program.cs`ï¼åå®ä¾å®æ¤ãCefSharp åå§åãå¯å¨ç»å½æµç¨ã |
| | | - `FrmLogin`ï¼èªå¨æ´æ°ï¼AutoUpdater.NETï¼ãåä½å è½½ãè´¦å·è®°å¿ãè°ç¨ `User/UserLogin`ã |
| | | - `FrmMain`ï¼DevExpress FluentDesign 主çé¢ï¼è´è´£èåæ å è½½ï¼`User/GetUserLoginInfo`ï¼ã页ç¾çå½å¨æãç»ç»åæ¢ãåºé¨ç¶ææ åçªå£é´äºä»¶ä¼ éã |
| | | #### DevFrm/ - ä¸å¡çªä½ |
| | | |
| | | ### 4.2 åºç¡æ°æ®å |
| | | - **`BasicData/`**ï¼ç»´æ¤ç³»ç»ä¸»æ°æ®ãå
¸åçªä½å
æ¬ `Frm_Customer`ï¼å®¢æ·ï¼ã`Frm_Supplier` & `Frm_SupplierSrm`ï¼ä¾åºåä¸ SRM å
³ç³»ï¼ã`Frm_MesItems`/`Frm_MesItemsShow`ï¼ç©æï¼ã`Frm_MesWorkshopLine`ï¼äº§çº¿ï¼ã`Frm_Staff`ã`Frm_Department` çã |
| | | - **`BarCode/`**ï¼æ¡ç æ¹éçæãæå°æ¨¡æ¿è®¾ç½®ï¼å¸¸è§çªä½å¦ `Frm_BarcodePrint`, `Frm_BarcodeTemplate`ã |
| | | - **`JJGZ/`**ï¼å¤¹å
·å·¥è£
å设å¤ç¹æ£ç¸å
³ä¸»æ°æ®ï¼ç»´æ¤å·¥è£
å°è´¦ãç¹æ£é¡¹ç®ã |
| | | ææä¸å¡çªä½æé¢ååå,æ¯ä¸ªåç®å½å
å«è¯¥é¢åçææè¡¨ååå¯¹è¯æ¡ã |
| | | |
| | | ### 4.3 ä»å¨ç®¡çå |
| | | - **`Ck/`ï¼åºåºï¼**ï¼è¦çææãè¡¥æãå
¶ä»ãéè´§ãå§å¤çåºåºæµç¨ï¼å¦ `Frm_MesItemBl`ï¼è¡¥æåºåºï¼ã`Frm_MesCgthSq`ï¼éè´éè´§ç³è¯·ï¼ã`Frm_MesInvItemOut_SCLL`ï¼çäº§é¢æåºåºï¼ã |
| | | - **`Rk/`ï¼å
¥åºï¼**ï¼æ¥æãéåºåæé¡¹å
¥åºï¼å¦ `Frm_MesInvItemArn`ï¼å°è´§å
¥åºï¼ã`Frm_MesItemTbl`ï¼ææå
¥åºå°è´¦ï¼ã`Frm_MesItemQtrk`ï¼å
¶ä»å
¥åºï¼ã |
| | | - **`Warehouse/`**ï¼åºå
æä½ä¸æ¡ç ç»´æ¤ï¼å
å« `Frm_MesDbck`ï¼è°æ¨åºåºï¼ã`Frm_MesRohIn`ï¼åæå
¥åºï¼ã`Frm_ArrivalBarcode`ã`Frm_InitialBarcode` çæ¡ç å¤çã |
| | | - **`PDA/`**ï¼ä¸ææè®¾å¤äº¤äºçç®åçé¢ï¼æä¾æ«ç ãçè´§ãçç¹çç°åºå¨ä½ã |
| | | **å½åè§è**: `Frm_{ä¸å¡åç§°}.cs` æ `Frm_{ä¸å¡åç§°}_{åç±»å}.cs` |
| | | |
| | | ### 4.4 è´¨é管çå |
| | | - **`QC/`**ï¼è´¨ééç¨æ¨¡åä¸åå
¸ç»´æ¤ï¼å«ç¼ºé·ä»£ç ï¼`DefectCode*.cs`ï¼ãæ£éªé¡¹ç®ï¼`Frm_MesQaItemsDetect01`ï¼ãAQL æ½æ ·è®¾ç½®ï¼`Frm_MesQmAql1`ï¼çï¼å¹¶æä¾ `Models/` DTOã |
| | | - **`IPQC/`**ï¼å¶ç¨è¿ç¨æ£éªï¼å¦ `Frm_ShouJian`ï¼é¦ä»¶ï¼ã`Frm_XunJian`ï¼å·¡æ£ï¼ãH5 æ£éªçé¢çã |
| | | - **`FQC/`**ï¼æåç»æ£ï¼å
æ¬ `Frm_Fqc`ã`Frm_FqcDetect01`ãå¼å¸¸å¤ç `MesFqcExceptional`ã |
| | | - **`RkQC/`**ï¼æ¥æè´¨æ£ï¼æä¾ `Frm_Cqfa`ï¼æ½æ£æ¹æ¡ï¼ã`Frm_CqfaItems`ã`Frm_QtrkDetect01`ã`Frm_WwrkDetect01` çã |
| | | - **`WW/`**ï¼å§å¤è´¨é管çï¼å¦å§å¤æ£éªãå¼å¸¸åä¼ ã |
| | | #### Entity/ - æ°æ®æ¨¡å |
| | | |
| | | ### 4.5 å¶é æ§è¡å |
| | | - **`Work/`**ï¼å¶ç¨ä½ä¸æ ¸å¿ï¼å¦ `Frm_WorkStart`ï¼å·¥åºå¼å·¥ï¼ã`Frm_WorkProcesses`ï¼æµç¨å¡æ§ï¼ã`Frm_Work01/09`ï¼å·¥ç«æ°æ®ééï¼å« ModbusãSQLServer 交äºï¼ã`Frm_Repair`ï¼è¿å·¥ç»´ä¿®ï¼çã |
| | | - **`WOM/`**ï¼å·¥å管çï¼è´è´£ç产任å¡ä¸è¾¾ãæäº§è°æ´ãå·¥å追踪ã |
| | | | æä»¶ | 说æ | |
| | | |------|------| |
| | | | `LoginInfoModel.cs` | ç»å½ç¨æ·ä¿¡æ¯æ¨¡å | |
| | | | `PageQueryModel.cs` | å页æ¥è¯¢éç¨æ¨¡å | |
| | | | `ReturnModel.cs` | API è¿åç»æå°è£
| |
| | | |
| | | ### 4.6 éå®ãæ¥è¡¨ä¸ç»è®¡ |
| | | - **`Sales/`**ï¼éå®è®¢åãåè´§ãéè´§çå端ä¸å¡ã |
| | | - **`Rpt/`**ï¼æ¥è¡¨ä¸å¿ï¼å
å« FastReport/DevExpress æ¥è¡¨è®¾è®¡ãè¿è¡ãæ°æ®æºé
ç½®ï¼å¦ `EasyRptDesign`, `EasyRptEdt`, `SysHelp` çã |
| | | #### ToolBox/ - å·¥å
·ç±»åº |
| | | |
| | | ### 4.7 ç³»ç»ä¸æé |
| | | - **`Sys/`**ï¼ç³»ç»è®¾ç½®ä¸åå°ç®¡çãåè½å
æ¬ `SysMenu`ï¼èåç»æï¼ã`Organization`ï¼ç»ç»æ ï¼ã`DocNoRule`ï¼åå·è§åï¼ã`SysLog`ã`SysHelp`ã`Frm_Config` çã |
| | | - **`User/`**ï¼ç¨æ·ãè§è²ãè§è²ææãå¯ç åæ´çï¼å¦ `User`, `Role`, `RoleSelectAction`, `UserSetPwd`ã |
| | | | æä»¶ | 说æ | |
| | | |------|------| |
| | | | `UtilityHelper.cs` | **æ ¸å¿å·¥å
·ç±»**: HTTP请æ±ãJSONè§£æãGridåå§åç | |
| | | | `LogHelper.cs` | æ¥å¿è®°å½å·¥å
· (åå
¥ `logs/{yyyy-MM-dd}.log`) | |
| | | | `MsgHelper.cs` | ç»ä¸æ¶æ¯æç¤ºå°è£
(åºäº DevExpress) | |
| | | | `UpdateParentEventArgs.cs` | çªä½é´äºä»¶éä¿¡æºå¶ | |
| | | | `ModbusHelper.cs` | Modbus 设å¤éä¿¡å°è£
| |
| | | |
| | | ### 4.8 å
¶å®æ¯æå |
| | | - `JJGZ/`ï¼å¤¹å
·å·¥è£
ã计é设å¤å°è´¦ä¸ç¹æ£ä»»å¡ï¼ä¸ºè´¨éä¸ç»´æ¤æ¨¡åæä¾åºç¡æ°æ®ã |
| | | - `WW/`ï¼å§å¤ååä½ä¸åè´¨æ£éç¯ï¼è¡æ¥å¤åæµç¨ã |
| | | - `PDA/`ï¼ææç»ç«¯çé¢éï¼ç¨äºä»å¨ãç产ãè´¨æ£åºæ¯çæ«ç ä½ä¸ã |
| | | - æ ¹ç®å½ä¸ç `FrmMain`ã`FrmLogin`ã`XtraForm*` ççªä½æä¾éç¨ç¤ºä¾æè°è¯å
¥å£ï¼å¯ä½ä¸ºæ°æ¨¡ååèæ¨¡æ¿ã |
| | | #### UserControl/ - å¯å¤ç¨æ§ä»¶ |
| | | |
| | | ## 5. å·¥å
·ãæ§ä»¶ä¸å
Œ
񊫆 |
| | | - `ToolBox/UtilityHelper`ï¼å°è£
`HttpPost`ãJSON è§£æï¼`ReturnToDynamic/ReturnToTablePage`ï¼ãèµæºå è½½ãGrid åå§åãè¿æ»¤æ¡ä»¶æè¿°çã |
| | | - `ToolBox/LogHelper`ï¼ææ¥æåå
¥ `logs/{yyyy-MM-dd}.log`ï¼GUI å±ç»ä¸éè¿ `MsgHelper` æç¤ºã |
| | | - `ToolBox/UpdateParentEventArgs`ï¼ç¨äºåçªä½ä¸ä¸»çªä½ä¹é´çäºä»¶éä¿¡ã |
| | | - `UserControl/`ï¼`UcToolBarMenu`ã`UcPageBar`ã`UcDictionarySelect`ã`UcLook*` çæ§ä»¶æåå¤ç¨æ§ï¼`Toast` ç¨äºè½»éæç¤ºã |
| | | |
| | | ## 6. è¾
å©é¡¹ç®è¯´æ |
| | | - **Gs.WeightIqc**ï¼å®æ¶è¯»å串å£ç§°éæ°æ®ï¼éè¿ `WorkWeight/EditModel` API 䏿¥ï¼å«çº¿ç¨ç®¡çã串å£é
ç½®ãæ¥å¿è®°å½ã |
| | | - **Gs.WeightLine**ï¼ç±»ä¼¼ IQCï¼ä½æ¯æçº¿ä½ä¸æéæ©ãå计æ¶å¨å·æ°ä»¥åæ´å¤çé¢äº¤äºã |
| | | - **Gs.Setup**ï¼çæå®è£
å
æ ClickOnce é¨ç½²æéçå®è£
å·¥ç¨ï¼ä¸ Release æå»ºè¾åºé
å¥ã |
| | | |
| | | ## 7. é
ç½®ä¸ç¯å¢ |
| | | - 主é
ç½®æä»¶ï¼`Gs.DevApp/App.config`ï¼è¿è¡æè¯»å `Gs.DevApp.exe.config`ï¼ã |
| | | - å
³é®é®å¼ï¼`WebApiUrl`ã`ProductName`ã`Version`ã`IsAutoUpdater`ã`AutoUpdaterXml`ã`LogPath`ã`AsyncSeconds`ã`TimingMailInterval` çã |
| | | - 设å¤ä¸æ°æ®åºå°åé»è®¤æåå
ç½ IPï¼å¦ `192.168.0.51`ã`192.168.60.51`ï¼ï¼é¨ç½²åéæç¯å¢è°æ´ã |
| | | - ç§°éæ¨¡å使ç¨ä¸²å£åæ°ï¼æ³¢ç¹çã端å£å·ï¼å Modbus ç«å·/å¯åå¨é
ç½®ï¼å»ºè®®å°ç¡¬ç¼ç è·¯å¾æ½ç¦»å°é
ç½®æåå°åæ°è¡¨ã |
| | | - æ¥å¿é»è®¤åå
¥åºç¨ç®å½ä¸ `logs/`ï¼è¯·ç¡®ä¿å®¢æ·ç«¯å
·å¤åæéææ¹ä¸ºå
Œ
±æ°æ®ç®å½ã |
| | | |
| | | ## 8. æå»ºä¸é¨ç½² |
| | | - è°è¯æå»ºï¼`msbuild GsDevSolution.sln /p:Configuration=Debug` |
| | | - åå¸æå»ºï¼`msbuild .\Gs.DevApp\Gs.DevApp.csproj /t:Rebuild /p:Configuration=Release` |
| | | - 坿§è¡æä»¶ä½äº `bin\{Configuration}\`ï¼å叿¶éæºå¸¦ DevExpressãCefSharp ä¾èµå `x86/x64` åç®å½ã |
| | | - å®è£
å
ï¼å¨ Release æå»ºåæå¼ `Gs.Setup/Gs.Setup.vdproj` å¯¼åº MSI/EXEã |
| | | - èªå¨æ´æ°ï¼è¥å¯ç¨ `IsAutoUpdater=1`ï¼éè¦é¨ç½² `AutoUpdaterXml` æåçæ´æ°æè¿°æä»¶ä¸å®è£
å
ã |
| | | |
| | | ## 9. å¼åä¸è°è¯å»ºè®® |
| | | - éµå¾ªç°æç®å½ååï¼æ°å¢åè½ä¼å
æ¾ç½®äºç¸åºä¸å¡åç®å½ã |
| | | - å¤ç¨ `ToolBox`ã`UserControl` ä¸çå
Œ
±è½åï¼é¿å
éå¤å®ç° HTTPãæ¥å¿ãå页ãéæ©å¨çé»è¾ã |
| | | - å
³é® API è°ç¨ååè®°å½æ¥å¿ï¼å¼å¸¸æ¶ä½¿ç¨ `MsgHelper` å±ç¤ºå好信æ¯ï¼å¹¶å¨åå°æ¥å¿é带ä¸ä¸æï¼å·¥ç«ãæ¡ç ãç¨æ·çï¼ã |
| | | - 卿¶å硬件æé¿èæ¶æä½æ¶ï¼ä½¿ç¨åå°çº¿ç¨/弿¥æ¨¡å¼ï¼é¿å
é»å¡ UIï¼æ¿æ¢ `Thread.Abort` ä¸ºåæ¶æ è®°å¯æåç¨³å®æ§ã |
| | | - å»ºè®®å»ºç«æå·¥æµè¯æ¸
åï¼ç»å½ãèåå è½½ãæ ¸å¿ä¸å¡æµç¨ãç§°éä¸ä¼ ãæ¥è¡¨æå°çã |
| | | - ææåæ®åç¯å¢ IP åºè¿ç§»è³å®å
¨é
ç½®æç¯å¢åéï¼æäº¤åæ³¨æè±æã |
| | | | æ§ä»¶ç±»å | ç¤ºä¾ | 说æ | |
| | | |----------|------|------| |
| | | | **å·¥å
·æ ** | `UcToolBarMenu.cs` | æ åCRUDæä½æ | |
| | | | **å页** | `UcPageBar.cs` | å页æ§ä»¶ | |
| | | | **éæ©å¨** | `UcDictionarySelect.cs` | æ°æ®åå
¸ä¸ææ¡ | |
| | | | **æ¥æ¾æ§ä»¶** | `UcLookCustomer.cs`<br>`UcLookItems.cs`<br>`UcLookWarehouse.cs` | 60+ æ°æ®æ¥æ¾å¯¹è¯æ¡<br>(客æ·/ç©æ/ä»åºç) | |
| | | | **éç¥** | `Toast.cs` | è½»é级æç¤ºæ¡ | |
| | | |
| | | --- |
| | | å¦éè¿ä¸æ¥æ©å±æå¹è®ï¼å¯åºäºæ¬æåå¿«éå®ä½æ¨¡åå
¥å£ãæ ¸å¿é
置以åæå»ºæµç¨ãæ¬¢è¿æ ¹æ®å®é
ä¸å¡æç»è¡¥å
ã*** |
| | | |
| | | ## 3. æ ¸å¿ææ¯æ |
| | | |
| | | ### 3.1 主è¦ä¾èµ |
| | | |
| | | | ææ¯/åº | çæ¬ | ç¨é | |
| | | |---------|------|------| |
| | | | **.NET Framework** | 4.8 | åºç¨åºç¡æ¡æ¶ | |
| | | | **DevExpress** | v22.2.3 | UI ç»ä»¶åº (FluentDesign, XtraGrid, XtraTab, XtraBars) | |
| | | | **CefSharp** | 109.1.110 | åµå
¥å¼ Chromium æµè§å¨ | |
| | | | **AutoUpdater.NET** | 1.9.2 | èªå¨è½¯ä»¶æ´æ° | |
| | | | **NModbus** | 3.0.81 | å·¥ä¸è®¾å¤éä¿¡ (Modbus TCP/RTU) | |
| | | | **Newtonsoft.Json** | 13.0.3 | JSON åºåå | |
| | | | **System.Text.Json** | 8.0.4 | ç°ä»£ JSON æ¯æ | |
| | | | **Oracle.ManagedDataAccess** | ææ° | Oracle æ°æ®åºè®¿é® | |
| | | | **System.Data.SqlClient** | ææ° | SQL Server æ°æ®åºè®¿é® | |
| | | |
| | | ### 3.2 DevExpress æ ¸å¿ç»ä»¶ |
| | | |
| | | ```csharp |
| | | // FluentDesign 主çé¢ |
| | | DevExpress.XtraBars.FluentDesignSystem.FluentDesignForm |
| | | |
| | | // æ°æ®è¡¨æ ¼ |
| | | DevExpress.XtraGrid.GridControl |
| | | DevExpress.XtraGrid.Views.Grid.GridView |
| | | |
| | | // æ ç¾é¡µ |
| | | DevExpress.XtraTab.XtraTabControl |
| | | |
| | | // 导èªèå |
| | | DevExpress.XtraNavBar.NavBarControl |
| | | |
| | | // çå¾
å¯¹è¯æ¡ |
| | | DevExpress.XtraWaitForm.WaitDialogForm |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 4. å¼åç¯å¢é
ç½® |
| | | |
| | | ### 4.1 åç½®è¦æ± |
| | | |
| | | - â
Windows 10/11 æ Windows Server 2016+ |
| | | - â
Visual Studio 2022 (æ¨è) æ Visual Studio 2019 |
| | | - â
.NET Framework 4.8 SDK |
| | | - â
DevExpress v22.2+ 许å¯è¯ (éé
ç½® NuGet æº) |
| | | - â
Git (çæ¬æ§å¶) |
| | | |
| | | ### 4.2 å
éä¸è¿å |
| | | |
| | | ```bash |
| | | # å
é代ç åº |
| | | cd E:\LanBMes |
| | | git clone <repository_url> LB_MesClient |
| | | |
| | | # è¿å
¥è§£å³æ¹æ¡ç®å½ |
| | | cd LB_MesClient\DevApp |
| | | |
| | | # è¿å NuGet å
|
| | | nuget restore GsDevSolution.sln |
| | | |
| | | # æå¨ Visual Studio ä¸: |
| | | # å³é®è§£å³æ¹æ¡ â è¿å NuGet ç¨åºå
|
| | | ``` |
| | | |
| | | ### 4.3 é
ç½® DevExpress |
| | | |
| | | ç¡®ä¿å·²å®è£
DevExpress v22.2 å¹¶é
ç½® NuGet æº: |
| | | |
| | | ``` |
| | | å·¥å
· â NuGet å
管çå¨ â ç¨åºå
管çå¨è®¾ç½® â ç¨åºå
æº |
| | | æ·»å æº: https://nuget.devexpress.com/<your_feed_key>/api |
| | | ``` |
| | | |
| | | ### 4.4 é
ç½®å端 API |
| | | |
| | | ç¼è¾ `Gs.DevApp\App.config`: |
| | | |
| | | ```xml |
| | | <add key="WebApiUrl" value="http://192.168.0.51:8081/" /> |
| | | ``` |
| | | |
| | | ä¿®æ¹ä¸ºå®é
çå端 API å°åã |
| | | |
| | | --- |
| | | |
| | | ## 5. æå»ºä¸è¿è¡ |
| | | |
| | | ### 5.1 å½ä»¤è¡æå»º |
| | | |
| | | ```bash |
| | | # Debug æå»º (æ¨èå¼å使ç¨) |
| | | cd E:\LanBMes\LB_MesClient\DevApp |
| | | msbuild GsDevSolution.sln /p:Configuration=Debug /p:Platform="Any CPU" |
| | | |
| | | # Release æå»º (ç¨äºåå¸) |
| | | msbuild GsDevSolution.sln /p:Configuration=Release /p:Platform="Any CPU" |
| | | |
| | | # ä»
æå»ºä¸»é¡¹ç® |
| | | msbuild Gs.DevApp\Gs.DevApp.csproj /t:Rebuild /p:Configuration=Debug |
| | | ``` |
| | | |
| | | ### 5.2 Visual Studio è¿è¡ |
| | | |
| | | 1. **æå¼è§£å³æ¹æ¡**: åå» `GsDevSolution.sln` |
| | | 2. **设置å¯å¨é¡¹ç®**: å³é® `Gs.DevApp` â 设为å¯å¨é¡¹ç® |
| | | 3. **è¿è¡**: æ `F5` æç¹å» "å¼å§è°è¯" |
| | | |
| | | ### 5.3 ç´æ¥è¿è¡ |
| | | |
| | | ```bash |
| | | # Debug çæ¬ |
| | | Gs.DevApp\bin\Debug\Gs.DevApp.exe |
| | | |
| | | # Release çæ¬ |
| | | Gs.DevApp\bin\Release\Gs.DevApp.exe |
| | | ``` |
| | | |
| | | ### 5.4 è°è¯æå·§ |
| | | |
| | | **ç¦ç¨åå®ä¾éå¶** (å
è®¸åæ¶è¿è¡å¤ä¸ªå®ä¾ç¨äºæµè¯): |
| | | |
| | | å¨ `Program.cs` 䏿³¨é以ä¸ä»£ç : |
| | | |
| | | ```csharp |
| | | // Process[] MyProcesses = Process.GetProcessesByName("Gs.DevApp"); |
| | | // if (MyProcesses.Length > 1) |
| | | // { |
| | | // MyProcesses[0].Kill(); |
| | | // } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 6. DevFrm åè½æ¨¡å详解 |
| | | |
| | | ### 6.1 ç»å½ä¸ä¸»æ¡æ¶ |
| | | |
| | | #### Program.cs - åºç¨ç¨åºå
¥å£ |
| | | |
| | | ```csharp |
| | | [STAThread] |
| | | static void Main() |
| | | { |
| | | // 1. åå®ä¾æ£æ¥ (鲿¢éå¤è¿è¡) |
| | | Process[] MyProcesses = Process.GetProcessesByName("Gs.DevApp"); |
| | | if (MyProcesses.Length > 1) { |
| | | MyProcesses[0].Kill(); |
| | | } |
| | | |
| | | // 2. å¯ç¨è§è§æ ·å¼ |
| | | Application.EnableVisualStyles(); |
| | | Application.SetCompatibleTextRenderingDefault(false); |
| | | |
| | | // 3. å¯å¨ç»å½æµç¨ |
| | | _startLogin(); |
| | | } |
| | | ``` |
| | | |
| | | #### FrmLogin.cs - ç»å½çªä½ |
| | | |
| | | **æ ¸å¿åè½**: |
| | | - èªå¨æ´æ°æ£æ¥ (AutoUpdater.NET) |
| | | - ç¨æ·èº«ä»½éªè¯ (è°ç¨ `User/UserLogin` API) |
| | | - è®°ä½ç¨æ·å/å¯ç |
| | | - åä½è®¾ç½®æä¹
å (注å表) |
| | | |
| | | **å
³é®ä»£ç **: |
| | | |
| | | ```csharp |
| | | // ç»å½éªè¯ |
| | | string result = UtilityHelper.HttpPost("User/UserLogin", "UserLogin", jsonParam); |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | |
| | | if (dy.code == 200) { |
| | | LoginInfoModel.CurrentUser = JsonConvert.DeserializeObject<LoginInfoModel>(dy.data.ToString()); |
| | | this.DialogResult = DialogResult.OK; |
| | | } |
| | | ``` |
| | | |
| | | #### FrmMain.cs - 主çªä½ |
| | | |
| | | **æ ¸å¿èè´£**: |
| | | 1. å è½½ç¨æ·èåç»æ (`User/GetUserLoginInfo`) |
| | | 2. æå»º AccordionControl 导èªèå |
| | | 3. 卿å è½½çªä½ (éè¿åå°) |
| | | 4. 管ç TabPage çå½å¨æ |
| | | 5. ç»ç»åæ¢ |
| | | 6. å
¨å±äºä»¶å¤ç |
| | | |
| | | **卿çªä½å è½½**: |
| | | |
| | | ```csharp |
| | | // éè¿å½å空é´å¨æå建çªä½å®ä¾ |
| | | Form newForm = (Form)Assembly.GetExecutingAssembly() |
| | | .CreateInstance("Gs.DevApp.DevFrm.BasicData.Frm_Customer"); |
| | | |
| | | // åµå
¥å° TabPage |
| | | newForm.FormBorderStyle = FormBorderStyle.None; |
| | | newForm.TopLevel = false; |
| | | newForm.Dock = DockStyle.Fill; |
| | | xtraTabPage.Controls.Add(newForm); |
| | | newForm.Show(); |
| | | ``` |
| | | |
| | | **TabPage ç¼å** (鲿¢é夿å¼): |
| | | |
| | | ```csharp |
| | | if (tabPageDict.ContainsKey(formName)) { |
| | | xtraTabControl.SelectedTabPage = tabPageDict[formName]; |
| | | return; |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 6.2 åºç¡æ°æ®å (BasicData/) |
| | | |
| | | #### 客æ·ç®¡ç - Frm_Customer.cs |
| | | |
| | | - 客æ·ä¸»æ°æ®ç»´æ¤ |
| | | - æ¯æå页æ¥è¯¢ |
| | | - ä½¿ç¨ `UcToolBarMenu` å®ç°å¢å æ¹æ¥ |
| | | - ä½¿ç¨ `UcPageBar` å®ç°å页 |
| | | |
| | | #### ä¾åºå管ç |
| | | |
| | | - `Frm_Supplier.cs` - ä¾åºååºç¡ä¿¡æ¯ |
| | | - `Frm_SupplierSrm.cs` - SRM ä¾åºåå
³ç³»ç®¡ç |
| | | |
| | | #### ç©æç®¡ç |
| | | |
| | | - `Frm_MesItems.cs` - ç©æä¸»æ°æ®ç»´æ¤ |
| | | - `Frm_MesItemsShow.cs` - ç©æä¿¡æ¯å±ç¤º |
| | | |
| | | #### 产线管ç - Frm_MesWorkshopLine.cs |
| | | |
| | | - 车é´äº§çº¿é
ç½® |
| | | - å·¥ä½ä¸å¿å®ä¹ |
| | | |
| | | #### å
¶ä»ä¸»æ°æ® |
| | | |
| | | - `Frm_Staff.cs` - åå·¥ä¿¡æ¯ |
| | | - `Frm_Department.cs` - é¨é¨ç»ç» |
| | | |
| | | --- |
| | | |
| | | ### 6.3 ä»å¨ç®¡çå |
| | | |
| | | #### åºåºç®¡ç (Ck/) |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `Frm_MesInvItemOut_SCLL.cs` | çäº§é¢æåºåº | |
| | | | `Frm_MesItemBl.cs` | è¡¥æåºåº | |
| | | | `Frm_MesCgthSq.cs` | éè´éè´§ç³è¯· | |
| | | | `Frm_MesItemQtck.cs` | å
¶ä»åºåº | |
| | | |
| | | #### å
¥åºç®¡ç (Rk/) |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `Frm_MesInvItemArn.cs` | å°è´§å
¥åº | |
| | | | `Frm_MesItemTbl.cs` | ææå
¥åºå°è´¦ | |
| | | | `Frm_MesItemQtrk.cs` | å
¶ä»å
¥åº | |
| | | |
| | | #### ä»åºæä½ (Warehouse/) |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `Frm_MesDbck.cs` | è°æ¨åºåº | |
| | | | `Frm_MesRohIn.cs` | åæå
¥åº | |
| | | | `Frm_ArrivalBarcode.cs` | å°è´§æ¡ç çæ | |
| | | | `Frm_InitialBarcode.cs` | åå§æ¡ç ç»´æ¤ | |
| | | |
| | | #### ææç»ç«¯ (PDA/) |
| | | |
| | | æä¾ç®åçæ«ç ä½ä¸çé¢,ç¨äº: |
| | | - å¿«éçè´§ |
| | | - åºåçç¹ |
| | | - æ¡ç æ«æ |
| | | - ç§»å¨ä½ä¸ |
| | | |
| | | --- |
| | | |
| | | ### 6.4 è´¨é管çå |
| | | |
| | | #### QC/ - è´¨ééç¨æ¨¡å |
| | | |
| | | - 缺é·ä»£ç ç»´æ¤ (`DefectCode*.cs`) |
| | | - æ£éªé¡¹ç®è®¾ç½® (`Frm_MesQaItemsDetect01.cs`) |
| | | - AQL æ½æ ·æ¹æ¡ (`Frm_MesQmAql1.cs`) |
| | | - è´¨éæ åå®ä¹ |
| | | |
| | | #### IPQC/ - å¶ç¨æ£éª |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `Frm_ShouJian.cs` | é¦ä»¶æ£éª | |
| | | | `Frm_XunJian.cs` | å·¡æ£ä½ä¸ | |
| | | | H5 æ£éªçé¢ | ç§»å¨ç«¯æ£éª | |
| | | |
| | | #### FQC/ - æåç»æ£ |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `Frm_Fqc.cs` | æåæ£éªä¸»çé¢ | |
| | | | `Frm_FqcDetect01.cs` | æ£éªæ°æ®å½å
¥ | |
| | | | `MesFqcExceptional.cs` | å¼å¸¸å¤ç | |
| | | |
| | | #### RkQC/ - æ¥æè´¨æ£ |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `Frm_Cqfa.cs` | æ½æ£æ¹æ¡ | |
| | | | `Frm_CqfaItems.cs` | æ£éªé¡¹é
ç½® | |
| | | | `Frm_QtrkDetect01.cs` | æ¥ææ£éª | |
| | | | `Frm_WwrkDetect01.cs` | å§å¤æ¥ææ£éª | |
| | | |
| | | --- |
| | | |
| | | ### 6.5 å¶é æ§è¡å (Work/) |
| | | |
| | | #### å·¥åºä½ä¸ |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `Frm_WorkStart.cs` | å·¥åºå¼å·¥ | |
| | | | `Frm_WorkProcesses.cs` | æµç¨å¡ç®¡ç | |
| | | | `Frm_Work01.cs` ~ `Frm_Work09.cs` | åå·¥ç«æ°æ®éé | |
| | | | `Frm_Repair.cs` | è¿å·¥ç»´ä¿® | |
| | | |
| | | #### ç¹æ®åè½ |
| | | |
| | | - **Modbus 设å¤éä¿¡**: æ¯æå®æ¶è¯»åå·¥ä¸è®¾å¤æ°æ® |
| | | - **SQL Server ç´è¿**: é¨åå·¥ç«ç´æ¥ä¸ SQL Server äº¤äº |
| | | - **宿¶çæ§**: å·¥ç«ç¶æå®æ¶å±ç¤º |
| | | |
| | | --- |
| | | |
| | | ### 6.6 å·¥å管çå (WOM/) |
| | | |
| | | - ç产任å¡ä¸è¾¾ |
| | | - å·¥åæäº§è°æ´ |
| | | - å·¥åè¿åº¦è¿½è¸ª |
| | | - å·¥åç¶æç®¡ç |
| | | |
| | | --- |
| | | |
| | | ### 6.7 éå®ç®¡çå (Sales/) |
| | | |
| | | - éå®è®¢å管ç |
| | | - åè´§åå¤ç |
| | | - é货管ç |
| | | - 客æ·å¯¹è´¦ |
| | | |
| | | --- |
| | | |
| | | ### 6.8 å§å¤ç®¡çå (WW/) |
| | | |
| | | - å§å¤è®¢å管ç |
| | | - å§å¤æ¥ææ£éª |
| | | - å§å¤è´¨éå¼å¸¸å¤ç |
| | | - å¤åæµç¨éç¯ |
| | | |
| | | --- |
| | | |
| | | ### 6.9 æ¥è¡¨å (Rpt/) |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `EasyRptDesign.cs` | æ¥è¡¨è®¾è®¡å¨ | |
| | | | `EasyRptEdt.cs` | æ¥è¡¨ç¼è¾ | |
| | | | `SysHelp.cs` | æ¥è¡¨å¸®å© | |
| | | |
| | | **æ¯æææ¯**: |
| | | - FastReport |
| | | - DevExpress Reports |
| | | - èªå®ä¹æ¥è¡¨å¼æ |
| | | |
| | | --- |
| | | |
| | | ### 6.10 ç³»ç»ç®¡çå (Sys/) |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `SysMenu.cs` | èåç»æç»´æ¤ | |
| | | | `Organization.cs` | ç»ç»æ¶æç®¡ç | |
| | | | `DocNoRule.cs` | åå·è§åé
ç½® | |
| | | | `SysLog.cs` | ç³»ç»æ¥å¿æ¥è¯¢ | |
| | | | `Frm_Config.cs` | ç³»ç»é
ç½® | |
| | | |
| | | --- |
| | | |
| | | ### 6.11 ç¨æ·ä¸æéå (User/) |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `User.cs` | ç¨æ·ç®¡ç | |
| | | | `Role.cs` | è§è²ç®¡ç | |
| | | | `RoleSelectAction.cs` | è§è²ææ | |
| | | | `UserSetPwd.cs` | å¯ç åæ´ | |
| | | |
| | | **æé模å**: |
| | | ``` |
| | | ç¨æ· â è§è² â èåæé + æä½æé |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 6.12 夹å
·å·¥è£
å (JJGZ/) |
| | | |
| | | - 夹å
·å·¥è£
å°è´¦ |
| | | - 计é设å¤ç®¡ç |
| | | - ç¹æ£ä»»å¡ä¸è®°å½ |
| | | - 设å¤ç»´æ¤è®¡å |
| | | |
| | | --- |
| | | |
| | | ### 6.13 æ¡ç 管çå (BarCode/) |
| | | |
| | | | çªä½ | åè½ | |
| | | |------|------| |
| | | | `Frm_BarcodePrint.cs` | æ¡ç æ¹éæå° | |
| | | | `Frm_BarcodeTemplate.cs` | æå°æ¨¡æ¿è®¾ç½® | |
| | | |
| | | --- |
| | | |
| | | ## 7. æ¶æä¸è®¾è®¡æ¨¡å¼ |
| | | |
| | | ### 7.1 å¤å±æ¶æ |
| | | |
| | | ``` |
| | | âââââââââââââââââââââââââââââââââââââââââââ |
| | | â UI Layer (WinForms) â |
| | | â DevExpress FluentDesign + 150+ æ§ä»¶ â |
| | | âââââââââââââââââââ¬ââââââââââââââââââââââââ |
| | | â HTTP/JSON REST API |
| | | âââââââââââââââââââ¼ââââââââââââââââââââââââ |
| | | â Business Logic Layer (Client) â |
| | | â çªä½é»è¾ + ToolBox å·¥å
·ç±» + 卿å è½½ â |
| | | âââââââââââââââââââ¬ââââââââââââââââââââââââ |
| | | â |
| | | âââââââââââââââââââ¼ââââââââââââââââââââââââ |
| | | â Backend REST API (å«å¤é¡¹ç®) â |
| | | â 身份éªè¯ + èå + ä¸å¡é»è¾ + æ°æ®è®¿é® â |
| | | âââââââââââââââââââ¬ââââââââââââââââââââââââ |
| | | â |
| | | âââââââââââââââââââ¼ââââââââââââââââââââââââ |
| | | â Data Layer â |
| | | â Oracle / SQL Server â |
| | | âââââââââââââââââââââââââââââââââââââââââââ |
| | | ``` |
| | | |
| | | ### 7.2 æ ¸å¿è®¾è®¡æ¨¡å¼ |
| | | |
| | | #### æ¨¡å¼ 1: HTTP 请æ±éä¸å |
| | | |
| | | **ææ API è°ç¨ç»ä¸ä½¿ç¨ `UtilityHelper.HttpPost()`**: |
| | | |
| | | ```csharp |
| | | public static string HttpPost(string url, string method, string param, bool isLoading = true) |
| | | { |
| | | // 1. æ¼æ¥å®æ´ URL (WebApiUrl + url) |
| | | // 2. æ·»å Bearer Token 认è¯å¤´ |
| | | // 3. æ¾ç¤º Loading å¯¹è¯æ¡ (å¯é) |
| | | // 4. åé POST è¯·æ± |
| | | // 5. è¿å JSON å符串 |
| | | // 6. è¶
æ¶æ¶é´: 150 ç§ |
| | | } |
| | | ``` |
| | | |
| | | **使ç¨ç¤ºä¾**: |
| | | |
| | | ```csharp |
| | | string jsonParam = JsonConvert.SerializeObject(new { |
| | | pageIndex = 1, |
| | | pageSize = 50 |
| | | }); |
| | | |
| | | string result = UtilityHelper.HttpPost( |
| | | "BasicData/Customer/GetListPage", // ç¸å¯¹è·¯å¾ |
| | | "GetListPage", // æ¹æ³å |
| | | jsonParam, // JSON åæ° |
| | | true // æ¾ç¤ºå è½½æ¡ |
| | | ); |
| | | |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | if (dy.code == 200) { |
| | | // å¤çæ°æ® |
| | | } |
| | | ``` |
| | | |
| | | #### æ¨¡å¼ 2: 卿çªä½å è½½ (åå°) |
| | | |
| | | ```csharp |
| | | // å¨ FrmMain.cs ä¸ |
| | | private void LoadForm(string namespacePath) |
| | | { |
| | | // éè¿å½å空é´è·¯å¾å建çªä½å®ä¾ |
| | | string fullName = $"Gs.DevApp.DevFrm.{namespacePath}"; |
| | | Form form = (Form)Assembly.GetExecutingAssembly().CreateInstance(fullName); |
| | | |
| | | if (form != null) |
| | | { |
| | | // é
置为åçªä½ |
| | | form.FormBorderStyle = FormBorderStyle.None; |
| | | form.TopLevel = false; |
| | | form.Dock = DockStyle.Fill; |
| | | |
| | | // æ·»å å° TabPage |
| | | XtraTabPage tabPage = new XtraTabPage(); |
| | | tabPage.Text = form.Text; |
| | | tabPage.Controls.Add(form); |
| | | xtraTabControl.TabPages.Add(tabPage); |
| | | xtraTabControl.SelectedTabPage = tabPage; |
| | | |
| | | form.Show(); |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **好å¤**: |
| | | - èåç»æå®å
¨ç±å端æ§å¶ |
| | | - æ éä¿®æ¹ä»£ç å³å¯è°æ´èå |
| | | - æ¯æå¨ææéæ§å¶ |
| | | |
| | | #### æ¨¡å¼ 3: TabPage ç¼åæºå¶ |
| | | |
| | | ```csharp |
| | | // 鲿¢é夿å¼åä¸çªä½ |
| | | private Dictionary<string, XtraTabPage> tabPageDict = new Dictionary<string, XtraTabPage>(); |
| | | |
| | | private void OpenForm(string formName) |
| | | { |
| | | if (tabPageDict.ContainsKey(formName)) |
| | | { |
| | | // å·²åå¨,æ¿æ´»ç°æ Tab |
| | | xtraTabControl.SelectedTabPage = tabPageDict[formName]; |
| | | } |
| | | else |
| | | { |
| | | // æ°å»º Tab |
| | | XtraTabPage newPage = CreateNewTabPage(formName); |
| | | tabPageDict[formName] = newPage; |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | #### æ¨¡å¼ 4: ç¶åçªä½äºä»¶éä¿¡ |
| | | |
| | | **åçªä½è§¦åç¶çªä½å·æ°**: |
| | | |
| | | ```csharp |
| | | // å¨åçªä½ä¸ |
| | | UpdateParentEventArgs args = new UpdateParentEventArgs(this, "Refresh"); |
| | | // 触åäºä»¶,éç¥ç¶çªä½ |
| | | |
| | | // å¨ç¶çªä½ä¸ |
| | | private void ChildForm_UpdateParent(object sender, UpdateParentEventArgs e) |
| | | { |
| | | if (e.Action == "Refresh") |
| | | { |
| | | LoadData(); // å·æ°æ°æ® |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | #### æ¨¡å¼ 5: æ å CRUD çªä½æ¨¡æ¿ |
| | | |
| | | **å
¸åçªä½ç»æ**: |
| | | |
| | | ```csharp |
| | | public partial class Frm_Customer : DevExpress.XtraEditors.XtraForm |
| | | { |
| | | private UcToolBarMenu ucToolBar; // å·¥å
·æ (å¢å æ¹æ¥) |
| | | private UcPageBar ucPageBar; // å页æ§ä»¶ |
| | | private GridControl gridControl; // æ°æ®è¡¨æ ¼ |
| | | |
| | | private void InitializeForm() |
| | | { |
| | | // 1. åå§åå·¥å
·æ |
| | | ucToolBar.AddClick += BtnAdd_Click; |
| | | ucToolBar.EditClick += BtnEdit_Click; |
| | | ucToolBar.DeleteClick += BtnDelete_Click; |
| | | ucToolBar.RefreshClick += BtnRefresh_Click; |
| | | |
| | | // 2. åå§åå页 |
| | | ucPageBar.PageChanged += LoadData; |
| | | |
| | | // 3. å è½½æ°æ® |
| | | LoadData(); |
| | | } |
| | | |
| | | private void LoadData() |
| | | { |
| | | string jsonParam = JsonConvert.SerializeObject(new { |
| | | pageIndex = ucPageBar.CurrentPage, |
| | | pageSize = ucPageBar.PageSize |
| | | }); |
| | | |
| | | string result = UtilityHelper.HttpPost( |
| | | "BasicData/Customer/GetListPage", |
| | | "GetListPage", |
| | | jsonParam |
| | | ); |
| | | |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | if (dy.code == 200) |
| | | { |
| | | gridControl.DataSource = dy.data; |
| | | ucPageBar.TotalRecords = dy.totalCount; |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 8. å·¥å
·ç±»ä¸å
Œ
±ç»ä»¶ |
| | | |
| | | ### 8.1 UtilityHelper.cs - æ ¸å¿å·¥å
·ç±» |
| | | |
| | | #### HTTP è¯·æ± |
| | | |
| | | ```csharp |
| | | // æ å POST è¯·æ± |
| | | string result = UtilityHelper.HttpPost( |
| | | "User/UserLogin", // ç¸å¯¹è·¯å¾ |
| | | "UserLogin", // æ¹æ³å |
| | | jsonParam, // JSON åæ° |
| | | true // æ¾ç¤ºå è½½æ¡ |
| | | ); |
| | | ``` |
| | | |
| | | #### JSON è§£æ |
| | | |
| | | ```csharp |
| | | // è§£æä¸º dynamic 对象 |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | |
| | | // è§£æä¸ºåé¡µæ°æ®è¡¨ |
| | | DataTable dt = UtilityHelper.ReturnToTablePage(result); |
| | | ``` |
| | | |
| | | #### Grid åå§å |
| | | |
| | | ```csharp |
| | | // åå§åè¡¨æ ¼æ§ä»¶ |
| | | UtilityHelper.InitGridControl( |
| | | gridControl, |
| | | gridView, |
| | | columns, // åå®ä¹ |
| | | dataSource, // æ°æ®æº |
| | | allowEdit: false, |
| | | allowDelete: false |
| | | ); |
| | | ``` |
| | | |
| | | ### 8.2 LogHelper.cs - æ¥å¿å·¥å
· |
| | | |
| | | ```csharp |
| | | // è®°å½ä¿¡æ¯æ¥å¿ |
| | | LogHelper.WriteLog("ç¨æ·ç»å½æå", LogHelper.LogType.Info); |
| | | |
| | | // è®°å½é误æ¥å¿ |
| | | LogHelper.WriteLog($"API è°ç¨å¤±è´¥: {ex.Message}", LogHelper.LogType.Error); |
| | | |
| | | // è®°å½è¦å |
| | | LogHelper.WriteLog("æ°æ®å¼å¸¸,使ç¨é»è®¤å¼", LogHelper.LogType.Warning); |
| | | ``` |
| | | |
| | | **æ¥å¿æä»¶ä½ç½®**: `logs/{yyyy-MM-dd}.log` |
| | | |
| | | ### 8.3 MsgHelper.cs - æ¶æ¯æç¤º |
| | | |
| | | ```csharp |
| | | // æåæç¤º |
| | | MsgHelper.ShowSuccess("æä½æå!"); |
| | | |
| | | // é误æç¤º |
| | | MsgHelper.ShowError("æä½å¤±è´¥,请éè¯!"); |
| | | |
| | | // è¦åæç¤º |
| | | MsgHelper.ShowWarning("æ°æ®ä¸å®æ´!"); |
| | | |
| | | // ç¡®è®¤å¯¹è¯æ¡ |
| | | if (MsgHelper.ShowConfirm("ç¡®å®è¦å é¤å?") == DialogResult.Yes) |
| | | { |
| | | // æ§è¡å é¤ |
| | | } |
| | | ``` |
| | | |
| | | ### 8.4 Toast.cs - è½»éæç¤º |
| | | |
| | | ```csharp |
| | | // æ¾ç¤º 3 ç§æç¤º |
| | | Toast.Show("ä¿åæå", 3); |
| | | |
| | | // æ¾ç¤ºèªå®ä¹æ¶é¿ |
| | | Toast.Show("æ°æ®å·²æ´æ°", 5); // 5 ç§ |
| | | ``` |
| | | |
| | | ### 8.5 å¯å¤ç¨æ§ä»¶ |
| | | |
| | | #### UcToolBarMenu - å·¥å
·æ æ§ä»¶ |
| | | |
| | | ```csharp |
| | | UcToolBarMenu toolBar = new UcToolBarMenu(); |
| | | toolBar.AddClick += (s, e) => { /* æ°å¢ */ }; |
| | | toolBar.EditClick += (s, e) => { /* ç¼è¾ */ }; |
| | | toolBar.DeleteClick += (s, e) => { /* å é¤ */ }; |
| | | toolBar.RefreshClick += (s, e) => { /* å·æ° */ }; |
| | | toolBar.ExportClick += (s, e) => { /* å¯¼åº */ }; |
| | | ``` |
| | | |
| | | #### UcPageBar - å页æ§ä»¶ |
| | | |
| | | ```csharp |
| | | UcPageBar pageBar = new UcPageBar(); |
| | | pageBar.PageSize = 50; |
| | | pageBar.TotalRecords = 1000; |
| | | pageBar.PageChanged += (s, e) => { |
| | | LoadData(pageBar.CurrentPage, pageBar.PageSize); |
| | | }; |
| | | ``` |
| | | |
| | | #### UcDictionarySelect - æ°æ®åå
¸ä¸æ |
| | | |
| | | ```csharp |
| | | UcDictionarySelect cmbStatus = new UcDictionarySelect(); |
| | | cmbStatus.DictionaryType = "OrderStatus"; // åå
¸ç±»å |
| | | cmbStatus.LoadData(); |
| | | ``` |
| | | |
| | | #### UcLook* - æ°æ®æ¥æ¾æ§ä»¶ |
| | | |
| | | **60+ æ¥æ¾æ§ä»¶,è¦çææä¸»æ°æ®**: |
| | | |
| | | ```csharp |
| | | // å®¢æ·æ¥æ¾ |
| | | UcLookCustomer lookCustomer = new UcLookCustomer(); |
| | | lookCustomer.ShowDialog(); |
| | | string customerId = lookCustomer.SelectedId; |
| | | string customerName = lookCustomer.SelectedName; |
| | | |
| | | // ç©ææ¥æ¾ |
| | | UcLookItems lookItems = new UcLookItems(); |
| | | lookItems.ShowDialog(); |
| | | string itemId = lookItems.SelectedId; |
| | | |
| | | // ä»åºæ¥æ¾ |
| | | UcLookWarehouse lookWarehouse = new UcLookWarehouse(); |
| | | lookWarehouse.ShowDialog(); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 9. é
置说æ |
| | | |
| | | ### 9.1 App.config å
³é®é
ç½® |
| | | |
| | | **ä½ç½®**: `Gs.DevApp\App.config` (è¿è¡æ¶ä¸º `Gs.DevApp.exe.config`) |
| | | |
| | | #### æ ¸å¿é
置项 |
| | | |
| | | ```xml |
| | | <appSettings> |
| | | <!-- å端 API å°å (å¿
é¡»é
ç½®) --> |
| | | <add key="WebApiUrl" value="http://192.168.0.51:8081/" /> |
| | | |
| | | <!-- 产ååç§° --> |
| | | <add key="ProductName" value="G-MES V2.0" /> |
| | | |
| | | <!-- çæ¬å· --> |
| | | <add key="Version" value="0.1" /> |
| | | |
| | | <!-- æ¥å¿ç®å½ (ç¸å¯¹è·¯å¾æç»å¯¹è·¯å¾) --> |
| | | <add key="LogPath" value="logs" /> |
| | | |
| | | <!-- åé¡µå¤§å° --> |
| | | <add key="PageSize" value="50" /> |
| | | |
| | | <!-- å¯ç¨èªå¨æ´æ° (0=ç¦ç¨, 1=å¯ç¨) --> |
| | | <add key="IsAutoUpdater" value="0" /> |
| | | |
| | | <!-- èªå¨æ´æ°é
ç½®æä»¶ URL --> |
| | | <add key="AutoUpdaterXml" value="http://192.168.0.51:8086/AutoUpdater/AutoUpdater.xml" /> |
| | | |
| | | <!-- Toast æç¤ºæ¡æ¾ç¤ºæ¶é¿ (ç§) --> |
| | | <add key="ToastSeconds" value="5" /> |
| | | |
| | | <!-- æ°´æ£è¶
æ¶æ¶é´ (ç§) --> |
| | | <add key="AsyncSeconds" value="2" /> |
| | | |
| | | <!-- æ¯å¦å¯ç¨æ°´æ£åå·¥ä½ç åè½ (0=ç¦ç¨, 1=å¯ç¨) --> |
| | | <add key="IsWater" value="0" /> |
| | | |
| | | <!-- IQC ç§°é读åè¶
æ¶ (毫ç§) --> |
| | | <add key="IqcGetWeight" value="3000" /> |
| | | |
| | | <!-- 宿¶é®ä»¶åéé´é (毫ç§) --> |
| | | <add key="TimingMailInterval" value="10000" /> |
| | | </appSettings> |
| | | ``` |
| | | |
| | | ### 9.2 ç¨æ·è®¾ç½® (èªå¨ä¿å) |
| | | |
| | | ```xml |
| | | <userSettings> |
| | | <Gs.DevApp.Properties.Settings> |
| | | <!-- ç¨æ·å (è®°ä½å¯ç åè½) --> |
| | | <setting name="userName" serializeAs="String"> |
| | | <value /> |
| | | </setting> |
| | | |
| | | <!-- å¯ç (å å¯åå¨) --> |
| | | <setting name="userPwd" serializeAs="String"> |
| | | <value /> |
| | | </setting> |
| | | |
| | | <!-- è®°ä½å¯ç --> |
| | | <setting name="remember" serializeAs="String"> |
| | | <value>False</value> |
| | | </setting> |
| | | |
| | | <!-- åä½è®¾ç½® --> |
| | | <setting name="fontSizeName" serializeAs="String"> |
| | | <value>å®ä½,10</value> |
| | | </setting> |
| | | |
| | | <!-- æ¯å¦å¯ç¨ç§°éåè½ --> |
| | | <setting name="isWeight" serializeAs="String"> |
| | | <value>False</value> |
| | | </setting> |
| | | </Gs.DevApp.Properties.Settings> |
| | | </userSettings> |
| | | ``` |
| | | |
| | | ### 9.3 é¨ç½²åå¿
æ¹é
ç½® |
| | | |
| | | **å¼åç¯å¢ â ç产ç¯å¢**: |
| | | |
| | | | é
置项 | å¼åç¯å¢ | ç产ç¯å¢ | |
| | | |--------|----------|----------| |
| | | | `WebApiUrl` | `http://192.168.0.51:8081/` | `http://your-server:port/` | |
| | | | `IsAutoUpdater` | `0` (ç¦ç¨) | `1` (å¯ç¨) | |
| | | | `AutoUpdaterXml` | å
ç½å°å | ç产ç¯å¢ URL | |
| | | | `LogPath` | `logs` | 建议使ç¨å
Œ
±ç®å½ | |
| | | |
| | | --- |
| | | |
| | | ## 10. é¨ç½²æå |
| | | |
| | | ### 10.1 æå»º Release çæ¬ |
| | | |
| | | ```bash |
| | | # æ¸
çå¹¶éæ°æå»º |
| | | msbuild Gs.DevApp\Gs.DevApp.csproj /t:Clean |
| | | msbuild Gs.DevApp\Gs.DevApp.csproj /t:Rebuild /p:Configuration=Release /p:Platform="Any CPU" |
| | | ``` |
| | | |
| | | ### 10.2 åå¸ç®å½ç»æ |
| | | |
| | | ``` |
| | | Gs.DevApp.exe # 主ç¨åº |
| | | Gs.DevApp.exe.config # é
ç½®æä»¶ (å¿
须修æ¹) |
| | | DevExpress.*.dll # DevExpress ç»ä»¶ |
| | | CefSharp.*.dll # CefSharp ç»ä»¶ |
| | | AutoUpdater.NET.dll # èªå¨æ´æ°ç»ä»¶ |
| | | Newtonsoft.Json.dll # JSON åº |
| | | Oracle.ManagedDataAccess.dll # Oracle é©±å¨ |
| | | x86/ # CefSharp x86 æ¬å°åº (å¿
é¡») |
| | | x64/ # CefSharp x64 æ¬å°åº (å¿
é¡») |
| | | locales/ # CefSharp è¯è¨å
|
| | | logs/ # æ¥å¿ç®å½ (è¿è¡æ¶å建) |
| | | ``` |
| | | |
| | | ### 10.3 使ç¨å®è£
ç¨åº |
| | | |
| | | 1. æå¼ `Gs.Setup\Gs.Setup.vdproj` |
| | | 2. é
ç½®å®è£
ç¨åºå±æ§: |
| | | - **ProductName**: G-MES V2.0 |
| | | - **Manufacturer**: èå® |
| | | - **Version**: ä¸ App.config ä¿æä¸è´ |
| | | 3. å³é®é¡¹ç® â çæ |
| | | 4. è¾åº: `Gs.Setup\Release\Gs.Setup.msi` |
| | | |
| | | ### 10.4 èªå¨æ´æ°é
ç½® |
| | | |
| | | #### AutoUpdater.xml ç¤ºä¾ |
| | | |
| | | ```xml |
| | | <?xml version="1.0" encoding="utf-8"?> |
| | | <update> |
| | | <version>0.2.0.0</version> |
| | | <url>http://your-server/updates/Gs.DevApp_v0.2.0.0.zip</url> |
| | | <changelog> |
| | | <![CDATA[ |
| | | <h3>çæ¬ 0.2.0.0 æ´æ°å
容</h3> |
| | | <ul> |
| | | <li>æ°å¢ï¼æ¡ç æ¹éæå°åè½</li> |
| | | <li>ä¼åï¼ä»åºåºå
¥åºæµç¨</li> |
| | | <li>ä¿®å¤ï¼è´¨æ£æ°æ®ä¿å失败é®é¢</li> |
| | | </ul> |
| | | ]]> |
| | | </changelog> |
| | | <mandatory>false</mandatory> |
| | | </update> |
| | | ``` |
| | | |
| | | #### å¯ç¨èªå¨æ´æ° |
| | | |
| | | å¨ `App.config` ä¸: |
| | | |
| | | ```xml |
| | | <add key="IsAutoUpdater" value="1" /> |
| | | <add key="AutoUpdaterXml" value="http://your-server/updates/AutoUpdater.xml" /> |
| | | ``` |
| | | |
| | | ### 10.5 é¨ç½²æ£æ¥æ¸
å |
| | | |
| | | - [ ] ä¿®æ¹ `WebApiUrl` 为ç产ç¯å¢å°å |
| | | - [ ] æ£æ¥ `IsAutoUpdater` é
ç½® |
| | | - [ ] ç¡®ä¿ `x86/` å `x64/` ç®å½å®æ´ |
| | | - [ ] æµè¯æ°æ®åºè¿æ¥ |
| | | - [ ] éªè¯æ¥å¿ç®å½åæé |
| | | - [ ] æµè¯èªå¨æ´æ°åè½ |
| | | - [ ] æ£æ¥ DevExpress 许å¯è¯ |
| | | - [ ] å¤ä»½é
ç½®æä»¶ |
| | | |
| | | --- |
| | | |
| | | ## 11. å¼åè§è䏿佳å®è·µ |
| | | |
| | | ### 11.1 代ç ç»ç»è§è |
| | | |
| | | #### æ°å¢æ¨¡å |
| | | |
| | | ``` |
| | | DevFrm/ |
| | | âââ YourModule/ # æ°æ¨¡åç®å½ |
| | | âââ Frm_Main.cs # 主çªä½ |
| | | âââ Frm_Edit.cs # ç¼è¾çªä½ |
| | | âââ Dlg_Select.cs # éæ©å¯¹è¯æ¡ |
| | | âââ Models/ # æ¬å°æ¨¡å (å¯é) |
| | | ``` |
| | | |
| | | #### å½åè§è |
| | | |
| | | | ç±»å | å½åè§å | ç¤ºä¾ | |
| | | |------|----------|------| |
| | | | 主çªä½ | `Frm_{ä¸å¡å}` | `Frm_Customer.cs` | |
| | | | ç¼è¾çªä½ | `Frm_{ä¸å¡å}Edit` | `Frm_CustomerEdit.cs` | |
| | | | å¯¹è¯æ¡ | `Dlg_{ä¸å¡å}` | `Dlg_SelectCustomer.cs` | |
| | | | ç¨æ·æ§ä»¶ | `Uc{åè½å}` | `UcToolBarMenu.cs` | |
| | | |
| | | ### 11.2 API è°ç¨è§è |
| | | |
| | | #### â
æ£ç¡®åæ³ |
| | | |
| | | ```csharp |
| | | // ä½¿ç¨ UtilityHelper.HttpPost |
| | | string jsonParam = JsonConvert.SerializeObject(new { |
| | | id = customerId |
| | | }); |
| | | |
| | | string result = UtilityHelper.HttpPost( |
| | | "BasicData/Customer/GetById", |
| | | "GetById", |
| | | jsonParam |
| | | ); |
| | | |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | if (dy.code == 200) |
| | | { |
| | | // å¤çæ°æ® |
| | | } |
| | | else |
| | | { |
| | | MsgHelper.ShowError(dy.msg.ToString()); |
| | | LogHelper.WriteLog($"API Error: {dy.msg}", LogHelper.LogType.Error); |
| | | } |
| | | ``` |
| | | |
| | | #### â éè¯¯åæ³ |
| | | |
| | | ```csharp |
| | | // ä¸è¦ç´æ¥ä½¿ç¨ HttpClientãWebRequest ç |
| | | // ä¸è¦è·³è¿é误å¤ç |
| | | // ä¸è¦å¿½ç¥æ¥å¿è®°å½ |
| | | ``` |
| | | |
| | | ### 11.3 å¼å¸¸å¤çè§è |
| | | |
| | | ```csharp |
| | | try |
| | | { |
| | | // ä¸å¡é»è¾ |
| | | string result = UtilityHelper.HttpPost(...); |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | |
| | | if (dy.code == 200) |
| | | { |
| | | // æåå¤ç |
| | | } |
| | | else |
| | | { |
| | | // API è¿åé误 |
| | | MsgHelper.ShowError(dy.msg.ToString()); |
| | | LogHelper.WriteLog($"API Error: {dy.msg}", LogHelper.LogType.Error); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // æè·å¼å¸¸ |
| | | MsgHelper.ShowError($"æä½å¤±è´¥: {ex.Message}"); |
| | | LogHelper.WriteLog($"Exception in {MethodName}: {ex}", LogHelper.LogType.Error); |
| | | } |
| | | ``` |
| | | |
| | | ### 11.4 UI æ´æ°è§è |
| | | |
| | | #### é¿æ¶é´æä½ä½¿ç¨åå°çº¿ç¨ |
| | | |
| | | ```csharp |
| | | // ä½¿ç¨ BackgroundWorker |
| | | BackgroundWorker worker = new BackgroundWorker(); |
| | | worker.DoWork += (s, e) => { |
| | | // èæ¶æä½ |
| | | e.Result = PerformLongOperation(); |
| | | }; |
| | | worker.RunWorkerCompleted += (s, e) => { |
| | | // UI æ´æ° |
| | | UpdateUI(e.Result); |
| | | }; |
| | | worker.RunWorkerAsync(); |
| | | ``` |
| | | |
| | | #### é¿å
UI é»å¡ |
| | | |
| | | ```csharp |
| | | // â é»å¡ UI çº¿ç¨ |
| | | Thread.Sleep(5000); |
| | | |
| | | // â
使ç¨å®æ¶å¨æå¼æ¥ |
| | | Timer timer = new Timer(); |
| | | timer.Interval = 5000; |
| | | timer.Tick += (s, e) => { |
| | | timer.Stop(); |
| | | // æ§è¡æä½ |
| | | }; |
| | | timer.Start(); |
| | | ``` |
| | | |
| | | ### 11.5 æ§ä»¶å¤ç¨è§è |
| | | |
| | | #### ä¼å
使ç¨ç°ææ§ä»¶ |
| | | |
| | | ```csharp |
| | | // â
ä½¿ç¨ UcLookCustomer |
| | | UcLookCustomer lookCustomer = new UcLookCustomer(); |
| | | if (lookCustomer.ShowDialog() == DialogResult.OK) |
| | | { |
| | | txtCustomerId.Text = lookCustomer.SelectedId; |
| | | txtCustomerName.Text = lookCustomer.SelectedName; |
| | | } |
| | | |
| | | // â ä¸è¦èªå·±åéæ©å¯¹è¯æ¡ |
| | | // å·²æ 60+ UcLook* æ§ä»¶å¯ç¨ |
| | | ``` |
| | | |
| | | ### 11.6 æ¥å¿è®°å½è§è |
| | | |
| | | ```csharp |
| | | // å
³é®æä½ååè®°å½æ¥å¿ |
| | | LogHelper.WriteLog($"å¼å§ä¿åå®¢æ·æ°æ®: {customerId}", LogHelper.LogType.Info); |
| | | |
| | | try |
| | | { |
| | | string result = UtilityHelper.HttpPost(...); |
| | | LogHelper.WriteLog($"ä¿åæå: {customerId}", LogHelper.LogType.Info); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.WriteLog($"ä¿å失败: {ex.Message}", LogHelper.LogType.Error); |
| | | } |
| | | ``` |
| | | |
| | | ### 11.7 é
置管çè§è |
| | | |
| | | ```csharp |
| | | // â
ä»é
ç½®æä»¶è¯»å |
| | | string apiUrl = ConfigurationManager.AppSettings["WebApiUrl"]; |
| | | int pageSize = int.Parse(ConfigurationManager.AppSettings["PageSize"]); |
| | | |
| | | // â ä¸è¦ç¡¬ç¼ç |
| | | // string apiUrl = "http://192.168.0.51:8081/"; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 12. 常è§é®é¢ä¸æ
éææ¥ |
| | | |
| | | ### 12.1 æå»ºå¤±è´¥ |
| | | |
| | | #### é®é¢: DevExpress ç»ä»¶æ¾ä¸å° |
| | | |
| | | **åå **: DevExpress æªå®è£
æ NuGet æºæªé
ç½® |
| | | |
| | | **è§£å³æ¹æ¡**: |
| | | |
| | | 1. å®è£
DevExpress v22.2 |
| | | 2. é
ç½® NuGet æº: |
| | | ``` |
| | | å·¥å
· â NuGet å
管çå¨ â ç¨åºå
管çå¨è®¾ç½® â ç¨åºå
æº |
| | | æ·»å : https://nuget.devexpress.com/<your_feed_key>/api |
| | | ``` |
| | | 3. è¿å NuGet å
: |
| | | ```bash |
| | | nuget restore GsDevSolution.sln |
| | | ``` |
| | | |
| | | #### é®é¢: CefSharp æ¬å°åºå 载失败 |
| | | |
| | | **åå **: `x86/` æ `x64/` ç®å½ç¼ºå¤± |
| | | |
| | | **è§£å³æ¹æ¡**: |
| | | |
| | | ç¡®ä¿è¾åºç®å½å
å«: |
| | | ``` |
| | | x86/ |
| | | libcef.dll |
| | | chrome_elf.dll |
| | | ... |
| | | x64/ |
| | | libcef.dll |
| | | chrome_elf.dll |
| | | ... |
| | | ``` |
| | | |
| | | ### 12.2 è¿è¡æ¶é误 |
| | | |
| | | #### é®é¢: "æ æ³è¿æ¥å° API æå¡å¨" |
| | | |
| | | **ææ¥æ¥éª¤**: |
| | | |
| | | 1. æ£æ¥ `App.config` ä¸ç `WebApiUrl` |
| | | 2. ä½¿ç¨æµè§å¨è®¿é® API å°å |
| | | 3. æ£æ¥ç½ç»è¿æ¥ |
| | | 4. æ¥çæ¥å¿æä»¶ `logs/{yyyy-MM-dd}.log` |
| | | |
| | | #### é®é¢: "ç»å½å¤±è´¥" |
| | | |
| | | **ææ¥æ¥éª¤**: |
| | | |
| | | 1. æ£æ¥ç¨æ·åå¯ç æ¯å¦æ£ç¡® |
| | | 2. æ£æ¥å端 API æ¯å¦æ£å¸¸ |
| | | 3. æ¥çæ¥å¿æä»¶ä¸çéè¯¯ä¿¡æ¯ |
| | | 4. æ£æ¥æ°æ®åºè¿æ¥ |
| | | |
| | | #### é®é¢: "çªä½å 载失败" |
| | | |
| | | **åå **: åå°å建çªä½å¤±è´¥ |
| | | |
| | | **ææ¥æ¥éª¤**: |
| | | |
| | | 1. æ£æ¥å½åç©ºé´æ¯å¦æ£ç¡® |
| | | 2. æ£æ¥çªä½ç±»æ¯å¦ä¸º public |
| | | 3. æ£æ¥çªä½æ¯å¦ææ åæé 彿° |
| | | 4. æ¥çæ¥å¿ä¸çå¼å¸¸å æ |
| | | |
| | | ### 12.3 æ§è½é®é¢ |
| | | |
| | | #### é®é¢: Grid å è½½æ
¢ |
| | | |
| | | **ä¼åæ¹æ¡**: |
| | | |
| | | 1. å¯ç¨å页 (ä½¿ç¨ `UcPageBar`) |
| | | 2. åå°åæ° |
| | | 3. ç¦ç¨ä¸å¿
è¦ç Grid ç¹æ§ |
| | | 4. 使ç¨èææ¨¡å¼ (å¤§æ°æ®éæ¶) |
| | | |
| | | ```csharp |
| | | gridView.OptionsView.ColumnAutoWidth = false; |
| | | gridView.BestFitColumns(); |
| | | ``` |
| | | |
| | | #### é®é¢: API 请æ±è¶
æ¶ |
| | | |
| | | **è§£å³æ¹æ¡**: |
| | | |
| | | 1. æ£æ¥ç½ç»ç¶åµ |
| | | 2. ä¼åå端æ¥è¯¢ |
| | | 3. å¢å è¶
æ¶æ¶é´ (ä¿®æ¹ `UtilityHelper.cs` ä¸çè¶
æ¶è®¾ç½®) |
| | | |
| | | ### 12.4 æ¥å¿ç¸å
³ |
| | | |
| | | #### æ¥çæ¥å¿ |
| | | |
| | | **ä½ç½®**: `logs/{yyyy-MM-dd}.log` |
| | | |
| | | **æ¥å¿çº§å«**: |
| | | - `[Info]` - ä¿¡æ¯ |
| | | - `[Warning]` - è¦å |
| | | - `[Error]` - é误 |
| | | |
| | | #### æ¥å¿åå
¥å¤±è´¥ |
| | | |
| | | **åå **: æ åæé |
| | | |
| | | **è§£å³æ¹æ¡**: |
| | | |
| | | 1. 以管çå身份è¿è¡ |
| | | 2. ä¿®æ¹ `LogPath` 为å
Œ
±ç®å½ |
| | | 3. èµäºåºç¨ç®å½åæé |
| | | |
| | | ### 12.5 æ°æ®åºè¿æ¥é®é¢ |
| | | |
| | | #### Oracle è¿æ¥å¤±è´¥ |
| | | |
| | | **æ£æ¥**: |
| | | - Oracle.ManagedDataAccess.dll æ¯å¦åå¨ |
| | | - è¿æ¥å符串æ¯å¦æ£ç¡® |
| | | - ç½ç»æ¯å¦å¯è¾¾ |
| | | |
| | | #### SQL Server è¿æ¥å¤±è´¥ |
| | | |
| | | **æ£æ¥**: |
| | | - SQL Server æ¯å¦å¯ç¨ TCP/IP |
| | | - ç«¯å£æ¯å¦å¼æ¾ (é»è®¤ 1433) |
| | | - é²ç«å¢è§å |
| | | |
| | | ### 12.6 èªå¨æ´æ°é®é¢ |
| | | |
| | | #### æ´æ°æ£æ¥å¤±è´¥ |
| | | |
| | | **ææ¥**: |
| | | |
| | | 1. æ£æ¥ `AutoUpdaterXml` URL æ¯å¦å¯è®¿é® |
| | | 2. æ£æ¥ XML æ ¼å¼æ¯å¦æ£ç¡® |
| | | 3. æ£æ¥ç½ç»è¿æ¥ |
| | | 4. æ¥çæ¥å¿æä»¶ |
| | | |
| | | #### æ´æ°ä¸è½½å¤±è´¥ |
| | | |
| | | **ææ¥**: |
| | | |
| | | 1. æ£æ¥æ´æ°å
URL æ¯å¦ææ |
| | | 2. æ£æ¥ç£çç©ºé´ |
| | | 3. æ£æ¥åæé |
| | | |
| | | --- |
| | | |
| | | ## éå½ A: å端 API ç«¯ç¹ |
| | | |
| | | ### 认è¯ä¸ç¨æ· |
| | | |
| | | | ç«¯ç¹ | 说æ | |
| | | |------|------| |
| | | | `User/UserLogin` | ç¨æ·ç»å½ | |
| | | | `User/GetUserLoginInfo` | è·åç¨æ·ä¿¡æ¯åèå | |
| | | | `User/SetUserOrg` | 忢ç»ç» | |
| | | |
| | | ### ç»ç»ä¸èå |
| | | |
| | | | ç«¯ç¹ | 说æ | |
| | | |------|------| |
| | | | `Organization/GetListPage` | è·åç»ç»å表 | |
| | | | `MenuAction/GetModelByNameSpace` | æ ¹æ®å½å空é´è·åçªä½ä¿¡æ¯ | |
| | | |
| | | ### éç¨å表æ¥è¯¢ |
| | | |
| | | **模å¼**: `{Module}/{Entity}/GetListPage` |
| | | |
| | | 示ä¾: |
| | | - `BasicData/Customer/GetListPage` - 客æ·å表 |
| | | - `BasicData/Items/GetListPage` - ç©æå表 |
| | | - `Warehouse/Inventory/GetListPage` - åºåå表 |
| | | |
| | | --- |
| | | |
| | | ## éå½ B: å¿«éåè |
| | | |
| | | ### 常ç¨å½ä»¤ |
| | | |
| | | ```bash |
| | | # è¿å NuGet å
|
| | | nuget restore GsDevSolution.sln |
| | | |
| | | # Debug æå»º |
| | | msbuild GsDevSolution.sln /p:Configuration=Debug |
| | | |
| | | # Release æå»º |
| | | msbuild GsDevSolution.sln /p:Configuration=Release |
| | | |
| | | # è¿è¡ç¨åº |
| | | Gs.DevApp\bin\Debug\Gs.DevApp.exe |
| | | ``` |
| | | |
| | | ### 常ç¨ä»£ç çæ®µ |
| | | |
| | | ```csharp |
| | | // API è°ç¨ |
| | | string result = UtilityHelper.HttpPost("Module/Action", "Action", jsonParam); |
| | | dynamic dy = UtilityHelper.ReturnToDynamic(result); |
| | | |
| | | // æ¶æ¯æç¤º |
| | | MsgHelper.ShowSuccess("æä½æå"); |
| | | MsgHelper.ShowError("æä½å¤±è´¥"); |
| | | |
| | | // æ¥å¿è®°å½ |
| | | LogHelper.WriteLog("æ¶æ¯å
容", LogHelper.LogType.Info); |
| | | |
| | | // Toast æç¤º |
| | | Toast.Show("æç¤ºå
容", 3); |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## éå½ C: ç¸å
³ææ¡£ |
| | | |
| | | - **CLAUDE.md** - Claude Code AI è¾
å©å¼åæå |
| | | - **DEVFRM_GUIDE.md** - DevFrm 模åè¯¦ç»æå |
| | | - **ANALYSIS_REPORT.md** - æ¶æåææ¥å |
| | | - **DevFrm详ç»åæ.md** - 模ååæ (䏿) |
| | | |
| | | --- |
| | | |
| | | ## èç³»ä¸æ¯æ |
| | | |
| | | å¦éææ¯æ¯æææ¥åé®é¢,请èç³»å¼åå¢éã |
| | | |
| | | **æåæ´æ°**: 2025-10-16 |
| | | |
| | | --- |
| | | |
| | | *æ¬ææ¡£éé¡¹ç®æç»æ´æ°,å»ºè®®å®ææ¥çææ°çæ¬ã* |