baotian
2024-06-04 b959135a1139fb66646523d92e5bd20c5910f283
最新版代码
已添加2,109个文件
525980 ■■■■■ 文件已修改
DBScript/01_DDL_TABLE.sql 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DBScript/02_DDL_TABLE_Edit.sql 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DBScript/ScadaTableUpdate.sql 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/DLL/HslCommunication.dll 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/DLL/Newtonsoft.Json.dll 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/DLL/Newtonsoft.Json.xml 10752 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/DLL/log4net.dll 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/App.config 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/CommonManager.cs 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/DataCaptureColumnDictManager.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/DataCaptureConfigManager.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/SystemValue.cs 2461 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs 2075 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceLogManager.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/Dao/CommonDao.cs 553 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/Dao/CommonService.cs 404 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/Dao/_system~.ini 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/EFHelp.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/ICommonEntity.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/IService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/QueryParam.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DBDataCapture/AlarmLogManager.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP05.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0501.cs 472 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0502.cs 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0503.cs 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0504.cs 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0506.cs 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0507.cs 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1001.cs 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1002.cs 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1003.cs 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1004.cs 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1005.cs 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1006.cs 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1007.cs 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2001.cs 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2002.cs 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2003.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2004.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2005.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2006.cs 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3001.cs 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3002.cs 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3003.cs 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3004.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3005.cs 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3006.cs 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3007.cs 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3501.cs 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3502.cs 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3503.cs 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3504.cs 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3505.cs 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3506.cs 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3507.cs 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP7001.cs 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP7005.cs 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP7006.cs 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP7007.cs 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8001.cs 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8002.cs 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8003.cs 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8004.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8005.cs 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8006.cs 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8007.cs 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/HMIBeartBeatMonitor.cs 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/HMI_WorkpieceReading.cs 358 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/HMI_WorkpieceWrite.cs 409 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/PLCDataCapture/PLCFactory.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/PLCDataCapture/PLCManger.cs 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/PLCDataCapture/PLCService.cs 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/PLCDataCapture/Siemens_HslCommunicationService.cs 433 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/AlertMonitor.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_01.cs 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_02.cs 710 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_03.cs 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_04.cs 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_05.cs 357 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_06.cs 267 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_07.cs 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP0501.cs 350 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP1002.cs 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP1003.cs 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP1004.cs 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP3002.cs 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP6002.cs 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/HMIBeartBeatMonitor.cs 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/HMI_WorkpieceReading.cs 408 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/HMI_WorkpieceWrite.cs 447 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Properties/AssemblyInfo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Properties/Resources.Designer.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Properties/Resources.resx 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/CSVHelper.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/ComboBoxHelper.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/ConfigHelper.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/DataCache.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/DateTimeHelper.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/EntityPropHelper.cs 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/EnumberHelper.cs 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FileDirectoryEnumerator.cs 569 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FileHelper.cs 399 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FileOperationHelper.cs 470 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FindFiles.cs 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FolderHelper.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/Log4Net/C_LogWriter.cs 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/Log4Net/Log4netHelper.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/LogTextHelper.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/RandomHelper.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/RegexExtension.cs 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/log4net_iWare.config 494 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/packages.config 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCapture.sln 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/App.config 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.Designer.cs 2824 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.cs 2408 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.resx 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormTest.Designer.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormTest.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormTest.resx 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Program.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/AssemblyInfo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/Resources.Designer.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/Resources.resx 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/Settings.Designer.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/Settings.settings 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/iWare_SCADA_DataCaptureV3.csproj 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/packages.config 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/App.Config 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/EnumberEntity.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Enums.cs 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/ListItem.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MessageModel.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MiddleModel/ThreadStatusMonitorMiddle.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MiddleModel/WorkPieceLogMiddle.cs 333 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/PLCDataCapture/BasePlcParam.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/PLCDataCapture/HslCommunicationParam.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Properties/AssemblyInfo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/SystemValue.cs 2430 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/DataCaptureColumnConfig.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/DataCaptureConfig.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/DbModel.cs 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/EquipmentBaseInfo.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/EquipmentCurrentMonitor.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/EquipmentWorkingLog.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/KnifeToolBaseInfo.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/KnifeToolDataMonitor.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/QualityDataInfo.cs 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/SystemLog.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/WorkPieceInfo.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/WorkPieceInfoLog.cs 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/WorkPieceLog.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/DataCaptureColumnConfig.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/DataCaptureConfig.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/DbModel.cs 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/EquipmentBaseInfo.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/EquipmentCurrentMonitor.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/EquipmentFailureCode.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/EquipmentWorkingLog.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolBaseInfo.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolDataMonitor.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolEquipmentInfo.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolEquipmentInfoLog.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolEquipmentMonitor.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolEquipmentUpdateLog.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/Model1.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfo.cs 318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfoLog.cs 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/SystemLog.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/ThreadStatusMonitor.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfo.cs 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfoLog.cs 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceLog.cs 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceProcess.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/v_get_equipment_alert.cs 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/AlarmLog.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/CNCStatus.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/Count.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/CumulativeTime.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/CurrentToolNumber.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/FeedAndSpindle.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/Load.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/OEE.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/Postion.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/ProgramBlock.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/ProgramInfo.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/SCModel.cs 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/TimeData.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/iWare_SCADA_Model.csproj 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/packages.config 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/DataCaptureColumnConfig.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/DataCaptureConfig.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/EquipmentBaseInfo.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/EquipmentCurrentMonitor.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/EquipmentWorkingLog.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/Model1.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/Model2.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/Model3.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/QualityDataInfo.cs 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/QualityDataInfoLog.cs 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/WorkPieceInfo.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/WorkPieceInfoLog.cs 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/WorkPieceLog.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/.gitattributes 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/.gitignore 368 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/README.en.md 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/README.md 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Entity/LocationView.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Mapper/CustomMapper.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Mapper/DataHandler.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/AccessInterfaceService.cs 875 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/Dto/AccessWorPieceInfoOutput.cs 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/Dto/AccessWorkPieceInfoInput.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/IAccessInterfaceService.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/Map/AccessInterfaceMap.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterfaceLog/AccessInterfaceLogService.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterfaceLog/Dto/AddAccessInterfaceLogInput.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterfaceLog/IAccessInterfaceLogService.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/DataCaptureColumnConfigService.cs 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/Dto/DataCaptureColumnConfigDto.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/Dto/DataCaptureColumnConfigInput.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/Dto/DataCaptureColumnConfigOutput.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/IDataCaptureColumnConfigService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/Map/DataCaptureColumnConfigMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/DataCaptureConfigService.cs 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/Dto/DataCaptureConfigDto.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/Dto/DataCaptureConfigInput.cs 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/Dto/DataCaptureConfigOutput.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/IDataCaptureConfigService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/Map/DataCaptureConfigMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/Dto/EquipmentBaseInfoDto.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/Dto/EquipmentBaseInfoInput.cs 374 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/Dto/EquipmentBaseInfoOutput.cs 347 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/EquipmentBaseInfoService.cs 307 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/IEquipmentBaseInfoService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/Map/EquipmentBaseInfoMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/Dto/EquipmentCurrentMonitorDto.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/Dto/EquipmentCurrentMonitorInput.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/Dto/EquipmentCurrentMonitorOutput.cs 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/EquipmentCurrentMonitorService.cs 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/IEquipmentCurrentMonitorService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/Map/EquipmentCurrentMonitorMapper.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/Dto/EquipmentStatusAnalyseDto.cs 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/Dto/EquipmentStatusAnalyseInput.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/Dto/EquipmentStatusAnalyseOutput.cs 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/EquipmentStatusAnalyseService.cs 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/IEquipmentStatusAnalyseService.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/Map/EquipmentStatusAnalyseMapper.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/Dto/EquipmentWorkingLogDto.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/Dto/EquipmentWorkingLogInput.cs 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/Dto/EquipmentWorkingLogOutput.cs 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/EquipmentWorkingLogService.cs 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/IEquipmentWorkingLogService.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/Dto/KnifeToolBaseInfoDto.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/Dto/KnifeToolBaseInfoInput.cs 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/Dto/KnifeToolBaseInfoOutput.cs 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/IKnifeToolBaseInfoService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/KnifeToolBaseInfoService.cs 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/Map/KnifeToolBaseInfoMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/Dto/KnifeToolDataMonitorDto.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/Dto/KnifeToolDataMonitorInput.cs 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/Dto/KnifeToolDataMonitorOutput.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/IKnifeToolDataMonitorService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/KnifeToolDataMonitorService.cs 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/Map/KnifeToolDataMonitorMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/Dto/KnifeToolEquipmentInfoDto.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/Dto/KnifeToolEquipmentInfoInput.cs 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/Dto/KnifeToolEquipmentInfoOutput.cs 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/IKnifeToolEquipmentInfoService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/KnifeToolEquipmentInfoService.cs 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/Map/KnifeToolEquipmentInfoMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/Dto/KnifeToolEquipmentMonitorDto.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/Dto/KnifeToolEquipmentMonitorInput.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/Dto/KnifeToolEquipmentMonitorOutput.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/IKnifeToolEquipmentMonitorService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/KnifeToolEquipmentMonitorService.cs 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/Map/KnifeToolEquipmentMonitorMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/Dto/KnifeToolEquipmentUpdateLogDto.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/Dto/KnifeToolEquipmentUpdateLogInput.cs 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/Dto/KnifeToolEquipmentUpdateLogOutput.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/IKnifeToolEquipmentUpdateLogService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/KnifeToolEquipmentUpdateLogService.cs 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/Map/KnifeToolEquipmentUpdateLogMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/Dto/KnifeToolUsageAnalysisDto.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/Dto/KnifeToolUsageAnalysisInput.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/Dto/KnifeToolUsageAnalysisOutput.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/IKnifeToolUsageAnalysisService.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/KnifeToolUsageAnalysisService.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/Map/KnifeToolUsageAnalysisMapper.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Pda/Dto/WorkPieceByOP80NewCodeInput.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Pda/PdaService.cs 495 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/Dto/ProductionPlanInfoDto.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/Dto/ProductionPlanInfoInput.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/Dto/ProductionPlanInfoOutput.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/IProductionPlanInfoService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/Map/ProductionPlanInfoMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/ProductionPlanInfoService.cs 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/Dto/QualityDataInfoDto.cs 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/Dto/QualityDataInfoInput.cs 1236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/Dto/QualityDataInfoOutput.cs 1160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/IQualityDataInfoService.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/QualityDataInfoService.cs 412 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/Dto/ShiftInfoDto.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/Dto/ShiftInfoInput.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/Dto/ShiftInfoOutput.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/IShiftInfoService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/Map/ShiftInfoMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/ShiftInfoService.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/App/Dto/AppInput.cs 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/App/Dto/AppOutput.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/App/ISysAppService.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/App/SysAppService.cs 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/AuthService.cs 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/Dto/LoginInput.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/Dto/LoginOutput.cs 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/Dto/RegistInput.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/IAuthService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Base/BaseService.cs 405 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Base/Dto/BaseDto.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Cache/ISysCacheService.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Cache/SysCacheService.cs 309 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/ClickWord/ClickWordCaptcha.cs 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/ClickWord/ClickWordCaptchaInput.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/ClickWord/ClickWordCaptchaResult.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/ClickWord/IClickWordCaptcha.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/General/GeneralCaptcha.cs 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/General/GeneralCaptchaInput.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/General/IGeneralCaptcha.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/CodeGenConfigService.cs 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/CodeGenService.cs 544 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/CodeGenConfig.cs 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/CodeGenInput.cs 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/CodeGenModel.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/CodeGenOutput.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/DatabaseOutput.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/TableColumnOuput.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/TableOutput.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/XnCodeGenOutput.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/ICodeGenConfigService.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/ICodeGenService.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Config/Dto/ConfigInput.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Config/ISysConfigService.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Config/SysConfigService.cs 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/Dto/DictDataInput.cs 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/Dto/DictDataOutput.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/Dto/DictTreeOutput.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/Dto/DictTypeInput.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/ISysDictDataService.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/ISysDictTypeService.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/SysDictDataService.cs 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/SysDictTypeService.cs 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/Dto/EmpExtOrgPosOutput.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/Dto/EmpOutput.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/Dto/EmpOutput2.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/Dto/EmpPosOutput.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/ISysEmpExtOrgPosService.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/ISysEmpPosService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/ISysEmpService.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/SysEmpExtOrgPosService.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/SysEmpPosService.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/SysEmpService.cs 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Enum/Dto/EnumDataInput.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Enum/Dto/EnumDataOutput.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Enum/ISysEnumDataService.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Enum/SysEnumDataService.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/File/Dto/FileInput.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/File/Dto/FileOutput.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/File/ISysFileService.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/File/SysFileService.cs 374 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormAddDto.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormDto.cs 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormEditDto.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormPageSearch.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormPublishDto.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/FormService.cs 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/IFormService.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Hubs/ChatHub.cs 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Hubs/Dto/MessageinputDto.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Hubs/IChatClient.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/ContrasOutput.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/ContrastLowCode.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/Front_CodeGenerate.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/GenEntity.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/LowCodeInput.cs 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/GenEntityComparer.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/ILowCodeService.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/LowCodeService.cs 539 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/Dto/AntDesignTreeNode.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/Dto/MenuInput.cs 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/Dto/MenuOutput.cs 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/Dto/MenuTreeOutput.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/ISysMenuService.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/SysMenuService.cs 452 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Message/ISendMessageService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Message/SendMessageService.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Monitor/IMachineService.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Monitor/MachineService.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/Dto/NoticeBase.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/Dto/NoticeDetailOutput.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/Dto/NoticeInput.cs 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/Dto/NoticeReceiveOutput.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/ISysNoticeService.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/ISysNoticeUserService.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/SysNoticeService.cs 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/SysNoticeUserService.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/OnlineUser/Dto/OnlineUserOutput.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/OnlineUser/ISysOnlineUserService.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/OnlineUser/SysOnlineUserService.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/Dto/OrgInput.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/Dto/OrgOutput.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/Dto/OrgTreeNode.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/ISysOrgService.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/SysOrgService.cs 374 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Pos/Dto/PosInput.cs 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Pos/ISysPosService.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Pos/SysPosService.cs 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/Dto/RoleInput.cs 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/Dto/RoleOutput.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/ISysRoleDataScopeService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/ISysRoleMenuService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/ISysRoleService.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/SysRoleDataScopeService.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/SysRoleMenuService.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/SysRoleService.cs 319 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Timer/Dto/JobInput.cs 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Timer/Dto/JobOutput.cs 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Timer/ISysTimerService.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/Timer/SysTimerService.cs 318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/CurrentUserInfo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/Dto/AuthToken.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/Dto/AuthUserInput.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/Dto/UserInput.cs 364 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/Dto/UserOutput.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/ISysUserDataScopeService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/ISysUserRoleService.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/ISysUserService.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/SysUserDataScopeService.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/SysUserRoleService.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/SysUserService.cs 473 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/Dto/ThreadStatusMonitorDto.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/Dto/ThreadStatusMonitorInput.cs 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/Dto/ThreadStatusMonitorOutput.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/IThreadStatusMonitorService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/Map/ThreadStatusMonitorMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/ThreadStatusMonitorService.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/Dto/WmsAreaDto.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/Dto/WmsAreaInput.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/Dto/WmsAreaOutput.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/IWmsAreaService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/Map/WmsAreaMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/WmsAreaService.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerDto.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerInput.cs 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerOutput.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/IWmsContainerService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/Map/WmsContainerMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/WmsContainerService.cs 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialDto.cs 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialInput.cs 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialOutput.cs 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/IWmsMaterialService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/Map/WmsMaterialMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceDto.cs 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceInput.cs 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceOutput.cs 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/IWmsPlaceService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/Map/WmsPlaceMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/WmsPlaceService.cs 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsSeed/WmsSeed.cs 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/Dto/View_AccessDetailsDto.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/Dto/View_AccessDetailsInput.cs 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/Dto/View_AccessDetailsOutput.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/IView_AccessDetailsService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/Map/View_AccessDetailsMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/View_AccessDetailsService.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsIndex/Dto/IndexInput.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsIndex/Dto/IndexOutput.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsIndex/IIndexCountService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsIndex/IndexCountService.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsLocationView/Dto/LocationViewInput.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsLocationView/Dto/LocationViewOutput.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsLocationView/IlocationViewService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsLocationView/locationViewService.cs 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/Dto/PadBindEntranceInput.cs 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/Dto/PadWmsMaterialContainerDto.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/Dto/PdaBindEntranceDto.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/Dto/PdaBindEntranceOutput.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/PdaBindEntranceService.cs 512 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/ExWare/Dto/ExWarehouseInput.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/ExWare/ExWarePDAService.cs 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/BindEntranceService.cs 512 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/Dto/BindEntranceDto.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/Dto/BindEntranceInput.cs 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/Dto/BindEntranceOutput.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/Dto/WmsMaterialContainerDto.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/IBindEntranceService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Dto/ExWarehouseInput.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Dto/WmsMaterialStockDto.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Dto/WmsMaterialStockInput.cs 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Dto/WmsMaterialStockOutput.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/ExWarehouseService.cs 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/IExWarehouseService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Map/WmsMaterialStockMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/Dto/WmsTaskDto.cs 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/Dto/WmsTaskInput.cs 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/Dto/WmsTaskOutput.cs 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/IWmsTaskService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/Map/WmsTaskMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/WmsTaskService.cs 345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/Dto/WorkPieceInfoDto.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/Dto/WorkPieceInfoInput.cs 364 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/Dto/WorkPieceInfoOutput.cs 439 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/IWorkPieceInfoService.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/Map/WorkPieceInfoMapper.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/WorkPieceInfoService.cs 345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/Dto/WorkPieceOutboundDto.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/Dto/WorkPieceOutboundInput.cs 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/Dto/WorkPieceOutboundOutput.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/IWorkPieceOutboundService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/Map/WorkPieceOutboundMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/WorkPieceOutboundService.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Dto/WorkPieceProcessDto.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Dto/WorkPieceProcessInput.cs 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Dto/WorkPieceProcessOutput.cs 734 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/IWorkPieceProcessService.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Map/WorkPieceProcessMapper.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/WorkPieceProcessService.cs 341 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/Dto/YieldAnalysisDto.cs 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/Dto/YieldAnalysisInput.cs 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/Dto/YieldAnalysisOutput.cs 410 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/IYieldAnalysisService.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/Map/YieldAnalysisMapper.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/YieldAnalysisService.cs 560 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/SpareTimes/SpareTimeDemo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/Startup.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/applicationsettings.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/iWare.Wms.Application.csproj 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Application/iWare.Wms.Application.xml 16557 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Const/ClaimConst.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Const/CommonConst.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/Access/AccessInterfaceLog.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/DEntityBase.cs 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/IDataPermissions.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/DataCaptureColumnConfig.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/DataCaptureConfig.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/EquipmentCurrentMonitor.cs 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/EquipmentStatusAnalyse.cs 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/EquipmentWorkingLog.cs 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/Equipmentbaseinfo.cs 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/InfoAirport.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/KnifeToolBaseInfo.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/KnifeToolDataMonitor.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/KnifeToolEquipmentMonitor.cs 387 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/KnifeToolUsageAnalysis.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/ProductionPlanInfo.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/QualityDataInfo.cs 352 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/QualityDataInfoLog.cs 355 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/ShiftInfo.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/SystemLog.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/TeamsAndGroups.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/ThreadStatusMonitor.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/V_GetEquipmentAlert.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceInfo.cs 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceInfoLog.cs 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceLog.cs 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceOutBound.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceProcess.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/YieldAnalysis.cs 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysApp.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysCodeGen.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysCodeGenConfig.cs 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysCodeModular.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysConfig.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysDictData.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysDictType.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysEmp.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysEmpExtOrgPos.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysEmpPos.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysFile.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysForm.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLogAudit.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLogEx.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLogOp.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLogVis.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLowCode.cs 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLowCodeDataBase.cs 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysMenu.cs 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysNotice.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysNoticeUser.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysOnlineUser.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysOrg.cs 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysPos.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysRole.cs 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysRoleDataScope.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysRoleMenu.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysTimer.cs 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysUser.cs 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysUserDataScope.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysUserRole.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsBase/WmsArea.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsBase/WmsContainer.cs 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsBase/WmsMaterial.cs 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsBase/WmsPlace.cs 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsCount/WmsMaterialStock.cs 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsCount/v_AccessDetails.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsJob/WmsContainerPlace.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsJob/WmsMaterialContainer.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsJob/WmsTask.cs 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/AdminType.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/CommonStatus.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/DataOpType.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/DataScopeType.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/EnumAuditStatus.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/EnumEquipmentCurrentState.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/EnumQualityErrorInfoType.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/EnumQuantityState.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/Enums.cs 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/ErrorCode.cs 455 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/FileLocation.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/FormDesignType.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/Gender.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/HttpMethod.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/HttpStatusCode.cs 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/LoginType.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/MenuOpenType.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/MenuType.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/MenuWeight.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/MessageType.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/NoticeStatus.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/NoticeType.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/NoticeUserStatus.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/QueryTypeEnum.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/RequestTypeEnum.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/RoleTypeEnum.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/WmsAreaEnum.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/WmsContainerEnum.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/WmsMaterialEnum.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/WmsTaskEnum.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Enum/YesOrNot.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/EventSubscriber/LogEventSubscriber.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Extension/CsRedisExtensions.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Extension/DictionaryExtensions.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Extension/FakeDeleteExtensions.cs 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Extension/LambdaExpressionBuilder.cs 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Extension/NewtonsoftJsonSerializerProvider .cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Extension/QueryableExstenstions.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Filter/DisableOpLogAttribute.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Filter/LogExceptionHandler.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Filter/RequestActionFilter.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Options/RefreshTokenSettingOptions.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysAppSeedData.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysConfigSeedData.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysDictDataSeedData.cs 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysDictTypeSeedData.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysEmpExtOrgPos.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysEmpPosSeedData.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysEmpSeedData.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysMenuSeedData.cs 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysOrgSeedData.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysPosSeedData.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysRoleSeedData.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysTimerSeedData.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysUserDataScopeSeedData.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysUserRoleSeedData.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysUserSeedData.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsAreaSeedData.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsContainerPlaceSeedData.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsContainerSeedData.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsMaterialContainerSeedData.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsMaterialSeedData.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsMaterialStockSeedData.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsPlaceSeedData.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsTaskSeedData.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Service/BaseId.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/CodeGenUtil.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/DataCompareUtil.cs 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/DataConvertUtil.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/DateTimeOffSetToDateTime.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/DictCacheUtil.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/EntityPropHelper.cs 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/EnumEntity.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/EnumUtil.cs 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/ExcelUtil.cs 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/FileUtil.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/IPUtil.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/JsonUtil.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Dto/Front_FileDto.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Enum/FieldType.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/EssentialFactor.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Factor/DateFactor.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Factor/DecimalFactor.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Factor/Interface/IFactor.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Factor/TextFactor.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Att/FrontTypeAttribute.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Att/FrontTypeBindDatabaseAttribute.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Code/AutoCode_Dynamic.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Code/AutoCode_Front.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Code/AutoCode_FrontModel.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Code/FileUrl_Code.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Alert.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Batch.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Button.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Card.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Cascader.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Checkbox.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Date.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Divider.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Editor.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Grid.cs 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Html.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Input.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Number.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Radio.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Rate.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Select.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_SelectInputList.cs 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Slider.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Switch.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Table.cs 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Tabs.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Text.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Textarea.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Time.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_TreeSelect.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_UploadFile.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_UploadImg.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Interface/IFront.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Interface/IFrontDynamic.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Interface/IFrontDynamicOptions.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Interface/IFrontLayout.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Base.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Config.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Convert.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Dynamic.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Model.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Option.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Rule.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Tree_Option.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/NotFoundFrontException.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/ViewDynamic.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/SysFileServiceEx.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/MachineUtil.cs 261 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/PageInputOrder.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/PagedUtil.cs 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/ReflectionUtil.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/ShellUtil.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/StringUtil.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/TreeBuildUtil.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/TypeUtil.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/XnInputBase.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/XnPageResult.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/Util/XnRestfulResultProvider.cs 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/applicationconfig.json 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Core/iWare.Wms.Core.csproj 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Database.Migrations/Migrations/20240112013535_v1.0.1.Designer.cs 14528 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Database.Migrations/Migrations/20240112013535_v1.0.1.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs 14526 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Database.Migrations/iWare.Wms.Database.Migrations.csproj 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Database.Migrations/note/note.txt 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/DbContexts/DefaultDbContext.cs 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/DbContexts/MultiTenantDbContext.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/DbContexts/SCADAGatewayDbContext.cs 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/Startup.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/dbsettings.json 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/iWare.Wms.EntityFramework.Core.csproj 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Core/Handlers/JwtHandler.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Core/ServiceExtension/BStyleServiceExtension.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Core/ServiceExtension/SnowflakeIdServiceExtension.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Core/Startup.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Core/iWare.Wms.Web.Core.csproj 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/.config/dotnet-tools.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/Controllers/HomeController.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/Program.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/Properties/launchSettings.json 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/Views/Home/Index.cshtml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/Views/Shared/_Layout.cshtml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/Views/_ViewImports.cshtml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/Views/_ViewStart.cshtml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/appsettings.json 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/iWare.Wms.Web.Entry.csproj 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Font/font1559.ttf 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/5.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/6.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/7.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/8.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Image/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template.zip 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Dto.cs.cshtml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Dto.cs.vm 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Entity.cs.cshtml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Entity.cs.vm 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/IService.cs.cshtml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/IService.cs.vm 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Input.cs.cshtml 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Input.cs.vm 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Manage.js.cshtml 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Manage.js.vm 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Mapper.cs.cshtml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Mapper.cs.vm 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Output.cs.cshtml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Output.cs.vm 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Service.cs.cshtml 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Service.cs.vm 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/addForm.vue.cshtml 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/addForm.vue.vm 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/editForm.vue.cshtml 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/editForm.vue.vm 374 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/index.vue.cshtml 337 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/index.vue.vm 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/273667564548165.jpeg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290520762908741.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290540885852229.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290541680373829.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290541696553029.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290541720457285.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543139135557.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543159849029.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543276712005.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543306960965.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543630598213.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543643689029.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290544533905477.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290544557092933.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/351604299395141.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/352893017190469.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/352918594232389.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/avatar2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/app.7633af46.css 16465 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/app.7633af46.css.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/chunk-b7a16696.677134ab.css 845 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/chunk-b7a16696.677134ab.css.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/chunk-vendors.4659697d.css 30745 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/chunk-vendors.4659697d.css.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/fail.8d6df989.css 1703 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/fail.8d6df989.css.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/site.css 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/theme-colors-ef7df4e0.css 1385 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/user.fa7ae686.css 723 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/user.fa7ae686.css.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/bg.110420cf.png 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/logo.a0cbaad2.png 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/map.3425b845.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/map.ae82c867.png 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/map2.48889afd.png 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/welcome.164ddad4.png 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/index.html 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/app.413ecdbc.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/app.413ecdbc.js.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/chunk-b7a16696.e8717d8b.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/chunk-b7a16696.e8717d8b.js.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/chunk-vendors.c9111d8d.js 1003 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/chunk-vendors.c9111d8d.js.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/fail.c1daacfd.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/fail.c1daacfd.js.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/site.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/user.6ca40864.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/user.6ca40864.js.gz 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/LICENSE 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css 4997 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css 4996 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css 427 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css 424 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css 4866 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css 4857 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.css 11221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css 11197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js 6780 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js 4977 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.js 5026 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js 432 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/LICENSE.md 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/dist/additional-methods.js 1158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/dist/additional-methods.min.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/dist/jquery.validate.js 1601 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery/LICENSE.txt 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery/dist/jquery.js 10872 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery/dist/jquery.min.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery/dist/jquery.min.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/loading.css 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/loading.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/option2/html_code_segment.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/option2/loading.css 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/option2/loading.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
iWara.SCADA.Code/iWare.Wms.sln 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/.browserslistrc 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/.editorconfig 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/.env 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/.env.development 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/.env.preview 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/.eslintrc.js 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/.gitignore 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/.prettierrc 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/.travis.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/Dockerfile 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/LICENSE 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/WMS基准版前端文档.docx 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/babel.config.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/config/plugin.config.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/docker/docker-compose.yml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/docker/nginx/Dockerfile 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/docker/nginx/nginx.conf 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/docker/nginx/vhost/default.conf 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/jest.config.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/jsconfig.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/package-lock.json 39545 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/package.json 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/postcss.config.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/avatar2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/config.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/index.html 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/loading/loading.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/loading/loading.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/loading/option2/html_code_segment.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/loading/option2/loading.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/loading/option2/loading.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/public/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/App.vue 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/gen/codeGenerateManage.js 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/gen/lowCodeManage.js 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/gen/sysCodeGenerateConfigManage.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/BasicDataMaintenance.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/BindEntranceManage.js 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/DataCaptureColumnConfigManage.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/DataCaptureConfigManage.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/EquipmentBaseInfoManage.js 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/EquipmentCurrentMonitorManage.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/EquipmentStatusAnalyseManage.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/EquipmentWorkingLogManage.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/ExWarehouseManage.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/KnifeToolBaseInfoManage.js 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/KnifeToolDataMonitorManage.js 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/KnifeToolEquipmentUpdateLog.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/KnifeToolUsageAnalysisManage.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/LocationViewManage.js 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/QualityDataInfoManage.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/README.md 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/ShiftManage.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/SysTenantManage.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/ThreadStatusMonitorManage.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/View_AccessDetailsManage.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/WmsAreaManage.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/WmsContainerManage.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/WmsMaterialManage.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/WmsPlaceManage.js 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/WmsTaskManage.js 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/WorkPieceOutboundManage.js 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/WorkPieceProcessManage.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/YieldAnalysisManage.js 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/YieldMaintenanceManage.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/ceManage.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/main/cesManage.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/README.md 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/appManage.js 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/auditorworkflowManage.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/configManage.js 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/dictDataManage.js 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/dictManage.js 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/emailManage.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/enumManage.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/fileManage.js 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/formDesignmanage.js 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/homeManage.js 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/logManage.js 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/loginManage.js 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/machineManage.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/menuManage.js 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/noticeManage.js 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/noticeReceivedManage.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/onlineUserManage.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/orgManage.js 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/posManage.js 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/roleManage.js 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/smsManage.js 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/tenantManage.js 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/timersManage.js 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/userManage.js 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/api/modular/system/workflowManage.js 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/assets/icons/bx-analyse.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/assets/login_bk.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/assets/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/assets/logo.svg 475 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/assets/logo2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/assets/notice.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/assets/welcome.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/assets/welcome/blue.svg 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/assets/welcome/inner.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/ArticleListContent/ArticleListContent.vue 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/ArticleListContent/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/AvatarList/Item.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/AvatarList/List.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/AvatarList/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/AvatarList/index.less 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/AvatarList/index.md 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/Bar.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/ChartCard.vue 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/Liquid.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/MiniArea.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/MiniBar.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/MiniProgress.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/MiniSmoothArea.vue 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/Radar.vue 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/RankList.vue 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/TagCloud.vue 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/TransferBar.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/Trend.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/chart.less 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Charts/smooth.area.less 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/ChooseSiteModal.vue 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/CountDown/CountDown.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/CountDown/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/CountDown/index.md 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/DepartmentSelect/DepartmentSelect.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/DepartmentSelect/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/DescriptionList/DescriptionList.vue 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/DescriptionList/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Dialog.js 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Editor/QuillEditor.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Editor/WangEditor.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Ellipsis/Ellipsis.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Ellipsis/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Ellipsis/index.md 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Exception/ExceptionPage.vue 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Exception/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Exception/type.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/FooterToolbar/FooterToolBar.vue 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/FooterToolbar/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/FooterToolbar/index.less 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/FooterToolbar/index.md 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/GlobalFooter/GlobalFooter.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/GlobalFooter/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/GlobalHeader/GlobalHeader.vue 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/GlobalHeader/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/IconSelector/IconSelector.vue 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/IconSelector/README.md 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/IconSelector/icons.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/IconSelector/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Loading.js 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Menu/SideMenu.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Menu/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Menu/menu.js 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Menu/menu.render.js 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/MultiTab/MultiTab.vue 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/MultiTab/events.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/MultiTab/index.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/MultiTab/index.less 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/NProgress/nprogress.less 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/NoticeIcon/NoticeIcon.vue 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/NoticeIcon/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/NumberInfo/NumberInfo.vue 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/NumberInfo/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/NumberInfo/index.less 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/NumberInfo/index.md 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/PageHeader/PageHeader.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/PageHeader/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/PageLoading/index.jsx 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Result/Result.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Result/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Search/GlobalSearch.jsx 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Search/index.less 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/SettingDrawer/SettingDrawer.vue 360 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/SettingDrawer/SettingItem.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/SettingDrawer/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/SettingDrawer/settingConfig.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/SettingDrawer/themeColor.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/StandardFormRow/StandardFormRow.vue 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/StandardFormRow/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Table/README.md 338 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Table/columnSetting.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Table/index.js 432 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Table/index.less 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/TagSelect/TagSelectOption.jsx 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/TagSelect/index.jsx 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/TextArea/index.jsx 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/TextArea/style.less 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Tree/Tree.jsx 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Trend/Trend.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Trend/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Trend/index.less 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/Trend/index.md 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/UserSelect/UserSelect.vue 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/UserSelect/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/_util/util.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/global.less 516 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/index.js 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/index.less 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/tools/Breadcrumb.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/tools/DetailList.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/tools/HeadInfo.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/tools/LangSelect.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/tools/Logo.vue 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/tools/TwoStepCaptcha.vue 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/tools/UserMenu.vue 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/tools/index.js 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/verifition/Verify.vue 473 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/verifition/Verify/VerifyPoints.vue 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/verifition/Verify/VerifySlide.vue 374 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/verifition/utils/ase.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/verifition/utils/axios.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/verifition/utils/util.js 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/components/xnComponents/XCard.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/config/defaultSettings.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/config/router.config.js 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/core/bootstrap.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/core/directives/action.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/core/icons.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/core/lazy_lib/components_use.js 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/core/lazy_use.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/core/use.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/layouts/BasicLayout.vue 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/layouts/BlankLayout.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/layouts/Iframe.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/layouts/PageView.vue 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/layouts/RouteView.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/layouts/UserLayout.vue 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/layouts/index.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/main.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/mock/index.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/mock/services/article.js 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/mock/services/auth.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/mock/services/manage.js 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/mock/services/other.js 973 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/mock/services/tagCloud.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/mock/services/user.js 768 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/mock/util.js 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/permission.js 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/router/generator-routers.js 263 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/router/index.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/store/getters.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/store/index.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/store/modules/app.js 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/store/modules/async-router.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/store/modules/permission.js 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/store/modules/user.js 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/store/mutation-types.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/applocation.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/axios.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/device.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/domUtil.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/filter.js 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/helper/permission.js 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/messagesend.js 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/mixin.js 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/permissions.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/request.js 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/routeConvert.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/socket.js 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/util.js 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/utils/utils.less 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/404.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/Home.vue 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/gen/codeGenerate/addForm.vue 381 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/gen/codeGenerate/assembly.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/gen/codeGenerate/editForm.vue 385 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/gen/codeGenerate/fkModal.vue 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/gen/codeGenerate/index.vue 306 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/gen/codeGenerate/indexConfig.vue 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/gen/lowCode/addForm.vue 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/gen/lowCode/editForm.vue 628 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/gen/lowCode/index.vue 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/BasicDataMaintenance/index.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/BindEntrance/index.vue 486 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/BindEntrance/inputLayout.vue 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/BindEntrance/searchBox.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/DataCaptureColumnConfig/addForm.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/DataCaptureColumnConfig/editForm.vue 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/DataCaptureColumnConfig/index.vue 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/DataCaptureConfig/addForm.vue 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/DataCaptureConfig/editForm.vue 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/DataCaptureConfig/index.vue 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentBaseInfo/addForm.vue 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentBaseInfo/editForm.vue 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentBaseInfo/index.vue 355 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentCurrentMonitor/index.vue 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentCurrentMonitor/modules/flexItem.vue 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentCurrentMonitor/modules/tab.vue 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentStatusAnalyse/api/getData.js 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentStatusAnalyse/index.vue 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentStatusAnalyse/modules/Echarts.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/EquipmentWorkingLog/index.vue 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/ExWarehouse/index.vue 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/FaultFreetimeAnalysis/index.vue 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/FaultFreetimeAnalysis/modules/Echarts.vue 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolBaseInfo/addForm.vue 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolBaseInfo/editForm.vue 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolBaseInfo/index.vue 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolDataAction/index.vue 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolDataAction/modules/addEditForm.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolDataAction/modules/toolDetail.vue 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolDataAction/modules/toolOff.vue 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolDataAction/modules/toolOnline.vue 329 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolDataMonitor/index.vue 261 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolEquipmentUpdateLog/index.vue 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolUsageAnalysis/api/getData.js 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolUsageAnalysis/index.vue 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolUsageAnalysis/modules/Echarts copy.vue 267 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/KnifeToolUsageAnalysis/modules/Echarts.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/LocationView/DetailDrawer.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/LocationView/SearchForm.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/LocationView/index.vue 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/OEEManagement/index.vue 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/OEEManagement/modules/Echarts.vue 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/QualityDataInfo/index.vue 506 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/QualityDataInfo/modules/Tab.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/README.md 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/ShiftManagement/addOrEditForm.vue 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/ShiftManagement/index.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/SysTenant/addForm.vue 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/SysTenant/editForm.vue 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/SysTenant/index.vue 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/ThreadStatusMonitor/index.vue 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/View_AccessDetails/addForm.vue 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/View_AccessDetails/editForm.vue 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/View_AccessDetails/index.vue 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsArea/addForm.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsArea/editForm.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsArea/index.vue 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsBindIn/index.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsContainer/addForm.vue 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsContainer/editForm.vue 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsContainer/index.vue 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsMaterial/addForm.vue 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsMaterial/editForm.vue 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsMaterial/index.vue 319 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsPlace/addForm.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsPlace/editForm.vue 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsPlace/index.vue 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsTask/InfoModal.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsTask/PriorityModal.vue 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsTask/addForm.vue 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsTask/editForm.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WmsTask/index.vue 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WorkPieceInfo/editForm.vue 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WorkPieceInfo/index.vue 353 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WorkPieceOutbound/addForm.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WorkPieceOutbound/editForm.vue 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WorkPieceOutbound/index.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WorkPieceProcess copy/index.vue 390 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WorkPieceProcess copy/modules/qualityDetail.vue 321 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WorkPieceProcess/index.vue 486 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/WorkPieceProcess/modules/qualityDetail.vue 1525 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/YieldAnalysis/api/getData.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/YieldAnalysis/index.vue 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/YieldAnalysis/modules/Echarts.vue 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/YieldMaintenance/index.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/YieldMaintenance/modules/addEditForm.vue 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/YieldMaintenance/modules/yield.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/LabelTag.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/TopMiddleCmp.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/cards.vue 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/digitalFlop.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/img/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/img/map.jpg 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/img/map.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/img/map2.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/img/mapCenterPoint.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/img/mapPoint.png 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/index.vue 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/left1.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/left12.vue 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/left2.vue 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/left22.vue 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/left23.vue 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/middle1.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/middle2.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/middle3.vue 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/rankingBoard.vue 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/right1.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/right2.vue 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/right3.vue 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/right4.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/scrollBoard.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/main/screenMonitor/topHeader.vue 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/README.md 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/center/Index.vue 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/center/page/App.vue 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/center/page/Article.vue 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/center/page/Project.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/center/page/index.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/settings/AvatarModal.vue 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/settings/BaseSetting.vue 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/settings/Binding.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/settings/Custom.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/settings/Index.vue 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/settings/Notification.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/settings/Security.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/account/settings/securityItem/updPwd.vue 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/app/addForm.vue 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/app/editForm.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/app/index.vue 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/config/addForm.vue 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/config/editForm.vue 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/config/index.vue 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dashboard/Analysis.vue 385 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dashboard/Monitor.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dashboard/TestWork.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dashboard/Workplace.vue 526 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dict/addForm.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dict/dictdata/addForm.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dict/dictdata/editForm.vue 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dict/dictdata/index.vue 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dict/editForm.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/dict/index.vue 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/email/index.vue 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/exception/403.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/exception/404.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/exception/500.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/file/detailForm.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/file/index.vue 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/file/previewForm.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/formDesign/edit.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/formDesign/index.vue 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/formDesign/list.vue 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/Echarts.vue 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/LineEcharts.vue 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/ModuleA.vue 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/ModuleB.vue 344 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/ModuleC.vue 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/SmoothLineEcharts.vue 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/modules/EquipmentRunStatus.vue 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/modules/ProdlineHealthy.vue 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/modules/ProductionCompletionTrend.vue 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/modules/ProductionStatistics.vue 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/modules/QualityDataTrends.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/index/welcome.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/log/exlog/details.vue 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/log/exlog/index.vue 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/log/oplog/details.vue 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/log/oplog/index.vue 280 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/log/vislog/details.vue 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/log/vislog/index.vue 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/machine/index.vue 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/menu/addForm.vue 612 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/menu/editForm.vue 677 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/menu/index.vue 267 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/myworkflow/auditor.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/myworkflow/components/auditoropera.vue 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/myworkflow/components/viewworkflow.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/myworkflow/create.vue 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/myworkflow/index.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/myworkflow/unauditor.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/notice/addForm.vue 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/notice/detailForm.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/notice/editForm.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/notice/index.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/noticeReceived/detailForm.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/noticeReceived/index.vue 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/onlineUser/index.vue 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/org/addForm.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/org/editForm.vue 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/org/index.vue 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/pos/addForm.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/pos/editForm.vue 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/pos/index.vue 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/role/addForm.vue 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/role/editForm.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/role/index.vue 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/role/roleMenuForm.vue 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/role/roleOrgForm.vue 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/sms/index.vue 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/tenant/addForm.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/tenant/editForm.vue 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/tenant/index.vue 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/tenant/tenantMenuForm.vue 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/timers/addForm.vue 367 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/timers/editForm.vue 390 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/timers/index.vue 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/user/addForm.vue 468 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/user/editForm.vue 494 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/user/index.vue 398 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/user/userOrgForm.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/user/userRoleForm.vue 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/components/builderWorkFlow.vue 443 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/components/nomalWorkFlow.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/components/store/conditionflownode.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/components/store/flowNodeGroup.vue 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/components/store/flowentity.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/components/store/flownodes.js 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/components/store/nodeProperty.vue 388 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/components/store/readme.md 300 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/components/store/sourcenodes.js 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/create.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/edit.vue 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/index.vue 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/system/workflow/startworkflow.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/userLoginReg/Login.vue 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/userLoginReg/Register.vue 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/src/views/userLoginReg/RegisterResult.vue 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/tests/unit/.eslintrc.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/vue.config.js 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iwara-scada-web/webstorm.config.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/.gitignore 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/.hbuilderx/launch.json 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/App.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/README.md 545 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/__json_server_mock__/db.json 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/api/api.js 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/api/common/index.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/api/home/index.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/api/outBound/index.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/api/production/index.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/api/retrospect/index.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/api/shift/index.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/api/unBind/index.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/api/unBindAll/index.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/components/ActionUserRow.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/components/DefaultHeaderPageLayout.vue 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/components/EasyPicker.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/components/EasySelectFormItem.vue 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/components/FullPageLayout.vue 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/components/HeaderPageLayout.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/components/PageHeader.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/components/ScanInputFormItem.vue 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/components/UViewFormSelectPicker.vue 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/config/index.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/config/modules/ajax.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/config/modules/pagination.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/index.html 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/main.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/manifest.json 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/mdImgs/1664329468868.jpg 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/mdImgs/1664329790970.jpg 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/mdImgs/1664330296712.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/mdImgs/1665970038354.jpg 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/package.json 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages.json 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/baseTask/in.vue 599 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/baseTask/out.vue 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/home/detail.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/home/index.vue 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/home/modules/warnContent.vue 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/home/modules/warnItem.vue 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/login/index.vue 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/outBound/index.vue 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/outBound/modules/ScanInputFormItem.vue 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/outBound/modules/content.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/outBound/modules/modalPwd.vue 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/print/bluePrint.js 358 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/print/bluetoothConnection.vue 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/production/addOrEditProd.vue 307 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/production/index.vue 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/retrospect/index.vue 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/retrospect/modules/barContent.vue 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/retrospect/modules/barStatus.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/setting/host.vue 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/shift/addOrEditShift.vue 343 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/shift/index.vue 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/start/index.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBind/index.vue 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBind/modules/barContent.vue 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBind/modules/barStatus.vue 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBind/modules/modalPwd.vue 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBindAll/index.vue 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBindAll/modules/Tab.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBindAll/modules/barContent.vue 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBindAll/modules/barListItem.vue 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBindAll/modules/barStatus.vue 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBindAll/modules/detailModal.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/pages/unBindAll/modules/statusSelect.vue 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/service/request/index.js 253 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/service/request/modules/beforeSend.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/service/store/index.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/service/store/modules/print.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/service/store/modules/system.js 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/service/store/modules/user.js 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/fonts/iconfont.css 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/fonts/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/fonts/iconfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/fonts/iconfont.woff2 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/img/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/img/logo.jpg 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/js/print/gbk.js 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/js/print/printerjobs.js 587 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/js/utils/filter.js 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/js/utils/index.js 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/js/utils/modules/color.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/js/utils/modules/regexValidate.js 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/static/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni.scss 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/LICENSE 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/README.md 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/changelog.md 357 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u--form/u--form.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u--image/u--image.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u--input/u--input.vue 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u--text/u--text.vue 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u--textarea/u--textarea.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-action-sheet/props.js 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-album/props.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-album/u-album.vue 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-alert/props.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-alert/u-alert.vue 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-avatar-group/props.js 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-avatar/props.js 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-avatar/u-avatar.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-back-top/props.js 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-back-top/u-back-top.vue 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-badge/props.js 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-badge/u-badge.vue 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-button/nvue.scss 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-button/props.js 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-button/u-button.vue 490 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-button/vue.scss 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-calendar/header.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-calendar/month.vue 579 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-calendar/props.js 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-calendar/u-calendar.vue 384 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-calendar/util.js 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-car-keyboard/props.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue 311 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-cell-group/props.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-cell/props.js 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-cell/u-cell.vue 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-checkbox-group/props.js 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-checkbox/props.js 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue 344 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-circle-progress/props.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-code-input/props.js 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-code-input/u-code-input.vue 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-code/props.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-code/u-code.vue 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-col/props.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-col/u-col.vue 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-collapse-item/props.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-collapse/props.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-collapse/u-collapse.vue 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-column-notice/props.js 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-count-down/props.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-count-down/u-count-down.vue 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-count-down/utils.js 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-count-to/props.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-count-to/u-count-to.vue 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-datetime-picker/props.js 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue 360 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-divider/props.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-divider/u-divider.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-dropdown-item/props.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-dropdown/props.js 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-empty/props.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-empty/u-empty.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-form-item/props.js 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-form-item/u-form-item.vue 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-form/props.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-form/u-form.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-gap/props.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-gap/u-gap.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-grid-item/props.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-grid/props.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-grid/u-grid.vue 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-icon/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-icon/icons.js 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-icon/props.js 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-icon/u-icon.vue 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-image/props.js 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-image/u-image.vue 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-index-anchor/props.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-index-item/props.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-index-item/u-index-item.vue 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-index-list/props.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-index-list/u-index-list.vue 440 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-input/props.js 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-input/u-input.vue 352 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-keyboard/props.js 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-line-progress/props.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-line/props.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-line/u-line.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-link/props.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-link/u-link.vue 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-list-item/props.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-list-item/u-list-item.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-list/props.js 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-list/u-list.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-loading-icon/props.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue 343 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-loading-page/props.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-loadmore/props.js 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-modal/props.js 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-modal/u-modal.vue 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-navbar/props.js 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-navbar/u-navbar.vue 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-no-network/props.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-no-network/u-no-network.vue 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-notice-bar/props.js 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-notify/props.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-notify/u-notify.vue 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-number-box/props.js 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-number-box/u-number-box.vue 416 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-number-keyboard/props.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-overlay/props.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-overlay/u-overlay.vue 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-parse/node/node.vue 499 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-parse/parser.js 1075 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-parse/props.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-parse/u-parse.vue 366 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-picker-column/props.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-picker-column/u-picker-column.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-picker/props.js 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-picker/u-picker.vue 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-popup/props.js 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-popup/u-popup.vue 304 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-radio-group/props.js 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-radio-group/u-radio-group.vue 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-radio/props.js 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-radio/u-radio.vue 339 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-rate/props.js 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-rate/u-rate.vue 306 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-read-more/props.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-read-more/u-read-more.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-row-notice/props.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-row-notice/u-row-notice.vue 330 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-row/props.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-row/u-row.vue 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-safe-bottom/props.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/nvue.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/other.js 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/props.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/scrollWxs.wxs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/u-scroll-list.vue 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-search/props.js 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-search/u-search.vue 303 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-skeleton/props.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-skeleton/u-skeleton.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-slider/mpother.js 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-slider/mpwxs.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-slider/mpwxs.wxs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-slider/nvue - 副本.js 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-slider/nvue.js 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-slider/props.js 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-slider/u-slider.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-status-bar/props.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-status-bar/u-status-bar.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-steps-item/props.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-steps-item/u-steps-item.vue 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-steps/props.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-steps/u-steps.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-sticky/props.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-sticky/u-sticky.vue 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-subsection/props.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-subsection/u-subsection.vue 299 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/index - backup.wxs 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/index.wxs 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/nvue - backup.js 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/nvue.js 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/props.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/u-swipe-action-item.vue 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/wxs.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swipe-action/props.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swiper-indicator/props.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swiper-indicator/u-swiper-indicator.vue 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swiper/props.js 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-swiper/u-swiper.vue 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-switch/props.js 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-switch/u-switch.vue 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tabbar-item/props.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tabbar/props.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-table/props.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-table/u-table.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tabs-item/props.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tabs-item/u-tabs-item.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tabs/props.js 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tabs/u-tabs.vue 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tag/props.js 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tag/u-tag.vue 358 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-td/props.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-td/u-td.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-text/props.js 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-text/u-text.vue 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-text/value.js 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-textarea/props.js 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-textarea/u-textarea.vue 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-toast/u-toast.vue 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-toolbar/props.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tooltip/clipboard.min.js 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tooltip/props.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue 365 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tr/props.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-tr/u-tr.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-transition/nvue.ani-map.js 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-transition/props.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-transition/transition.js 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-transition/u-transition.vue 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-transition/vue.ani-style.scss 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-upload/mixin.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-upload/props.js 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-upload/u-upload.vue 558 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/u-upload/utils.js 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/components/uview-ui/uview-ui.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/index.js 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/index.scss 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/color.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/config.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props.js 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/actionSheet.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/album.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/alert.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/avatar.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/avatarGroup.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/backtop.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/badge.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/button.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/calendar.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/carKeyboard.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/cell.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/cellGroup.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/checkbox.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/checkboxGroup.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/circleProgress.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/code.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/codeInput.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/col.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/collapse.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/collapseItem.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/columnNotice.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/countDown.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/countTo.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/datetimePicker.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/divider.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/empty.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/form.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/formItem.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/gap.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/grid.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/gridItem.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/icon.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/image.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/indexAnchor.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/indexList.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/input.js 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/keyboard.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/line.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/lineProgress.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/link.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/list.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/listItem.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/loadingIcon.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/loadingPage.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/loadmore.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/modal.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/navbar.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/noNetwork.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/noticeBar.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/notify.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/numberBox.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/numberKeyboard.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/overlay.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/parse.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/picker.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/popup.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/radio.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/radioGroup.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/rate.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/readMore.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/row.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/rowNotice.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/scrollList.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/search.js 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/section.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/skeleton.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/slider.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/statusBar.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/steps.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/stepsItem.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/sticky.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/subsection.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/swipeAction.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/swipeActionItem.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/swiper.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/swipterIndicator.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/switch.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/tabbar.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/tabbarItem.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/tabs.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/tag.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/text.js 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/textarea.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/toast.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/toolbar.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/tooltip.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/transition.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/props/upload.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/config/zIndex.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/css/color.scss 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/css/common.scss 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/css/components.scss 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/css/flex.scss 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/css/h5.scss 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/css/mixin.scss 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/css/mp.scss 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/css/nvue.scss 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/css/vue.scss 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/function/colorGradient.js 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/function/debounce.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/function/digit.js 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/function/index.js 705 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/function/platform.js 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/function/test.js 288 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/function/throttle.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/adapters/index.js 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/Request.js 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/defaults.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/settle.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/index.d.ts 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/utils.js 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/luch-request/utils/clone.js 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/mixin/button.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/mixin/mixin.js 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/mixin/mpMixin.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/mixin/mpShare.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/mixin/openType.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/mixin/style.js 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/mixin/touch.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/util/async-validator.js 1343 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/util/calendar.js 546 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/util/dayjs.js 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/util/emitter.js 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/libs/util/route.js 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/package.json 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/uni_modules/uview-ui/theme.scss 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/apk/__UNI__2005783_cm.apk 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/apk/__UNI__3710012_cm.apk 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/apk/__UNI__9945D9A_cm.apk 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/apk/apkurl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/apk/cmManifestCache.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/certdata 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/cloudcertificate/certini 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/cloudcertificate/package.keystore 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/.manifest/icon-android-hdpi.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/.manifest/icon-android-xhdpi.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/.manifest/icon-android-xxhdpi.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/.manifest/icon-android-xxxhdpi.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappchooselocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniapperror.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappes6.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappopenlocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniapppicker.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappquill.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappquillimageresize.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappscan.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappsuccess.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappview.html 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/app-config-service.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/app-config.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/app-service.js 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/app-view.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/manifest.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/fonts/iconfont.css 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/fonts/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/fonts/iconfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/fonts/iconfont.woff2 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/img/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/img/logo.jpg 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/print/gbk.js 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/print/printerjobs.js 587 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/utils/filter.js 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/utils/index.js 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/utils/modules/color.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/utils/modules/regexValidate.js 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/uni_modules/uview-ui/components/u-icon/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/view.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/cache/wgt/__UNI__2005783/view.umd.min.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/.automator/app-plus/.automator.json 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniappchooselocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniapperror.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniappes6.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniappopenlocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniapppicker.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniappquill.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniappquillimageresize.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniappscan.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniappsuccess.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/__uniappview.html 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/app-config-service.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/app-config.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/app-service.js 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/app-view.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/manifest.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/fonts/iconfont.css 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/fonts/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/fonts/iconfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/fonts/iconfont.woff2 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/img/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/img/logo.jpg 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/js/print/gbk.js 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/js/print/printerjobs.js 587 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/js/utils/filter.js 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/js/utils/index.js 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/js/utils/modules/color.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/js/utils/modules/regexValidate.js 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/static/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/uni_modules/uview-ui/components/u-icon/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/view.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/build/app-plus/view.umd.min.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/.automator/app-plus/.automator.json 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniappchooselocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniapperror.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniappes6.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniappopenlocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniapppicker.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniappquill.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniappquillimageresize.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniappscan.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniappsuccess.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/__uniappview.html 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/app-config-service.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/app-config.js 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/app-service.js 42267 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/app-view.js 20545 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/manifest.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/fonts/iconfont.css 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/fonts/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/fonts/iconfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/fonts/iconfont.woff2 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/img/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/img/logo.jpg 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/js/print/gbk.js 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/js/print/printerjobs.js 587 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/js/utils/filter.js 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/js/utils/index.js 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/js/utils/modules/color.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/js/utils/modules/regexValidate.js 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/static/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/uni_modules/uview-ui/components/u-icon/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/view.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/dist/dev/app-plus/view.umd.min.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/1024x1024.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/120x120.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/144x144.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/152x152.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/167x167.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/180x180.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/192x192.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/20x20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/29x29.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/40x40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/58x58.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/60x60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/72x72.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/76x76.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/80x80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/87x87.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_pda/unpackage/res/icons/96x96.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/.gitignore 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/README.md 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/babel.config.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/dist.zip 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/jsconfig.json 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/package-lock.json 22872 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/package.json 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/public/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/public/index.html 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/App.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/api/api.js 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/api/common.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/bg1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/blue/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/border_left1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/border_left2.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/border_middle.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/border_prodline.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/border_right1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/border_right2.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/edo.jpg 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP35产线 .png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/green/产线总.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/prodline_all.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/prodline_all1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/red/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/title.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/white/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/images/yellow/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/assets/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/components/Content.vue 560 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/components/EquipmentRunStatus.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/components/ProdlineHealthy.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/components/ProductionCompletionTrend.vue 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/components/ProductionStatistics.vue 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/components/QualityDataTrends.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/src/main.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen/vue.config.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DBScript/01_DDL_TABLE.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,245 @@
create table AccessInterfaceLog
(
    [Id] [bigint] NOT NULL,
    [Action] [int] NOT NULL,
    [OperateAddress] [nvarchar](200) NULL,
    [OperateUserId]  [nvarchar](200)  NULL,
    [OperateUserName]  [nvarchar](200)  NULL,
    [IPAddress] [nvarchar](50) NULL,
    [Param1] [nvarchar](200) NULL,
    [Param2] [nvarchar](200) NULL,
    [Param3] [nvarchar](200) NULL,
    [ParaJSON] [nvarchar](max) NULL,
    [ResultJson] [nvarchar](max) NULL,
    [Keys] [nvarchar](max) NULL,
    [CreatedTime] [datetimeoffset](7) NULL,
    [UpdatedTime] [datetimeoffset](7) NULL,
    [CreatedUserId] [bigint] NULL,
    [CreatedUserName] [nvarchar](50) NULL,
    [UpdatedUserId] [bigint] NULL,
    [UpdatedUserName] [nvarchar](50) NULL,
    [IsDeleted] [bit] NOT NULL,
)
--20231124
drop table KnifeToolEquipmentMonitor
drop table KnifeToolEquipmentInfo
drop table KnifeToolEquipmentInfoLog
drop table KnifeToolEquipmentUpdateLog
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[KnifeToolEquipmentMonitor]') AND type in (N'U')) DROP TABLE [dbo].[KnifeToolEquipmentMonitor];
CREATE TABLE [dbo].[KnifeToolEquipmentMonitor](
    [Id] [bigint] NOT NULL,
    EquipmentID VARCHAR(32),
    WorkingProcedure VARCHAR(32),
    Remarks1 VARCHAR(255),
    Remarks2 VARCHAR(255),
    Remarks3 VARCHAR(255),
    [CreatedTime] [datetime2](7) NULL,
    [UpdatedTime] [datetime2](7) NULL,
    [CreatedUserId] [bigint] NULL,
    [CreatedUserName] [nvarchar](50) NULL,
    [UpdatedUserId] [bigint] NULL,
    [UpdatedUserName] [nvarchar](50) NULL,
    [IsDeleted] [bit] NOT NULL,
);
EXEC sp_addextendedproperty 'MS_Description', '设备刀具信息监控', 'SCHEMA', dbo, 'table', KnifeToolEquipmentMonitor, null, null;
EXEC sp_addextendedproperty 'MS_Description', '设备编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentMonitor, 'column', EquipmentID;
EXEC sp_addextendedproperty 'MS_Description', '工序编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentMonitor, 'column', WorkingProcedure;
EXEC sp_addextendedproperty 'MS_Description', '备注1', 'SCHEMA', dbo, 'table', KnifeToolEquipmentMonitor, 'column', Remarks1;
EXEC sp_addextendedproperty 'MS_Description', '备注2', 'SCHEMA', dbo, 'table', KnifeToolEquipmentMonitor, 'column', Remarks2;
EXEC sp_addextendedproperty 'MS_Description', '备注3', 'SCHEMA', dbo, 'table', KnifeToolEquipmentMonitor, 'column', Remarks3;
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[KnifeToolEquipmentInfo]') AND type in (N'U')) DROP TABLE [dbo].[KnifeToolEquipmentInfo];
CREATE TABLE [dbo].[KnifeToolEquipmentInfo](
    [Id] [bigint] NOT NULL,
    EquipmentID VARCHAR(32),
    WorkingProcedure VARCHAR(32),
    Station VARCHAR(255),
    KnifeToolID VARCHAR(255),
    KnifeToolName VARCHAR(255),
    StartLife INT,
    CurrentLife INT,
    ChangeStartTime [datetime2](7) NULL,
    Remarks1 VARCHAR(255),
    Remarks2 VARCHAR(255),
    Remarks3 VARCHAR(255),
    [CreatedTime] [datetime2](7) NULL,
    [UpdatedTime] [datetime2](7) NULL,
    [CreatedUserId] [bigint] NULL,
    [CreatedUserName] [nvarchar](50) NULL,
    [UpdatedUserId] [bigint] NULL,
    [UpdatedUserName] [nvarchar](50) NULL,
    [IsDeleted] [bit] NOT NULL,
);
EXEC sp_addextendedproperty 'MS_Description', '设备刀具详情表', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, null, null;
EXEC sp_addextendedproperty 'MS_Description', '设备编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', EquipmentID;
EXEC sp_addextendedproperty 'MS_Description', '工序编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', WorkingProcedure;
EXEC sp_addextendedproperty 'MS_Description', '工位', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', Station;
EXEC sp_addextendedproperty 'MS_Description', '刀具编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', KnifeToolID;
EXEC sp_addextendedproperty 'MS_Description', '刀具名称', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', KnifeToolName;
EXEC sp_addextendedproperty 'MS_Description', '换上时寿命', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', StartLife;
EXEC sp_addextendedproperty 'MS_Description', '当前寿命', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', CurrentLife;
EXEC sp_addextendedproperty 'MS_Description', '换上时间', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', ChangeStartTime;
EXEC sp_addextendedproperty 'MS_Description', '备注1', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', Remarks1;
EXEC sp_addextendedproperty 'MS_Description', '备注2', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', Remarks2;
EXEC sp_addextendedproperty 'MS_Description', '备注3', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfo, 'column', Remarks3;
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[KnifeToolEquipmentInfoLog]') AND type in (N'U')) DROP TABLE [dbo].[KnifeToolEquipmentInfoLog];
CREATE TABLE [dbo].[KnifeToolEquipmentInfoLog](
    [Id] [bigint] NOT NULL,
    EquipmentID VARCHAR(32),
    WorkingProcedure VARCHAR(32),
    Station VARCHAR(255),
    KnifeToolID VARCHAR(255),
    KnifeToolName VARCHAR(255),
    StartLife INT,
    CurrentLife INT,
    ResidueLife INT,
    ChangeStartTime [datetime2](7) NULL,
    ChangeEndTime [datetime2](7) NULL,
    Remarks1 VARCHAR(255),
    Remarks2 VARCHAR(255),
    Remarks3 VARCHAR(255),
    [CreatedTime] [datetime2](7) NULL,
    [UpdatedTime] [datetime2](7) NULL,
    [CreatedUserId] [bigint] NULL,
    [CreatedUserName] [nvarchar](50) NULL,
    [UpdatedUserId] [bigint] NULL,
    [UpdatedUserName] [nvarchar](50) NULL,
    [IsDeleted] [bit] NOT NULL,
);
EXEC sp_addextendedproperty 'MS_Description', '设备刀具更换履历表', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, null, null;
EXEC sp_addextendedproperty 'MS_Description', '设备编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', EquipmentID;
EXEC sp_addextendedproperty 'MS_Description', '工序编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', WorkingProcedure;
EXEC sp_addextendedproperty 'MS_Description', '工位', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', Station;
EXEC sp_addextendedproperty 'MS_Description', '刀具编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', KnifeToolID;
EXEC sp_addextendedproperty 'MS_Description', '刀具名称', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', KnifeToolName;
EXEC sp_addextendedproperty 'MS_Description', '换上时寿命', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', StartLife;
EXEC sp_addextendedproperty 'MS_Description', '当前寿命', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', CurrentLife;
EXEC sp_addextendedproperty 'MS_Description', '剩余寿命', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', ResidueLife;
EXEC sp_addextendedproperty 'MS_Description', '换上时间', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', ChangeStartTime;
EXEC sp_addextendedproperty 'MS_Description', '换下时间', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', ChangeEndTime;
EXEC sp_addextendedproperty 'MS_Description', '备注1', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', Remarks1;
EXEC sp_addextendedproperty 'MS_Description', '备注2', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', Remarks2;
EXEC sp_addextendedproperty 'MS_Description', '备注3', 'SCHEMA', dbo, 'table', KnifeToolEquipmentInfoLog, 'column', Remarks3;
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[KnifeToolEquipmentUpdateLog]') AND type in (N'U')) DROP TABLE [dbo].[KnifeToolEquipmentUpdateLog];
CREATE TABLE [dbo].[KnifeToolEquipmentUpdateLog](
    [Id] [bigint] NOT NULL,
    EquipmentID VARCHAR(32),
    WorkingProcedure VARCHAR(32),
    Station VARCHAR(255),
    KnifeToolID VARCHAR(255),
    KnifeToolName VARCHAR(255),
    StartLife INT,
    CurrentLife INT,
    ResidueLife INT,
    ChangeStartTime  [datetime2](7) NULL,
    ChangeEndTime  [datetime2](7) NULL,
    OperateDesc VARCHAR(900),
    Remarks1 VARCHAR(255),
    Remarks2 VARCHAR(255),
    Remarks3 VARCHAR(255),
    [CreatedTime] [datetime2](7) NULL,
    [UpdatedTime] [datetime2](7) NULL,
    [CreatedUserId] [bigint] NULL,
    [CreatedUserName] [nvarchar](50) NULL,
    [UpdatedUserId] [bigint] NULL,
    [UpdatedUserName] [nvarchar](50) NULL,
    [IsDeleted] [bit] NOT NULL,
);
EXEC sp_addextendedproperty 'MS_Description', '设备刀具操作日志表', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, null, null;
EXEC sp_addextendedproperty 'MS_Description', '设备编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', EquipmentID;
EXEC sp_addextendedproperty 'MS_Description', '工序编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', WorkingProcedure;
EXEC sp_addextendedproperty 'MS_Description', '工位', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', Station;
EXEC sp_addextendedproperty 'MS_Description', '刀具编号', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', KnifeToolID;
EXEC sp_addextendedproperty 'MS_Description', '刀具名称', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', KnifeToolName;
EXEC sp_addextendedproperty 'MS_Description', '换上时寿命', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', StartLife;
EXEC sp_addextendedproperty 'MS_Description', '当前寿命', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', CurrentLife;
EXEC sp_addextendedproperty 'MS_Description', '剩余寿命', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', ResidueLife;
EXEC sp_addextendedproperty 'MS_Description', '换上时间', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', ChangeStartTime;
EXEC sp_addextendedproperty 'MS_Description', '换下时间', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', ChangeEndTime;
EXEC sp_addextendedproperty 'MS_Description', '操作描述', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', OperateDesc;
EXEC sp_addextendedproperty 'MS_Description', '备注1', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', Remarks1;
EXEC sp_addextendedproperty 'MS_Description', '备注2', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', Remarks2;
EXEC sp_addextendedproperty 'MS_Description', '备注3', 'SCHEMA', dbo, 'table', KnifeToolEquipmentUpdateLog, 'column', Remarks3;
USE [iWare.SCADA]
GO
/****** Object:  Table [dbo].[EquipmentQualityConfig]    Script Date: 2023/11/29 9:35:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[EquipmentQualityConfig](
    [Id] [bigint] NOT NULL,
    [MeasureTool] [varchar](255) NULL,
    [WorkingProcedure] [varchar](32) NULL,
    [ParamCode] [varchar](255) NULL,
    [ParamDesc] [varchar](255) NULL,
    [StandardValue] [varchar](255) NULL,
    [UpperTolerance] [varchar](255) NULL,
    [LowerTolerance] [varchar](255) NULL,
    [ParamColName] [varchar](255) NULL,
    [DecimalPlaces] [int] NULL,
    [Unit] [varchar](255) NULL,
    [ParamType] [int] NULL,
    [Remarks] [varchar](255) NULL,
    [CreatedTime] [datetime2](7) NULL,
    [UpdatedTime] [datetime2](7) NULL,
    [CreatedUserId] [bigint] NULL,
    [CreatedUserName] [nvarchar](50) NULL,
    [UpdatedUserId] [bigint] NULL,
    [UpdatedUserName] [nvarchar](50) NULL,
    [IsDeleted] [bit] NOT NULL
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'量具' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'MeasureTool'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'工序' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'WorkingProcedure'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'参数编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'ParamCode'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'参数名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'ParamDesc'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'名义值' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'StandardValue'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'下公差' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'UpperTolerance'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'上公差' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'LowerTolerance'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'参数列名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'ParamColName'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'参数类型(1:柔性 2:其他)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'ParamType'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig', @level2type=N'COLUMN',@level2name=N'Remarks'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'质量数据标准值配置' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'EquipmentQualityConfig'
GO
DBScript/02_DDL_TABLE_Edit.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,199 @@
ALTER TABLE EquipmentBaseInfo  ADD  CuttingFluidChangeTime Datetime2 NUll --增加设备切削液更换时间【Editby baotian,2023-3-9】
ALTER TABLE EquipmentBaseInfo  ADD  CuttingFluidChangeAlertThreshold int NUll --增加设备切削液预警阈值【Editby baotian,2023-3-9】
ALTER TABLE EquipmentBaseInfo  ADD  EquipmentCurrentMonitor bit NUll --增加是否关闭设备告警【Editby baotian,2023-3-10】
ALTER TABLE WorkPieceInfo  ADD  WorkPieceLastOfflineTime datetime NUll --增加工件完工时间【Editby baotian,2023-3-10】
--20231024
ALTER TABLE WorkPieceProcess ADD OperationType nvarchar(50);
ALTER TABLE WorkPieceProcess ADD Remarks nvarchar(255);
        ALTER TABLE QualityDataInfo ADD OP10QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP20QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP30QualityStateCH3  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP30QualityStateCH4  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP30QualityStateCH5  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP30QualityStateCH6  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP30QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP40QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP60QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP80QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD  OP10QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfo ADD  OP20QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfo ADD  OP30QualityReceiveTimeCH3  DateTime;
        ALTER TABLE QualityDataInfo ADD  OP30QualityReceiveTimeCH4  DateTime;
        ALTER TABLE QualityDataInfo ADD  OP30QualityReceiveTimeCH5  DateTime;
        ALTER TABLE QualityDataInfo ADD  OP30QualityReceiveTimeCH6  DateTime;
        ALTER TABLE QualityDataInfo ADD  OP30QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfo ADD  OP40QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfo ADD  OP60QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfo ADD  OP80QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfoLog ADD OP10QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD OP20QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD OP30QualityStateCH3  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD OP30QualityStateCH4  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD OP30QualityStateCH5  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD OP30QualityStateCH6  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD OP30QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD OP40QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD OP60QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD OP80QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD  OP10QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfoLog ADD  OP20QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfoLog ADD  OP30QualityReceiveTimeCH3  DateTime;
        ALTER TABLE QualityDataInfoLog ADD  OP30QualityReceiveTimeCH4  DateTime;
        ALTER TABLE QualityDataInfoLog ADD  OP30QualityReceiveTimeCH5  DateTime;
        ALTER TABLE QualityDataInfoLog ADD  OP30QualityReceiveTimeCH6  DateTime;
        ALTER TABLE QualityDataInfoLog ADD  OP30QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfoLog ADD  OP40QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfoLog ADD  OP60QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfoLog ADD  OP80QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfo ADD OP35QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD  OP35QualityReceiveTime  DateTime;
        ALTER TABLE QualityDataInfoLog ADD OP35QualityState  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD  OP35QualityReceiveTime  DateTime;
--20231029
ALTER TABLE EquipmentCurrentMonitor  ADD  WarnType nvarchar(32) NUll --增加告警代码【Editby baotian,2023-10-29】
  ALTER TABLE WorkPieceProcess ALTER COLUMN QualityDataInfoID bigint;
  ALTER TABLE WorkPieceInfoLog ADD LogAddTime DateTime;
ALTER TABLE WorkPieceInfoLog  ADD  LogAddRemark nvarchar(255) NUll
ALTER TABLE WorkPieceInfoLog  ADD  CompleteTime DateTime
--20231101
ALTER TABLE EquipmentCurrentMonitor ADD WarnTime datetime2;--新增告警时间  message时间
ALTER TABLE EquipmentCurrentMonitor ADD Warnmsg nvarchar(max);--新增告警内容  message
ALTER TABLE EquipmentWorkingLog ADD WarnType nvarchar(max);--新增告警类型  message时间
ALTER TABLE EquipmentWorkingLog ADD Warnmsg nvarchar(max);--新增告警内容  message
ALTER TABLE EquipmentWorkingLog ADD UpdateDesc nvarchar(255);--新增变更描述
ALTER TABLE EquipmentWorkingLog ADD WarnStartTime datetime2;--新增告警时间  message时间
ALTER TABLE EquipmentWorkingLog ADD WarnEndTime datetime2;--新增告警时间  message时间
ALTER TABLE EquipmentWorkingLog ADD EquipmentState nvarchar(32);
ALTER TABLE EquipmentWorkingLog ADD EquipmentStateStartTime datetime2;--新增状态开始时间  message时间
ALTER TABLE EquipmentWorkingLog ADD EquipmentStateEndTime datetime2;--新增状态结束时间  message时间
ALTER TABLE WorkPieceInfo ADD WorkingProcedureEndTime datetime2;--新增g工序结束时间
ALTER TABLE WorkPieceInfoLog ADD WorkingProcedureEndTime datetime2;--新增工序结束时间
--WorkPieceInfoLog表相关字段全部可空
USE [iWare.SCADA]
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[EquipmentFailureCode]') AND type in (N'U')) DROP TABLE [dbo].[EquipmentFailureCode];
CREATE TABLE [dbo].[EquipmentFailureCode](
    [Id] [bigint] NOT NULL,
    EquipmentID VARCHAR(255),
    WorkingProcedure VARCHAR(255),
    Code VARCHAR(255),
    CodeType VARCHAR(255),
    CodeLevel VARCHAR(255),
    CodeDesc VARCHAR(255),
    [Remarks] [nvarchar](255) NULL,
        [CreatedTime] [datetimeoffset](7) NULL,
    [UpdatedTime] [datetimeoffset](7) NULL,
    [CreatedUserId] [bigint] NULL,
    [CreatedUserName] [nvarchar](50) NULL,
    [UpdatedUserId] [bigint] NULL,
    [UpdatedUserName] [nvarchar](50) NULL,
    [IsDeleted] [bit] NOT NULL
);
EXEC sp_addextendedproperty 'MS_Description', '告警故障代码表;', 'SCHEMA', dbo, 'table', EquipmentFailureCode, null, null;
EXEC sp_addextendedproperty 'MS_Description', '设备代号', 'SCHEMA', dbo, 'table', EquipmentFailureCode, 'column', EquipmentID;
EXEC sp_addextendedproperty 'MS_Description', '设备所属工序', 'SCHEMA', dbo, 'table', EquipmentFailureCode, 'column', WorkingProcedure;
EXEC sp_addextendedproperty 'MS_Description', '代号', 'SCHEMA', dbo, 'table', EquipmentFailureCode, 'column', Code;
EXEC sp_addextendedproperty 'MS_Description', '代号类型(1:故障 2:告警)', 'SCHEMA', dbo, 'table', EquipmentFailureCode, 'column', CodeType;
EXEC sp_addextendedproperty 'MS_Description', '代号级别(1,2,3级)', 'SCHEMA', dbo, 'table', EquipmentFailureCode, 'column', CodeLevel;
EXEC sp_addextendedproperty 'MS_Description', '代号描述', 'SCHEMA', dbo, 'table', EquipmentFailureCode, 'column', CodeDesc;
--20231109
alter table WorkPieceInfo ADD OP80NewCode nvarchar(255)  --OP80重新打印二维码
alter table WorkPieceInfoLog ADD OP80NewCode nvarchar(255) --OP80重新打印二维码
--20231114
ALTER TABLE EquipmentCurrentMonitor ALTER COLUMN Alertmsg nvarchar(max);
ALTER TABLE EquipmentWorkingLog ALTER COLUMN FailureMsg nvarchar(max);
--20231121
        ALTER TABLE QualityDataInfo ADD OP30QualityFilePathCH3  nvarchar(900);
        ALTER TABLE QualityDataInfo ADD OP30QualityFilePathCH4  nvarchar(900);
        ALTER TABLE QualityDataInfo ADD OP30QualityFilePathCH5  nvarchar(900);
        ALTER TABLE QualityDataInfo ADD OP30QualityFilePathCH6  nvarchar(900);
        ALTER TABLE QualityDataInfoLog ADD OP30QualityFilePathCH3  nvarchar(900);
        ALTER TABLE QualityDataInfoLog ADD OP30QualityFilePathCH4  nvarchar(900);
        ALTER TABLE QualityDataInfoLog ADD OP30QualityFilePathCH5  nvarchar(900);
        ALTER TABLE QualityDataInfoLog ADD OP30QualityFilePathCH6  nvarchar(900);
--20231123
ALTER TABLE KnifeToolBaseInfo ADD KnifeToolChangeAlertThreshold  int;  --刀具预警阈值
--20231205
   ALTER TABLE v_get_equipment_alert ADD DetergentDesc  nvarchar(900);
   ALTER TABLE v_get_equipment_alert ADD KnifeToolDesc  nvarchar(900);
   ALTER TABLE v_get_equipment_alert ADD CuttingFluidDesc  nvarchar(900);
   ALTER TABLE v_get_equipment_alert ADD AlertDesc  nvarchar(max);
   --20231206
        ALTER TABLE QualityDataInfo ADD QualityOP40To1  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD QualityOP40To1  nvarchar(32);
--20231207
        ALTER TABLE EquipmentBaseInfo ADD TactTime  int;     --生产节拍
--20231216
        ALTER TABLE QualityDataInfo ADD QualityOP80To10  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD QualityOP80To10  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD QualityOP30To8  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD QualityOP30To9  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD QualityOP30To10  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD QualityOP30To11  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD QualityOP30To8  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD QualityOP30To9  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD QualityOP30To10  nvarchar(32);
        ALTER TABLE QualityDataInfoLog ADD QualityOP30To11  nvarchar(32);
        ALTER TABLE KnifeToolEquipmentUpdateLog ADD OperateType  nvarchar(32);
        ALTER TABLE QualityDataInfo ADD OP80QualityFilePath  nvarchar(900);
        ALTER TABLE QualityDataInfoLog ADD OP80QualityFilePath  nvarchar(900);
        ALTER TABLE QualityDataInfo ADD OP60QualityFilePath  nvarchar(900);
        ALTER TABLE QualityDataInfoLog ADD OP60QualityFilePath  nvarchar(900);
        ALTER TABLE QualityDataInfo ADD OP20QualityFilePath  nvarchar(900);
        ALTER TABLE QualityDataInfoLog ADD OP20QualityFilePath  nvarchar(900);
DBScript/ScadaTableUpdate.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
use [iWare.SCADA]
--- EquipmentWorkingLog新增外键列EquipId   å˜æ›´æ—¶é—´ç‚¹ï¼š2023-02-23
IF NOT EXISTS ( SELECT  *
                FROM    syscolumns
                WHERE   id = OBJECT_ID('EquipmentWorkingLog')
                        AND name = 'EquipId' )
    BEGIN
        ALTER TABLE dbo.EquipmentWorkingLog ADD  EquipId  BIGINT NOT NULL
    END
GO
IF NOT EXISTS ( SELECT  *
                FROM    information_schema.KEY_COLUMN_USAGE
                WHERE   CONSTRAINT_NAME='FK_EquipmentWorkingLog_EquipmentBaseInfo_EquipId')
    BEGIN
        ALTER TABLE dbo.KnifeToolDataMonitor ADD  constraint FK_EquipmentWorkingLog_EquipmentBaseInfo_EquipId FOREIGN KEY (EquipId)
        references EquipmentBaseInfo(Id)
    END
GO
--- KnifeToolDataMonitor新增外键列EquipId   å˜æ›´æ—¶é—´ç‚¹ï¼š2023-02-23
IF NOT EXISTS ( SELECT  *
                FROM    syscolumns
                WHERE   id = OBJECT_ID('KnifeToolDataMonitor')
                        AND name = 'EquipId' )
    BEGIN
        ALTER TABLE dbo.KnifeToolDataMonitor ADD  EquipId  BIGINT NOT NULL
    END
GO
IF NOT EXISTS ( SELECT  *
                FROM    information_schema.KEY_COLUMN_USAGE
                WHERE   CONSTRAINT_NAME='FK_KnifeToolDataMonitor_EquipmentBaseInfo_EquipId')
    BEGIN
        ALTER TABLE dbo.KnifeToolDataMonitor ADD  constraint FK_KnifeToolDataMonitor_EquipmentBaseInfo_EquipId FOREIGN KEY (EquipId)
        references EquipmentBaseInfo(Id)
    END
GO
alter table [ThreadStatusMonitor] alter column Threadstatue int null
alter table [ThreadStatusMonitor] alter column Threadendtime datetime2(7) null
DataCapture/iWare_SCADA_DataCapture/DLL/HslCommunication.dll
Binary files differ
DataCapture/iWare_SCADA_DataCapture/DLL/Newtonsoft.Json.dll
Binary files differ
DataCapture/iWare_SCADA_DataCapture/DLL/Newtonsoft.Json.xml
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
DataCapture/iWare_SCADA_DataCapture/DLL/log4net.dll
Binary files differ
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/App.config
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/CommonManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,161 @@
using iTextSharp.text.pdf;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static log4net.Appender.RollingFileAppender;
namespace iWare_SCADA_BusinessLogical.BLL
{
    public class CommonManager
    {
        public static readonly CommonManager Instance = new CommonManager();
        /// <summary>
        /// è§£æžå·¥ä»¶å·äºŒç»´ç 
        /// </summary>
        /// <param name="log"></param>
        /// <returns></returns>
        public WorkPieceLog GetWorkPieceID(WorkPieceLog log,LogType type)
        {
            try
            {
                if(log==null|| log.WorkPieceID.Trim().Length!=22)
                {
                    Log4NetHelper.WriteErrorLog(type, $"解析工件号{CheckNULLForString(log.WorkPieceID)} {log.Id}二维码时出错,二维码格式不对");
                    return log;
                }
                log.WorkPieceIDTo1 = log.WorkPieceID.Substring(0, 2);
                log.WorkPieceIDTo2 = log.WorkPieceID.Substring(2, 4);
                log.WorkPieceIDTo3 = log.WorkPieceID.Substring(6, 6);
                log.WorkPieceIDTo4 = log.WorkPieceID.Substring(12, 2);
                log.WorkPieceIDTo5 = log.WorkPieceID.Substring(14, 4);
                log.WorkPieceIDTo6 = log.WorkPieceID.Substring(18, 2);
                log.WorkPieceIDTo7 = log.WorkPieceID.Substring(20, 2);
            }
            catch(Exception ex)
            {
                Log4NetHelper.WriteErrorLog(type, $"解析工件号{CheckNULLForString(log.WorkPieceID)} {log.Id}二维码时异常:", ex);
            }
            return log;
        }
        public string CheckNULLForString(string str)
        {
            return string.IsNullOrEmpty(str) ? "" : str;
        }
        public string CheackPath(string path, int type, int time)
        {
            var directory = Path.GetDirectoryName(path);
            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }
            if (!File.Exists(path))
            {
                File.Create(path).Close();
            }
            string content = "";
            // åŒæ­¥æ¥æºæ•°æ®
            using (StreamReader reader = new StreamReader(path))
            {
                content = reader.ReadToEnd();
                Console.WriteLine("读取的内容是:" + content);
                if (content == null || content == "")
                {
                    switch (type)
                    {
                        case 1: content = DateTimeHelper.GetDateTime().AddYears(time).ToString(); break;
                        case 2: content = DateTimeHelper.GetDateTime().AddMonths(time).ToString(); break;
                        case 3: content = DateTimeHelper.GetDateTime().AddDays(time).ToString(); break;
                        case 4: content = DateTimeHelper.GetDateTime().AddHours(time).ToString(); break;
                        case 5: content = DateTimeHelper.GetDateTime().AddMinutes(time).ToString(); break;
                        case 6: content = DateTimeHelper.GetDateTime().AddSeconds(time).ToString(); break;
                        default:
                            content = DateTimeHelper.GetDateTime().ToString(); break;
                    }
                    //content = DateTimeHelper.GetDateTime().AddMinutes(-10).ToString();
                }
            }
            return content;
        }
        /// <summary>
        /// è§£æžpdf文件
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="getPdfValue"></param>
        /// <returns></returns>
        public static List<string> ReadPdfConntent(string filePath, string getPdfValue)
        {
            List<string> lst = new List<string>();
            try
            {
                string pdffilename = filePath;
                PdfReader pdfreader = new PdfReader(pdffilename);
                int numberOfPages = pdfreader.NumberOfPages;
                //for (int i = 1; i <= numberOfPages; ++i)
                //{
                //    lst.Add(iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(pdfreader,i));
                //    text.AppendLine();
                //}
                string text = iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(pdfreader, 1);
                string[] words = text.Split('\n');
                foreach (var item in words)
                {
                    string value = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(item));
                    if (value.Contains(getPdfValue))
                    {
                        string[] splitValue = value.Split(':');
                        lst.Add(splitValue[1].Trim());
                    }
                }
                pdfreader.Close();
                return lst;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static DateTime? GetOP60Time(string datetime)
        {
            try
            {
                string regex = @"^(\d{1,2})\.(\d{1,2})\.(\d{4})\/(\d{1,2}):(\d{1,2}):(\d{1,2})";
                var macth = RegexExtension.Match(datetime, regex, 20000);
                if (macth.Success)
                {
                    string date = $"{macth.Groups[3].Value}/{macth.Groups[2].Value}/{macth.Groups[1].Value} {macth.Groups[4].Value}:{macth.Groups[5].Value}:{macth.Groups[6].Value}";
                    DateTime Time;
                    if (DateTime.TryParseExact(date, "yyyy/MM/dd HH:mm:ss", CultureInfo.CurrentCulture, DateTimeStyles.None, out Time))
                    {
                        return Time;
                    }
                }
                return null;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/DataCaptureColumnDictManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
using iWare_SCADA_BusinessLogical.DLA.Dao;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    public class DataCaptureColumnDictManager
    {
        ///// <summary>
        ///// èŽ·å– è°ƒåº¦ç³»ç»Ÿå¯åŠ¨ç›¸å…³
        ///// </summary>
        ///// <param name="edm"></param>
        ///// <returns></returns>
        //public static IList<DataCaptureColumnDict> GetCCSystem(DbModel edm)
        //{
        //    return edm.DataCaptureColumnDictList.Where(x => x.EquipmentID == "1").ToList();//.FirstOrDefault();
        //}
        /// <summary>
        /// èŽ·å– è°ƒåº¦ç³»ç»Ÿå¯åŠ¨ç›¸å…³
        /// </summary>
        /// <param name="edm"></param>
        /// <returns></returns>
        public static List<EquipmentBaseInfo> GetEquipmentBaseInfo()
        {
            using (DbModel db = new DbModel())
            {
                //
                //var a = db.EquipmentBaseInfos.Find(1);//主键为1的
                var b = db.EquipmentBaseInfo.Where(o=>o.EquipmentId=="1").ToList();
                var query = db.EquipmentBaseInfo.Where(s => s.EquipmentId == "1").ToList();//返回IQueryable è¯´æ˜Žæ˜¯å»¶è¿ŸæŸ¥è¯¢
                //查询所有
                var query2 = db.EquipmentBaseInfo.ToList();//这个不是延迟查询
                //var query3 = db.DataCaptureConfigs.ToList();//这个不是延迟查询
                return b;
                //var ccSystem = DataCaptureColumnDictManager.GetEquipmentBaseInfo(edm);
                //if (ccSystem == null)
                //{
                //    MessageBox.Show("请联系管理员维护系统调度相关的数据!");
                //    return;
                //};
            }
            //return edm.EquipmentBaseInfos.Find;
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        public static void pageselect(int pageIndex,int pageSize)
        {
            using (DbModel db = new DbModel())
            {
                var query3 = db.EquipmentBaseInfo.Skip((pageIndex - 1) * pageSize).Take(pageSize);
            }
            //CommonDao<EquipmentBaseInfo, EquipmentBaseInfo> CommonDao=new CommonDao<EquipmentBaseInfo, EquipmentBaseInfo>();
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/DataCaptureConfigManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
using iWare_SCADA_Model;
using iWare_SCADA_Model.TableModelSC;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical.BLL
{
    public class DataCaptureConfigManager
    {
        public static List<DataCaptureConfig> GetDataCaptureConfigs()
        {
            using (DbModel db = new DbModel())
            {
                //查询所有未删除数据
                var query = db.DataCaptureConfig.Where(o=>o.IsDeleted==false).ToList();//这个不是延迟查询
                return query;
            }
        }
        public static List<DataCaptureColumnConfig> GetDataCaptureColumnConfig()
        {
            using (DbModel db = new DbModel())
            {
                //查询所有
                var query = db.DataCaptureColumnConfig.Where(o=>1==1).ToList();//这个不是延迟查询
                return query;
                //var ccSystem = DataCaptureColumnDictManager.GetEquipmentBaseInfo(edm);
                //if (ccSystem == null)
                //{
                //    MessageBox.Show("请联系管理员维护系统调度相关的数据!");
                //    return;
                //};
            }
        }
        public static List<AlarmLog> getdate()
        {
            using (SCModel db = new SCModel())
            {
                List<AlarmLog> query = db.AlarmLog.ToList();
                return query;
            }
        }
        public static void InsertDataCaptureConfig(DataCaptureConfig info)
        {
            using (DbModel db = new DbModel())
            {
                db.DataCaptureConfig.Add(info);
                db.SaveChanges();
            }
        }
        public static void UpdateDataCaptureConfig(DataCaptureConfig info,out string message)
        {
            using (DbModel db = new DbModel())
            {
                message = "";
                var model = db.DataCaptureConfig.Where(o => o.Id == info.Id).FirstOrDefault();
                if(model!=null && model.Id > 0)
                {
                    var num=db.DataCaptureConfig.Where(o => o.DataCapturePointCode == info.DataCapturePointCode && o.Id != model.Id).Count();
                    if(num>0)
                    {
                        message = $"收集点代码{info.DataCapturePointCode}已存在,不能重复,请确认后再次修改!";
                        return;
                    }
                    model.EquipmentID = info.EquipmentID;
                    model.WorkingProcedure = info.WorkingProcedure;
                    model.DataCapturePointCode = info.DataCapturePointCode;
                    model.DataCapturePointCname = info.DataCapturePointCname;
                    model.DataCaptureType = info.DataCaptureType;
                    model.DataCapturePLCType = info.DataCapturePLCType;
                    model.PLCIP = info.PLCIP;
                    model.PLCPort = info.PLCPort;
                    model.DbNumber = info.DbNumber;
                    model.Offset = info.Offset;
                    model.DataCaptureColumnType = info.DataCaptureColumnType;
                    db.SaveChanges();
                }
                else
                {
                    message = "当前修改项不存在,请刷新后再次修改!";
                    return;
                }
            }
        }
        public static int DeleteDataCaptureConfig(DataCaptureConfig info)
        {
            using (DbModel db = new DbModel())
            {
                var config = db.DataCaptureConfig.FirstOrDefault(m => m.Id == info.Id);
                if (config != null)
                {
                    db.DataCaptureConfig.Remove(config);
                }
                return db.SaveChanges();
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/SystemValue.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2461 @@

using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// ç³»ç»Ÿå˜é‡
    /// </summary>
    public class SystemValue
    {
        #region PLC链接
        public static object lockPlcService = new object();
        private static Dictionary<string, PLCService> plcServiceList = new Dictionary<string, PLCService>();
        public static PLCService GetPLCService(DataCaptureConfig dataCaptureConfig)
        {
            PLCService plcService = null;
            lock (lockPlcService)
            {
                if (plcServiceList.ContainsKey(dataCaptureConfig.PLCIP))
                {
                    plcService = plcServiceList[dataCaptureConfig.PLCIP];
                }
                else
                {
                    plcService = PLCManger.GetSinglePLCService(dataCaptureConfig);
                    plcServiceList.Add(dataCaptureConfig.PLCIP, plcService);
                }
            }
            return plcService;
        }
        public static void PLCServiceReconnect(PLCService plcService)
        {
            if(plcService==null)
            {
                return;
            }
            plcService.Close();
            plcService.OpenService();
        }
        #endregion
        /// <summary>
        /// ç³»ç»Ÿå¯åŠ¨çš„GUID
        /// </summary>
        public static string SystemStartGuid = string.Empty;
        /// <summary>
        /// æ¨¡å¼æ˜¯å¦å¯åЍ
        /// </summary>
        public static bool isStartedModel = false;
        /// <summary>
        /// å»¶è¿Ÿçº¿ç¨‹æ‰§è¡Œçš„æ—¶é—´ï¼ˆæ¯«ç§’)
        /// </summary>
        public static int DelayExcuteNumber = 2000;
        /// <summary>
        /// PLC地址分隔符 ï¼Œç”¨äºŽåˆ†éš” DB地址和偏移量的
        /// </summary>
        public static char PLCDBADDRESS_SEPARATE = '|';
        public static List<ThreadStatusMonitor> MainList=new List<ThreadStatusMonitor>();
        private static object lockMainList = new object();
        public static async void UpdateMainList(ThreadStatusMonitor threadinfo)
        {
            await Task.Run(() => {
                lock (lockMainList)
                {
                    var info = MainList.Where(o => o.Threadcode == threadinfo.Threadcode).FirstOrDefault();
                    if(info == null)
                    {
                        MainList.Add(threadinfo);
                    }
                    else
                    {
                        DateTime time = DateTime.Now;
                        info.Remarks = threadinfo.Remarks;
                        info.Threadendtime = time;//每次都更新
                        info.Threadlastmodifytime = threadinfo.Threadlastmodifytime>DateTime.MinValue? threadinfo.Threadlastmodifytime: info.Threadlastmodifytime;//如果有传参则更新
                        info.ThreadId = threadinfo.ThreadId;
                        info.ThreadFrequency = threadinfo.ThreadFrequency;
                        info.UpdatedTime = time;
                        info.UpdatedUserName = threadinfo.Threadcode;
                        if (info.Threadstatue == 1)
                        {
                            info.Threadlastmodifytime = time;//最新跑到数据
                        }
                    }
                }
            });
        }
        #region OP05工序
        public static object lock5QRcodeList = new object();
        private static Dictionary<string, DateTime> _qRcodeList = new Dictionary<string, DateTime>();
        /// <summary>
        /// OP05读取的二维码列表 //注意,使用中add å’Œèµ‹å€¼éƒ½éœ€è¦æ·»åР锁 lock5QRcodeList
        /// </summary>
        public static Dictionary<string, DateTime> QRcodeList
        {
            get { return _qRcodeList; }
            set
            {
                _qRcodeList = value;
            }
        }
        private static object lockOP0501Runing = new object();
        private static object lockOP0502Runing = new object();
        private static object lockOP0503Runing = new object();
        private static object lockOP0504Runing = new object();
        private static object lockOP0506Runing = new object();
        private static object lockOP0507Runing = new object();
        private static bool _isAllowRuning_OP0501 = false;
        private static bool _isAllowRuning_OP0502 = false;
        private static bool _isAllowRuning_OP0503 = false;
        private static bool _isAllowRuning_OP0504 = false;
        private static bool _isAllowRuning_OP0506 = false;
        private static bool _isAllowRuning_OP0507 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP05工序打码完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP0501
        {
            get { return _isAllowRuning_OP0501; }
            set {
                lock (lockOP0501Runing)
                {
                    _isAllowRuning_OP0501 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP05工序读码完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP0502
        {
            get { return _isAllowRuning_OP0502; }
            set
            {
                lock (lockOP0502Runing)
                {
                    _isAllowRuning_OP0502 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP05工序推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP0503
        {
            get { return _isAllowRuning_OP0503; }
            set
            {
                lock (lockOP0503Runing)
                {
                    _isAllowRuning_OP0503 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP05工序完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP0504
        {
            get { return _isAllowRuning_OP0504; }
            set
            {
                lock (lockOP0504Runing)
                {
                    _isAllowRuning_OP0504 = value;
                }
            }
        }
        private static object lockOP0501Alert = new object();
        private static object lockOP0502Alert = new object();
        private static object lockOP0503Alert = new object();
        private static object lockOP0504Alert = new object();
        private static object lockOP0506Alert = new object();
        private static object lockOP0507Alert = new object();
        private static string _lbl_Alert_OP0501 = string.Empty;
        private static string _lbl_Alert_OP0502 = string.Empty;
        private static string _lbl_Alert_OP0503 = string.Empty;
        private static string _lbl_Alert_OP0504 = string.Empty;
        private static string _lbl_Alert_OP0506 = string.Empty;
        private static string _lbl_Alert_OP0507 = string.Empty;
        /// <summary>
        /// ç›‘控OP05工序打码完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP0501
        {
            get { return _lbl_Alert_OP0501; }
            set
            {
                lock (lockOP0501Alert)
                {
                    _lbl_Alert_OP0501 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP05工序读码完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP0502
        {
            get { return _lbl_Alert_OP0502; }
            set
            {
                lock (lockOP0502Alert)
                {
                    _lbl_Alert_OP0502 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP05工序推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP0503
        {
            get { return _lbl_Alert_OP0503; }
            set
            {
                lock (lockOP0503Alert)
                {
                    _lbl_Alert_OP0503 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP05工序完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP0504
        {
            get { return _lbl_Alert_OP0504; }
            set
            {
                lock (lockOP0504Alert)
                {
                    _lbl_Alert_OP0504 = value;
                }
            }
        }
        public static string lbl_Alert_OP0506
        {
            get { return _lbl_Alert_OP0506; }
            set
            {
                lock (lockOP0506Alert)
                {
                    _lbl_Alert_OP0506 = value;
                }
            }
        }
        public static string lbl_Alert_OP0507
        {
            get { return _lbl_Alert_OP0507; }
            set
            {
                lock (lockOP0507Alert)
                {
                    _lbl_Alert_OP0507 = value;
                }
            }
        }
        private static object lockOP0501Value = new object();
        private static object lockOP0502Value = new object();
        private static object lockOP0503Value = new object();
        private static object lockOP0504Value = new object();
        private static object lockOP0506Value = new object();
        private static object lockOP0507Value = new object();
        private static string _value_OP0501 = string.Empty;
        private static string _value_OP0502 = string.Empty;
        private static string _value_OP0503 = string.Empty;
        private static string _value_OP0504 = string.Empty;
        private static string _value_OP0506 = string.Empty;
        private static string _value_OP0507 = string.Empty;
        /// <summary>
        /// OP05工序打码完成标记值
        /// </summary>
        public static string value_OP0501
        {
            get { return _value_OP0501; }
            set
            {
                lock (lockOP0501Value)
                {
                    _value_OP0501 = value;
                }
            }
        }
        /// <summary>
        /// OP05工序读码完成标记值
        /// </summary>
        public static string value_OP0502
        {
            get { return _value_OP0502; }
            set
            {
                lock (lockOP0502Value)
                {
                    _value_OP0502 = value;
                }
            }
        }
        /// <summary>
        /// OP05工序推出标记值
        /// </summary>
        public static string value_OP0503
        {
            get { return _value_OP0503; }
            set
            {
                lock (lockOP0503Value)
                {
                    _value_OP0503 = value;
                }
            }
        }
        /// <summary>
        /// OP05工序完成标记值
        /// </summary>
        public static string value_OP0504
        {
            get { return _value_OP0504; }
            set
            {
                lock (lockOP0504Value)
                {
                    _value_OP0504 = value;
                }
            }
        }
        public static string value_OP0506
        {
            get { return _value_OP0506; }
            set
            {
                lock (lockOP0506Value)
                {
                    _value_OP0506 = value;
                }
            }
        }
        public static string value_OP0507
        {
            get { return _value_OP0507; }
            set
            {
                lock (lockOP0507Value)
                {
                    _value_OP0507 = value;
                }
            }
        }
        #endregion
        #region OP10工序
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP10工序读码完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP1001 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP10工序测试完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP1002 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP10工序推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP1003 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP10工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP1004 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP10工序完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP1005 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP10工序告警标记线程
        /// </summary>
        public static bool isAllowRuning_OP1006 = false;
        public static bool isAllowRuning_OP1007 = false;
        /// <summary>
        /// ç›‘控OP10工序读码完成标记的警告消息
        /// </summary>
        private static string _lbl_Alert_OP1001 = string.Empty;
        /// <summary>
        /// ç›‘控OP10工序测试完成标记的警告消息
        /// </summary>
        private static string _lbl_Alert_OP1002 = string.Empty;
        /// <summary>
        /// ç›‘控OP10工序推出标记的警告消息
        /// </summary>
        private static string _lbl_Alert_OP1003 = string.Empty;
        /// <summary>
        /// ç›‘控OP10工序SPC推出标记的警告消息
        /// </summary>
        private static string _lbl_Alert_OP1004 = string.Empty;
        /// <summary>
        /// ç›‘控OP10工序完成标记的警告消息
        /// </summary>
        private static string _lbl_Alert_OP1005 = string.Empty;
        /// <summary>
        /// ç›‘控OP10工序告警信息
        /// </summary>
        private static string _lbl_Alert_OP1006 = string.Empty;
        private static string _lbl_Alert_OP1007 = string.Empty;
        /// <summary>
        /// OP10工序读码完成标记值
        /// </summary>
        public static string value_OP1001 = string.Empty;
        /// <summary>
        /// OP10工序测试完成标记值
        /// </summary>
        public static string value_OP1002 = string.Empty;
        /// <summary>
        /// OP10工序推出标记值
        /// </summary>
        public static string value_OP1003 = string.Empty;
        /// <summary>
        /// OP10工序SPC推出标记值
        /// </summary>
        public static string value_OP1004 = string.Empty;
        /// <summary>
        /// OP10工序完成标记值
        /// </summary>
        public static string value_OP1005 = string.Empty;
        /// <summary>
        /// OP10工序告警标记值
        /// </summary>
        public static string value_OP1006 = string.Empty;
        public static string value_OP1007 = string.Empty;
        private static object lockOP1001Alert = new object();
        private static object lockOP1002Alert = new object();
        private static object lockOP1003Alert = new object();
        private static object lockOP1004Alert = new object();
        private static object lockOP1005Alert = new object();
        private static object lockOP1006Alert = new object();
        private static object lockOP1007Alert = new object();
        public static string lbl_Alert_OP1001
        {
            get { return _lbl_Alert_OP1001; }
            set
            {
                lock (lockOP1001Alert)
                {
                    _lbl_Alert_OP1001 = value;
                }
            }
        }
        public static string lbl_Alert_OP1002
        {
            get { return _lbl_Alert_OP1002; }
            set
            {
                lock (lockOP1002Alert)
                {
                    _lbl_Alert_OP1002 = value;
                }
            }
        }
        public static string lbl_Alert_OP1003
        {
            get { return _lbl_Alert_OP1003; }
            set
            {
                lock (lockOP1003Alert)
                {
                    _lbl_Alert_OP1003 = value;
                }
            }
        }
        public static string lbl_Alert_OP1004
        {
            get { return _lbl_Alert_OP1004; }
            set
            {
                lock (lockOP1004Alert)
                {
                    _lbl_Alert_OP1004 = value;
                }
            }
        }
        public static string lbl_Alert_OP1005
        {
            get { return _lbl_Alert_OP1005; }
            set
            {
                lock (lockOP1005Alert)
                {
                    _lbl_Alert_OP1005 = value;
                }
            }
        }
        public static string lbl_Alert_OP1006
        {
            get { return _lbl_Alert_OP1006; }
            set
            {
                lock (lockOP1006Alert)
                {
                    _lbl_Alert_OP1006 = value;
                }
            }
        }
        public static string lbl_Alert_OP1007
        {
            get { return _lbl_Alert_OP1007; }
            set
            {
                lock (lockOP1007Alert)
                {
                    _lbl_Alert_OP1007 = value;
                }
            }
        }
        #endregion
        #region OP20工序
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP20工序读码完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP2001 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP20工序测试完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP2002 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP20工序推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP2003 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP20工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP2004 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP20工序完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP2005 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP20工序告警标记线程
        /// </summary>
        public static bool isAllowRuning_OP2006 = false;
        /// <summary>
        /// ç›‘控OP20工序读码完成标记的警告消息
        /// </summary>
        public static string _lbl_Alert_OP2001 = string.Empty;
        /// <summary>
        /// ç›‘控OP20工序测试完成标记的警告消息
        /// </summary>
        public static string _lbl_Alert_OP2002 = string.Empty;
        /// <summary>
        /// ç›‘控OP20工序推出标记的警告消息
        /// </summary>
        public static string _lbl_Alert_OP2003 = string.Empty;
        /// <summary>
        /// ç›‘控OP20工序SPC推出标记的警告消息
        /// </summary>
        public static string _lbl_Alert_OP2004 = string.Empty;
        /// <summary>
        /// ç›‘控OP20工序完成标记的警告消息
        /// </summary>
        public static string _lbl_Alert_OP2005 = string.Empty;
        /// <summary>
        /// ç›‘控OP20工序告警信息
        /// </summary>
        public static string _lbl_Alert_OP2006 = string.Empty;
        /// <summary>
        /// OP20工序读码完成标记值
        /// </summary>
        public static string value_OP2001 = string.Empty;
        /// <summary>
        /// OP20工序测试完成标记值
        /// </summary>
        public static string value_OP2002 = string.Empty;
        /// <summary>
        /// OP20工序推出标记值
        /// </summary>
        public static string value_OP2003 = string.Empty;
        /// <summary>
        /// OP20工序SPC推出标记值
        /// </summary>
        public static string value_OP2004 = string.Empty;
        /// <summary>
        /// OP20工序完成标记值
        /// </summary>
        public static string value_OP2005 = string.Empty;
        /// <summary>
        /// OP20工序告警标记值
        /// </summary>
        public static string value_OP2006 = string.Empty;
        #endregion
        #region OP30工序
        private static object lockOP3001Runing = new object();
        private static object lockOP3002Runing = new object();
        private static object lockOP3003Runing = new object();
        private static object lockOP3004Runing = new object();
        private static bool _isAllowRuning_OP3001 = false;
        private static bool _isAllowRuning_OP3002 = false;
        private static bool _isAllowRuning_OP3003 = false;
        private static bool _isAllowRuning_OP3004 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP30工序读码完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP3001
        {
            get { return _isAllowRuning_OP3001; }
            set
            {
                lock (lockOP3001Runing)
                {
                    _isAllowRuning_OP3001 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP30工序测量完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP3002
        {
            get { return _isAllowRuning_OP3002; }
            set
            {
                lock (lockOP3002Runing)
                {
                    _isAllowRuning_OP3002 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP30工序推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3003
        {
            get { return _isAllowRuning_OP3003; }
            set
            {
                lock (lockOP3003Runing)
                {
                    _isAllowRuning_OP3003 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP30工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3004
        {
            get { return _isAllowRuning_OP3004; }
            set
            {
                lock (lockOP3004Runing)
                {
                    _isAllowRuning_OP3004 = value;
                }
            }
        }
        private static object lockOP3001Alert = new object();
        private static object lockOP3002Alert = new object();
        private static object lockOP3003Alert = new object();
        private static object lockOP3004Alert = new object();
        private static string _lbl_Alert_OP3001 = string.Empty;
        private static string _lbl_Alert_OP3002 = string.Empty;
        private static string _lbl_Alert_OP3003 = string.Empty;
        private static string _lbl_Alert_OP3004 = string.Empty;
        /// <summary>
        /// ç›‘控OP30工序读码完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3001
        {
            get { return _lbl_Alert_OP3001; }
            set
            {
                lock (lockOP3001Alert)
                {
                    _lbl_Alert_OP3001 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP30工序测量完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3002
        {
            get { return _lbl_Alert_OP3002; }
            set
            {
                lock (lockOP3002Alert)
                {
                    _lbl_Alert_OP3002 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP30工序推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3003
        {
            get { return _lbl_Alert_OP3003; }
            set
            {
                lock (lockOP3003Alert)
                {
                    _lbl_Alert_OP3003 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP30工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3004
        {
            get { return _lbl_Alert_OP3004; }
            set
            {
                lock (lockOP3004Alert)
                {
                    _lbl_Alert_OP3004 = value;
                }
            }
        }
        private static object lockOP3001Value = new object();
        private static object lockOP3002Value = new object();
        private static object lockOP3003Value = new object();
        private static object lockOP3004Value = new object();
        private static string _value_OP3001 = string.Empty;
        private static string _value_OP3002 = string.Empty;
        private static string _value_OP3003 = string.Empty;
        private static string _value_OP3004 = string.Empty;
        /// <summary>
        /// OP30工序读码完成标记值
        /// </summary>
        public static string value_OP3001
        {
            get { return _value_OP3001; }
            set
            {
                lock (lockOP3001Value)
                {
                    _value_OP3001 = value;
                }
            }
        }
        /// <summary>
        /// OP30工序测量完成标记值
        /// </summary>
        public static string value_OP3002
        {
            get { return _value_OP3002; }
            set
            {
                lock (lockOP3002Value)
                {
                    _value_OP3002 = value;
                }
            }
        }
        /// <summary>
        /// OP30工序推出标记值
        /// </summary>
        public static string value_OP3003
        {
            get { return _value_OP3003; }
            set
            {
                lock (lockOP3003Value)
                {
                    _value_OP3003 = value;
                }
            }
        }
        /// <summary>
        /// OP30工序SPC推出标记值
        /// </summary>
        public static string value_OP3004
        {
            get { return _value_OP3004; }
            set
            {
                lock (lockOP3004Value)
                {
                    _value_OP3004 = value;
                }
            }
        }
        private static object lockOP3005Runing = new object();
        private static bool _isAllowRuning_OP3005 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP30工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3005
        {
            get { return _isAllowRuning_OP3005; }
            set
            {
                lock (lockOP3005Runing)
                {
                    _isAllowRuning_OP3005 = value;
                }
            }
        }
        private static object lockOP3005Alert = new object();
        private static string _lbl_Alert_OP3005 = string.Empty;
        /// <summary>
        /// ç›‘控OP30工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3005
        {
            get { return _lbl_Alert_OP3005; }
            set
            {
                lock (lockOP3005Alert)
                {
                    _lbl_Alert_OP3005 = value;
                }
            }
        }
        private static string _value_OP3005 = string.Empty;
        private static object lockOP3005Value = new object();
        /// <summary>
        /// OP30工序SPC推出标记值
        /// </summary>
        public static string value_OP3005
        {
            get { return _value_OP3005; }
            set
            {
                lock (lockOP3005Value)
                {
                    _value_OP3005 = value;
                }
            }
        }
        private static object lockOP3006Runing = new object();
        private static bool _isAllowRuning_OP3006 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP30工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3006
        {
            get { return _isAllowRuning_OP3006; }
            set
            {
                lock (lockOP3006Runing)
                {
                    _isAllowRuning_OP3006 = value;
                }
            }
        }
        private static object lockOP3006Alert = new object();
        private static string _lbl_Alert_OP3006 = string.Empty;
        /// <summary>
        /// ç›‘控OP30工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3006
        {
            get { return _lbl_Alert_OP3006; }
            set
            {
                lock (lockOP3006Alert)
                {
                    _lbl_Alert_OP3006 = value;
                }
            }
        }
        private static string _value_OP3006 = string.Empty;
        private static object lockOP3006Value = new object();
        /// <summary>
        /// OP30工序SPC推出标记值
        /// </summary>
        public static string value_OP3006
        {
            get { return _value_OP3006; }
            set
            {
                lock (lockOP3006Value)
                {
                    _value_OP3006 = value;
                }
            }
        }
        private static object lockOP3007Runing = new object();
        private static bool _isAllowRuning_OP3007 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP30工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3007
        {
            get { return _isAllowRuning_OP3007; }
            set
            {
                lock (lockOP3007Runing)
                {
                    _isAllowRuning_OP3007 = value;
                }
            }
        }
        private static object lockOP3007Alert = new object();
        private static string _lbl_Alert_OP3007 = string.Empty;
        /// <summary>
        /// ç›‘控OP30工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3007
        {
            get { return _lbl_Alert_OP3007; }
            set
            {
                lock (lockOP3007Alert)
                {
                    _lbl_Alert_OP3007 = value;
                }
            }
        }
        private static string _value_OP3007 = string.Empty;
        private static object lockOP3007Value = new object();
        /// <summary>
        /// OP30工序SPC推出标记值
        /// </summary>
        public static string value_OP3007
        {
            get { return _value_OP3007; }
            set
            {
                lock (lockOP3007Value)
                {
                    _value_OP3007 = value;
                }
            }
        }
        #endregion
        #region OP35工序
        private static object lockOP3501Runing = new object();
        private static object lockOP3502Runing = new object();
        private static object lockOP3503Runing = new object();
        private static object lockOP3504Runing = new object();
        private static bool _isAllowRuning_OP3501 = false;
        private static bool _isAllowRuning_OP3502 = false;
        private static bool _isAllowRuning_OP3503 = false;
        private static bool _isAllowRuning_OP3504 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP35工序读码完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP3501
        {
            get { return _isAllowRuning_OP3501; }
            set
            {
                lock (lockOP3501Runing)
                {
                    _isAllowRuning_OP3501 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP35工序测量完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP3502
        {
            get { return _isAllowRuning_OP3502; }
            set
            {
                lock (lockOP3502Runing)
                {
                    _isAllowRuning_OP3502 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP35工序推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3503
        {
            get { return _isAllowRuning_OP3503; }
            set
            {
                lock (lockOP3503Runing)
                {
                    _isAllowRuning_OP3503 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP35工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3504
        {
            get { return _isAllowRuning_OP3504; }
            set
            {
                lock (lockOP3504Runing)
                {
                    _isAllowRuning_OP3504 = value;
                }
            }
        }
        private static object lockOP3501Alert = new object();
        private static object lockOP3502Alert = new object();
        private static object lockOP3503Alert = new object();
        private static object lockOP3504Alert = new object();
        private static string _lbl_Alert_OP3501 = string.Empty;
        private static string _lbl_Alert_OP3502 = string.Empty;
        private static string _lbl_Alert_OP3503 = string.Empty;
        private static string _lbl_Alert_OP3504 = string.Empty;
        /// <summary>
        /// ç›‘控OP35工序读码完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3501
        {
            get { return _lbl_Alert_OP3501; }
            set
            {
                lock (lockOP3501Alert)
                {
                    _lbl_Alert_OP3501 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP35工序测量完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3502
        {
            get { return _lbl_Alert_OP3502; }
            set
            {
                lock (lockOP3502Alert)
                {
                    _lbl_Alert_OP3502 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP35工序推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3503
        {
            get { return _lbl_Alert_OP3503; }
            set
            {
                lock (lockOP3503Alert)
                {
                    _lbl_Alert_OP3503 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP35工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3504
        {
            get { return _lbl_Alert_OP3504; }
            set
            {
                lock (lockOP3504Alert)
                {
                    _lbl_Alert_OP3504 = value;
                }
            }
        }
        private static object lockOP3501Value = new object();
        private static object lockOP3502Value = new object();
        private static object lockOP3503Value = new object();
        private static object lockOP3504Value = new object();
        private static string _value_OP3501 = string.Empty;
        private static string _value_OP3502 = string.Empty;
        private static string _value_OP3503 = string.Empty;
        private static string _value_OP3504 = string.Empty;
        /// <summary>
        /// OP35工序读码完成标记值
        /// </summary>
        public static string value_OP3501
        {
            get { return _value_OP3501; }
            set
            {
                lock (lockOP3501Value)
                {
                    _value_OP3501 = value;
                }
            }
        }
        /// <summary>
        /// OP35工序测量完成标记值
        /// </summary>
        public static string value_OP3502
        {
            get { return _value_OP3502; }
            set
            {
                lock (lockOP3502Value)
                {
                    _value_OP3502 = value;
                }
            }
        }
        /// <summary>
        /// OP35工序推出标记值
        /// </summary>
        public static string value_OP3503
        {
            get { return _value_OP3503; }
            set
            {
                lock (lockOP3503Value)
                {
                    _value_OP3503 = value;
                }
            }
        }
        /// <summary>
        /// OP35工序SPC推出标记值
        /// </summary>
        public static string value_OP3504
        {
            get { return _value_OP3504; }
            set
            {
                lock (lockOP3504Value)
                {
                    _value_OP3504 = value;
                }
            }
        }
        private static object lockOP3505Runing = new object();
        private static bool _isAllowRuning_OP3505 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP35工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3505
        {
            get { return _isAllowRuning_OP3505; }
            set
            {
                lock (lockOP3505Runing)
                {
                    _isAllowRuning_OP3505 = value;
                }
            }
        }
        private static object lockOP3505Alert = new object();
        private static string _lbl_Alert_OP3505 = string.Empty;
        /// <summary>
        /// ç›‘控OP35工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3505
        {
            get { return _lbl_Alert_OP3505; }
            set
            {
                lock (lockOP3505Alert)
                {
                    _lbl_Alert_OP3505 = value;
                }
            }
        }
        private static string _value_OP3505 = string.Empty;
        private static object lockOP3505Value = new object();
        /// <summary>
        /// OP35工序SPC推出标记值
        /// </summary>
        public static string value_OP3505
        {
            get { return _value_OP3505; }
            set
            {
                lock (lockOP3505Value)
                {
                    _value_OP3505 = value;
                }
            }
        }
        private static object lockOP3506Runing = new object();
        private static bool _isAllowRuning_OP3506 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP35工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3506
        {
            get { return _isAllowRuning_OP3506; }
            set
            {
                lock (lockOP3506Runing)
                {
                    _isAllowRuning_OP3506 = value;
                }
            }
        }
        private static object lockOP3506Alert = new object();
        private static string _lbl_Alert_OP3506 = string.Empty;
        /// <summary>
        /// ç›‘控OP35工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3506
        {
            get { return _lbl_Alert_OP3506; }
            set
            {
                lock (lockOP3506Alert)
                {
                    _lbl_Alert_OP3506 = value;
                }
            }
        }
        private static string _value_OP3506 = string.Empty;
        private static object lockOP3506Value = new object();
        /// <summary>
        /// OP35工序SPC推出标记值
        /// </summary>
        public static string value_OP3506
        {
            get { return _value_OP3506; }
            set
            {
                lock (lockOP3506Value)
                {
                    _value_OP3506 = value;
                }
            }
        }
        private static object lockOP3507Runing = new object();
        private static bool _isAllowRuning_OP3507 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP35工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP3507
        {
            get { return _isAllowRuning_OP3507; }
            set
            {
                lock (lockOP3507Runing)
                {
                    _isAllowRuning_OP3507 = value;
                }
            }
        }
        private static object lockOP3507Alert = new object();
        private static string _lbl_Alert_OP3507 = string.Empty;
        /// <summary>
        /// ç›‘控OP35工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP3507
        {
            get { return _lbl_Alert_OP3507; }
            set
            {
                lock (lockOP3507Alert)
                {
                    _lbl_Alert_OP3507 = value;
                }
            }
        }
        private static string _value_OP3507 = string.Empty;
        private static object lockOP3507Value = new object();
        /// <summary>
        /// OP35工序SPC推出标记值
        /// </summary>
        public static string value_OP3507
        {
            get { return _value_OP3507; }
            set
            {
                lock (lockOP3507Value)
                {
                    _value_OP3507 = value;
                }
            }
        }
        #endregion
        #region OP70工序
        private static object lockOP7001Runing = new object();
        private static object lockOP7002Runing = new object();
        private static object lockOP7003Runing = new object();
        private static object lockOP7004Runing = new object();
        private static bool _isAllowRuning_OP7001 = false;
        private static bool _isAllowRuning_OP7002 = false;
        private static bool _isAllowRuning_OP7003 = false;
        private static bool _isAllowRuning_OP7004 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP70工序读码完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP7001
        {
            get { return _isAllowRuning_OP7001; }
            set
            {
                lock (lockOP7001Runing)
                {
                    _isAllowRuning_OP7001 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP70工序测量完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP7002
        {
            get { return _isAllowRuning_OP7002; }
            set
            {
                lock (lockOP7002Runing)
                {
                    _isAllowRuning_OP7002 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP70工序推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP7003
        {
            get { return _isAllowRuning_OP7003; }
            set
            {
                lock (lockOP7003Runing)
                {
                    _isAllowRuning_OP7003 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP70工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP7004
        {
            get { return _isAllowRuning_OP7004; }
            set
            {
                lock (lockOP7004Runing)
                {
                    _isAllowRuning_OP7004 = value;
                }
            }
        }
        private static object lockOP7001Alert = new object();
        private static object lockOP7002Alert = new object();
        private static object lockOP7003Alert = new object();
        private static object lockOP7004Alert = new object();
        private static string _lbl_Alert_OP7001 = string.Empty;
        private static string _lbl_Alert_OP7002 = string.Empty;
        private static string _lbl_Alert_OP7003 = string.Empty;
        private static string _lbl_Alert_OP7004 = string.Empty;
        /// <summary>
        /// ç›‘控OP70工序读码完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP7001
        {
            get { return _lbl_Alert_OP7001; }
            set
            {
                lock (lockOP7001Alert)
                {
                    _lbl_Alert_OP7001 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP70工序测量完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP7002
        {
            get { return _lbl_Alert_OP7002; }
            set
            {
                lock (lockOP7002Alert)
                {
                    _lbl_Alert_OP7002 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP70工序推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP7003
        {
            get { return _lbl_Alert_OP7003; }
            set
            {
                lock (lockOP7003Alert)
                {
                    _lbl_Alert_OP7003 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP70工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP7004
        {
            get { return _lbl_Alert_OP7004; }
            set
            {
                lock (lockOP7004Alert)
                {
                    _lbl_Alert_OP7004 = value;
                }
            }
        }
        private static object lockOP7001Value = new object();
        private static object lockOP7002Value = new object();
        private static object lockOP7003Value = new object();
        private static object lockOP7004Value = new object();
        private static string _value_OP7001 = string.Empty;
        private static string _value_OP7002 = string.Empty;
        private static string _value_OP7003 = string.Empty;
        private static string _value_OP7004 = string.Empty;
        /// <summary>
        /// OP70工序读码完成标记值
        /// </summary>
        public static string value_OP7001
        {
            get { return _value_OP7001; }
            set
            {
                lock (lockOP7001Value)
                {
                    _value_OP7001 = value;
                }
            }
        }
        /// <summary>
        /// OP70工序测量完成标记值
        /// </summary>
        public static string value_OP7002
        {
            get { return _value_OP7002; }
            set
            {
                lock (lockOP7002Value)
                {
                    _value_OP7002 = value;
                }
            }
        }
        /// <summary>
        /// OP70工序推出标记值
        /// </summary>
        public static string value_OP7003
        {
            get { return _value_OP7003; }
            set
            {
                lock (lockOP7003Value)
                {
                    _value_OP7003 = value;
                }
            }
        }
        /// <summary>
        /// OP70工序读码(就是OP70工序测量完成后会打印一个新二维码,绑定原工件号)
        /// </summary>
        public static string value_OP7004
        {
            get { return _value_OP7004; }
            set
            {
                lock (lockOP7004Value)
                {
                    _value_OP7004 = value;
                }
            }
        }
        private static object lockOP7005Runing = new object();
        private static bool _isAllowRuning_OP7005 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP70工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP7005
        {
            get { return _isAllowRuning_OP7005; }
            set
            {
                lock (lockOP7005Runing)
                {
                    _isAllowRuning_OP7005 = value;
                }
            }
        }
        private static object lockOP7005Alert = new object();
        private static string _lbl_Alert_OP7005 = string.Empty;
        /// <summary>
        /// ç›‘控OP70工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP7005
        {
            get { return _lbl_Alert_OP7005; }
            set
            {
                lock (lockOP7005Alert)
                {
                    _lbl_Alert_OP7005 = value;
                }
            }
        }
        private static string _value_OP7005 = string.Empty;
        private static object lockOP7005Value = new object();
        /// <summary>
        /// OP70工序SPC推出标记值
        /// </summary>
        public static string value_OP7005
        {
            get { return _value_OP7005; }
            set
            {
                lock (lockOP7005Value)
                {
                    _value_OP7005 = value;
                }
            }
        }
        private static object lockOP7006Runing = new object();
        private static bool _isAllowRuning_OP7006 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP70工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP7006
        {
            get { return _isAllowRuning_OP7006; }
            set
            {
                lock (lockOP7006Runing)
                {
                    _isAllowRuning_OP7006 = value;
                }
            }
        }
        private static object lockOP7006Alert = new object();
        private static string _lbl_Alert_OP7006 = string.Empty;
        /// <summary>
        /// ç›‘控OP70工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP7006
        {
            get { return _lbl_Alert_OP7006; }
            set
            {
                lock (lockOP7006Alert)
                {
                    _lbl_Alert_OP7006 = value;
                }
            }
        }
        private static string _value_OP7006 = string.Empty;
        private static object lockOP7006Value = new object();
        /// <summary>
        /// OP70工序SPC推出标记值
        /// </summary>
        public static string value_OP7006
        {
            get { return _value_OP7006; }
            set
            {
                lock (lockOP7006Value)
                {
                    _value_OP7006 = value;
                }
            }
        }
        private static object lockOP7007Runing = new object();
        private static bool _isAllowRuning_OP7007 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP70工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP7007
        {
            get { return _isAllowRuning_OP7007; }
            set
            {
                lock (lockOP7007Runing)
                {
                    _isAllowRuning_OP7007 = value;
                }
            }
        }
        private static object lockOP7007Alert = new object();
        private static string _lbl_Alert_OP7007 = string.Empty;
        /// <summary>
        /// ç›‘控OP70工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP7007
        {
            get { return _lbl_Alert_OP7007; }
            set
            {
                lock (lockOP7007Alert)
                {
                    _lbl_Alert_OP7007 = value;
                }
            }
        }
        private static string _value_OP7007 = string.Empty;
        private static object lockOP7007Value = new object();
        /// <summary>
        /// OP70工序SPC推出标记值
        /// </summary>
        public static string value_OP7007
        {
            get { return _value_OP7007; }
            set
            {
                lock (lockOP7007Value)
                {
                    _value_OP7007 = value;
                }
            }
        }
        #endregion
        #region OP80工序
        private static object lockOP8001Runing = new object();
        private static object lockOP8002Runing = new object();
        private static object lockOP8003Runing = new object();
        private static object lockOP8004Runing = new object();
        private static bool _isAllowRuning_OP8001 = false;
        private static bool _isAllowRuning_OP8002 = false;
        private static bool _isAllowRuning_OP8003 = false;
        private static bool _isAllowRuning_OP8004 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP80工序读码完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP8001
        {
            get { return _isAllowRuning_OP8001; }
            set
            {
                lock (lockOP8001Runing)
                {
                    _isAllowRuning_OP8001 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP80工序测量完成标记线程
        /// </summary>
        public static bool isAllowRuning_OP8002
        {
            get { return _isAllowRuning_OP8002; }
            set
            {
                lock (lockOP8002Runing)
                {
                    _isAllowRuning_OP8002 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP80工序推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP8003
        {
            get { return _isAllowRuning_OP8003; }
            set
            {
                lock (lockOP8003Runing)
                {
                    _isAllowRuning_OP8003 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP80工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP8004
        {
            get { return _isAllowRuning_OP8004; }
            set
            {
                lock (lockOP8004Runing)
                {
                    _isAllowRuning_OP8004 = value;
                }
            }
        }
        private static object lockOP8001Alert = new object();
        private static object lockOP8002Alert = new object();
        private static object lockOP8003Alert = new object();
        private static object lockOP8004Alert = new object();
        private static string _lbl_Alert_OP8001 = string.Empty;
        private static string _lbl_Alert_OP8002 = string.Empty;
        private static string _lbl_Alert_OP8003 = string.Empty;
        private static string _lbl_Alert_OP8004 = string.Empty;
        /// <summary>
        /// ç›‘控OP80工序读码完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP8001
        {
            get { return _lbl_Alert_OP8001; }
            set
            {
                lock (lockOP8001Alert)
                {
                    _lbl_Alert_OP8001 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP80工序测量完成标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP8002
        {
            get { return _lbl_Alert_OP8002; }
            set
            {
                lock (lockOP8002Alert)
                {
                    _lbl_Alert_OP8002 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP80工序推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP8003
        {
            get { return _lbl_Alert_OP8003; }
            set
            {
                lock (lockOP8003Alert)
                {
                    _lbl_Alert_OP8003 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控OP80工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP8004
        {
            get { return _lbl_Alert_OP8004; }
            set
            {
                lock (lockOP8004Alert)
                {
                    _lbl_Alert_OP8004 = value;
                }
            }
        }
        private static object lockOP8001Value = new object();
        private static object lockOP8002Value = new object();
        private static object lockOP8003Value = new object();
        private static object lockOP8004Value = new object();
        private static string _value_OP8001 = string.Empty;
        private static string _value_OP8002 = string.Empty;
        private static string _value_OP8003 = string.Empty;
        private static string _value_OP8004 = string.Empty;
        /// <summary>
        /// OP80工序读码完成标记值
        /// </summary>
        public static string value_OP8001
        {
            get { return _value_OP8001; }
            set
            {
                lock (lockOP8001Value)
                {
                    _value_OP8001 = value;
                }
            }
        }
        /// <summary>
        /// OP80工序测量完成标记值
        /// </summary>
        public static string value_OP8002
        {
            get { return _value_OP8002; }
            set
            {
                lock (lockOP8002Value)
                {
                    _value_OP8002 = value;
                }
            }
        }
        /// <summary>
        /// OP80工序推出标记值
        /// </summary>
        public static string value_OP8003
        {
            get { return _value_OP8003; }
            set
            {
                lock (lockOP8003Value)
                {
                    _value_OP8003 = value;
                }
            }
        }
        /// <summary>
        /// OP80工序读码(就是OP80工序测量完成后会打印一个新二维码,绑定原工件号)
        /// </summary>
        public static string value_OP8004
        {
            get { return _value_OP8004; }
            set
            {
                lock (lockOP8004Value)
                {
                    _value_OP8004 = value;
                }
            }
        }
        private static object lockOP8005Runing = new object();
        private static bool _isAllowRuning_OP8005 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP80工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP8005
        {
            get { return _isAllowRuning_OP8005; }
            set
            {
                lock (lockOP8005Runing)
                {
                    _isAllowRuning_OP8005 = value;
                }
            }
        }
        private static object lockOP8005Alert = new object();
        private static string _lbl_Alert_OP8005 = string.Empty;
        /// <summary>
        /// ç›‘控OP80工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP8005
        {
            get { return _lbl_Alert_OP8005; }
            set
            {
                lock (lockOP8005Alert)
                {
                    _lbl_Alert_OP8005 = value;
                }
            }
        }
        private static string _value_OP8005 = string.Empty;
        private static object lockOP8005Value = new object();
        /// <summary>
        /// OP80工序SPC推出标记值
        /// </summary>
        public static string value_OP8005
        {
            get { return _value_OP8005; }
            set
            {
                lock (lockOP8005Value)
                {
                    _value_OP8005 = value;
                }
            }
        }
        private static object lockOP8006Runing = new object();
        private static bool _isAllowRuning_OP8006 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP80工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP8006
        {
            get { return _isAllowRuning_OP8006; }
            set
            {
                lock (lockOP8006Runing)
                {
                    _isAllowRuning_OP8006 = value;
                }
            }
        }
        private static object lockOP8006Alert = new object();
        private static string _lbl_Alert_OP8006 = string.Empty;
        /// <summary>
        /// ç›‘控OP80工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP8006
        {
            get { return _lbl_Alert_OP8006; }
            set
            {
                lock (lockOP8006Alert)
                {
                    _lbl_Alert_OP8006 = value;
                }
            }
        }
        private static string _value_OP8006 = string.Empty;
        private static object lockOP8006Value = new object();
        /// <summary>
        /// OP80工序SPC推出标记值
        /// </summary>
        public static string value_OP8006
        {
            get { return _value_OP8006; }
            set
            {
                lock (lockOP8006Value)
                {
                    _value_OP8006 = value;
                }
            }
        }
        private static object lockOP8007Runing = new object();
        private static bool _isAllowRuning_OP8007 = false;
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控OP80工序SPC推出标记线程
        /// </summary>
        public static bool isAllowRuning_OP8007
        {
            get { return _isAllowRuning_OP8007; }
            set
            {
                lock (lockOP8007Runing)
                {
                    _isAllowRuning_OP8007 = value;
                }
            }
        }
        private static object lockOP8007Alert = new object();
        private static string _lbl_Alert_OP8007 = string.Empty;
        /// <summary>
        /// ç›‘控OP80工序SPC推出标记的警告消息
        /// </summary>
        public static string lbl_Alert_OP8007
        {
            get { return _lbl_Alert_OP8007; }
            set
            {
                lock (lockOP8007Alert)
                {
                    _lbl_Alert_OP8007 = value;
                }
            }
        }
        private static string _value_OP8007 = string.Empty;
        private static object lockOP8007Value = new object();
        /// <summary>
        /// OP80工序SPC推出标记值
        /// </summary>
        public static string value_OP8007
        {
            get { return _value_OP8007; }
            set
            {
                lock (lockOP8007Value)
                {
                    _value_OP8007 = value;
                }
            }
        }
        #endregion
        #region HMI
        private static object lockHMIBeartBeatMonitorRuning = new object();
        private static bool _isAllowRuning_HMIBeartBeatMonitor = false;
        private static object lockHMIBeartBeatMonitorAlert = new object();
        private static string _lbl_Alert_HMIBeartBeatMonitor = string.Empty;
        /// <summary>
        /// ç›‘控HMI心跳信息
        /// </summary>
        public static bool isAllowRuning_HMIBeartBeatMonitor
        {
            get { return _isAllowRuning_HMIBeartBeatMonitor; }
            set
            {
                lock (lockHMIBeartBeatMonitorRuning)
                {
                    _isAllowRuning_HMIBeartBeatMonitor = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控HMI心跳信息的警告消息
        /// </summary>
        public static string lbl_Alert_HMIBeartBeatMonitor
        {
            get { return _lbl_Alert_HMIBeartBeatMonitor; }
            set
            {
                lock (lockHMIBeartBeatMonitorAlert)
                {
                    _lbl_Alert_HMIBeartBeatMonitor = value;
                }
            }
        }
        private static object lockHMIOP104001Runing = new object();
        private static object lockHMIOP2001Runing = new object();
        private static object lockHMIOP303501Runing = new object();
        private static object lockHMIOP5001Runing = new object();
        private static object lockHMIOP6001Runing = new object();
        private static object lockHMIOP104002Runing = new object();
        private static object lockHMIOP2002Runing = new object();
        private static object lockHMIOP303502Runing = new object();
        private static object lockHMIOP5002Runing = new object();
        private static object lockHMIOP6002Runing = new object();
        private static bool _isAllowRuning_HMIOP104001 = false;
        private static bool _isAllowRuning_HMIOP2001 = false;
        private static bool _isAllowRuning_HMIOP303501 = false;
        private static bool _isAllowRuning_HMIOP5001 = false;
        private static bool _isAllowRuning_HMIOP6001 = false;
        private static bool _isAllowRuning_HMIOP104002 = false;
        private static bool _isAllowRuning_HMIOP2002 = false;
        private static bool _isAllowRuning_HMIOP303502 = false;
        private static bool _isAllowRuning_HMIOP5002 = false;
        private static bool _isAllowRuning_HMIOP6002 = false;
        private static object lockHMIOP104001Alert = new object();
        private static object lockHMIOP2001Alert = new object();
        private static object lockHMIOP303501Alert = new object();
        private static object lockHMIOP5001Alert = new object();
        private static object lockHMIOP6001Alert = new object();
        private static object lockHMIOP104002Alert = new object();
        private static object lockHMIOP2002Alert = new object();
        private static object lockHMIOP303502Alert = new object();
        private static object lockHMIOP5002Alert = new object();
        private static object lockHMIOP6002Alert = new object();
        private static string _lbl_Alert_HMIOP104001 = string.Empty;
        private static string _lbl_Alert_HMIOP2001 = string.Empty;
        private static string _lbl_Alert_HMIOP303501 = string.Empty;
        private static string _lbl_Alert_HMIOP5001 = string.Empty;
        private static string _lbl_Alert_HMIOP6001 = string.Empty;
        private static string _lbl_Alert_HMIOP104002 = string.Empty;
        private static string _lbl_Alert_HMIOP2002 = string.Empty;
        private static string _lbl_Alert_HMIOP303502 = string.Empty;
        private static string _lbl_Alert_HMIOP5002 = string.Empty;
        private static string _lbl_Alert_HMIOP6002 = string.Empty;
        #region ç›‘控读取线程
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP104001读取二维码线程
        /// </summary>
        public static bool isAllowRuning_HMIOP104001
        {
            get { return _isAllowRuning_HMIOP104001; }
            set
            {
                lock (lockHMIOP104001Runing)
                {
                    _isAllowRuning_HMIOP104001 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP2001读取二维码线程
        /// </summary>
        public static bool isAllowRuning_HMIOP2001
        {
            get { return _isAllowRuning_HMIOP2001; }
            set
            {
                lock (lockHMIOP2001Runing)
                {
                    _isAllowRuning_HMIOP2001 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP303501读取二维码线程
        /// </summary>
        public static bool isAllowRuning_HMIOP303501
        {
            get { return _isAllowRuning_HMIOP303501; }
            set
            {
                lock (lockHMIOP303501Runing)
                {
                    _isAllowRuning_HMIOP303501 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP5001读取二维码线程
        /// </summary>
        public static bool isAllowRuning_HMIOP5001
        {
            get { return _isAllowRuning_HMIOP5001; }
            set
            {
                lock (lockHMIOP5001Runing)
                {
                    _isAllowRuning_HMIOP5001 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP6001读取二维码线程
        /// </summary>
        public static bool isAllowRuning_HMIOP6001
        {
            get { return _isAllowRuning_HMIOP6001; }
            set
            {
                lock (lockHMIOP6001Runing)
                {
                    _isAllowRuning_HMIOP6001 = value;
                }
            }
        }
        #endregion
        #region ç›‘控写入线程
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP104002写入质量数据线程
        /// </summary>
        public static bool isAllowRuning_HMIOP104002
        {
            get { return _isAllowRuning_HMIOP104002; }
            set
            {
                lock (lockHMIOP104002Runing)
                {
                    _isAllowRuning_HMIOP104002 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP2002写入质量数据线程
        /// </summary>
        public static bool isAllowRuning_HMIOP2002
        {
            get { return _isAllowRuning_HMIOP2002; }
            set
            {
                lock (lockHMIOP2002Runing)
                {
                    _isAllowRuning_HMIOP2002 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP303502写入质量数据线程
        /// </summary>
        public static bool isAllowRuning_HMIOP303502
        {
            get { return _isAllowRuning_HMIOP303502; }
            set
            {
                lock (lockHMIOP303502Runing)
                {
                    _isAllowRuning_HMIOP303502 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP5002写入质量数据线程
        /// </summary>
        public static bool isAllowRuning_HMIOP5002
        {
            get { return _isAllowRuning_HMIOP5002; }
            set
            {
                lock (lockHMIOP5002Runing)
                {
                    _isAllowRuning_HMIOP5002 = value;
                }
            }
        }
        /// <summary>
        /// æ˜¯å¦å…è®¸æ‰§è¡Œç›‘控HMIOP6002更新质量数据线程
        /// </summary>
        public static bool isAllowRuning_HMIOP6002
        {
            get { return _isAllowRuning_HMIOP6002; }
            set
            {
                lock (lockHMIOP6002Runing)
                {
                    _isAllowRuning_HMIOP6002 = value;
                }
            }
        }
        #endregion
        #region ç›‘控读取线程二维码的警告信息
        /// <summary>
        /// ç›‘控HMIOP104001读取二维码的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP104001
        {
            get { return _lbl_Alert_HMIOP104001; }
            set
            {
                lock (lockHMIOP104001Alert)
                {
                    _lbl_Alert_HMIOP104001 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控HMIOP2001读取二维码的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP2001
        {
            get { return _lbl_Alert_HMIOP2001; }
            set
            {
                lock (lockHMIOP2001Alert)
                {
                    _lbl_Alert_HMIOP2001 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控HMIOP303501读取二维码的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP303501
        {
            get { return _lbl_Alert_HMIOP303501; }
            set
            {
                lock (lockHMIOP303501Alert)
                {
                    _lbl_Alert_HMIOP303501 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控HMIOP5001读取二维码的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP5001
        {
            get { return _lbl_Alert_HMIOP5001; }
            set
            {
                lock (lockHMIOP5001Alert)
                {
                    _lbl_Alert_HMIOP5001 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控HMIOP6001读取二维码的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP6001
        {
            get { return _lbl_Alert_HMIOP6001; }
            set
            {
                lock (lockHMIOP6001Alert)
                {
                    _lbl_Alert_HMIOP6001 = value;
                }
            }
        }
        #endregion
        #region ç›‘控写入线程二维码的警告信息
        /// <summary>
        /// ç›‘控HMIOP104002写入质量数据的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP104002
        {
            get { return _lbl_Alert_HMIOP104002; }
            set
            {
                lock (lockHMIOP104002Alert)
                {
                    _lbl_Alert_HMIOP104002 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控HMIOP2002写入质量数据的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP2002
        {
            get { return _lbl_Alert_HMIOP2002; }
            set
            {
                lock (lockHMIOP2002Alert)
                {
                    _lbl_Alert_HMIOP2002 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控HMIOP303502写入质量数据的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP303502
        {
            get { return _lbl_Alert_HMIOP303502; }
            set
            {
                lock (lockHMIOP303502Alert)
                {
                    _lbl_Alert_HMIOP303502 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控HMIOP5002更新质量数据的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP5002
        {
            get { return _lbl_Alert_HMIOP5002; }
            set
            {
                lock (lockHMIOP5002Alert)
                {
                    _lbl_Alert_HMIOP5002 = value;
                }
            }
        }
        /// <summary>
        /// ç›‘控HMIOP6002更新质量数据的警告消息
        /// </summary>
        public static string lbl_Alert_HMIOP6002
        {
            get { return _lbl_Alert_HMIOP6002; }
            set
            {
                lock (lockHMIOP6002Alert)
                {
                    _lbl_Alert_HMIOP6002 = value;
                }
            }
        }
        #endregion
        #endregion
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2075 @@
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using iWare_SCADA_Model.TableModel;
using log4net;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
//using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using System.Windows.Forms;
using static System.Windows.Forms.AxHost;
namespace iWare_SCADA_BusinessLogical.BLL
{
    public class WorkPieceInfoManager
    {
        public static WorkPieceInfo GetWorkPieceInfo(string WorkPieceID)
        {
            using (DbModel db = new DbModel())
            {
                //查询所有
                var query = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID).FirstOrDefault();
                return query;
            }
        }
        public static long InsertWorkPieceInfo(WorkPieceInfo workPiece)
        {
            using (DbModel db = new DbModel())
            {
                db.WorkPieceInfo.Add(workPiece);
                db.SaveChanges();
                return workPiece.Id;
            }
        }
        public static WorkPieceLogMiddle GetAddWorkPieceLog(WorkPieceLogMiddle loginfo)
        {
            loginfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
            return loginfo;
        }
        /// <summary>
        /// ç»™WorkPieceLog主键等公共的的属性赋值
        /// </summary>
        /// <param name="loginfo"></param>
        /// <returns></returns>
        public static WorkPieceLog GetAddWorkPieceLog(WorkPieceLog loginfo)
        {
            loginfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
            return loginfo;
        }
        public static WorkPieceLog GetAddWorkPieceLog1(WorkPieceLogMiddle loginfo)
        {
            loginfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
            return loginfo;
        }
        /// <summary>
        /// é€šè¿‡WorkPieceInfo   ç»™WorkPieceInfoLog å±žæ€§èµ‹å€¼
        /// </summary>
        /// <param name="wpinfo"></param>
        /// <returns></returns>
        public static WorkPieceInfoLog GetAddWorkPieceInfoLog(WorkPieceInfo wpinfo)
        {
            WorkPieceInfoLog infolog = EntityPropHelper.Mapper<WorkPieceInfoLog, WorkPieceInfo>(wpinfo);
            infolog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
            infolog.WorkPieceInfoID = wpinfo.Id;
            infolog.LogAddTime = DateTime.Now;
            return infolog;
        }
        /// <summary>
        /// ç»™QualityDataInfo主键等公共的的属性赋值
        /// </summary>
        /// <param name="loginfo"></param>
        /// <returns></returns>
        public static QualityDataInfo GetAddQualityDataInfo(QualityDataInfo qdinfo)
        {
            qdinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
            return qdinfo;
        }
        /// <summary>
        /// é€šè¿‡QualityDataInfo   ç»™QualityDataInfoLog å±žæ€§èµ‹å€¼
        /// </summary>
        /// <param name="wpinfo"></param>
        /// <returns></returns>
        public static QualityDataInfoLog GetAddQualityDataInfoLog(QualityDataInfo qdinfo)
        {
            QualityDataInfoLog infolog = EntityPropHelper.Mapper<QualityDataInfoLog, QualityDataInfo>(qdinfo);
            infolog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
            return infolog;
        }
        public static void test()
        {
            using (DbModel db = new DbModel())
            {
                //WorkPieceLogMiddle a = new WorkPieceLogMiddle();
                //a.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                //a.WorkPieceID="test01"+ new Random().Next(4).ToString();
                //a.QualityType = QualityType.SPC.ToString();
                //if(a.QualityType.Equals(QualityType.SPC.ToString()))
                //{
                //    a.Remarks = "SPC";
                //}
                //else
                //{
                //    a.Remarks = "AUTO";
                //}
                //WorkPieceLog b = new WorkPieceLog();
                //b.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                //b.WorkPieceID = "testxxx" + new Random().Next(0,1000).ToString();
                //b.QualityType = QualityType.SPC.ToString();
                //b.Remarks = "SPC insert into";
                //b.QualityState = 2;
                //b.QualityStateUpdateMode = "heheh";
                //db.WorkPieceLog.Add(b);
                //db.SaveChanges();
            }
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡id更新刀具寿命信息(目前设定每生产一个工件,所有刀具寿命都会减1)
        /// </summary>
        /// <param name="db"></param>
        /// <param name="loginfo"></param>
        public static void UpdateKnifeToolLift(DbModel db, WorkPieceLog loginfo)
        {
            try
            {
                var info = db.KnifeToolEquipmentInfo.Where(o => o.EquipmentID.Equals(loginfo.EquipmentID)).ToList();
                foreach(var item in info)
                {
                    item.CurrentLife++;
                    item.UpdatedTime= DateTime.Now;
                }
            }catch(Exception ex)
            {
               loginfo.Remarks = (loginfo.Remarks ?? "") + $"{loginfo.WorkPieceID ?? "空"}刀具寿命更新数据异常{ex.Message}";
            }
        }
        /// <summary>
        /// è¯»å–二维码时逻辑
        /// æ ¡éªŒå·¥ä»¶æ˜¯å¦è·³åºï¼Œè´¨é‡æ˜¯å¦åˆæ ¼
        /// </summary>
        public static void ReadQRcode(WorkPieceLog loginfo, LogType type,PLCService plcService, int? IsFeedback)
        {//此处同时插入了WorkPieceLog,WorkPieceInfoLog表,并新增或修改WorkPieceInfo表
            using (DbModel db = new DbModel())
            {
                try
                {
                    bool isAddWorkPieceInfo = false;
                    if (loginfo.WorkPieceID.Length == 22)
                    {
                        WorkPieceInfo info = new WorkPieceInfo();
                        info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
                        if (info == null || info.WorkPieceID.Length < 1)
                        {//插入WorkPieceInfo表
                            loginfo = CommonManager.Instance.GetWorkPieceID(loginfo, type);
                            info = EntityPropHelper.Mapper<WorkPieceInfo, WorkPieceLog>(loginfo);
                            //EntityPropHelper<WorkPieceLog, WorkPieceInfo>.CopyProp(loginfo, info, loginfo.GetWorkPieceInfoDict());
                            if (!loginfo.WorkingProcedure.Equals("OP05"))
                            {//当工件二维码第一次出现的工序不是OP05,则设置为可疑状态
                                info.QualityState = (int)QualityState.Suspected;
                                info.QualityErrorInfo = $"工件二维码第一次出现的工序{loginfo.MonitoringPoint}不是OP05,数据缺失,请确认情况并做相应处理!";
                                info.Remarks = $"工件二维码第一次出现的工序{loginfo.WorkingProcedure}不是OP05,数据缺失,请确认情况并做相应处理!";
                            }
                            else
                            {
                                info.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值
                                info.Remarks = "OP05新增工件信息";
                            }
                            info.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();
                            info.WorkingProcedurePlan = ConfigHelper.GetConfigString("WorkingProcedureAllStr") ?? "OP05OP10OP20OP30OP35OP40OP50OP60OP70OP80";
                            info.CreatedUserName = loginfo.MonitoringPoint;
                            info.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                            info = ParseQRCode(info);
                            isAddWorkPieceInfo = true;
                        }
                        else
                        {
                            if(info.WorkingProcedureCurrent.Equals("OP05"))
                            {
                                loginfo.Remarks = (loginfo.Remarks ?? "") + $"读取二维码{loginfo.WorkPieceID ?? "空"} OP05工序重复读取了";
                                return;
                            }
                        }
                        info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();//
                        info.WorkingProcedureEndTime = null;
                        info.WorkPieceState = (int)WorkPieceState.WIP;
                        info.EquipmentID = loginfo.EquipmentID;
                        info.QualityStateUpdateUser = loginfo.UpdatedUserName;
                        info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime;
                        info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                        info.UpdatedUserName = loginfo.MonitoringPoint;
                        info.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                        info.WorkPieceCurrentPosition = loginfo.WorkingProcedure;
                        info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2;
                        info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                        info.Remarks = info.Remarks??""+$"{info.WorkingProcedureCurrent}工件上线";
                        var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID &&!o.OperationType.Equals("SPC")&& (o.EndTime==null|| o.EndTime<=DateTime.MinValue)).OrderByDescending(o => o.StartTime).FirstOrDefault();
                        if (pro != null && pro.WorkPieceID.Length > 1)
                        {
                            pro.EndTime = DateTimeHelper.GetDateTime();
                            pro.UpdatedUserName = loginfo.MonitoringPoint;
                            pro.UpdatedTime = DateTimeHelper.GetDateTime();
                            pro.Remarks = (pro.Remarks ?? "") + "又一次上线,更新结束时间";
                        }
                        //每次扫描上线都插入追溯表
                        WorkPieceProcess process = new WorkPieceProcess();
                        process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(info);
                        process.StartTime = DateTimeHelper.GetDateTime();
                        process.QualityState = info.QualityState.HasValue ? info.QualityState.Value : (int)QualityState.OK;
                        process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                        process.CreatedUserName = loginfo.MonitoringPoint;
                        process.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                        process.UpdatedUserName = loginfo.MonitoringPoint;
                        process.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                        process.OperationType = OperationType.生产.ToString();
                        process.Remarks = "";
                        if (loginfo.WorkingProcedure.Equals("OP05"))
                        {
                            process.EndTime = process.StartTime;
                        }
                        db.WorkPieceProcess.Add(process);
                        //db.Database.AutoTransactionsEnabled = false;// åŒä¸€ä¸ªSaveChanges默认事务, å…³é—­é»˜è®¤äº‹åŠ¡ï¼š... å¥½åƒä¸èƒ½ç”¨å•Šï¼ŒåŽé¢å†ç ”究吧
                        if (isAddWorkPieceInfo)
                        {
                            db.WorkPieceInfo.Add(info);
                        }
                        else
                        {//不确定info是直接会修改还是需要再次查询,待测试
                         //info.Remarks = "修改,具体修改逻辑待定";
                        }
                        #region åˆ¤æ–­æ˜¯å¦è·³åº,或质量不符合 ç„¶åŽåé¦ˆPLC
                        if (IsFeedback.HasValue && IsFeedback.Value == (int)FeedbackMode.FeedbackPLC)
                        {
                            bool checkQualityInfoCompleteFlag = false;
                            bool plcFlag = true;//反馈给PLC的标记
                            string message = "";
                            checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, loginfo, type);
                            if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK)
                            {
                                plcFlag = false;
                                message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                                message += info.QualityState != (int)QualityState.OK ? "质量不符合" : "";
                            }
                            ////反馈给PLC,(写入点待定)
                            //MessageModel fr = null;
                            //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
                            //if (fr.result)
                            //{
                            //    Log4NetHelper.WriteInfoLog(type, $" å·¥ä»¶{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC æˆåŠŸï¼Œ å‡ºçް {message}");
                            //}
                            //else
                            //{
                            //    Log4NetHelper.WriteErrorLog(type, $" å·¥ä»¶{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC å¤±è´¥ï¼Œ å‡ºçް {message} ï¼Œå¤±è´¥åŽŸå› ï¼š{fr.resMsg}");
                            //}
                            //#region åé¦ˆPLC
                            //bool checkQualityInfoCompleteFlag = false;
                            //bool plcFlag = true;//反馈给PLC的标记
                            //string message = "";
                            //checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            //if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK)
                            //{
                            //    plcFlag = false;
                            //    message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                            //message += info.QualityState != (int)QualityState.OK ? "质量不符合" : "";
                            //}
                            ////反馈给PLC,(写入点待定)
                            //MessageModel fr = null;
                            //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
                            //if (fr.result)
                            //{
                            //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC æˆåŠŸï¼Œ å‡ºçް {message}");
                            //}
                            //else
                            //{
                            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC å¤±è´¥ï¼Œ å‡ºçް {message} ï¼Œå¤±è´¥åŽŸå› ï¼š{fr.resMsg}");
                            //}
                            //#endregion
                        }
                        else
                        {//读码完成若工件质量不符合或发生跳序,不用管设备是否把工件放过去,数采系统都不变更当前工序,反馈设备PLC工件不符合,
                         //若工序后续收集点收到相关工件信息再变更当前工序,  ä½†è´¨é‡ä¿¡æ¯ä¸å˜
                            info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                        }
                        #endregion
                        #region æ›´æ–°è®¾å¤‡å®žæ—¶è¡¨
                        bool isAddEquipmentCurrentMonitor = false;
                        EquipmentCurrentMonitor equinfo = new EquipmentCurrentMonitor();
                        equinfo = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == loginfo.EquipmentID).FirstOrDefault();
                        if (equinfo == null || equinfo.Id < 1)
                        {//没有工件信息,不做更新
                            Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} å‘Šè­¦ç›‘控{loginfo.WorkingProcedure} æ²¡æœ‰èŽ·å–åˆ°è®¾å¤‡ç›‘æŽ§ä¿¡æ¯ï¼ŒçŽ°æ–°å¢ž");
                            equinfo = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLog>(loginfo);
                            equinfo.OnlineTime=DateTime.Now;
                            isAddEquipmentCurrentMonitor = true;
                        }
                        else
                        {//更新工件
                            equinfo.WorkPieceID = loginfo.WorkPieceID;
                            equinfo.UpdatedUserName = loginfo.MonitoringPoint;
                            equinfo.UpdatedTime = DateTime.Now;
                            equinfo.OnlineTime = DateTime.Now;
                        }
                        if (isAddEquipmentCurrentMonitor)
                        {
                            equinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            db.EquipmentCurrentMonitor.Add(equinfo);
                        }
                        #endregion
                        //db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo));
                        db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info));
                        //UpdateKnifeToolLift(db, loginfo);//更新刀具寿命信息
                    }
                    else
                    {
                        loginfo.Remarks = (loginfo.Remarks ?? "") + $"上线完成读取二维码{loginfo.WorkPieceID ?? "空"}异常";
                        Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}上线监控读码标记 è¯»å–工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:");
                    }
                }
                catch(Exception e)
                {
                    loginfo.Remarks = (loginfo.Remarks ?? "") + $"读取二维码{loginfo.WorkPieceID ?? "空"}更新数据异常{e.Message}";
                }
                finally
                {
                    loginfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                    db.WorkPieceLog.Add(loginfo);
                    db.SaveChanges();
                }
            }
        }
        public static WorkPieceLogMiddle QualityDataHand(WorkPieceLogMiddle loginfo, List<EquipmentQualityConfig> qcofig)
        {
            try
            {
                switch (loginfo.WorkingProcedure)
                {
                    case "OP10":
                        var cof = qcofig.Where(o => o.ParamColName.Equals("QualityOP10To1")).FirstOrDefault();
                        if (cof != null && cof.Id > 0)
                        {
                            double oldvalue = 0;
                            double StandardValue = 0;
                            var flag1 = double.TryParse(loginfo.QualityOP10To1, out oldvalue);
                            var flag2 = double.TryParse(cof.StandardValue, out StandardValue);
                            if (!flag1 || !flag2)
                            {
                                return loginfo;
                            }
                            loginfo.QualityOP10To1 = ((StandardValue + oldvalue * 1.0 / cof.DecimalPlaces).ToString());
                            //+(string.IsNullOrEmpty(cof.Unit) ? "" : cof.Unit)
                        }
                        break;
                    case "OP40":
                        var cofOP40 = qcofig.Where(o => o.ParamColName.Equals("QualityOP40To1")).FirstOrDefault();
                        if (cofOP40 != null && cofOP40.Id > 0)
                        {
                            double oldvalue = 0;
                            double StandardValue = 0;
                            var flag1 = double.TryParse(loginfo.QualityOP40To1, out oldvalue);
                            var flag2 = double.TryParse(cofOP40.StandardValue, out StandardValue);
                            if (!flag1 || !flag2)
                            {
                                return loginfo;
                            }
                            loginfo.QualityOP40To1 = ((StandardValue + oldvalue*1.0/ cofOP40.DecimalPlaces).ToString());
                            //+(string.IsNullOrEmpty(cofOP40.Unit) ? "" : cofOP40.Unit)
                        }
                        break;
                    case "OP20":
                        var cofOP20 = qcofig.Where(o => o.ParamColName.Equals("QualityOP20To1")).FirstOrDefault();
                        if (cofOP20 != null && cofOP20.Id > 0)
                        {
                            double oldvalue = 0;
                            double StandardValue = 0;
                            var flag1 = double.TryParse(loginfo.QualityOP20To1, out oldvalue);
                            var flag2 = double.TryParse(cofOP20.StandardValue, out StandardValue);
                            if (!flag1 || !flag2)
                            {
                                return loginfo;
                            }
                            loginfo.QualityOP20To1 = ((StandardValue + oldvalue * 1.0 /  cofOP20.DecimalPlaces).ToString());
                        }
                        break;
                    case "OP60":
                        var cofOP60to1 = qcofig.Where(o => o.ParamColName.Equals("QualityOP60To1")).FirstOrDefault();
                        if (cofOP60to1 != null && cofOP60to1.Id > 0)
                        {
                            double oldvalue = 0;
                            double StandardValue = 0;
                            var flag1 = double.TryParse(loginfo.QualityOP60To1, out oldvalue);
                            var flag2 = double.TryParse(cofOP60to1.StandardValue, out StandardValue);
                            if (!flag1 || !flag2)
                            {
                                return loginfo;
                            }
                            loginfo.QualityOP60To1 = ((StandardValue + oldvalue * 1.0 / cofOP60to1.DecimalPlaces).ToString());
                        }
                        var cofOP60to2 = qcofig.Where(o => o.ParamColName.Equals("QualityOP60To2")).FirstOrDefault();
                        if (cofOP60to2 != null && cofOP60to2.Id > 0)
                        {
                            double oldvalue = 0;
                            double StandardValue = 0;
                            var flag1 = double.TryParse(loginfo.QualityOP60To2, out oldvalue);
                            var flag2 = double.TryParse(cofOP60to2.StandardValue, out StandardValue);
                            if (!flag1 || !flag2)
                            {
                                return loginfo;
                            }
                            loginfo.QualityOP60To2 = ((StandardValue + oldvalue * 1.0 / (10 * cofOP60to2.DecimalPlaces)).ToString() + (string.IsNullOrEmpty(cofOP60to2.Unit) ? "" : cofOP60to2.Unit));
                        }
                        break;
                    default:
                        break;
                }
            }
            catch(Exception ex)
            {
            }
            return loginfo;
        }
        /// <summary>
        /// è´¨é‡æ£€æµ‹å®Œæˆ
        /// </summary>
        /// <param name="loginfo"></param>
        /// <param name="type"></param>
        public static void QualityInfoComplete(WorkPieceLogMiddle loginfo, LogType type)
        {
            //此处同时插入了WorkPieceLog,WorkPieceInfoLog表,并新增或修改WorkPieceInfo表
            //插入质量相关表QualityDataInfo
            using (DbModel db = new DbModel())
            {
                bool isAddWorkPieceInfo = false;
                WorkPieceLog loginfo2 = new WorkPieceLog();
                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(loginfo);
                try
                {
                    if (loginfo.WorkPieceID.Length == 22)
                    {//获取到的工件号异常
                        WorkPieceInfo info = new WorkPieceInfo();
                        info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
                        if (info == null || info.WorkPieceID.Length < 1)
                        {//没有工件信息,不做更新
                            if (loginfo.MonitoringPoint.Equals("OP1002") || loginfo.MonitoringPoint.Equals("OP1003")|| loginfo.MonitoringPoint.Contains("OP2002"))
                            {//OP10 æ²¡æœ‰ä¸Šçº¿æ‰«ç æžªï¼Œçº¦å®šç”¨æµ‹é‡å®Œæˆä¿¡å·å½“上线标记
                                info = EntityPropHelper.Mapper<WorkPieceInfo, WorkPieceLogMiddle>(loginfo);
                                //EntityPropHelper<WorkPieceLog, WorkPieceInfo>.CopyProp(loginfo, info, loginfo.GetWorkPieceInfoDict());
                                if (!loginfo.WorkingProcedure.Equals("OP05"))
                                {//当工件二维码第一次出现的工序不是OP05,则设置为可疑状态
                                    info.QualityState = (int)QualityState.Suspected;
                                    info.QualityErrorInfo = $"工件二维码第一次出现的工序{loginfo.MonitoringPoint}不是OP05,数据缺失,请确认情况并做相应处理!";
                                    info.Remarks = $"工件二维码第一次出现的工序{loginfo.WorkingProcedure}不是OP05,数据缺失,请确认情况并做相应处理!";
                                }
                                else
                                {
                                    info.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值
                                    info.Remarks = "OP05新增工件信息";
                                }
                                info.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();
                                info.WorkingProcedurePlan = ConfigHelper.GetConfigString("WorkingProcedureAllStr") ?? "OP05OP10OP20OP30OP35OP40OP50OP60OP70OP80";
                                info.CreatedUserName = loginfo.MonitoringPoint;
                                info.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                                info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();//
                                info.WorkingProcedureEndTime = null;
                                info = ParseQRCode(info);
                                isAddWorkPieceInfo = true;
                            }
                            else
                            {
                                loginfo2.Remarks = loginfo2.Remarks??""+$"|工件{loginfo.WorkPieceID} è´¨é‡æ£€æµ‹å®Œæˆå·¥åº{loginfo.MonitoringPoint} æ²¡æœ‰èŽ·å–åˆ°å·¥ä»¶ä¿¡æ¯ä¸åšæ›´æ–°";
                                Log4NetHelper.WriteErrorLog(type, $"工件{loginfo.WorkPieceID} è´¨é‡æ£€æµ‹å®Œæˆå·¥åº{loginfo.MonitoringPoint} æ²¡æœ‰èŽ·å–åˆ°å·¥ä»¶ä¿¡æ¯ä¸åšæ›´æ–°");
                                return;
                            }
                        }
                        if (loginfo.MonitoringPoint.Equals("OP1002") || loginfo.MonitoringPoint.Equals("OP1003") || loginfo.MonitoringPoint.Contains("OP2002"))
                        {// OP10 æ²¡æœ‰ä¸Šçº¿æ‰«ç æžªï¼Œçº¦å®šç”¨æµ‹é‡å®Œæˆä¿¡å·å½“上线标记,所以上线需要修改的字段放这里
                            if (loginfo.WorkingProcedure.Equals("OP10"))
                            {
                                var WorkingProcedure = (loginfo.MonitoringPoint.Equals("OP1002") ? "OP10" : "OP40");
                                loginfo2.WorkingProcedure = WorkingProcedure;//解决OP10,OP40同一个的问题
                                loginfo.WorkingProcedure = WorkingProcedure;//解决OP10,OP40同一个的问题
                            }
                            info.WorkPieceCurrentPosition = loginfo.WorkingProcedure;
                            info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2;
                            info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                            info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
                            #region æ›´æ–°è®¾å¤‡å®žæ—¶è¡¨
                            bool isAddEquipmentCurrentMonitor = false;
                            EquipmentCurrentMonitor equinfo = new EquipmentCurrentMonitor();
                            equinfo = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == loginfo.EquipmentID).FirstOrDefault();
                            if (equinfo == null || equinfo.Id < 1)
                            {//没有工件信息,不做更新
                                Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} å‘Šè­¦ç›‘控{loginfo.WorkingProcedure} æ²¡æœ‰èŽ·å–åˆ°è®¾å¤‡ç›‘æŽ§ä¿¡æ¯ï¼ŒçŽ°æ–°å¢ž");
                                equinfo = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLog>(loginfo);
                                equinfo.OnlineTime = DateTime.Now;
                                isAddEquipmentCurrentMonitor = true;
                            }
                            else
                            {//更新工件
                                equinfo.WorkPieceID = loginfo.WorkPieceID;
                                equinfo.UpdatedUserName = loginfo.MonitoringPoint;
                                equinfo.UpdatedTime = DateTime.Now;
                                equinfo.OnlineTime = DateTime.Now;
                            }
                            if (isAddEquipmentCurrentMonitor)
                            {
                                equinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                db.EquipmentCurrentMonitor.Add(equinfo);
                            }
                            #endregion
                            //UpdateKnifeToolLift(db, loginfo);//更新刀具寿命信息
                        }
                        info.WorkPieceState = (int)WorkPieceState.WIP;//推出后和SPC抽检后 è´¨é‡å½•入时状态修改回在制品
                        info.EquipmentID = loginfo.EquipmentID;
                        info.QualityStateUpdateUser = loginfo.UpdatedUserName;
                        info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime;
                        info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                        info.Remarks = info.Remarks??"" + $"{loginfo.WorkingProcedure}质量检测完成修改";
                        info.UpdatedUserName = loginfo.MonitoringPoint;
                        info.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                        if (!(info.WorkingProcedureStartTime.HasValue && info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01")))
                        {//工序开始时间没有则赋值
                            info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
                        }
                        info.QualityState = (int)((loginfo.QualityStateStr.Equals("OK") || loginfo.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
                        if (!info.QualityState.Equals(((int)QualityState.OK).ToString()))
                        {
                            info.QualityErrorInfo = $"{loginfo.WorkingProcedure}工序质量采集数据不合格{info.QualityState}";
                        }
                        else
                        {
                            info.QualityErrorInfo = "";
                        }
                        loginfo.QualityState = info.QualityState;
                        if (isAddWorkPieceInfo)
                        {
                            db.WorkPieceInfo.Add(info);
                        }
                        #region æ ¹æ®æ ‡å‡†å€¼æ›´æ–°æœ€æ–°è´¨é‡æ•°æ®ï¼ˆOP10/OP40/OP20/OP60)
                        var qcofig = db.EquipmentQualityConfig.Where(o => o.WorkingProcedure.Equals(loginfo.WorkingProcedure) && o.ParamType!=1 && o.IsDeleted == false).ToList();
                        if(qcofig.Count > 0)
                        {
                            QualityDataHand(loginfo, qcofig);
                        }
                        #endregion
                        var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
                        if (qualityData == null || qualityData.WorkPieceID.Length < 1 || qualityData.WorkingProcedure.Length < 1)
                        {//插入QualityDataInfo表
                            qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(loginfo);
                            db.QualityDataInfo.Add(GetAddQualityDataInfo(qualityData));
                        }
                        //修改QualityDataInfo表 //重复收到质量信息,会覆盖之前的
                        EntityPropHelper<WorkPieceLogMiddle, QualityDataInfo>.CopyProp(loginfo, qualityData, GetQualityDataInfoUpdate(loginfo.WorkingProcedure,loginfo.MonitoringPoint));//指定修改字段
                        qualityData.QualityStateUpdateUser = info.UpdatedUserName;
                        qualityData.QualityReceiveTime = info.UpdatedTime.Value.LocalDateTime;
                        qualityData.QualityStateUpdateMode = info.QualityStateUpdateMode;
                        if (loginfo.WorkingProcedure.Equals("OP10"))
                        {
                            qualityData.OP10QualityState = loginfo.QualityState.HasValue? loginfo.QualityState.Value.ToString():"3";
                            qualityData.OP10QualityReceiveTime= DateTimeHelper.GetDateTime();
                        }
                        else if (loginfo.WorkingProcedure.Equals("OP20"))
                        {
                            //Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}质量信息【{loginfo.QualityStateStr ?? "空"}】" +
                            //    $"【{(loginfo.QualityState.HasValue? loginfo.QualityState.Value:999)}】【{(info.QualityState.HasValue ? info.QualityState.Value : 888)}】 è¯»å–工件码数据[{loginfo.WorkPieceID ?? "空"}]");
                            qualityData.OP20QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                            qualityData.OP20QualityReceiveTime = DateTimeHelper.GetDateTime();
                            qualityData.OP20QualityFilePath = loginfo.OP20QualityFilePath;
                        }
                        else if (loginfo.WorkingProcedure.Equals("OP30"))
                        {
                            switch (loginfo.MonitoringPoint)
                            {
                                case "OP3002CH3":
                                    qualityData.OP30QualityFilePathCH3 = loginfo.OP30QualityFilePathCH3;
                                    qualityData.OP30QualityStateCH3 = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                                    qualityData.OP30QualityReceiveTimeCH3= DateTimeHelper.GetDateTime();
                                    break;
                                case "OP3002CH4":
                                    qualityData.OP30QualityFilePathCH4 = loginfo.OP30QualityFilePathCH4;
                                    qualityData.OP30QualityStateCH4 = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                                    qualityData.OP30QualityReceiveTimeCH4 = DateTimeHelper.GetDateTime();
                                    break;
                                case "OP3002CH5":
                                    qualityData.OP30QualityFilePathCH5 = loginfo.OP30QualityFilePathCH5;
                                    qualityData.OP30QualityStateCH5 = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                                    qualityData.OP30QualityReceiveTimeCH5 = DateTimeHelper.GetDateTime();
                                    break;
                                case "OP3002CH6":
                                    qualityData.OP30QualityFilePathCH6 = loginfo.OP30QualityFilePathCH6;
                                    qualityData.OP30QualityStateCH6 = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                                    qualityData.OP30QualityReceiveTimeCH6 = DateTimeHelper.GetDateTime();
                                    break;
                                default:
                                    break;
                            }
                            //qualityData.OP30QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                            //qualityData.OP30QualityReceiveTime = DateTimeHelper.GetDateTime();
                        }
                        else if (loginfo.WorkingProcedure.Equals("OP35"))
                        {
                            qualityData.OP35QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                            qualityData.OP35QualityReceiveTime = DateTimeHelper.GetDateTime();
                        }
                        else if (loginfo.WorkingProcedure.Equals("OP40"))
                        {
                            qualityData.OP40QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                            qualityData.OP40QualityReceiveTime = DateTimeHelper.GetDateTime();
                        }
                        else if (loginfo.WorkingProcedure.Equals("OP60"))
                        {
                            qualityData.OP60QualityFilePath = loginfo.OP60QualityFilePath;
                            qualityData.OP60QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                            qualityData.OP60QualityReceiveTime = DateTimeHelper.GetDateTime();
                        }
                        else if (loginfo.WorkingProcedure.Equals("OP80"))
                        {
                            qualityData.OP80QualityFilePath = loginfo.OP80QualityFilePath;
                            qualityData.OP80QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                            qualityData.OP80QualityReceiveTime = DateTimeHelper.GetDateTime();
                        }
                        var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID && o.WorkingProcedureCurrent == info.WorkingProcedureCurrent && o.OperationType == OperationType.生产.ToString()).OrderByDescending(o => o.StartTime).FirstOrDefault();
                        if (pro == null || pro.WorkPieceID.Length < 1||loginfo.MonitoringPoint.Equals("OP1002") || loginfo.MonitoringPoint.Equals("OP1003") || loginfo.MonitoringPoint.Contains("OP2002"))
                        {// OP10 æ²¡æœ‰ä¸Šçº¿æ‰«ç æžªï¼Œçº¦å®šç”¨æµ‹é‡å®Œæˆä¿¡å·å½“上线标记,所以上线需要修改的字段放这里
                            //上线是每次都插入
                            WorkPieceProcess process = new WorkPieceProcess();
                            process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(info);
                            process.StartTime = DateTimeHelper.GetDateTime();
                            process.QualityState = info.QualityState.HasValue ? info.QualityState.Value : (int)QualityState.OK;
                            process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            process.CreatedUserName = loginfo.MonitoringPoint;
                            process.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                            process.UpdatedUserName = loginfo.MonitoringPoint;
                            process.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                            process.OperationType = OperationType.生产.ToString();
                            process.QualityDataInfoID = qualityData.Id;
                            process.Remarks = "";
                            db.WorkPieceProcess.Add(process);
                        }
                        else
                        {//其他的都只是修改
                            pro.QualityDataInfoID = qualityData.Id;
                            pro.UpdatedUserName = loginfo.MonitoringPoint;
                            pro.UpdatedTime = DateTimeHelper.GetDateTime();
                            pro.QualityState = info.QualityState.HasValue ? info.QualityState.Value : 9;
                        }
                        if (loginfo.QualityType!=null&& loginfo.QualityType.Equals(QualityType.SPC.ToString()))
                        {//SPC反馈,
                            if (loginfo.QualityState != (int)QualityState.OK)
                            {
                                //当某到工序检测到不合格工件时,从该工件加工完成时刻前指定时间起至报检不合格时间止,系统将该工件的最后加工工序在该时间段内加工的所有工件、正在加工的工件、该工序入口处的第一个工件全部标记为疑似状态,由人工复检工件并修改状态,并支持批量变更。
                                //答复:在线测量不需要走这个流程,只有SPC抽检才需要,需要把这时间段的工件全部置为疑似,哪怕是已完成工件
                                //时间段起始时间:抽检工件生产时间前一SPC抽检时间
                                //时间段结束时间:抽检工件质量结果出现后的时间
                                //抽检工件工序扫描枪外入口处的第一个工件 ä¹ŸæŠŠè´¨é‡çŠ¶æ€ç½®ä¸ºç–‘ä¼¼
                                //(每一工序SPC抽检是设置的固定的,比如200抽4,状态置为疑似时若工件还在设备内,会继续生产完毕后排出)
                            }
                        }
                        db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info));
                        db.QualityDataInfoLog.Add(GetAddQualityDataInfoLog(qualityData));//插入日志
                    }
                    else
                    {
                        loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"质量检测完成读取二维码{loginfo.WorkPieceID ?? "空"}异常";
                        Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}工序监控读码标记 è¯»å–工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:");
                    }
                }
                catch(Exception ex)
                {
                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"质量检测完成{loginfo.WorkPieceID ?? "空"}更新数据异常{ex.Message}++{ex.StackTrace}";
                    Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}工序监控读码标记 è¯»å–工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:");
                }
                finally
                {
                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"质量:{loginfo.QualityStateStr ?? "空"}";
                    db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo2));//插入工件采集日志表
                    db.SaveChanges();
                }
            }
        }
        /// <summary>
        /// å·¥ä»¶æŽ¨å‡ºNOOK
        /// </summary>
        /// <param name="loginfo"></param>
        /// <param name="type"></param>
        public static void WorkPiecePushOff(WorkPieceLogMiddle loginfo, LogType type)
        {
            using (DbModel db = new DbModel())
            {
                WorkPieceLog loginfo2 = new WorkPieceLog();
                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(loginfo);
                try
                {
                    if (loginfo.WorkPieceID != null && loginfo.WorkPieceID.Trim('\0').Length == 22)
                    {
                        WorkPieceInfo info = new WorkPieceInfo();
                        info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
                        if (info == null || info.WorkPieceID.Length < 1)
                        {//没有工件信息,不做更新
                            Log4NetHelper.WriteErrorLog(type, $"工件{loginfo.WorkPieceID} å·¥ä»¶æŽ¨å‡ºå·¥åº{loginfo.WorkingProcedure} æ²¡æœ‰èŽ·å–åˆ°å·¥ä»¶ä¿¡æ¯ä¸åšæ›´æ–°");
                            return;
                        }
                        else
                        {//更新表WorkPieceInfo
                            if (loginfo.WorkingProcedure.Equals("OP10"))
                            {
                                info.WorkPieceCurrentPosition = info.WorkingProcedureCurrent + "NOOK";
                                //var WorkingProcedure = (loginfo.MonitoringPoint.Equals("OP1002") ? "OP10" : "OP40");
                                loginfo2.WorkingProcedure = info.WorkingProcedureCurrent;//解决OP10,OP40同一个的问题
                                loginfo.WorkingProcedure = info.WorkingProcedureCurrent; //解决OP10,OP40同一个的问题
                            }
                            else
                            {
                                info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                                info.WorkPieceCurrentPosition = loginfo.WorkingProcedure + "NOOK";
                            }
                            info.WorkPieceState = (int)WorkPieceState.NOOKPush;
                            info.UpdatedUserName = loginfo.MonitoringPoint;
                            info.UpdatedTime = DateTime.Now;
                            info.Remarks = "工件NOOK推出";
                            if (!(info.WorkingProcedureStartTime.HasValue && info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01")))
                            {
                                info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
                            }
                            info.WorkingProcedureEndTime = DateTimeHelper.GetDateTime();
                            info.WorkingProcedureCompleted = info.WorkingProcedureCompleted + loginfo.WorkingProcedure;//已完成工序
                            info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2;
                        }
                        if(loginfo.WorkingProcedure.Equals("OP35"))
                        {//为了解决OP35的采集到的质量信息是OK还NOOK的情况,OP35 NOOK时更新质量信息
                            loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"OP35NOOK原质量信息{(info.QualityState.HasValue? info.QualityState.Value.ToString():"空")}";
                            info.QualityState = (int)QualityState.NG;
                            if (!info.QualityState.Equals(((int)QualityState.OK).ToString()))
                            {
                                info.QualityErrorInfo = $"{loginfo.WorkingProcedure}工序质量NOOK采集数据不合格{info.QualityState}";
                            }
                            else
                            {
                                info.QualityErrorInfo = "";
                            }
                            loginfo.QualityState = info.QualityState;
                            var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
                            if (qualityData != null)
                            {
                                qualityData.OP35QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                                qualityData.OP35QualityReceiveTime = DateTimeHelper.GetDateTime();
                                db.QualityDataInfoLog.Add(GetAddQualityDataInfoLog(qualityData));
                            }
                        }
                        //更新上一工序的结束时间
                        var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID && o.WorkingProcedureCurrent == loginfo.WorkingProcedure && o.OperationType == OperationType.生产.ToString()).OrderByDescending(o => o.StartTime).FirstOrDefault();
                        if (pro != null && pro.WorkPieceID.Length > 0)
                        {
                            pro.EndTime = DateTimeHelper.GetDateTime();
                            pro.Remarks = (pro.Remarks ?? "") + "NOOK结束";
                            pro.UpdatedUserName = loginfo.MonitoringPoint;
                            pro.UpdatedTime = DateTimeHelper.GetDateTime();
                        }
                        db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info));
                    }
                    else
                    {
                        loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"工件NOOK推出读取二维码{loginfo.WorkPieceID ?? "空"}异常";
                        Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}工件NOOK推出读码标记 è¯»å–工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:");
                    }
                }
                catch (Exception e)
                {
                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"读取二维码{loginfo.WorkPieceID ?? "空"}更新数据异常{e.Message}";
                }
                db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo2));//插入工件采集日志表
                db.SaveChanges();
            }
        }
        /// <summary>
        /// å·¥ä»¶SPC抽检推出
        /// </summary>
        /// <param name="loginfo"></param>
        /// <param name="type"></param>
        public static void WorkPieceSPCPushOff(WorkPieceLogMiddle loginfo, LogType type)
        {
            using (DbModel db = new DbModel())
            {
                WorkPieceLog loginfo2 = new WorkPieceLog();
                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(loginfo);
                try {
                    if ((loginfo.WorkPieceID != null && loginfo.WorkPieceID.Trim('\0').Length == 22)
                        //|| !((loginfo.WorkingProcedure.Equals("OP10") || loginfo.WorkingProcedure.Equals("OP40")) && loginfo.Remarks.Length > 0)
                        )
                    {
                        WorkPieceInfo info = new WorkPieceInfo();
                        info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
                        if (info == null || info.WorkPieceID.Length < 1)
                        {//没有工件信息,不做更新
                            loginfo2.Remarks = $"工件{loginfo.WorkPieceID} å·¥ä»¶SPC推出工序{loginfo.WorkingProcedure} æ²¡æœ‰èŽ·å–åˆ°å·¥ä»¶ä¿¡æ¯ä¸åšæ›´æ–°";
                            Log4NetHelper.WriteErrorLog(type, $"工件{loginfo.WorkPieceID} å·¥ä»¶SPC推出工序{loginfo.WorkingProcedure} æ²¡æœ‰èŽ·å–åˆ°å·¥ä»¶ä¿¡æ¯ä¸åšæ›´æ–°");
                            return;
                        }
                        else
                        {//更新表WorkPieceInfo
                            if(loginfo.WorkingProcedure.Equals("OP10"))
                            {
                                info.WorkPieceCurrentPosition = info.WorkingProcedureCurrent + "SPC";
                                //var WorkingProcedure = (loginfo.MonitoringPoint.Equals("OP1002") ? "OP10" : "OP40");
                                loginfo2.WorkingProcedure = info.WorkingProcedureCurrent;//解决OP10,OP40同一个的问题
                                loginfo.WorkingProcedure = info.WorkingProcedureCurrent; //解决OP10,OP40同一个的问题
                            }
                            else
                            {
                                info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                                info.WorkPieceCurrentPosition = loginfo.WorkingProcedure + "SPC";
                            }
                            info.WorkPieceState = (int)WorkPieceState.SPCPush;
                            info.UpdatedUserName = loginfo.MonitoringPoint;
                            info.UpdatedTime = DateTime.Now;
                            info.WorkingProcedureEndTime = DateTimeHelper.GetDateTime();
                            if (!(info.WorkingProcedureStartTime.HasValue && info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01")))
                            {
                                info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
                            }
                            info.WorkingProcedureCompleted = info.WorkingProcedureCompleted + loginfo.WorkingProcedure;//已完成工序
                            info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2;
                        }
                        info.Remarks = "工件SPC抽检推出";
                        //更新上一工序的结束时间
                        var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID && o.WorkingProcedureCurrent == loginfo.WorkingProcedure && o.OperationType == OperationType.生产.ToString()).OrderByDescending(o=>o.StartTime).FirstOrDefault();
                        if (pro != null && pro.WorkPieceID.Length >0)
                        {
                            pro.EndTime = DateTimeHelper.GetDateTime();
                            pro.Remarks = (pro.Remarks ?? "") + "SPC抽检结束";
                            pro.UpdatedUserName = loginfo.MonitoringPoint;
                            pro.UpdatedTime = DateTimeHelper.GetDateTime();
                        }
                        //每次SPC éƒ½æ’入追溯表
                        WorkPieceProcess process = new WorkPieceProcess();
                        process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(info);
                        process.StartTime = DateTimeHelper.GetDateTime();
                        process.OperationType = OperationType.SPC.ToString();
                        process.QualityState = (int)QualityState.Suspected;
                        process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                        process.CreatedUserName = loginfo.MonitoringPoint;
                        process.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                        process.UpdatedUserName = loginfo.MonitoringPoint;
                        process.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                        process.Remarks =  "工件SPC抽检推出";
                        db.WorkPieceProcess.Add(process);
                        db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info));
                    }
                    else
                    {
                        loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"工件SPC抽检推出读取二维码{loginfo.WorkPieceID ?? "空"}异常";
                        Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}工件SPC抽检推出读码标记 è¯»å–工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:");
                    }
                }
                catch (Exception e)
                {
                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"读取二维码{loginfo.WorkPieceID ?? "空"}更新数据异常{e.Message}";
                }
                finally
                {
                    db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo2));//插入工件采集日志表
                    db.SaveChanges();
                }
            }
        }
        /// <summary>
        /// å·¥åºå®Œæˆ
        /// </summary>
        /// <param name="loginfo"></param>
        /// <param name="type"></param>
        public static void WorkingProcedureComplete(WorkPieceLogMiddle loginfo, LogType type)
        {
            using (DbModel db = new DbModel())
            {
                WorkPieceLog loginfo2 = new WorkPieceLog();
                loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(loginfo);
                try
                {
                    if (loginfo.WorkPieceID != null && loginfo.WorkPieceID.Trim('\0').Length == 22)
                    {
                        bool isAddWorkPieceInfo = false;
                        WorkPieceInfo info = new WorkPieceInfo();
                        info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
                        if (info == null || info.WorkPieceID.Length < 1)
                        {//没有工件信息,不做更新  ï¼ˆä¸ºäº†æµ‹è¯•先先新增)
                            Log4NetHelper.WriteErrorLog(type, $"工件{loginfo.WorkPieceID} å·¥ä»¶æŽ¨å‡ºå·¥åº{loginfo.WorkingProcedure} æ²¡æœ‰èŽ·å–åˆ°å·¥ä»¶ä¿¡æ¯ä¸åšæ›´æ–°");
                            //db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo));//插入工件采集日志表
                            //db.SaveChanges();
                            loginfo2 = CommonManager.Instance.GetWorkPieceID(loginfo, type);
                            info = EntityPropHelper.Mapper<WorkPieceInfo, WorkPieceLog>(loginfo);
                            //EntityPropHelper<WorkPieceLog, WorkPieceInfo>.CopyProp(loginfo, info, loginfo.GetWorkPieceInfoDict());
                            if (!loginfo.WorkingProcedure.Equals("OP05"))
                            {//当工件二维码第一次出现的工序不是OP05,则设置为可疑状态
                                info.QualityState = (int)QualityState.Suspected;
                                info.QualityErrorInfo = $"工件二维码第一次出现的工序{loginfo.MonitoringPoint}不是OP05,数据缺失,请确认情况并做相应处理!";
                                info.Remarks = $"工件二维码第一次出现的工序{loginfo.MonitoringPoint}不是OP05,数据缺失,请确认情况并做相应处理!";
                            }
                            else
                            {
                                info.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值
                                info.Remarks = "OP05新增工件信息";
                            }
                            info.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();//WorkPieceInitOnlineTime
                            info.WorkingProcedurePlan = ConfigHelper.GetConfigString("WorkingProcedureAllStr") ?? "OP05OP10OP20OP30OP35OP40OP50OP60OP70OP80";
                            info.CreatedUserName = loginfo.MonitoringPoint;
                            info.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                            info.WorkingProcedureCurrent = loginfo.WorkingProcedure;
                            info.WorkingProcedureEndTime = null;
                            info = ParseQRCode(info);
                            isAddWorkPieceInfo = true;
                        }
                        if (loginfo.WorkingProcedure.Equals("OP10"))
                        {
                            //var WorkingProcedure = (loginfo.MonitoringPoint.Equals("OP1002") ? "OP10" : "OP40");
                            loginfo2.WorkingProcedure = info.WorkingProcedureCurrent;//解决OP10,OP40同一个的问题
                            loginfo.WorkingProcedure = info.WorkingProcedureCurrent; //解决OP10,OP40同一个的问题
                        }
                        info.UpdatedUserName = loginfo.MonitoringPoint;
                        info.UpdatedTime = DateTimeHelper.GetDateTime();
                        info.WorkingProcedureCompleted = info.WorkingProcedureCompleted + loginfo.WorkingProcedure;//已完成工序
                        if (!(info.WorkingProcedureStartTime.HasValue && info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01")))
                        {//若一直没有工序开始时间,则赋值当前时间
                            info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();
                        }
                        info.WorkingProcedureEndTime= DateTimeHelper.GetDateTime();
                        info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2;
                        info.Remarks = $"{loginfo.WorkingProcedure}工序完成";
                        long op80id = 0;
                        if (loginfo.WorkingProcedure.Equals("OP80"))
                        {
                            info.WorkPieceState = (int)WorkPieceState.FinishedProducts;
                            info.WorkPieceLastOfflineTime = DateTimeHelper.GetDateTime();
                            info.WorkPieceCurrentPosition = "OP80";
                            info.CompleteTime = DateTimeHelper.GetDateTime();
                            info.OP80NewCode = loginfo.OP80NewCode;
                            info.QualityState = (int)((loginfo.QualityStateStr.Equals("OK") || loginfo.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
                            loginfo.QualityState = info.QualityState;
                            info.QualityStateUpdateUser = loginfo.UpdatedUserName;
                            info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime;
                            info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                            var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
                            if (qualityData == null || qualityData.WorkPieceID.Length < 1 || qualityData.WorkingProcedure.Length < 1)
                            {//插入QualityDataInfo表
                                qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(loginfo);
                                db.QualityDataInfo.Add(GetAddQualityDataInfo(qualityData));
                            }
                            //修改QualityDataInfo表 //重复收到质量信息,会覆盖之前的
                            EntityPropHelper<WorkPieceLogMiddle, QualityDataInfo>.CopyProp(loginfo, qualityData, GetQualityDataInfoUpdate(loginfo.WorkingProcedure, loginfo.MonitoringPoint));//指定修改字段
                            qualityData.QualityStateUpdateUser = info.UpdatedUserName;
                            qualityData.QualityReceiveTime = info.UpdatedTime.Value.LocalDateTime;
                            qualityData.QualityStateUpdateMode = info.QualityStateUpdateMode;
                            qualityData.OP80QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                            qualityData.OP80QualityReceiveTime = DateTimeHelper.GetDateTime();
                            qualityData.OP80QualityFilePath = loginfo.OP80QualityFilePath;
                            op80id = qualityData.Id;
                            loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"质量:{loginfo.QualityStateStr ?? "空"}";
                            if (!info.QualityState.Equals(((int)QualityState.OK).ToString()))
                            {
                                info.QualityErrorInfo = $"{loginfo.WorkingProcedure}工序质量采集数据不合格";
                            }
                            else
                            {
                                info.QualityErrorInfo = "";
                            }
                        }
                        else if(loginfo.WorkingProcedure.Equals("OP30"))
                        {
                            info.QualityState = (int)((loginfo.QualityStateStr.Equals("OK") || loginfo.QualityStateStr.Equals("0K")) ? QualityState.OK : QualityState.NG);
                            loginfo.QualityState = info.QualityState;
                            info.QualityStateUpdateUser = loginfo.UpdatedUserName;
                            info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime;
                            info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                            var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault();
                            if (qualityData == null || qualityData.WorkPieceID.Length < 1 || qualityData.WorkingProcedure.Length < 1)
                            {//插入QualityDataInfo表
                                qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(loginfo);
                                db.QualityDataInfo.Add(GetAddQualityDataInfo(qualityData));
                            }
                            qualityData.QualityStateUpdateUser = info.UpdatedUserName;
                            qualityData.QualityReceiveTime = info.UpdatedTime.Value.LocalDateTime;
                            qualityData.QualityStateUpdateMode = info.QualityStateUpdateMode;
                            qualityData.OP30QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3";
                            qualityData.OP30QualityReceiveTime = DateTimeHelper.GetDateTime();
                            loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"质量:{loginfo.QualityStateStr ?? "空"}";
                            if (!info.QualityState.Equals(((int)QualityState.OK).ToString()))
                            {
                                info.QualityErrorInfo = $"{loginfo.WorkingProcedure}工序质量采集数据不合格";
                            }
                            else
                            {
                                info.QualityErrorInfo = "";
                            }
                        }
                        else
                        {
                            info.WorkPieceState = (int)WorkPieceState.WIP;
                            if (info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) + 4 <= info.WorkingProcedurePlan.Length)
                            {
                                info.WorkPieceCurrentPosition = info.WorkingProcedurePlan.Substring(info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure), 8);
                            }
                        }
                        var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID && o.WorkingProcedureCurrent == info.WorkingProcedureCurrent && o.OperationType == OperationType.生产.ToString()).OrderByDescending(o=>o.StartTime).FirstOrDefault();
                        if (pro == null || pro.WorkPieceID.Length < 1)
                        {
                            WorkPieceProcess process = new WorkPieceProcess();
                            process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(info);
                            process.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            process.StartTime = DateTimeHelper.GetDateTime();
                            process.EndTime = DateTimeHelper.GetDateTime();
                            process.QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value : (int)QualityState.OK;
                            process.CreatedUserName = loginfo.MonitoringPoint;
                            process.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                            process.UpdatedUserName = loginfo.MonitoringPoint;
                            process.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                            process.OperationType = OperationType.生产.ToString();
                            process.Remarks = "";
                            if(op80id>0)
                            {
                                process.QualityDataInfoID = op80id;
                            }
                            db.WorkPieceProcess.Add(process);
                        }
                        else
                        {
                            if (op80id > 0)
                            {
                                pro.QualityDataInfoID = op80id;
                            }
                            pro.EndTime = DateTimeHelper.GetDateTime();
                            pro.UpdatedUserName = loginfo.MonitoringPoint;
                            pro.UpdatedTime = DateTimeHelper.GetDateTime();
                        }
                        if (isAddWorkPieceInfo)
                        {
                            db.WorkPieceInfo.Add(info);
                        }
                        db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info));
                    }
                    else
                    {
                        loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"下线完成读取二维码{loginfo.WorkPieceID ?? "空"}异常";
                        Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}工序下线 è¯»å–工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:");
                    }
                }
                catch (Exception e)
                {
                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"读取二维码{loginfo.WorkPieceID ?? "空"}更新数据异常{e.Message}";
                }
                db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo2));//插入工件采集日志表
                db.SaveChanges();
            }
        }
        public static void AlertMonitor(WorkPieceLog loginfo, LogType type)
        {
        }
        /// <summary>
        /// è®¾å¤‡å‘Šè­¦ç›‘控(清洗液,切削液,刀具告警等)
        /// </summary>
        /// <param name="loginfo"></param>
        /// <param name="type"></param>
        public static void AlertMonitor(LogType type)
        {
            using (DbModel db = new DbModel())
            {
                bool isAddAlert = false;
                try {
                    var equipmentlist = db.EquipmentBaseInfo.Where(o=>o.IsDeleted==false).ToList();
                    var alertlist = db.v_get_equipment_alert.Where(o => o.IsDeleted == false).ToList();
                    var knifetoolbase = db.KnifeToolBaseInfo.Where(o => o.IsDeleted == false).ToList();
                    var knifetoolinfo= db.KnifeToolEquipmentInfo.Where(o => o.IsDeleted == false).ToList();
                    //var knifelist = db.KnifeToolEquipmentInfo.GroupJoin(db.KnifeToolBaseInfo.Where(o => o.IsDeleted == false).ToList(), a => a.EquipmentID, b => b.EquipmentID, (a, b) => new { a,b})
                        //.SelectMany(ab => ab.b.DefaultIfEmpty(), (ab, b) => new { ab.a, b.KnifeToolChangeAlertThreshold,b.KnifeToolLife })
                        //.Where(o => o.a.IsDeleted == false)
                        //.ToList();
                    foreach (var item in equipmentlist)
                    {
                        try
                        {
                            var alert = alertlist.Where(o => o.EquipmentId.Equals(item.EquipmentId)).FirstOrDefault();
                            if (alert==null||alert.Id<1)
                            {
                                alert = EntityPropHelper.Mapper<v_get_equipment_alert, EquipmentBaseInfo>(item);
                                isAddAlert=true;
                            }
                            //if(item.WorkingProcedure.Equals("OP70"))
                            {
                                if (item.Detergentchangetime.HasValue)
                                {
                                    if (item.Detergentchangetime.Value.AddDays(item.DetergentChangeAlertThreshold).Date <= DateTime.Now.Date)
                                    {//op70清洗液告警
                                        alert.IsAlertDetergent = true;
                                        alert.Detergentchangetime = item.Detergentchangetime;
                                        alert.DetergentChangeAlertThreshold = item.DetergentChangeAlertThreshold;
                                        alert.DetergentChangeCycle = item.DetergentChangeCycle;
                                        alert.DetergentDesc = $"设备【{item.EquipmentName}】清洗液最新更换时间为【{item.Detergentchangetime.Value}】,已达到告警阈值,请注意!";
                                    }
                                    else
                                    {
                                        alert.IsAlertDetergent = false;
                                        alert.DetergentDesc = "";
                                    }
                                }
                                else
                                {
                                    alert.IsAlertDetergent = false;
                                    alert.DetergentDesc = "";
                                }
                            }
                            //if (!item.WorkingProcedure.Equals("OP05")&& !item.WorkingProcedure.Equals("OP30") && !item.WorkingProcedure.Equals("OP70") && !item.WorkingProcedure.Equals("OP80"))
                            {
                                if(item.CuttingFluidChangeTime.HasValue)
                                {
                                    if (item.CuttingFluidChangeTime.Value.AddDays(item.CuttingFluidChangeAlertThreshold).Date <= DateTime.Now.Date)
                                    {//切削液告警
                                        alert.IsAlertCuttingFluid = true;
                                        alert.CuttingFluidChangeTime = item.CuttingFluidChangeTime;
                                        alert.CuttingFluidChangeAlertThreshold = item.CuttingFluidChangeAlertThreshold;
                                        alert.CuttingFluidDesc = $"设备【{item.EquipmentName}】切削液最新更换时间为【{item.CuttingFluidChangeTime.Value}】,已达到告警阈值,请注意!";
                                    }
                                    else
                                    {
                                        alert.IsAlertCuttingFluid = false;
                                        alert.CuttingFluidDesc = "";
                                    }
                                }
                                else
                                {
                                    alert.IsAlertCuttingFluid = false;
                                    alert.CuttingFluidDesc = "";
                                }
                            }
                            bool flag = false;
                            string desc = $"设备【{item.EquipmentName}】";
                            foreach (var knife in knifetoolinfo.Where(o=>o.EquipmentID.Equals(item.EquipmentId)))
                            {
                                var list = knifetoolbase.Where(o => o.KnifeToolID.Equals(knife.KnifeToolID)).FirstOrDefault();
                                if(list!=null)
                                {
                                    if ((knife.CurrentLife + list.KnifeToolChangeAlertThreshold) >= list.KnifeToolLife)
                                    {//刀具告警
                                        flag = true;
                                        alert.IsAlertKnifeTool = true;
                                        alert.KnifeToolChangeAlertThreshold = list.KnifeToolChangeAlertThreshold;
                                        desc += $"\r\n工位【{knife.Station}】上刀具【{knife.KnifeToolID}】计划寿命【{list.KnifeToolLife}】次,当前已使用寿命【{knife.CurrentLife}】次,已达到告警阈值,请注意!";
                                    }
                                }
                            }
                            if(!flag)
                            {//没有刀具告警
                                alert.IsAlertKnifeTool = false;
                                alert.KnifeToolDesc = "";
                            }
                            else
                            {
                                alert.IsAlertKnifeTool = true;
                                alert.KnifeToolDesc = desc;
                            }
                            EquipmentCurrentMonitor info = new EquipmentCurrentMonitor();
                            info = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == item.EquipmentId).FirstOrDefault();
                            if (info == null || info.Id < 1)
                            {//没有工件信息,不做更新
                                Log4NetHelper.WriteErrorLog(type, $"设备{item.EquipmentId} è®¡ç®—告警{item.WorkingProcedure} æ²¡æœ‰èŽ·å–åˆ°è®¾å¤‡ç›‘æŽ§ä¿¡æ¯ï¼");
                            }
                            else
                            {
                                if(string.IsNullOrEmpty(info.Alertmsg))
                                {
                                    alert.IsAlert = false;
                                    alert.AlertDesc = "";
                                }
                                else
                                {
                                    alert.IsAlert = true;
                                    alert.AlertDesc = info.Alertmsg;
                                }
                            }
                            if (isAddAlert)
                            {
                                db.v_get_equipment_alert.Add(alert);
                            }
                        }catch(Exception ex)
                        {
                            Log4NetHelper.WriteErrorLog(type, $" {item.EquipmentName}设备计算告警时异常:");
                        }
                    }
                }
                catch (Exception e)
                {
                    Log4NetHelper.WriteErrorLog(type, $" è®¾å¤‡å‘Šè­¦ç›‘控(清洗液,切削液,刀具告警等) è®¡ç®—时异常:{e.Message} {e.StackTrace}");
                }
                //db.WorkPieceLog.Add(loginfo2);//插入设备采集日志表
                db.SaveChanges();
            }
        }
        /// <summary>
        /// è®¾å¤‡ç›‘控
        /// </summary>
        /// <param name="loginfo"></param>
        /// <param name="type"></param>
        public static void EquipmentMonitor(WorkPieceLogMiddle loginfo, LogType type)
        {
            using (DbModel db = new DbModel())
            {
                var loginfo2 = EntityPropHelper.Mapper<WorkPieceLog, WorkPieceLogMiddle>(loginfo);
                try
                {
                    bool isAddEquipmentCurrentMonitor = false;
                    EquipmentCurrentMonitor info = new EquipmentCurrentMonitor();
                    info = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == loginfo.EquipmentID).FirstOrDefault();
                    if (info == null || info.Id < 1)
                    {//没有工件信息,不做更新
                        Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} å‘Šè­¦ç›‘控{loginfo.MonitoringPoint} æ²¡æœ‰èŽ·å–åˆ°è®¾å¤‡ç›‘æŽ§ä¿¡æ¯ï¼ŒçŽ°æ–°å¢ž");
                        info = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLogMiddle>(loginfo);
                        isAddEquipmentCurrentMonitor = true;
                    }
                    //最新设备状态
                    string State = "";
                    //OP20,OP30,OP35,OP50,OP60等等都不区分告警和message,但code都不会重复,所以本处就不需要判断告警类型了
                    var codelist = db.EquipmentFailureCode.Where(o => o.WorkingProcedure.Equals(loginfo.WorkingProcedure)).ToList();
                    #region æ•…障代码处理
                    List<long> Failueslist = new List<long>();
                    Failueslist.Add(loginfo.FailureType1);
                    Failueslist.Add(loginfo.FailureType2);
                    Failueslist.Add(loginfo.FailureType3);
                    Failueslist.Add(loginfo.FailureType4);
                    Failueslist.Add(loginfo.FailureType5);
                    Failueslist.Add(loginfo.FailureType6);
                    Failueslist.Add(loginfo.FailureType7);
                    Failueslist.Add(loginfo.FailureType8);
                    Failueslist.Add(loginfo.FailureType9);
                    Failueslist.Add(loginfo.FailureType10);
                    Failueslist.Add(loginfo.FailureType11);
                    Failueslist.Add(loginfo.FailureType12);
                    Failueslist.Add(loginfo.FailureType13);
                    Failueslist.Add(loginfo.FailureType14);
                    Failueslist.Add(loginfo.FailureType15);
                    Failueslist.Add(loginfo.FailureType16);
                    Failueslist.Add(loginfo.FailureType17);
                    Failueslist.Add(loginfo.FailureType18);
                    Failueslist.Add(loginfo.FailureType19);
                    Failueslist.Add(loginfo.FailureType20);
                    Failueslist.RemoveAll(o => o == 0);
                    string faultall = "";
                    string faultmsg = "";
                    int i = 1;
                    foreach (var failues in Failueslist)
                    {
                        faultall += (failues + "\r\n");
                        EquipmentFailureCode codeinfo = codelist.Where(o =>  o.Code == failues.ToString()).FirstOrDefault();
                        if (codeinfo != null && codeinfo.Code.Length > 0)
                        {
                            faultmsg += (i.ToString() + "." + (codeinfo.CodeDesc ?? codeinfo.Code) + "\r\n");
                        }
                        else
                        {
                            faultmsg += (i.ToString() + "." + failues.ToString() + "\r\n");
                        }
                        i++;
                    }
                    //var faultall = string.Join("\r\n", Failueslist.OrderBy(o=>o));
                    #endregion
                    #region å‘Šè­¦ä»£ç å¤„理
                    List<long> Alertlist = new List<long>();
                    Alertlist.Add(loginfo.FailureMessage1);
                    Alertlist.Add(loginfo.FailureMessage2);
                    Alertlist.Add(loginfo.FailureMessage3);
                    Alertlist.Add(loginfo.FailureMessage4);
                    Alertlist.Add(loginfo.FailureMessage5);
                    Alertlist.Add(loginfo.FailureMessage6);
                    Alertlist.Add(loginfo.FailureMessage7);
                    Alertlist.Add(loginfo.FailureMessage8);
                    Alertlist.Add(loginfo.FailureMessage9);
                    Alertlist.Add(loginfo.FailureMessage10);
                    Alertlist.Add(loginfo.FailureMessage11);
                    Alertlist.Add(loginfo.FailureMessage12);
                    Alertlist.Add(loginfo.FailureMessage13);
                    Alertlist.Add(loginfo.FailureMessage14);
                    Alertlist.Add(loginfo.FailureMessage15);
                    Alertlist.Add(loginfo.FailureMessage16);
                    Alertlist.Add(loginfo.FailureMessage17);
                    Alertlist.Add(loginfo.FailureMessage18);
                    Alertlist.Add(loginfo.FailureMessage19);
                    Alertlist.Add(loginfo.FailureMessage20);
                    Alertlist.RemoveAll(o => o == 0);
                    string alertall = "";
                    string warnmsg = "";
                    i = 1;
                    foreach(var alert in Alertlist)
                    {
                        alertall+=(alert+"\r\n");
                        var codeinfo=codelist.Where(o => o.Code == alert.ToString()).FirstOrDefault();
                        if(codeinfo!=null&&codeinfo.Code.Length>0)
                        {
                            warnmsg += (i.ToString()+"."+(codeinfo.CodeDesc ?? codeinfo.Code) + "\r\n");
                        }
                        else
                        {
                            warnmsg += (i.ToString() + "." + alert.ToString() + "\r\n");
                        }
                        i++;
                    }
                    #endregion
                    //var alertall = string.Join("\r\n", Alertlist.OrderBy(o=>o));
                    EquipmentWorkingLog infolog = new EquipmentWorkingLog();
                    infolog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                    infolog.LogAddTime = DateTimeHelper.GetDateTime();
                    infolog.WorkPieceLogID = loginfo2.Id;
                    infolog.EquipmentID = info.EquipmentID;
                    bool isAddEquipmentWorkingLog = false;
                    bool isStatechange = false;
                    #region è®¾å¤‡çŠ¶æ€å¤„ç†
                    //故障》警告》其他
                    if (loginfo.IsCloseAlert)
                    {//故障
                        info.AlertTime = info.AlertTime ?? DateTime.Now;
                        info.FailureType = "";
                        info.WarnType = "";
                        info.Alertmsg = faultmsg;//这个需要代码对应字典维护信息才知道
                        info.FailureType = faultall;
                        State = ((int)EnumEquipmentCurrentStateDisplay.故障).ToString();
                        //infolog.FailureStartTime = DateTimeHelper.GetDateTime();
                        //infolog.FailureType = faultall;
                        //infolog.FailureMsg = faultmsg;
                        if (loginfo.IsMessage)
                        {
                            info.WarnTime = info.WarnTime ?? DateTime.Now;
                            info.Warnmsg = warnmsg;//这个需要代码对应字典维护信息才知道
                            info.WarnType = alertall;
                        }
                    }
                    //else if (loginfo.IsMessage)
                    //{//警告
                    //    info.AlertTime = null;
                    //    info.Alertmsg = "";//这个需要代码对应字典维护信息才知道
                    //    info.FailureType = "";
                    //    info.WarnTime = info.WarnTime ?? DateTime.Now;
                    //    info.Warnmsg = warnmsg;//这个需要代码对应字典维护信息才知道
                    //    info.WarnType = alertall;
                    //    //infolog.WarnStartTime = DateTimeHelper.GetDateTime();
                    //    //infolog.WarnType = alertall;
                    //    //infolog.Warnmsg = warnmsg;
                    //    State = ((int)EnumEquipmentCurrentStateDisplay.警告).ToString();
                    //}
                    else
                    {//告警结束,获取有告警的数据,然后关闭他
                        info.AlertTime = null;
                        info.Alertmsg = "";//这个需要代码对应字典维护信息才知道
                        info.FailureType = "";
                        info.WarnType = "";
                        info.WarnTime = null;
                        info.Warnmsg = "";
                        if (loginfo.IsMessage)
                        {//警告会覆盖下面的状态,先不用警告了
                            info.WarnTime = info.WarnTime ?? DateTime.Now;
                            info.Warnmsg = warnmsg;//这个需要代码对应字典维护信息才知道
                            info.WarnType = alertall;
                        }
                        if (info.EquipmentCurrentState==null||(!info.EquipmentCurrentState.Equals(((int)EnumEquipmentCurrentStateDisplay.离线).ToString())))
                        {//如果设备状态为离线,则此处不需要判断任何信息
                            if (loginfo.IsNormalProduction && !loginfo.LackMaterial && !loginfo.FullMaterial)
                            {//自动运行状态+不缺料+不堵料
                                State = ((int)EnumEquipmentCurrentStateDisplay.生产).ToString();
                            }
                            else if (loginfo.IsNormalProduction && loginfo.FullMaterial)
                            {//自动运行状态+下料道满料 =  å®Œæˆ ï¼ˆå°±æ˜¯æœ‰ç”Ÿäº§å‡ºæ¥ä½†æ²¡æœ‰å‡ºè®¾å¤‡ï¼‰
                                State = ((int)EnumEquipmentCurrentStateDisplay.完成).ToString();
                            }
                            //else if (loginfo.IsNormalProduction && loginfo.LackMaterial)
                            //{//其他状态全算待机
                            //    State = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
                            //}
                            else
                            {//其他状态全算待机
                                State = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
                            }
                        }
                    }
                    if (!string.IsNullOrEmpty(State) && State != info.EquipmentCurrentState)
                    {//只有状态出现变化才变更,状态变更,肯定有新的一条数据
                        //状态变更,获取旧状态的信息,若有则更新(准确的说,只要没有结束时间的设备状态都需要更新结束时间,以便于插入新的数据)
                        var equlogState = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                        && o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue && (o.EquipmentStateEndTime == null || o.EquipmentStateEndTime == DateTime.MinValue)
                        //&& o.EquipmentState== info.EquipmentCurrentState
                        )
                            .OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
                        if (equlogState != null)
                        {
                            equlogState.MonitoringPoint = loginfo.MonitoringPoint;
                            equlogState.EquipmentStateEndTime = DateTimeHelper.GetDateTime();
                        }
                        info.UpdatedUserName = loginfo.MonitoringPoint;
                        info.UpdatedTime = DateTime.Now;
                        info.EquipmentCurrentState = State;
                        //状态变更,需要更新原来的,肯定会插入新的
                        infolog.EquipmentState = State;
                        infolog.EquipmentStateStartTime = DateTimeHelper.GetDateTime();
                        infolog.WorkingProcedure = loginfo.WorkingProcedure;
                        infolog.MonitoringPoint = loginfo.MonitoringPoint;
                        infolog.Remarks = "告警信息出现变更3";
                        infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + $"设备状态变更为{((EnumEquipmentCurrentStateDisplay)int.Parse(State)).ToString()}\r\n";
                        isAddEquipmentWorkingLog = true;
                        isStatechange=true;
                    }
                    #endregion
                    //1.有故障则是故障状态, æœ‰æ•…障信息+告警信息
                    //2.没有故障有告警则是告警状态,有告警信息
                    //3.即没故障,也没告警,则是其他状态
                    //查找是否有未结束的故障
                    var equlogFailure = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                    && o.FailureStartTime != null && o.FailureStartTime != DateTime.MinValue && (o.FailureEndTime == null || o.FailureEndTime == DateTime.MinValue))
                        .OrderByDescending(o => o.FailureStartTime).FirstOrDefault();
                    if (loginfo.IsCloseAlert)
                    {//有故障标志位,设备状态若有变更则肯定有新增,此处直接更新即可
                     //有故障标志位,设备状态若没有更新,有故障,也不会插入新的(有故障设备状态变更肯定是变成故障)
                        infolog.FailureStartTime = DateTimeHelper.GetDateTime();
                        infolog.FailureType = faultall;
                        infolog.FailureMsg = faultmsg;
                        infolog.WorkingProcedure = loginfo.WorkingProcedure;
                        infolog.MonitoringPoint = loginfo.MonitoringPoint;
                        infolog.Remarks = "故障信息出现变更1";
                        infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + "故障信息变更\r\n";
                    }
                    else
                    {
                        if (equlogFailure != null)
                        {//故障关闭的
                            equlogFailure.MonitoringPoint = loginfo.MonitoringPoint;
                            equlogFailure.FailureEndTime = DateTimeHelper.GetDateTime();
                        }
                    }
                    //查找是否有未结束的告警
                    var equlogalert = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                    && o.WarnStartTime != null && o.WarnStartTime != DateTime.MinValue && (o.WarnEndTime == null|| o.WarnEndTime == DateTime.MinValue))
                        .OrderByDescending(o => o.WarnStartTime).FirstOrDefault();
                    if (loginfo.IsMessage)
                    {//若有告警,如果有设备状态变更,肯定插入,此处只修改即可
                        //若有告警,如果设备状态没有变更,有告警,也不插入新的(问题:当状态没有更改,如一直是故障,但告警信息有变化,怎么办  ps:此处先不管)
                        infolog.WarnStartTime = DateTimeHelper.GetDateTime();
                        infolog.WarnType = alertall;
                        infolog.Warnmsg = warnmsg;
                        infolog.WorkingProcedure = loginfo.WorkingProcedure;
                        infolog.MonitoringPoint = loginfo.MonitoringPoint;
                        infolog.Remarks = "告警信息出现变更2";
                        infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + "告警信息变更\r\n";
                    }
                    else
                    {
                        if (equlogalert != null)
                        {//故障关闭的
                            equlogalert.MonitoringPoint = loginfo.MonitoringPoint;
                            equlogalert.WarnEndTime = DateTimeHelper.GetDateTime();
                        }
                    }
                    #region åŽŸæ¥çš„ä»£ç ï¼Œä»¥åŽåˆ æŽ‰
                    //EquipmentWorkingLog infolog =new EquipmentWorkingLog();
                    //infolog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                    //infolog.LogAddTime = DateTimeHelper.GetDateTime();
                    //infolog.WorkPieceLogID = loginfo2.Id;
                    //infolog.EquipmentID = info.EquipmentID;
                    //bool isAddEquipmentWorkingLog = false;
                    //if (loginfo.ischeckAlertStatus)
                    //{//告警状态发生变更
                    //    //说明是一个新告警,需要更新设备监控表
                    //    //查找未结束的告警
                    //    var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                    //    && o.FailureStartTime != null && o.FailureStartTime != DateTime.MinValue)
                    //        .OrderByDescending(o=>o.FailureStartTime).FirstOrDefault();
                    //    if (loginfo.IsCloseAlert)
                    //    {
                    //        if (equlog == null|| (equlog.FailureEndTime!=null&& equlog.FailureEndTime > DateTime.MinValue))
                    //        {
                    //            info.AlertTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                    //            infolog.FailureStartTime = DateTimeHelper.GetDateTime();
                    //            infolog.FailureType = faultall;
                    //            infolog.FailureMsg = faultmsg;
                    //            infolog.WorkingProcedure = loginfo.WorkingProcedure;
                    //            infolog.MonitoringPoint = loginfo.MonitoringPoint;
                    //            infolog.Remarks = "故障信息出现变更1";
                    //            infolog.UpdateDesc = (infolog.UpdateDesc??"")+"故障信息变更\r\n";
                    //            isAddEquipmentWorkingLog =true;
                    //        }
                    //    }
                    //    else
                    //    {
                    //        if (equlog != null && (equlog.FailureEndTime == null || equlog.FailureEndTime <= DateTime.MinValue))
                    //        {//告警关闭的,若没有告警信息,不用管
                    //            equlog.MonitoringPoint = loginfo.MonitoringPoint;
                    //            equlog.FailureEndTime = DateTimeHelper.GetDateTime();
                    //        }
                    //    }
                    //}
                    //if (loginfo.ischeckMessageStatus)
                    //{//告警状态发生变更
                    //    //说明是一个新告警,需要更新设备监控表
                    //    //查找未结束的告警
                    //    var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                    //    && o.WarnStartTime != null && o.WarnStartTime != DateTime.MinValue).OrderByDescending(o => o.WarnStartTime).FirstOrDefault();
                    //    if (loginfo.IsMessage)
                    //    {
                    //        if (equlog == null || (equlog.WarnEndTime != null && equlog.WarnEndTime > DateTime.MinValue))
                    //        {
                    //            info.WarnTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                    //            infolog.WarnStartTime = DateTimeHelper.GetDateTime();
                    //            infolog.WarnType = alertall;
                    //            infolog.Warnmsg = warnmsg;
                    //            infolog.WorkingProcedure = loginfo.WorkingProcedure;
                    //            infolog.MonitoringPoint = loginfo.MonitoringPoint;
                    //            infolog.Remarks = "告警信息出现变更2";
                    //            infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + "告警信息变更\r\n";
                    //            isAddEquipmentWorkingLog = true;
                    //        }
                    //    }
                    //    else
                    //    {
                    //        if (equlog != null && (equlog.WarnEndTime == null || equlog.WarnEndTime <= DateTime.MinValue))
                    //        {//告警关闭的,若没有告警信息,不用管
                    //            equlog.MonitoringPoint = loginfo.MonitoringPoint;
                    //            equlog.WarnEndTime = DateTimeHelper.GetDateTime();
                    //        }
                    //    }
                    //}
                    ////故障》警告》其他
                    //if (loginfo.IsCloseAlert)
                    //{//故障
                    //    info.AlertTime = info.AlertTime??DateTime.Now;
                    //    info.FailureType = "";
                    //    info.WarnType = "";
                    //    info.Alertmsg = faultmsg;//这个需要代码对应字典维护信息才知道
                    //    info.FailureType = faultall;
                    //    State = ((int)EnumEquipmentCurrentStateDisplay.故障).ToString();
                    //    infolog.FailureStartTime = DateTimeHelper.GetDateTime();
                    //    infolog.FailureType = faultall;
                    //    infolog.FailureMsg = faultmsg;
                    //    if (loginfo.IsMessage)
                    //    {
                    //        info.WarnTime = info.WarnTime ?? DateTime.Now;
                    //        info.Warnmsg = warnmsg;//这个需要代码对应字典维护信息才知道
                    //        info.WarnType = alertall;
                    //    }
                    //}
                    //else if(loginfo.IsMessage)
                    //{//警告
                    //    info.AlertTime = null;
                    //    info.Alertmsg = "";//这个需要代码对应字典维护信息才知道
                    //    info.FailureType = "";
                    //    info.WarnTime = info.WarnTime ?? DateTime.Now;
                    //    info.Warnmsg = warnmsg;//这个需要代码对应字典维护信息才知道
                    //    info.WarnType = alertall;
                    //    infolog.WarnStartTime = DateTimeHelper.GetDateTime();
                    //    infolog.WarnType = alertall;
                    //    infolog.Warnmsg = warnmsg;
                    //    State = ((int)EnumEquipmentCurrentStateDisplay.警告).ToString();
                    //}
                    //else
                    //{//告警结束,获取有告警的数据,然后关闭他
                    //    info.AlertTime = null;
                    //    info.Alertmsg = "";//这个需要代码对应字典维护信息才知道
                    //    info.FailureType = "";
                    //    info.WarnType = "";
                    //    info.WarnTime = null;
                    //    info.Warnmsg = "";
                    //    if (loginfo.IsNormalProduction&& loginfo.LackMaterial)
                    //    {
                    //        State = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
                    //    }
                    //    else if(loginfo.IsNormalProduction && !loginfo.LackMaterial)
                    //    {
                    //        State = ((int)EnumEquipmentCurrentStateDisplay.生产).ToString();
                    //    }
                    //    else if(loginfo.IsNormalProduction && loginfo.FullMaterial)
                    //    {//正常生产+下料道满料 =  å®Œæˆ ï¼ˆå°±æ˜¯æœ‰ç”Ÿäº§å‡ºæ¥ä½†æ²¡æœ‰å‡ºè®¾å¤‡ï¼‰
                    //        State = ((int)EnumEquipmentCurrentStateDisplay.完成).ToString();
                    //    }
                    //    else
                    //    {//理论上不可能走到这,只是避免空值
                    //        State = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
                    //    }
                    //}
                    //if (!string.IsNullOrEmpty(State) && State != info.EquipmentCurrentState)
                    //{//只有状态出现变化才变更
                    //    info.UpdatedUserName = loginfo.MonitoringPoint;
                    //    info.UpdatedTime = DateTime.Now;
                    //    info.EquipmentCurrentState = State;
                    //    var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                    //    && o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue).OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
                    //    if (equlog != null && (equlog.EquipmentStateEndTime == null || equlog.EquipmentStateEndTime <= DateTime.MinValue))
                    //    {
                    //        equlog.MonitoringPoint = loginfo.MonitoringPoint;
                    //        equlog.EquipmentStateEndTime = DateTimeHelper.GetDateTime();
                    //    }
                    //    //状态变更,需要更新原来的,并插入新的
                    //    infolog.EquipmentState = State;
                    //    infolog.EquipmentStateStartTime = DateTimeHelper.GetDateTime();
                    //    infolog.WorkingProcedure = loginfo.WorkingProcedure;
                    //    infolog.MonitoringPoint = loginfo.MonitoringPoint;
                    //    infolog.Remarks = "告警信息出现变更3";
                    //    infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + $"设备状态变更为{((EnumEquipmentCurrentStateDisplay)int.Parse(State)).ToString()}\r\n";
                    //    isAddEquipmentWorkingLog = true;
                    //}
                    ////info.Remarks = $"{loginfo.WorkingProcedure}工序告警";
                    #endregion
                    if (isAddEquipmentCurrentMonitor)
                    {
                        info.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                        db.EquipmentCurrentMonitor.Add(info);
                    }
                    if(isAddEquipmentWorkingLog)
                    {
                        db.EquipmentWorkingLog.Add(infolog);
                    }
                }
                catch (Exception e)
                {
                    loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"{loginfo2.MonitoringPoint}设备监控更新数据异常{e.Message}.{e.StackTrace}";
                    Log4NetHelper.WriteErrorLog(type, $"{loginfo2.MonitoringPoint}设备监控更新数据异常{e.Message}.{e.StackTrace}");
                }
                //db.WorkPieceLog.Add(loginfo2);//插入设备采集日志表
                db.SaveChanges();
            }
        }
        /// <summary>
        /// å¿ƒè·³ç›‘控
        /// </summary>
        /// <param name="loginfo"></param>
        /// <param name="type"></param>
        public static void EquipmentBeartBeatMonitor(WorkPieceLogMiddle loginfo, LogType type)
        {
            using (DbModel db = new DbModel())
            {
                bool isAddEquipmentCurrentMonitor = false;
                EquipmentCurrentMonitor info = new EquipmentCurrentMonitor();
                info = db.EquipmentCurrentMonitor.Where(o => o.WorkingProcedure == loginfo.WorkingProcedure).FirstOrDefault();
                if (info == null)
                {//没有工件信息,不做更新
                    Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} å‘Šè­¦ç›‘控{loginfo.MonitoringPoint} æ²¡æœ‰èŽ·å–åˆ°è®¾å¤‡ç›‘æŽ§ä¿¡æ¯ï¼ŒçŽ°æ–°å¢ž");
                    info = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLogMiddle>(loginfo);
                    isAddEquipmentCurrentMonitor = true;
                    info.EquipmentCurrentState = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
                    info.IsDeleted = false;
                }
                string state = "";
                EquipmentWorkingLog infolog = new EquipmentWorkingLog();
                infolog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                infolog.LogAddTime = DateTimeHelper.GetDateTime();
                infolog.WorkPieceLogID = loginfo.Id;
                infolog.EquipmentID = info.EquipmentID;
                bool isAddEquipmentWorkingLog = false;
                if (!loginfo.IsConnect)
                {//最新状态为离线
                    state = ((int)EnumEquipmentCurrentStateDisplay.离线).ToString();
                    info.EquipmentCurrentState = state;
                    info.UpdatedUserName = loginfo.MonitoringPoint;
                    info.UpdatedTime = DateTime.Now;
                    info.Alertmsg = "设备离线";
                    info.AlertTime= DateTimeHelper.GetDateTime();
                    info.FailureType = "";
                    //若没有离线的信息,则新增一条
                    var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                    && o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue &&(o.EquipmentStateEndTime==null||o.EquipmentStateEndTime==DateTime.MinValue)
                    &&o.EquipmentState.Equals(state)
                    ).OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
                    if (equlog == null)
                    {
                        infolog.EquipmentState = state;
                        infolog.EquipmentStateStartTime = DateTimeHelper.GetDateTime();
                        infolog.WorkingProcedure = loginfo.WorkingProcedure;
                        infolog.MonitoringPoint = loginfo.MonitoringPoint;
                        infolog.Remarks = "离线";
                        infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + $"设备状态变更为{((EnumEquipmentCurrentStateDisplay)int.Parse(state)).ToString()}\r\n";
                        isAddEquipmentWorkingLog = true;
                    }
                    //若有非离线的状态数据,则更新
                    var equlog2 = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                && o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue && (o.EquipmentStateEndTime == null || o.EquipmentStateEndTime == DateTime.MinValue)
                && !o.EquipmentState.Equals(state)
                ).OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
                    if (equlog2 != null)
                    {
                        equlog2.MonitoringPoint = loginfo.MonitoringPoint;
                        equlog2.EquipmentStateEndTime = DateTimeHelper.GetDateTime();
                    }
                }
                else
                {//最新状态为开机
                    if(((int)EnumEquipmentCurrentStateDisplay.离线).ToString() == info.EquipmentCurrentState)
                    {//只有离线状态,才能变成开机
                        state = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
                        info.EquipmentCurrentState = state;
                        info.UpdatedUserName = loginfo.MonitoringPoint;
                        info.UpdatedTime = DateTime.Now;
                        info.Alertmsg = "";
                        info.AlertTime = null;
                        //有离线的数据,则更新
                        var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                        && o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue&& (o.EquipmentStateEndTime == null || o.EquipmentStateEndTime == DateTime.MinValue)
                        && o.EquipmentState.Equals(((int)EnumEquipmentCurrentStateDisplay.离线).ToString())
                        ).OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
                        if (equlog != null)
                        {
                            equlog.MonitoringPoint = loginfo.MonitoringPoint;
                            equlog.EquipmentStateEndTime = DateTimeHelper.GetDateTime();
                        }
                        //离线变开机,肯定会插入一条
                        infolog.EquipmentState = state;
                        infolog.EquipmentStateStartTime = DateTimeHelper.GetDateTime();
                        infolog.WorkingProcedure = loginfo.WorkingProcedure;
                        infolog.MonitoringPoint = loginfo.MonitoringPoint;
                        infolog.Remarks = "开机";
                        infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + $"设备状态变更为{((EnumEquipmentCurrentStateDisplay)int.Parse(state)).ToString()}\r\n";
                        isAddEquipmentWorkingLog = true;
                    }
                }
                if (isAddEquipmentWorkingLog)
                {
                    db.EquipmentWorkingLog.Add(infolog);
                }
                if (isAddEquipmentCurrentMonitor)
                {
                    info.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                    db.EquipmentCurrentMonitor.Add(info);
                }
                db.SaveChanges();
            }
        }
        public static void ThreadMonitor(ThreadStatusMonitorMiddle threadinfo)
        {
            ThreadMonitor(EntityPropHelper.Mapper<ThreadStatusMonitor, ThreadStatusMonitorMiddle>(threadinfo));
            try
            {
                SystemValue.UpdateMainList(threadinfo);
            }
            catch (Exception ex)
            {
            }
        }
        public static void ThreadMonitor(ThreadStatusMonitor threadinfo)
        {
            try
            {
                using (DbModel db = new DbModel())
                {
                    var info = db.ThreadStatusMonitor.Where(o => o.Threadcode == threadinfo.Threadcode).FirstOrDefault();
                    if (info == null || info.Id==0)
                    {//没有工件信息,不做更新
                        threadinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                        threadinfo.CreatedTime= DateTimeHelper.GetDateTime();
                        threadinfo.CreatedUserName = threadinfo.Threadcode;
                        db.ThreadStatusMonitor.Add(threadinfo);
                    }
                    else
                    {//更新表WorkPieceInfo
                        info.Remarks = threadinfo.Remarks;
                        info.ErrorMsg = threadinfo.ErrorMsg;
                        info.Threadendtime = DateTimeHelper.GetDateTime();//每次都更新
                        info.ThreadId = threadinfo.ThreadId;
                        info.ThreadFrequency = threadinfo.ThreadFrequency;
                        info.UpdatedTime = DateTimeHelper.GetDateTime();
                        info.UpdatedUserName = threadinfo.Threadcode;
                        info.Threadlastmodifytime = threadinfo.Threadlastmodifytime > DateTime.MinValue ? threadinfo.Threadlastmodifytime : info.Threadlastmodifytime;//如果有传参则更新
                        //if (info.Threadstatue==1)
                        //{
                        //    info.Threadlastmodifytime = DateTimeHelper.GetDateTime();//最新跑到数据
                        //}
                    }
                    db.SaveChanges();
                }
            }
            catch(Exception ex)
            {
            }
        }
        #region ä¸šåŠ¡æ–¹æ³•
        /// <summary>
        /// dict中前面一个是原对象,后面一个是目标对象
        /// </summary>
        /// <param name="WorkingProcedure"></param>
        /// <returns></returns>
        public static Dictionary<string, string> GetQualityDataInfoUpdate(string WorkingProcedure="",string MonitoringPoint="")
        {
            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("QualityState", "QualityState");
            dict.Add("EquipmentID", "EquipmentID");
            dict.Add("WorkingProcedure", "WorkingProcedure");
            dict.Add("QualityStateUpdateMode", "QualityStateUpdateMode");
            dict.Add("QualityStateUpdateUser", "QualityStateUpdateUser");
            dict.Add("OfflineTime", "OfflineTime");
            switch (WorkingProcedure)
            {
                case "OP10":
                    dict.Add("QualityOP10To1", "QualityOP10To1");
                    break;
                case "OP20":
                    dict.Add("QualityOP20To1", "QualityOP20To1");
                    break;
                case "OP30":
                    switch (MonitoringPoint)
                    {
                        case "OP3002CH3":
                            dict.Add("QualityOP30To1", "QualityOP30To1");
                            break;
                        case "OP3002CH4":
                            dict.Add("QualityOP30To2", "QualityOP30To2");
                            dict.Add("QualityOP30To8", "QualityOP30To8");
                            break;
                        case "OP3002CH5":
                            dict.Add("QualityOP30To3", "QualityOP30To3");
                            dict.Add("QualityOP30To4", "QualityOP30To4");
                            dict.Add("QualityOP30To5", "QualityOP30To5");
                            dict.Add("QualityOP30To9", "QualityOP30To9");
                            dict.Add("QualityOP30To10", "QualityOP30To10");
                            dict.Add("QualityOP30To11", "QualityOP30To11");
                            break;
                        case "OP3002CH6":
                            dict.Add("QualityOP30To6", "QualityOP30To6");
                            dict.Add("QualityOP30To7", "QualityOP30To7");
                            break;
                        default:
                            break;
                    }
                    break;
                case "OP35":
                    dict.Add("QualityOP35To1", "QualityOP35To1");
                    dict.Add("QualityOP35To2", "QualityOP35To2");
                    break;
                case "OP40":
                    dict.Add("QualityOP40To1", "QualityOP40To1");
                    break;
                case "OP60":
                    dict.Add("QualityOP60To1", "QualityOP60To1");
                    dict.Add("QualityOP60To2", "QualityOP60To2");
                    break;
                case "OP70":
                    dict.Add("QualityOP70To1", "QualityOP70To1");
                    dict.Add("QualityOP70To2", "QualityOP70To2");
                    dict.Add("QualityOP70To3", "QualityOP70To3");
                    break;
                case "OP80":
                    //dict.Add("OP80NewCode", "OP80NewCode");
                    dict.Add("QualityOP80To1", "QualityOP80To1");
                    dict.Add("QualityOP80To2", "QualityOP80To2");
                    dict.Add("QualityOP80To3", "QualityOP80To3");
                    dict.Add("QualityOP80To4", "QualityOP80To4");
                    dict.Add("QualityOP80To5", "QualityOP80To5");
                    dict.Add("QualityOP80To6", "QualityOP80To6");
                    dict.Add("QualityOP80To7", "QualityOP80To7");
                    dict.Add("QualityOP80To8", "QualityOP80To8");
                    dict.Add("QualityOP80To9", "QualityOP80To9");
                    dict.Add("QualityOP80To10", "QualityOP80To10");
                    break;
                default:
                    break;
            }
            return dict;
        }
        /// <summary>
        /// åˆ¤æ–­æ˜¯å¦è·³åº
        /// </summary>
        /// <param name="loginfo"></param>
        /// <param name="type"></param>
        public static bool CheckQualityInfoComplete(WorkPieceInfo info, WorkPieceLog loginfo, LogType type)
        {
            //判断是否跳序
            if (info == null || info.WorkPieceID.Length < 1)
            {
                Log4NetHelper.WriteErrorLog(type, $"校验工件信息{loginfo.WorkPieceID}工序是否跳序时,传入工件信息异常");
                return true;//没取到工件信息,不做判断是否跳序
            }
            else
            {
                try
                {
                    string wproStr = info.WorkingProcedureCurrent + loginfo.WorkingProcedure;
                    if (wproStr.Length != 8)
                    {
                        Log4NetHelper.WriteErrorLog(type, $"校验工件{info.WorkPieceID}  {loginfo.WorkingProcedure}工序 æ˜¯å¦è·³åºæ—¶ï¼Œå·¥åºæ‹¼æŽ¥æœ‰é—®é¢˜é•¿åº¦ä¸ä¸º8位:{wproStr}");
                        return true;//工序拼接有问题
                    }
                    if (!ConfigHelper.GetConfigString("WorkingProcedureAllStr").Contains(wproStr))
                    {
                        Log4NetHelper.WriteErrorLog(type, $"校验工件{info.WorkPieceID}  {loginfo.WorkingProcedure}工序 å‡ºçŽ°è·³åºï¼Œè¯·è®¾å¤‡æ³¨æ„:{wproStr}");
                        return false;
                    }
                }
                catch (Exception ex)
                {
                    Log4NetHelper.WriteErrorLog(type, $"校验工件{info.WorkPieceID}  {loginfo.WorkingProcedure}工序 æ˜¯å¦è·³åºæ—¶å‡ºçް异叏", ex);
                }
            }
            return true;
            //using (var trans = db.Database.BeginTransaction())
            //{ }
            //var conStr = @"server=localhost;Database=EFDBO1;User ID=sa;Password=123456;";
            //using (var connection = new SqlConnection(conStr))
            //{
            //    connection.Open();
            //    using (var scope = new Transactionscope())
            //    {
            //        //AD0.Net
            //        var command = connection.CreateCommand();
            //        command.CommandText = "DELETE FROM T_RoleInfor";
            //        command.ExecuteNonQuery();
            //        //综合提交
            //        scope.complete();
            //    }
            //}
        }
        /// <summary>
        ///         è§£æžäºŒç»´ç 
        /// </summary>
        /// <param name="loginfo"></param>
        /// <returns></returns>
        public static WorkPieceInfo ParseQRCode(WorkPieceInfo loginfo)
        {
            if(string.IsNullOrEmpty(loginfo.WorkPieceID)|| loginfo.WorkPieceID.Length!=22)
            {
                return loginfo;
            }
            loginfo.WorkPieceIDTo1 = loginfo.WorkPieceID.Substring(0, 2);
            loginfo.WorkPieceIDTo2 = loginfo.WorkPieceID.Substring(2, 4);
            loginfo.WorkPieceIDTo3 = loginfo.WorkPieceID.Substring(6, 6);
            loginfo.WorkPieceIDTo4 = loginfo.WorkPieceID.Substring(12, 2);
            loginfo.WorkPieceIDTo5 = loginfo.WorkPieceID.Substring(14, 4);
            loginfo.WorkPieceIDTo6 = loginfo.WorkPieceID.Substring(18, 2);
            loginfo.WorkPieceIDTo7 = loginfo.WorkPieceID.Substring(20, 2);
            return loginfo;
        }
        #endregion
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceLogManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
using iWare_SCADA_BusinessLogical.DLA.Dao;
using iWare_SCADA_Model;
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical.BLL
{
    public class WorkPieceLogManager//: CommonService<WorkPieceLog, WorkPieceLog,DbModel>
    {
        public static List<WorkPieceLog> GetWorkPieceLog(string WorkPieceID)
        {
            using (DbModel db = new DbModel())
            {
                //查询所有
                var query = db.WorkPieceLog.Where(o=>o.WorkPieceID== WorkPieceID).ToList();
                return query;
            }
        }
        public static long InsertWorkPieceLog(WorkPieceLog workPiece)
        {
            using (DbModel db = new DbModel())
            {
                db.WorkPieceLog.Add(workPiece);
                db.SaveChanges();
                return workPiece.Id;
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/Dao/CommonDao.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,553 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data.Entity;
namespace iWare_SCADA_BusinessLogical.DLA.Dao
{
    /// <summary>
    /// å…¬ç”¨æ–¹æ³•的抽象类
    /// å¼ å±•
    /// </summary>
    /// <typeparam name="T">自定义的实体类</typeparam>
    /// <typeparam name="S">ORM中的实体类</typeparam>
    public abstract class CommonDao<T, S> where T : class, ICommonEntity<S>  where S : class
    {
        #region éœ€è¦åœ¨å­ç±»ä¸­å®žçŽ°çš„æŠ½è±¡æ–¹æ³•
        /// <summary>
        /// è¯¥æ–¹æ³•获取在自定义实体和ORM自动生成实体之间字段的对应关系
        /// </summary>
        protected abstract string GetColumnName(string name);
        /// <summary>
        /// èŽ·å–T中属性名列表
        /// </summary>
        /// <returns>T中属性名列表</returns>
        protected abstract List<string> GetColumnNames();
        /// <summary>
        ///  è¯¥æ–¹æ³•å°†Orm的S对象转换为自定义类型T的对象
        /// </summary>
        /// <param name="s">Orm中的S实体的实例</param>
        /// <returns>自定义的T类型实例</returns>
        protected abstract T ToEntity(S s);
        /// <summary>
        /// è¯¥æ–¹æ³•将定义类型T的S对象转换为自Orm的对象
        /// </summary>
        /// <param name="t">自定义T类型的对象</param>
        /// <returns>Orm中S的对象</returns>
        protected abstract S ToOrm(T t);
        /// <summary>
        /// è¯¥æ–¹æ³•获取在自定义实体和ORM自动生成实体之间字段的对应关系
        /// </summary>
        protected abstract string GetTableName();
        #endregion
        #region æ ¹æ®æ¡ä»¶æŸ¥è¯¢
        /// <summary>
        /// æ ¹æ®æ¡ä»¶æŸ¥è¯¢è‡ªå®šä¹‰å®žä½“T的列表
        /// </summary>
        /// <param name="param">查询条件</param>
        /// <param name="msg">错误信息</param>
        /// <returns>自定义实体T的记录列表</returns>
        public virtual List<T> QueryByParam(QueryParam param, DbContext dbModel)
        {
            var res = new List<T>();
            var filter = param.Filter == null || param.Filter.Count <= 0 ? new Dictionary<string, object>() : param.Filter;
            var notfilter = param.NotFilter == null || param.NotFilter.Count <= 0 ? new Dictionary<string, object>() : param.NotFilter;
            var search = param.Search == null || param.Search.Count <= 0 ? new Dictionary<string, object>() : param.Search;
            var leqd = param.Leqd == null || param.Leqd.Count <= 0 ? new Dictionary<string, object>() : param.Leqd;
            var geqd = param.Geqd == null || param.Geqd.Count <= 0 ? new Dictionary<string, object>() : param.Geqd;
            var ltd = param.Ltd == null || param.Ltd.Count <= 0 ? new Dictionary<string, object>() : param.Ltd;
            var gtd = param.Gtd == null || param.Gtd.Count <= 0 ? new Dictionary<string, object>() : param.Gtd;
            var leq = param.Leq == null || param.Leq.Count <= 0 ? new Dictionary<string, object>() : param.Leq;
            var geq = param.Geq == null || param.Geq.Count <= 0 ? new Dictionary<string, object>() : param.Geq;
            var lt = param.Lt == null || param.Lt.Count <= 0 ? new Dictionary<string, object>() : param.Lt;
            var gt = param.Gt == null || param.Gt.Count <= 0 ? new Dictionary<string, object>() : param.Gt;
            var neq = param.Neq == null || param.Neq.Count <= 0 ? new Dictionary<string, object>() : param.Neq;
            var order = param.Order == null || param.Order.Count <= 0 ? new Dictionary<string, object>() { { "Id", "DESC" } } : param.Order;
            var sql = string.Format("SELECT * FROM {0} WHERE 1=1", GetTableName());
            var sqlParams = new List<SqlParameter>();
            foreach (var key in filter.Keys)
            {
                if (filter[key] != null && !string.IsNullOrEmpty(filter[key] + ""))
                {
                    sqlParams.Add(new SqlParameter(("@F_" + key), filter[key]));
                    sql += string.Format(" AND {0} = {1}", GetColumnName(key), "@F_" + key);
                }
            }
            foreach (var key in notfilter.Keys)
            {
                if (notfilter[key] != null && !string.IsNullOrEmpty(notfilter[key] + ""))
                {
                    sqlParams.Add(new SqlParameter(("@F_" + key), notfilter[key]));
                    sql += string.Format(" AND {0} != {1}", GetColumnName(key), "@F_" + key);
                }
            }
            foreach (var key in search.Keys)
            {
                if (search[key] != null && !string.IsNullOrEmpty(search[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@S_" + key, "%" + search[key] + "%"));
                    sql += string.Format(" AND {0} LIKE {1}", GetColumnName(key), "@S_" + key);
                }
            }
            foreach (var key in leqd.Keys)
            {
                if (leqd[key] != null && !string.IsNullOrEmpty(leqd[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@LEQD_" + key, leqd[key]));
                    sql += string.Format(" AND {0} <= {1}", GetColumnName(key), "@LEQD_" + key);
                }
            }
            foreach (var key in geqd.Keys)
            {
                if (geqd[key] != null && !string.IsNullOrEmpty(geqd[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@GEQD_" + key, geqd[key]));
                    sql += string.Format(" AND {0} >= {1}", GetColumnName(key), "@GEQD_" + key);
                }
            }
            foreach (var key in ltd.Keys)
            {
                if (ltd[key] != null && !string.IsNullOrEmpty(ltd[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@LTD_" + key, ltd[key]));
                    sql += string.Format(" AND {0} < {1}", GetColumnName(key), "@LTD_" + key);
                }
            }
            foreach (var key in gtd.Keys)
            {
                if (gtd[key] != null && !string.IsNullOrEmpty(gtd[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@GTD_" + key, gtd[key]));
                    sql += string.Format(" AND {0} > {1}", GetColumnName(key), "@GTD_" + key);
                }
            }
            foreach (var key in leq.Keys)
            {
                if (leq[key] != null && !string.IsNullOrEmpty(leq[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@LEQ_" + key, leq[key]));
                    sql += string.Format(" AND {0} <= {1}", GetColumnName(key), "@LEQ_" + key);
                }
            }
            foreach (var key in geq.Keys)
            {
                if (geq[key] != null && !string.IsNullOrEmpty(geq[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@GEQ_" + key, geq[key]));
                    sql += string.Format(" AND {0} >= {1}", GetColumnName(key), "@GEQ_" + key);
                }
            }
            foreach (var key in lt.Keys)
            {
                if (lt[key] != null && !string.IsNullOrEmpty(lt[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@LT_" + key, lt[key]));
                    sql += string.Format(" AND {0} < {1}", GetColumnName(key), "@LT_" + key);
                }
            }
            foreach (var key in gt.Keys)
            {
                if (gt[key] != null && !string.IsNullOrEmpty(gt[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@GT_" + key, gt[key]));
                    sql += string.Format(" AND {0} > {1}", GetColumnName(key), "@GT_" + key);
                }
            }
            foreach (var key in neq.Keys)
            {
                if (neq[key] != null && !string.IsNullOrEmpty(neq[key] + ""))
                {
                    sqlParams.Add(new SqlParameter("@NEQ_" + key, neq[key]));
                    sql += string.Format(" AND {0} <> {1}", GetColumnName(key), "@NEQ_" + key);
                }
            }
            sql += " ORDER BY ";
            foreach (var key in order.Keys)
            {
                var value = string.IsNullOrEmpty(order[key].ToString()) ? "DESC" : order[key].ToString().ToUpper();
                sqlParams.Add(new SqlParameter("@O_" + key, order[key]));
                sql += string.Format("{0} {1},", GetColumnName(key), value);
            }
            if (sql.EndsWith(","))
            {
                sql = sql.Substring(0, sql.Length - 1);
            }
            var datas = dbModel.Database.SqlQuery<S>(sql, sqlParams.ToArray()).ToList();
            datas.ForEach(x => res.Add(ToEntity(x)));
            return res;
        }
        #endregion
        #region æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢
        /// <summary>
        /// æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢è‡ªå®šä¹‰å®žä½“T的列表,同时返回记录的总条数及当前所在的页数
        /// </summary>
        /// <param name="param">查询条件</param>
        /// <param name="msg">异常错误消息</param>
        /// <param name="totalNum">记录的总条数</param>
        /// <param name="currentPage">当前页面数</param>
        /// <returns>自定义实体T的记录列表</returns>
        public virtual List<T> QueryByParam(QueryParam param, DbContext dbModel, out int totalNum, out int currentPage)
        {
            totalNum = 0;
            currentPage = 1;
            var res = new List<T>();
            var filter = param.Filter == null || param.Filter.Count <= 0 ? new Dictionary<string, object>() : param.Filter;
            var search = param.Search == null || param.Search.Count <= 0 ? new Dictionary<string, object>() : param.Search;
            var leqd = param.Leqd == null || param.Leqd.Count <= 0 ? new Dictionary<string, object>() : param.Leqd;
            var geqd = param.Geqd == null || param.Geqd.Count <= 0 ? new Dictionary<string, object>() : param.Geqd;
            var ltd = param.Ltd == null || param.Ltd.Count <= 0 ? new Dictionary<string, object>() : param.Ltd;
            var gtd = param.Gtd == null || param.Gtd.Count <= 0 ? new Dictionary<string, object>() : param.Gtd;
            var leq = param.Leq == null || param.Leq.Count <= 0 ? new Dictionary<string, object>() : param.Leq;
            var geq = param.Geq == null || param.Geq.Count <= 0 ? new Dictionary<string, object>() : param.Geq;
            var lt = param.Lt == null || param.Lt.Count <= 0 ? new Dictionary<string, object>() : param.Lt;
            var gt = param.Gt == null || param.Gt.Count <= 0 ? new Dictionary<string, object>() : param.Gt;
            var neq = param.Neq == null || param.Neq.Count <= 0 ? new Dictionary<string, object>() : param.Neq;
            var pageIndex = param.PageIndex < 1 ? 1 : param.PageIndex;
            var pageSize = param.PageSize < 1 ? 5 : param.PageSize;
            var order = param.Order == null || param.Order.Count <= 0 ? new Dictionary<string, object>() { { "Id", "DESC" } } : param.Order;
            //查询数量的sql语句
            var sqlCount = string.Format("SELECT COUNT(*) FROM {0} WHERE 1=1", GetTableName());
            //查询数量使用的sql参数列表
            var sqlParamsCount = new List<SqlParameter>();
            var orderStr = "";
            foreach (var key in order.Keys)
            {
                var value = string.IsNullOrEmpty(order[key].ToString()) ? "DESC" : order[key].ToString().ToUpper();
                sqlParamsCount.Add(new SqlParameter("@O_" + key, order[key]));
                orderStr += string.Format("{0} {1},", GetColumnName(key), value);
            }
            if (orderStr.EndsWith(","))
            {
                orderStr = orderStr.Substring(0, orderStr.Length - 1);
            }
            //查询记录列表的sql语句
            var sqlData = string.Format("SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY {0} ) AS ROWNUM from {1} where 1=1", orderStr, GetTableName());
            //查询记录列表使用的sql参数列表
            var sqlParamsData = new List<SqlParameter>();
            foreach (var key in filter.Keys)
            {
                if (filter[key] != null && !string.IsNullOrEmpty(filter[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@F_" + key, filter[key]));
                    sqlParamsData.Add(new SqlParameter("@F_" + key, filter[key]));
                    sqlCount += string.Format(" AND {0} = {1}", GetColumnName(key), "@F_" + key);
                    sqlData += string.Format(" AND {0} = {1}", GetColumnName(key), "@F_" + key);
                }
            }
            foreach (var key in search.Keys)
            {
                if (search[key] != null && !string.IsNullOrEmpty(search[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@S_" + key, "%" + search[key] + "%"));
                    sqlParamsData.Add(new SqlParameter("@S_" + key, "%" + search[key] + "%"));
                    sqlCount += string.Format(" AND {0} LIKE {1}", GetColumnName(key), "@S_" + key);
                    sqlData += string.Format(" AND {0} LIKE {1}", GetColumnName(key), "@S_" + key);
                }
            }
            foreach (var key in leqd.Keys)
            {
                if (leqd[key] != null && !string.IsNullOrEmpty(leqd[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@LEQD_" + key, leqd[key]));
                    sqlParamsData.Add(new SqlParameter("@LEQD_" + key, leqd[key]));
                    sqlCount += string.Format(" AND {0} <= {1}", GetColumnName(key), "@LEQD_" + key);
                    sqlData += string.Format(" AND {0} <= {1}", GetColumnName(key), "@LEQD_" + key);
                }
            }
            foreach (var key in geqd.Keys)
            {
                if (geqd[key] != null && !string.IsNullOrEmpty(geqd[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@GEQD_" + key, geqd[key]));
                    sqlParamsData.Add(new SqlParameter("@GEQD_" + key, geqd[key]));
                    sqlCount += string.Format(" AND {0} >= {1}", GetColumnName(key), "@GEQD_" + key);
                    sqlData += string.Format(" AND {0} >= {1}", GetColumnName(key), "@GEQD_" + key);
                }
            }
            foreach (var key in ltd.Keys)
            {
                if (ltd[key] != null && !string.IsNullOrEmpty(ltd[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@LTD_" + key, ltd[key]));
                    sqlParamsData.Add(new SqlParameter("@LTD_" + key, ltd[key]));
                    sqlCount += string.Format(" AND {0} < {1}", GetColumnName(key), "@LTD_" + key);
                    sqlData += string.Format(" AND {0} < {1}", GetColumnName(key), "@LTD_" + key);
                }
            }
            foreach (var key in gtd.Keys)
            {
                if (gtd[key] != null && !string.IsNullOrEmpty(gtd[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@GTD_" + key, gtd[key]));
                    sqlParamsData.Add(new SqlParameter("@GTD_" + key, gtd[key]));
                    sqlCount += string.Format(" AND {0} > {1}", GetColumnName(key), "@GTD_" + key);
                    sqlData += string.Format(" AND {0} > {1}", GetColumnName(key), "@GTD_" + key);
                }
            }
            foreach (var key in leq.Keys)
            {
                if (leq[key] != null && !string.IsNullOrEmpty(leq[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@LEQ_" + key, leq[key]));
                    sqlParamsData.Add(new SqlParameter("@LEQ_" + key, leq[key]));
                    sqlCount += string.Format(" AND {0} <= {1}", GetColumnName(key), "@LEQ_" + key);
                    sqlData += string.Format(" AND {0} <= {1}", GetColumnName(key), "@LEQ_" + key);
                }
            }
            foreach (var key in geq.Keys)
            {
                if (geq[key] != null && !string.IsNullOrEmpty(geq[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@GEQ_" + key, geq[key]));
                    sqlParamsData.Add(new SqlParameter("@GEQ_" + key, geq[key]));
                    sqlCount += string.Format(" AND {0} >= {1}", GetColumnName(key), "@GEQ_" + key);
                    sqlData += string.Format(" AND {0} >= {1}", GetColumnName(key), "@GEQ_" + key);
                }
            }
            foreach (var key in lt.Keys)
            {
                if (lt[key] != null && !string.IsNullOrEmpty(lt[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@LT_" + key, lt[key]));
                    sqlParamsData.Add(new SqlParameter("@LT_" + key, lt[key]));
                    sqlCount += string.Format(" AND {0} < {1}", GetColumnName(key), "@LT_" + key);
                    sqlData += string.Format(" AND {0} < {1}", GetColumnName(key), "@LT_" + key);
                }
            }
            foreach (var key in gt.Keys)
            {
                if (gt[key] != null && !string.IsNullOrEmpty(gt[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@GT_" + key, gt[key]));
                    sqlParamsData.Add(new SqlParameter("@GT_" + key, gt[key]));
                    sqlCount += string.Format(" AND {0} > {1}", GetColumnName(key), "@GT_" + key);
                    sqlData += string.Format(" AND {0} > {1}", GetColumnName(key), "@GT_" + key);
                }
            }
            foreach (var key in neq.Keys)
            {
                if (neq[key] != null && !string.IsNullOrEmpty(neq[key] + ""))
                {
                    sqlParamsCount.Add(new SqlParameter("@NEQ_" + key, neq[key]));
                    sqlParamsData.Add(new SqlParameter("@NEQ_" + key, neq[key]));
                    sqlCount += string.Format(" AND {0} <> {1}", GetColumnName(key), "@NEQ_" + key);
                    sqlData += string.Format(" AND {0} <> {1}", GetColumnName(key), "@NEQ_" + key);
                }
            }
            totalNum = dbModel.Database.SqlQuery<int>(sqlCount, sqlParamsCount.ToArray()).ToList()[0];
            int totalPage = Convert.ToInt32(totalNum / pageSize);
            if ((totalNum % pageSize) > 0)
            {
                totalPage += 1;
            }
            currentPage = pageIndex > totalPage ? totalPage : pageIndex;
            currentPage = Math.Max(currentPage,1);
            sqlParamsData.Add(new SqlParameter("@PI_Start", (currentPage - 1) * pageSize + 1));
            sqlParamsData.Add(new SqlParameter("@PI_End", currentPage * pageSize));
            sqlData += string.Format(") t Where t.ROWNUM   between {0} and {1} ", "@PI_Start", "@PI_End");
            var datas = dbModel.Database.SqlQuery<S>(sqlData, sqlParamsData.ToArray()).ToList();
            datas.ForEach(x => res.Add(ToEntity(x)));
            return res;
        }
        #endregion
        #region æ’入新的对象
        /// <summary>
        /// å°†è‡ªå®šä¹‰çš„实体T的实例列表批量保存到数据库
        /// </summary>
        /// <param name="ts">自定义类型T的实例列表</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>保存的数量</returns>
        public virtual int Save(List<T> ts, DbContext dbModel)
        {
            if (ts == null)
            {
                return 0;
            }
            ts.ForEach(x => dbModel.Set<S>().Add(ToOrm(x)));
            dbModel.SaveChanges();
            return ts.Count;
        }
        /// <summary>
        /// å°†è‡ªå®šä¹‰çš„实体T的实例保存到数据库
        /// </summary>
        /// <param name="t">自定义类型T的实例</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>新添加T对象的id</returns>
        public virtual int Save(T t, DbContext dbModel)
        {
            var s = ToOrm(t);
            dbModel.Set<S>().Add(s);
            dbModel.SaveChanges();
            return ToEntity(s).Id;
        }
        #endregion
        #region ä¿®æ”¹å¯¹è±¡
        /// <summary>
        /// ä¿®æ”¹è‡ªå®šä¹‰ç±»åž‹T的实体并保存到数据库
        /// </summary>
        /// <param name="t">自定义类型T的实例</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>需改实体的id</returns>
        public virtual int Update(T t, DbContext dbModel)
        {
            var entry = dbModel.Entry<S>(ToOrm(t));
            entry.State = System.Data.Entity.EntityState.Unchanged;
            var propStrs = GetColumnNames();
            propStrs.ForEach(x => entry.Property(GetColumnName(x)).IsModified = true);
            dbModel.SaveChanges();
            return t.Id;
        }
        /// <summary>
        /// ä¿®æ”¹è‡ªå®šä¹‰ç±»åž‹T的实体并保存到数据库
        /// </summary>
        /// <param name="t">自定义类型T的实例</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>需改实体的id</returns>
        ///
        public virtual int Update(List<T> ts, DbContext dbModel)
        {
            foreach (var t in ts)
            {
                var entry = dbModel.Entry<S>(ToOrm(t));
                entry.State = System.Data.Entity.EntityState.Unchanged;
                var propStrs = GetColumnNames();
                propStrs.ForEach(x => entry.Property(GetColumnName(x)).IsModified = true);
            }
            dbModel.SaveChanges();
            return ts.Count;
        }
        #endregion
        #region åˆ é™¤å¯¹è±¡
        /// <summary>
        /// ä»Žæ•°æ®åº“中删除主键为id的记录
        /// </summary>
        /// <param name="id">需要删除对象的id</param>
        /// <param name="msg">异常错误信息</param>
        /// <returns>被删除对象的主键</returns>
        public virtual int Delete(int id, DbContext dbModel)
        {
            var count = Delete(new List<int> { id }, dbModel);
            return id;
        }
        /// <summary>
        /// ä»Žæ•°æ®åº“中批量删除主键列表为ids的记录
        /// </summary>
        /// <param name="id">需要删除对象的id列表</param>
        /// <param name="msg">异常错误信息</param>
        /// <returns>被删除对象的数量</returns>
        public virtual int Delete(List<int> ids, DbContext dbModel)
        {
            foreach (var id in ids)
            {
                var t = Activator.CreateInstance(typeof(T));
                ((T)t).Id = id;
                var s = ToOrm((T)t);
                dbModel.Set<S>().Attach(s);
                dbModel.Set<S>().Remove(s);
            }
            dbModel.SaveChanges();
            return ids.Count;
        }
        #endregion
        #region æ‹¼è£…å­—å…¸
        /// <summary>
        /// å°†æ»¡è¶³æ¡ä»¶çš„T类型拼装成以id为键,类型本身为值的字典
        /// </summary>
        /// <param name="param">查询条件</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>以id为键,类型本身为值的字典</returns>
        public virtual Dictionary<int, T> ToDictionary(QueryParam param, DbContext dbModel)
        {
            var res = new Dictionary<int, T>();
            var datas = QueryByParam(param, dbModel);
            datas.ForEach(x => res.Add(x.Id,x));
            return res;
        }
        #endregion
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/Dao/CommonService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,404 @@
using iWare_SCADA_BusinessLogical.Properties;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Validation;
using System.Linq;
namespace iWare_SCADA_BusinessLogical.DLA.Dao
{
    /// <summary>
    /// å…¬ç”¨æ–¹æ³•的抽象类
    /// å¼ å±•
    /// </summary>
    /// <typeparam name="T">自定义的实体类</typeparam>
    /// <typeparam name="S">ORM中的实体类</typeparam>
    public abstract class CommonService<T, S, D>:IService<T> where T : class, ICommonEntity<S>  where S : class where D: DbContext,IDisposable
    {
        #region éœ€è¦åœ¨å­ç±»ä¸­å®žçŽ°çš„æŠ½è±¡æ–¹æ³•
        private CommonDao<T, S> CommonDao;
        public CommonService(CommonDao<T, S> commonDao)
        {
            this.CommonDao = commonDao;
        }
        #endregion
        #region æ ¹æ®æ¡ä»¶æŸ¥è¯¢
        /// <summary>
        /// æ ¹æ®æ¡ä»¶æŸ¥è¯¢è‡ªå®šä¹‰å®žä½“T的列表
        /// </summary>
        /// <param name="param">查询条件</param>
        /// <param name="msg">错误信息</param>
        /// <returns>自定义实体T的记录列表</returns>
        public virtual List<T> QueryByParam(QueryParam param, out string msg)
        {
            msg = "";
            var type = typeof(D);
            using (var dbModel = type.Assembly.CreateInstance(type.FullName) as DbContext)
            {
                try
                {
                    return CommonDao.QueryByParam(param, dbModel);
                }
                catch (DbEntityValidationException ex)
                {
                    var errs = ex.EntityValidationErrors.SelectMany(validationResult => validationResult.ValidationErrors).Select(m => m.ErrorMessage);
                    msg = string.Join(", ", errs);
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "QueryByParam", msg);
                    return new List<T>();
                }
                catch (Exception ex)
                {
                    msg = ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "QueryByParam", ex.Message);
                    return new List<T>();
                }
            }
        }
        #endregion
        #region æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢
        /// <summary>
        /// æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢è‡ªå®šä¹‰å®žä½“T的列表,同时返回记录的总条数及当前所在的页数
        /// </summary>
        /// <param name="param">查询条件</param>
        /// <param name="msg">异常错误消息</param>
        /// <param name="totalNum">记录的总条数</param>
        /// <param name="currentPage">当前页面数</param>
        /// <returns>自定义实体T的记录列表</returns>
        public virtual List<T> QueryByParam(QueryParam param, out string msg, out int totalNum, out int currentPage)
        {
            msg = "";
            totalNum = 0;
            currentPage = 1;
            var type = typeof(D);
            using (var dbModel = type.Assembly.CreateInstance(type.FullName) as DbContext)
            {
                try
                {
                    return CommonDao.QueryByParam(param, dbModel, out totalNum, out currentPage);
                }
                catch (DbEntityValidationException ex)
                {
                    var errs = ex.EntityValidationErrors.SelectMany(validationResult => validationResult.ValidationErrors).Select(m => m.ErrorMessage);
                    msg = string.Join(", ", errs);
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "QueryByParam", msg);
                    return new List<T>();
                }
                catch (Exception ex)
                {
                    msg = ex.Message;
                    totalNum = 0;
                    currentPage = 1;
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "QueryByParam", ex.Message);
                    return new List<T>();
                }
            }
        }
        #endregion
        #region æ’入新的对象
        /// <summary>
        /// å°†è‡ªå®šä¹‰çš„实体T的实例列表批量保存到数据库
        /// </summary>
        /// <param name="ts">自定义类型T的实例列表</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>保存的数量</returns>
        public virtual int Save(List<T> ts, out string msg)
        {
            msg = "";
            var type = typeof(D);
            using (var dbModel = type.Assembly.CreateInstance(type.FullName) as DbContext)
            {
                try
                {
                    return CommonDao.Save(ts, dbModel);
                }
                catch (DbEntityValidationException ex)
                {
                    var errs = ex.EntityValidationErrors.SelectMany(validationResult => validationResult.ValidationErrors).Select(m => m.ErrorMessage);
                    msg = string.Join(", ", errs);
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Save", msg);
                    return 0;
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException ex)
                {
                    msg = ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir,  this.ToString(), "Save", ex.Message);
                    return 0;
                }
                catch (Exception ex)
                {
                    msg = ex.HResult == (int)EDbError.记录已存在 ? EDbError.记录已存在.ToString() : ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir,  this.ToString(), "Save", msg);
                    return 0;
                }
            }
        }
        /// <summary>
        /// å°†è‡ªå®šä¹‰çš„实体T的实例保存到数据库
        /// </summary>
        /// <param name="t">自定义类型T的实例</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>新添加T对象的id</returns>
        public virtual int Save(T t, out string msg)
        {
            msg = "";
            var type = typeof(D);
            using (var dbModel = type.Assembly.CreateInstance(type.FullName) as DbContext)
            {
                try
                {
                    return CommonDao.Save(t, dbModel);
                }
                catch (DbEntityValidationException ex)
                {
                    var errs = ex.EntityValidationErrors.SelectMany(validationResult => validationResult.ValidationErrors).Select(m => m.ErrorMessage);
                    msg = string.Join(", ", errs);
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Save", msg);
                    return -1;
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException ex)
                {
                    msg = ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir,  this.ToString(), "Save", ex.Message);
                    return -1;
                }
                catch (Exception ex)
                {
                    msg = ex.HResult == (int)EDbError.记录已存在 ? EDbError.记录已存在.ToString() : ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir,  this.ToString(), "Save", msg);
                    return -1;
                }
            }
        }
        #endregion
        #region ä¿®æ”¹å¯¹è±¡
        /// <summary>
        /// ä¿®æ”¹è‡ªå®šä¹‰ç±»åž‹T的实体并保存到数据库
        /// </summary>
        /// <param name="t">自定义类型T的实例</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>需改实体的id</returns>
        public virtual int Update(T t, out string msg)
        {
            msg = "";
            var type = typeof(D);
            using (var dbModel = type.Assembly.CreateInstance(type.FullName) as DbContext)
            {
                try
                {
                    return CommonDao.Update(t, dbModel);
                }
                catch (DbEntityValidationException ex)
                {
                    var errs = ex.EntityValidationErrors.SelectMany(validationResult => validationResult.ValidationErrors).Select(m => m.ErrorMessage);
                    msg = string.Join(", ", errs);
                    LogTextHelper.WriteLog(Resources.LogDir,  this.ToString(), "Update", msg);
                    return -1;
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException ex)
                {
                    msg = ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir,  this.ToString(), "SaveUpdate", ex.Message);
                    return -1;
                }
                catch (Exception ex)
                {
                    msg = ex.HResult == (int)EDbError.记录已存在 ? EDbError.记录已存在.ToString() : ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir,  this.ToString(), "Update", msg);
                    return -1;
                }
            }
        }
        /// <summary>
        /// ä¿®æ”¹è‡ªå®šä¹‰ç±»åž‹T的实体并保存到数据库
        /// </summary>
        /// <param name="t">自定义类型T的实例</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>需改实体的id</returns>
        public virtual int Update(List<T> ts, out string msg)
        {
            msg = "";
            var type = typeof(D);
            using (var dbModel = type.Assembly.CreateInstance(type.FullName) as DbContext)
            {
                try
                {
                    CommonDao.Update(ts, dbModel);
                    return ts.Count;
                }
                catch (DbEntityValidationException ex)
                {
                    var errs = ex.EntityValidationErrors.SelectMany(validationResult => validationResult.ValidationErrors).Select(m => m.ErrorMessage);
                    msg = string.Join(", ", errs);
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Update", msg);
                    return -1;
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException ex)
                {
                    msg = ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SaveUpdate", ex.Message);
                    return -1;
                }
                catch (Exception ex)
                {
                    msg = ex.HResult == (int)EDbError.记录已存在 ? EDbError.记录已存在.ToString() : ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Update", msg);
                    return -1;
                }
            }
        }
        #endregion
        #region åˆ é™¤å¯¹è±¡
        /// <summary>
        /// ä»Žæ•°æ®åº“中删除主键为id的记录
        /// </summary>
        /// <param name="id">需要删除对象的id</param>
        /// <param name="msg">异常错误信息</param>
        /// <returns>被删除对象的主键</returns>
        public virtual int Delete(int id, out string msg)
        {
            msg = "";
            var type = typeof(D);
            using (var dbModel = type.Assembly.CreateInstance(type.FullName) as DbContext)
            {
                try
                {
                    return CommonDao.Delete(id, dbModel);
                }
                catch (DbEntityValidationException ex)
                {
                    var errs = ex.EntityValidationErrors.SelectMany(validationResult => validationResult.ValidationErrors).Select(m => m.ErrorMessage);
                    msg = string.Join(", ", errs);
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Delete", msg);
                    return -1;
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException ex)
                {
                    msg = ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Delete", ex.Message);
                    return -1;
                }
                catch (Exception ex)
                {
                    msg = "记录已被其他对象引用,不能删除";
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Delete", ex.Message);
                    return -1;
                }
            }
        }
        /// <summary>
        /// ä»Žæ•°æ®åº“中批量删除主键列表为ids的记录
        /// </summary>
        /// <param name="id">需要删除对象的id列表</param>
        /// <param name="msg">异常错误信息</param>
        /// <returns>被删除对象的数量</returns>
        public virtual int Delete(List<int> ids, out string msg)
        {
            msg = "";
            var type = typeof(D);
            using (var dbModel = type.Assembly.CreateInstance(type.FullName) as DbContext)
            {
                try
                {
                    return CommonDao.Delete(ids, dbModel);
                }
                catch (DbEntityValidationException ex)
                {
                    var errs = ex.EntityValidationErrors.SelectMany(validationResult => validationResult.ValidationErrors).Select(m => m.ErrorMessage);
                    msg = string.Join(", ", errs);
                    LogTextHelper.WriteLog(Resources.LogDir,  this.ToString(), "Delete", msg);
                    return 0;
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateConcurrencyException ex)
                {
                    msg = ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Delete", ex.Message);
                    return 0;
                }
                catch (Exception ex)
                {
                    msg = "记录已被其他对象引用,不能删除";
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Delete", ex.Message);
                    return 0;
                }
            }
        }
        #endregion
        #region æ‹¼è£…å­—å…¸
        /// <summary>
        /// å°†æ»¡è¶³æ¡ä»¶çš„T类型拼装成以id为键,类型本身为值的字典
        /// </summary>
        /// <param name="param">查询条件</param>
        /// <param name="msg">异常错误消息</param>
        /// <returns>以id为键,类型本身为值的字典</returns>
        public virtual Dictionary<int, T> ToDictionary(QueryParam param,out string msg)
        {
            msg = "";
            var type = typeof(D);
            using (var dbModel = type.Assembly.CreateInstance(type.FullName) as DbContext)
            {
                try
                {
                    return CommonDao.ToDictionary(param, dbModel);
                }
                catch (DbEntityValidationException ex)
                {
                    var errs = ex.EntityValidationErrors.SelectMany(validationResult => validationResult.ValidationErrors).Select(m => m.ErrorMessage);
                    msg = string.Join(", ", errs);
                    LogTextHelper.WriteLog(Resources.LogDir,  this.ToString(), "ToDictionary", msg);
                    return new Dictionary<int, T>();
                }
                catch (Exception ex)
                {
                    msg = ex.Message;
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ToDictionary", ex.Message);
                    return new Dictionary<int, T>();
                }
            }
        }
        #endregion
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/Dao/_system~.ini
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/EFHelp.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical.DLA
{
    internal class EFHelp
    {
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/ICommonEntity.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// å…¬ç”¨çš„实体类接口
    /// å¼ å±•
    /// </summary>
    /// <typeparam name="T">自定义的实体类型</typeparam>
    /// <typeparam name="S">ORM中的实体类型</typeparam>
    public interface ICommonEntity<S>
    {
        int Id { get; set; }
        /// <summary>
        /// å°†T类型的实体转换成Orm中的对象
        /// </summary>
        /// <returns>Orm中的对象</returns>
        S ToOrm();
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/IService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@

using System.Collections.Generic;
namespace iWare_SCADA_BusinessLogical
{
    public interface IService<T>
    {
        List<T> QueryByParam(QueryParam param, out string msg);
        int Save(T t, out string msg);
        int Update(T t, out string msg);
        int Delete(int id, out string msg);
        int Delete(List<int> ids, out string msg);
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DLA/QueryParam.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
using iWare_SCADA_BusinessLogical.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Globalization;
using System.Windows.Forms;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// ç”¨äºŽæŸ¥è¯¢çš„参数
    /// </summary>
    public class QueryParam
    {
        /// <summary>
        /// ç”¨äºŽç²¾ç¡®æŸ¥è¯¢çš„字段
        /// </summary>
        public Dictionary<string, object> Filter { get; set; }
        /// <summary>
        /// ç”¨äºŽç²¾ç¡®æŸ¥è¯¢ä¸ç­‰å¾çš„字段
        /// </summary>
        public Dictionary<string, object> NotFilter { get; set; }
        /// <summary>
        /// ç”¨äºŽæ¨¡ç³ŠæŸ¥è¯¢çš„字段
        /// </summary>
        public Dictionary<string, object> Search { get; set; }
        /// <summary>
        /// ç”¨äºŽæŽ’序查询的字段
        /// </summary>
        public Dictionary<string, object> Order { get; set; }
        /// <summary>
        /// ç”¨äºŽæŸ¥è¯¢æ—¶é—´å°äºŽç­‰äºŽçš„字段
        /// </summary>
        public Dictionary<string, object> Leqd { get; set; }
        /// <summary>
        /// ç”¨äºŽæŸ¥è¯¢æ—¶é—´å¤§äºŽç­‰äºŽçš„字段
        /// </summary>
        public Dictionary<string, object> Geqd { get; set; }
        /// <summary>
        /// ç”¨äºŽæŸ¥è¯¢æ—¶é—´å°äºŽçš„字段
        /// </summary>
        public Dictionary<string, object> Ltd { get; set; }
        /// <summary>
        /// ç”¨äºŽæŸ¥è¯¢æ—¶é—´å¤§äºŽçš„字段
        /// </summary>
        public Dictionary<string, object> Gtd { get; set; }
        /// <summary>
        /// ç”¨äºŽæŸ¥è¯¢å°äºŽç­‰äºŽçš„字段
        /// </summary>
        public Dictionary<string, object> Leq { get; set; }
        /// <summary>
        /// ç”¨äºŽæŸ¥è¯¢å¤§äºŽç­‰äºŽçš„字段
        /// </summary>
        public Dictionary<string, object> Geq { get; set; }
        /// <summary>
        /// ç”¨äºŽæŸ¥è¯¢å°äºŽçš„字段
        /// </summary>
        public Dictionary<string, object> Lt { get; set; }
        /// <summary>
        /// ç”¨äºŽæŸ¥è¯¢å¤§äºŽçš„字段
        /// </summary>
        public Dictionary<string, object> Gt { get; set; }
        /// <summary>
        /// ç”¨äºŽæŸ¥è¯¢å¤§äºŽçš„字段
        /// </summary>
        public Dictionary<string, object> Neq { get; set; }
        /// <summary>
        /// ç”¨äºŽåˆ†é¡µï¼Œç¬¬å‡ é¡µ
        /// </summary>
        public int PageIndex { get; set; }
        /// <summary>
        /// ç”¨äºŽåˆ†é¡µï¼Œæ¯ä¸ªé¡µé¢çš„æ•°æ®æ•°é‡
        /// </summary>
        public int PageSize { get; set; }
    }
    public class OP60Info
    {
        public string datetime { get; set; }
        public string col2 { get; set; }
        public string value { get; set; }
        public DateTime? datetimeHandle{get;set;}
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DBDataCapture/AlarmLogManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
using iWare_SCADA_Model.TableModelSC;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    public class AlarmLogManager
    {
        public static List<AlarmLog> GetAlarmLogs()
        {
            using (SCModel db = new SCModel())
            {
                //查询所有
                var query = db.AlarmLog.ToList();//这个不是延迟查询
                return query;
            }
        }
        public static void UpdateAlarmLogs(AlarmLog log)
        {
            using (SCModel db = new SCModel())
            {
                //查询所有
                var query = db.AlarmLog.Where(o => o.id == 1).FirstOrDefault();//这个不是延迟查询
                query.alarmMsg = $"测试啊!{DateTime.Now.ToString()}";
                db.SaveChanges();
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// æ•°æ®æ”¶é›†åŸºç±»
    /// </summary>
    public abstract class DataCaptureHandler
    {
        public static string WorkPieceID { get; set; }
        public DataCaptureConfig _dataCaptureConfig = new DataCaptureConfig();
        //public List<DataCaptureColumnConfig> _columnList = new List<DataCaptureColumnConfig>();
        /// <summary>
        /// æ˜¯å¦æ”¶é›†æ•°æ®ï¼Œé»˜è®¤æ”¶é›†
        /// </summary>
        public bool IsCaptureflag = true;
        /// <summary>
        /// å·¥åºå·
        /// </summary>
        public abstract string WorkingProcedure { get;}
        /// <summary>
        /// æ•°æ®æ”¶é›†ç‚¹ä»£ç 
        /// </summary>
        public abstract string DataCapturePointCode { get;}
        /// <summary>
        /// æ”¶é›†æ”¶é›†ç‚¹æè¿°
        /// </summary>
        public abstract string DataCapturePointCname { get;}
        /// <summary>
        /// æ ¹æ®æ–°çš„配置信息,刷新各自的数据
        /// </summary>
        /// <param name="dataCaptureConfig"></param>
        public abstract void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig);
        /// <summary>
        /// æ•°æ®æ”¶é›†å¼€å§‹
        /// </summary>
        /// <param name="dataCaptureColumnDict">数据收集配置信息</param>
        /// <returns></returns>
        public abstract void DataCaptureStart();
        /// <summary>
        /// é…ç½®çš„各监控点需获取的数据
        /// </summary>
        public static List<DataCaptureColumnConfig> colConfig;
        /// <summary>
        /// å¿ƒè·³å‘Šè­¦é—´éš”
        /// </summary>
        public static int heartBeatAlertInterval = 3;
        /// <summary>
        /// åˆ·æ–°å…¬å…±ç±»éœ€è¦çš„æ•°æ®
        /// </summary>
        public static void RefreshDataCommonStatic()
        {
            try
            {
                //获取配置的数据获取方式
                colConfig= DataCaptureConfigManager.GetDataCaptureColumnConfig();
                var heartBeat =ConfigHelper.GetConfigString("HeartBeatAlertInterval");
                if(string.IsNullOrEmpty(heartBeat))
                {
                    heartBeatAlertInterval = 3;
                }else
                {
                    if(!int.TryParse(heartBeat, out heartBeatAlertInterval))
                    {
                        heartBeatAlertInterval = 3;
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP05.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP05工序监控打码标记
    /// </summary>
    public class DataCaptureHandler_OP05 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP05 Instance = new DataCaptureHandler_OP05();
        public List<DataCaptureConfig> _dataCaptureConfig = new List<DataCaptureConfig>();
        public DataCaptureHandler_OP05() {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.FirstOrDefault().WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.FirstOrDefault().DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.FirstOrDefault().DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP0501":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP0501 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "刷新 OP05工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if(IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig.FirstOrDefault());
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP0501 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP0501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.FirstOrDefault().WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            //业务代码
                            plcService.ReadValuePoint("", "", PLCManger.GetTypeForString(_dataCaptureConfig.FirstOrDefault().DataCaptureColumnType));
                        }
                        SystemValue.lbl_Alert_OP0501 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP0501 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "读取 OP05工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP0501 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, "读OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0501.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,472 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP05 æ‰“标完成标记,读取工控机中打印二维码信息
    /// </summary>
    public class DataCaptureHandler_OP0501 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP0501 Instance = new DataCaptureHandler_OP0501();
        public DataCaptureHandler_OP0501()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        private string CheackPath(string path,int type,int time)
        {
            var directory = Path.GetDirectoryName(path);
            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }
            if (!File.Exists(path))
            {
                File.Create(path).Close();
            }
            string content = "";
            // åŒæ­¥æ¥æºæ•°æ®
            using (StreamReader reader = new StreamReader(path))
            {
                content = reader.ReadToEnd();
                Console.WriteLine("读取的内容是:" + content);
                if (content == null || content == "")
                {
                    switch (type)
                    {
                        case 1: content = DateTimeHelper.GetDateTime().AddYears(time).ToString();break;
                        case 2: content = DateTimeHelper.GetDateTime().AddMonths(time).ToString();break;
                        case 3: content = DateTimeHelper.GetDateTime().AddDays(time).ToString();break;
                        case 4: content = DateTimeHelper.GetDateTime().AddHours(time).ToString();break;
                        case 5: content = DateTimeHelper.GetDateTime().AddMinutes(time).ToString();break;
                        case 6: content = DateTimeHelper.GetDateTime().AddSeconds(time).ToString();break;
                        default:
                            content = DateTimeHelper.GetDateTime().ToString(); break;
                    }
                    //content = DateTimeHelper.GetDateTime().AddMinutes(-10).ToString();
                }
            }
            return content;
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                //// plc连接
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                //if (plcService == null)
                //{
                //    SystemValue.lbl_Alert_OP0501 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                //    return;
                //}
                //if (plcService != null && !plcService.IsConnected)
                //{
                //    plcService.Close();
                //    plcService.OpenService();
                //}
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        ////_dataCaptureConfig
                        //if (plcService == null || !plcService.IsConnected)
                        //{
                        //    SystemValue.lbl_Alert_OP0501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                        //    plcService.Close();
                        //    plcService.OpenService();
                        //    Thread.Sleep(100);
                        //    continue;
                        //}
                        //else
                        {
                            //var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            //if (SystemValue.value_OP0501.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                             //读码完成没啥业务操作,获取二维码,然后放到队列中
                                #region ä»Žå·¥æŽ§æœºèŽ·å–ç›¸å…³äºŒç»´ç 
                                var path = ConfigHelper.GetConfigString("WorkPeiceIDPath");//打码机打码二维码路径
                                //扫描共享目录并将新的文件扫描返回  ä¸€èˆ¬èŠ‚æ‹åœ¨15秒左右(可以确认一下)
                                //扫描修改时间在上次扫描时间之前10秒到当前时间的之间的文件
                                var dataTime = CheackPath(Environment.CurrentDirectory + "\\OP05-LastScapTime.txt",4,-10);
                                var scapEndTime = DateTimeHelper.GetDateTime();
                                var newFiles = FileHelper.DetectNewFilesCSV(path, 60, Convert.ToDateTime(dataTime), scapEndTime);
                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                    $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息开始:{dataTime}");
                                foreach (System.IO.FileInfo file in newFiles)
                                {
                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                        $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,文件名:{file.FullName}");
                                    DataTable dt = null;
                                    dt = CSVHelper.ReadCSV(file.FullName);
                                    if (dt == null)
                                    {
                                        continue;
                                    }
                                    lock (SystemValue.lock5QRcodeList)
                                    {
                                        #region æ¸…过期缓存
                                        try
                                        {
                                            //清过期缓存
                                            var lstRemoveKey = SystemValue.QRcodeList
                                                .Where(p => p.Value < DateTimeHelper.GetDateTime().AddMinutes(-600))
                                                .Select(p => p.Key).ToList();
                                            if (lstRemoveKey.Count > 0)
                                            {
                                                foreach (var key in lstRemoveKey) SystemValue.QRcodeList.Remove(key);
                                                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"清除缓存数量:({lstRemoveKey.Count}) å‰©ä½™ç¼“存数量:({SystemValue.QRcodeList.Count})");
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "清除告警报文ID缓存错误!", ex);
                                        }
                                        #endregion
                                        ////筛选需要处理的二维码信息
                                        //DataRow[] drArr = dt.Select(" æ‰«ç ç»“æžœ='成功'");    //查询
                                        //DataTable dtNew = dt.Clone();
                                        //for (int i = 0; i < drArr.Length; i++)
                                        //{
                                        //    var now = DateTime.Now;
                                        //    var list = drArr[i]["时间"].ToString().Split(':');
                                        //    var d = new DateTime(now.Year, now.Month, now.Day, Convert.ToInt32(list[0]), Convert.ToInt32(list[1]), Convert.ToInt32(list[2]), DateTimeKind.Local);
                                        //    //and æ—¶é—´> '19:19:34:547'
                                        //    if (Convert.ToDateTime(DateTime.Now.ToShortDateString() + " " +drArr[i]["时间"]).TimeOfDay> Convert.ToDateTime(DateTime.Now.ToShortDateString() + " 19:19:34:547").TimeOfDay)
                                        //        dtNew.ImportRow(drArr[i]);
                                        //    //获取到的工件号异常
                                        //    SystemValue.lbl_Alert_OP0501 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位";
                                        //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                        //        $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位");
                                        //}
                                        DataTable newDt = new DataTable();
                                        var dates = file.Name.Split('-', '.');
                                        var date = string.Format("{0:D4}-{1:D2}-{2:D2}", int.Parse(dates[0]), int.Parse(dates[1]), int.Parse(dates[2]));
                                        if (DateTimeHelper.GetDateTime().Date != Convert.ToDateTime(date) && DateTimeHelper.GetDateTime().AddDays(-1).Date != Convert.ToDateTime(date))
                                        {
                                            continue;
                                        }
                                        DataRow[] filteredRows = new DataRow[dt.Rows.Count];
                                        if (dt.Rows.Count > 0)
                                        {
                                            int j = 0;
                                            var cache = DataCache.GetCache("OP501-LastTime");
                                            DateTime? lasttime = null;
                                            if (cache != null)
                                            {
                                                lasttime = Convert.ToDateTime(cache);
                                            }
                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                                $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,工件最新时间:{(cache==null?"无缓存":cache.ToString())}");
                                            for (int i = dt.Rows.Count - 1; i >= 0; i--)
                                            {
                                                try
                                                {
                                                    string timeValue = dt.Rows[i]["时间"].ToString();
                                                    string[] timeComponents = timeValue.Split(':');
                                                    string correctedTime = string.Format("{0:D2}:{1:D2}:{2:D2}", int.Parse(timeComponents[0]), int.Parse(timeComponents[1]), int.Parse(timeComponents[2]));
                                                    var newTime = date + " " + correctedTime;
                                                    dt.Rows[i]["时间"] = newTime;
                                                    var currrentTime = Convert.ToDateTime(dt.Rows[i]["时间"]);
                                                    if (cache == null)
                                                    {
                                                        if (j == 0)
                                                        {
                                                            lasttime = currrentTime;
                                                        }
                                                        var oldTime = DateTime.Now.AddMinutes(-10);
                                                        if (currrentTime <= oldTime)
                                                        {
                                                            break;
                                                        }
                                                        filteredRows[j] = dt.Rows[i];
                                                    }
                                                    else
                                                    {
                                                        var cacheTime = Convert.ToDateTime(cache);
                                                        if (currrentTime <= cacheTime)
                                                        {
                                                            break;
                                                        }
                                                        filteredRows[j] = dt.Rows[i];
                                                    }
                                                    if (lasttime != null && lasttime < currrentTime)
                                                    {
                                                        lasttime = currrentTime;
                                                    }
                                                    j++;
                                                }
                                                catch (Exception ex)
                                                {
                                                    SystemValue.lbl_Alert_OP0501 = $" {_dataCaptureConfig.WorkingProcedure}文件打标时间异常,请查看日志!";
                                                    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}文件打标时间,出现异常:", ex);
                                                }
                                            }
                                            filteredRows = filteredRows.Where(item=>item!=null).ToArray();
                                            // è®¾ç½®ç¼“存值
                                            DateTime absoluteExpiration = DateTime.Now.AddDays(30);
                                            TimeSpan slidingExpiration = TimeSpan.FromMinutes(20);
                                            if (slidingExpiration == TimeSpan.Zero)
                                            {
                                                absoluteExpiration = DateTime.Now.AddDays(30);
                                            }
                                            else
                                            {
                                                absoluteExpiration = DateTime.MaxValue;
                                            }
                                            DataCache.SetCache("OP501-LastTime", lasttime, absoluteExpiration, slidingExpiration);
                                            if (filteredRows.Count() <= 0)
                                            {
                                                return;
                                            }
                                            if (file.LastAccessTime < Convert.ToDateTime(dataTime)) continue;
                                            using (StreamWriter writer = new StreamWriter(Environment.CurrentDirectory + "\\OP05-LastScapTime.txt", false))
                                            {
                                                dataTime = file.LastAccessTime.ToString();
                                                writer.Write(dataTime);
                                            }
                                            Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"读取到{filteredRows.Count()}行数据,时间范围是{filteredRows[j-1]["时间"]}-{filteredRows[0]["时间"]}");
                                        }
                                        //// å·¥ä»¶å·ï¼ˆäºŒç»´ç å€¼ï¼‰
                                        //string WorkPieceID = dt.Rows[0][""].ToString();
                                        //if (WorkPieceID.Length != 22)
                                        //{
                                        //    //获取到的工件号异常
                                        //    SystemValue.lbl_Alert_HMI01 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位";
                                        //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                        //        $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位");
                                        //}
                                        //SystemValue.QRcodeList.Add("", DateTimeHelper.GetDateTime());//二维码添加到列表中
                                        WorkPieceLog wplog = new WorkPieceLog();
                                        wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                        wplog.WorkingProcedure = "OP05";
                                        //wplog.EquipmentID = WorkingProcedure;
                                        wplog.Remarks = "cs";
                                        wplog.MonitoringPoint = DataCapturePointCode;
                                        wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                        wplog.CreatedUserName = CultureInfo.CurrentUICulture.Name;
                                        wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                        wplog.UpdatedUserName = "测试";
                                        wplog.IsDeleted = false;
                                        wplog.EquipmentID = "123";
                                        wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                                        wplog.QualityState = 1;
                                        wplog.ProcessingDuration = 1;
                                        wplog.MachineToolState = 1;
                                        wplog.AlertType = 1;
                                        wplog.WorkPieceNumber = 1;
                                        wplog.WorkPieceOnlineTime = Convert.ToDateTime(dataTime);
                                        wplog.WorkPieceOfflineTime = Convert.ToDateTime(dataTime).AddHours(1);
                                        wplog.WorkPieceStartMachiningTime = Convert.ToDateTime(dataTime);
                                        wplog.WorkPieceEndMachiningTime = DateTime.Now.AddDays(7);
                                        wplog.KnifeEdgeNumber = 10;
                                        wplog.KnifeToolLife = 10;
                                        wplog.KnifeToolEarlyWarningLife = 3;
                                        wplog.KnifeToolSurplusLife = 10;
                                        foreach (var item in filteredRows)
                                        {
                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                                   $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,读取工件二维码:{item["打标内容"].ToString()}");
                                            if (item == null) break;
                                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                            wplog.WorkPieceID = item["打标内容"].ToString();
                                            wplog.OfflineTime = Convert.ToDateTime(dataTime);
                                            wplog.Remarks = item["时间"].ToString() + "|" + item["打标内容"].ToString() + "|" + item["打标内容"].ToString() + "|" + item["扫码等级"].ToString() + "|" + item["扫码结果"].ToString();
                                            WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), null, _dataCaptureConfig.IsFeedback);
                                            threadStatusMonitor.Threadstatue = 1;
                                        }
                                    }
                                }
                                #endregion
                                var fileCount = newFiles.Cast<string>().ToList();
                                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"扫描完成,共扫描到:({fileCount.Count()})个文件");
                            }
                            //SystemValue.value_OP0501 = value.ToString();
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP0501 = $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                    //线程多久执行一次(不包含业务处理时间)
                    if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                    {
                        Thread.Sleep(3000);
                    }
                    else
                    {
                        Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP0501 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置异常");
            }
            //if (SystemValue.isStartedModel)
            //{
            //    #region ä»Žå·¥æŽ§æœºèŽ·å–ç›¸å…³äºŒç»´ç 
            //    //扫描共享目录并将新的文件扫描返回
            //    var newFiles = FileHelper.DetectNewFilesCSV("", 10, DateTimeHelper.GetDateTime());
            //    foreach (System.IO.FileInfo file in newFiles)
            //    {
            //        var datatable = CSVHelper.ReadCSV(file.FullName);
            //    }
            //    lock (SystemValue.lock5QRcodeList)
            //    {
            //        try
            //        {
            //            var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
            //            //清过期缓存
            //            var lstRemoveKey = SystemValue.QRcodeList
            //                .Where(p => p.Value < DateTimeHelper.GetDateTime().AddMinutes(-600))
            //                .Select(p => p.Key).ToList();
            //            if (lstRemoveKey.Count > 0)
            //            {
            //                foreach (var key in lstRemoveKey) SystemValue.QRcodeList.Remove(key);
            //                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"清除缓存数量:({lstRemoveKey.Count}) å‰©ä½™ç¼“存数量:({SystemValue.QRcodeList.Count})");
            //            }
            //            WorkPieceLog wplog = new WorkPieceLog();
            //            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
            //            wplog.WorkingProcedure = WorkingProcedure;
            //            //wplog.EquipmentID = WorkingProcedure;
            //            wplog.Remarks = WorkingProcedure;
            //            wplog.MonitoringPoint = DataCapturePointCode;
            //            wplog.CreatedTime = DateTimeHelper.GetDateTime();
            //            wplog.CreatedUserName = DataCapturePointCode;
            //            wplog.UpdatedTime = DateTimeHelper.GetDateTime();
            //            wplog.UpdatedUserName = DataCapturePointCode;
            //            wplog.IsDeleted = false;
            //            wplog.EquipmentID= _dataCaptureConfig.EquipmentID;
            //            wplog.QualityState = (int)QualityState.OK;
            //            wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
            //            wplog.WorkPieceID = WorkPieceID;
            //            if (wplog.WorkPieceID.Length != 22)
            //            {//获取到的工件号异常
            //            }
            //            else
            //            {//获取其他配置的待采集项
            //                //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
            //                //{
            //                //    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
            //                //    wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
            //                //}
            //            }
            //            //读取二维码后更新数据库
            //            var info = WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
            //        }
            //        catch (Exception ex)
            //        {
            //            Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "清除告警报文ID缓存错误!", ex);
            //        }
            //        if (SystemValue.QRcodeList.ContainsKey(WorkPieceID))
            //        {
            //            SystemValue.QRcodeList[WorkPieceID] = DateTimeHelper.GetDateTime();
            //        }
            //        else
            //        {
            //            SystemValue.QRcodeList.Add(WorkPieceID, DateTimeHelper.GetDateTime());//二维码添加到列表中
            //        }
            //    }
            //    #endregion
            //}
            //else
            //{
            //}
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0502.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,191 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// è¯»ç å®Œæˆæ ‡è®°ï¼Œè¯»å–工控机中读取二维码信息
    /// </summary>
    public class DataCaptureHandler_OP0502 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP0502 Instance = new DataCaptureHandler_OP0502();
        public DataCaptureHandler_OP0502()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                // plc连接
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP0501 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP0502 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP0502.Equals("0") && value.ToString().Equals("1"))
                            {
                                #region ä»Žå·¥æŽ§æœºèŽ·å–ç›¸å…³äºŒç»´ç 
                                //打码机打码二维码路径
                                var path = ConfigHelper.GetConfigString("WorkPeiceIDPath");
                                //扫描共享目录并将新的文件扫描返回  ä¸€èˆ¬èŠ‚æ‹åœ¨15秒左右(可以确认一下)
                                var newFiles = FileHelper.DetectNewFilesCSV(path, 10, DateTimeHelper.GetDateTime(), DateTimeHelper.GetDateTime());
                                foreach (System.IO.FileInfo file in newFiles)
                                {
                                    DataTable dt = null;
                                    dt = CSVHelper.ReadCSV(file.FullName);
                                    if (dt == null)
                                    {
                                        continue;
                                    }
                                    lock (SystemValue.lock5QRcodeList)
                                    {
                                        #region æ¸…过期缓存
                                        try
                                        {
                                            //清过期缓存
                                            var lstRemoveKey = SystemValue.QRcodeList
                                                .Where(p => p.Value < DateTimeHelper.GetDateTime().AddMinutes(-600))
                                                .Select(p => p.Key).ToList();
                                            if (lstRemoveKey.Count > 0)
                                            {
                                                foreach (var key in lstRemoveKey) SystemValue.QRcodeList.Remove(key);
                                                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"清除缓存数量:({lstRemoveKey.Count}) å‰©ä½™ç¼“存数量:({SystemValue.QRcodeList.Count})");
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "清除告警报文ID缓存错误!", ex);
                                        }
                                        #endregion
                                        // å·¥ä»¶å·ï¼ˆäºŒç»´ç å€¼ï¼‰
                                        string WorkPieceID = dt.Rows[0][""].ToString();
                                        if (WorkPieceID.Length != 22)
                                        {
                                            //获取到的工件号异常
                                            SystemValue.lbl_Alert_OP0502 = $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位";
                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                                $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位");
                                        }
                                        if (SystemValue.QRcodeList.ContainsKey(WorkPieceID))
                                        {
                                            // å­˜åœ¨æ¸…理缓存
                                            SystemValue.QRcodeList.Remove(WorkPieceID);
                                        }
                                        else
                                        {
                                            // ä¸å­˜åœ¨åé¦ˆPLC
                                            var col = colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode).ToList();
                                            if (col.Count == 0)
                                            {
                                                SystemValue.lbl_Alert_OP0502 = $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息不存在,请先配置数据收集点对于字段表信息!";
                                                Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息不存在,请先配置数据收集点对于字段表信息!");
                                            }
                                            plcService.WriteValuePoint(col[0].DbNumber, col[0].Offset, col[0].DataCaptureColumnTabelName);
                                        }
                                        SystemValue.QRcodeList.Add("", DateTimeHelper.GetDateTime());//二维码添加到列表中
                                        //WorkPieceLog wplog = new WorkPieceLog();
                                        //wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                        //wplog.WorkingProcedure = WorkingProcedure;
                                        ////wplog.EquipmentID = WorkingProcedure;
                                        //wplog.Remarks = WorkingProcedure;
                                        //wplog.MonitoringPoint = DataCapturePointCode;
                                        //wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                        //wplog.CreatedUserName = DataCapturePointCode;
                                        //wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                        //wplog.UpdatedUserName = DataCapturePointCode;
                                        //wplog.IsDeleted = false;
                                        //wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                                        //wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                                        //wplog.WorkPieceID = dt.Rows[0][""].ToString();
                                        // è¯»å–二维码后更新数据库
                                        // var info = WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                                    }
                                }
                                #endregion
                            }
                            SystemValue.value_OP0502 = value.ToString();
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP0502 = $" {_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,出现异常:", ex);
                    }
                    //线程多久执行一次(不包含业务处理时间)
                    if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                    {
                        Thread.Sleep(5000);
                    }
                    else
                    {
                        Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP0502 = $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,不做校验,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,不做校验,请确认配置异常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0503.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
using System;
using System.Collections.Generic;
using iWare_SCADA_Model;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using iWare_SCADA_BusinessLogical.Utils;
using System.Threading;
using iWare_SCADA_BusinessLogical.BLL;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// å·¥ä»¶æŽ¨å‡ºæ ‡è®°ï¼Œç¡®è®¤å·¥ä»¶æ˜¯å¦è¢«æŽ¨å‡ºï¼ˆä¸åˆæ ¼ï¼‰
    /// </summary>
    public class DataCaptureHandler_OP0503 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP0503 Instance = new DataCaptureHandler_OP0503();
        public DataCaptureHandler_OP0503()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP0503 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP0503 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP0503.Equals("0") && value.ToString().Equals("1"))
                            {
                                string WorkPieceID = "";
                                string HowToExit = "";
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    switch (col.DataCaptureColumnTabelName)
                                    {
                                        case "WorkPieceID":
                                            WorkPieceID = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType)).ToString();
                                            break;
                                        case "HowToExit":
                                            HowToExit = plcService.WriteValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType)).ToString();
                                            break;
                                        default:
                                            break;
                                    }
                                }
                                if (WorkPieceID.Length != 22)
                                {
                                    SystemValue.lbl_Alert_OP0503 = $"工件推出标记,确认工件号:【" + WorkPieceID + "】长度异常,长度不等于22位";
                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工件推出标记,确认工件号:【" + WorkPieceID + "】长度异常,长度不等于22位");
                                }
                                else
                                {
                                    WorkPieceLog wplog = new WorkPieceLog();
                                    wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                    wplog.WorkPieceID = WorkPieceID;
                                    wplog.WorkingProcedure = WorkingProcedure;
                                    wplog.EquipmentID = WorkingProcedure;
                                    wplog.Remarks = WorkingProcedure;
                                    wplog.MonitoringPoint = DataCapturePointCode;
                                    wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                    wplog.CreatedUserName = DataCapturePointCode;
                                    wplog.IsDeleted = false;
                                    if ("NOOK".Equals(HowToExit))
                                    {
                                        // NOOK退出
                                        //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                        WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    }
                                    else if("SPC".Equals(HowToExit))
                                    {
                                        //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                        WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    }
                                }
                            }
                            SystemValue.value_OP0503 = value.ToString();
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP0503 = $"读取{WorkingProcedure}工序工件推出标记,确认工件是否被推出监控,出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取{WorkingProcedure}工序工件推出标记,确认工件是否被推出监控,数据时异常:", ex);
                    }
                    //线程多久执行一次(不包含业务处理时间)
                    if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                    {
                        Thread.Sleep(5000);
                    }
                    else
                    {
                        Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP0503 = $"读取{WorkingProcedure}工序工件推出标记,确认工件是否被推出监控,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取{WorkingProcedure}工序工件推出标记,确认工件是否被推出监控,请确认是否配置异常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0504.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,139 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// ä¸‹æ–™æ ‡è®°ï¼Œç¡®è®¤å·¥ä»¶OP05工序已完成
    /// </summary>
    public class DataCaptureHandler_OP0504 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP0504 Instance = new DataCaptureHandler_OP0504();
        public DataCaptureHandler_OP0504()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP0504 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP0504 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP0504.Equals("0") && value.ToString().Equals("1"))
                            {
                                string WorkPieceID = "";
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    switch (col.DataCaptureColumnTabelName)
                                    {
                                        case "WorkPieceID":
                                            WorkPieceID = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType)).ToString();
                                            break;
                                        default:
                                            break;
                                    }
                                }
                                if (WorkPieceID.Length != 22)
                                {
                                    SystemValue.lbl_Alert_OP0504 = $"工件推出标记,确认工件号:【" + WorkPieceID + "】长度异常,长度不等于22位";
                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工件推出标记,确认工件号:【" + WorkPieceID + "】长度异常,长度不等于22位");
                                }
                                else
                                {
                                    // OP05工序完成
                                    WorkPieceLog wplog = new WorkPieceLog();
                                    wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                    wplog.WorkPieceID = WorkPieceID;
                                    wplog.WorkingProcedure = WorkingProcedure;
                                    wplog.EquipmentID = WorkingProcedure;
                                    wplog.Remarks = WorkingProcedure;
                                    wplog.MonitoringPoint = DataCapturePointCode;
                                    wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                    wplog.CreatedUserName = DataCapturePointCode;
                                    wplog.IsDeleted = false;
                                    //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                    WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                }
                            }
                            SystemValue.value_OP0503 = value.ToString();
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP0504 = $"读取{WorkingProcedure}工序下料标记确认工件工序已完成监控,出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取{WorkingProcedure}工序下料标记确认工件工序已完成监控,数据时异常:", ex);
                    }
                    if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                    {
                        Thread.Sleep(5000);
                    }
                    else
                    {
                        Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP0504 = $"读取{WorkingProcedure}工序下料标记确认工件工序已完成监控,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取{WorkingProcedure}工序下料标记确认工件工序已完成监控,请确认是否配置异常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0506.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP05 è®¾å¤‡ä¿¡æ¯é‡‡é›†
    /// </summary>
    public class DataCaptureHandler_OP0506: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP0506 Instance = new DataCaptureHandler_OP0506();
        public DataCaptureHandler_OP0506()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP0506 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP0506 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            //业务代码
                            WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            wplog.WorkingProcedure = WorkingProcedure;
                            wplog.EquipmentID = WorkingProcedure;
                            wplog.MonitoringPoint = DataCapturePointCode;
                            wplog.CreatedTime = DateTimeHelper.GetDateTime();
                            wplog.CreatedUserName = DataCapturePointCode;
                            wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                            wplog.UpdatedUserName = Environment.MachineName+"自动";
                            wplog.OnlineTime = DateTimeHelper.GetDateTime();
                            wplog.IsDeleted = false;
                            foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                            {
                                try
                                {
                                    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                    //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                    var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                    if (set == null)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                    }
                                    set.SetValue(wplog, valuecol);//给动态字段赋值
                                }
                                catch (Exception setex)
                                {
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                }
                            }
                            WorkPieceInfoManager.EquipmentMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            threadStatusMonitor.Threadstatue = 1;
                        }
                        SystemValue.lbl_Alert_OP0506 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP0506 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控设备采集 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP0506 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控设备采集 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP0506 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控设备采集 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控设备采集 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP0507.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,193 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP05 å‘Šè­¦ç›‘控
    /// </summary>
    public class DataCaptureHandler_OP0507: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP0507 Instance = new DataCaptureHandler_OP0507();
        public DataCaptureHandler_OP0507()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.AlertTime = DateTime.Now;
                Random ran = new Random();
                //wplog.FailureType = "1101"+ ran.Next(0,100);
                wplog.AlertMsg = "测试告警 1101";
                wplog.EquipmentCurrentState = ((int)EnumEquipmentCurrentStateDisplay.故障).ToString();
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP0507 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP0507 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP0507.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序告警监控 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序告警监控 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //if(wplog.FailureType.Length>0)
                                {
                                    //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                    WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    threadStatusMonitor.Threadstatue = 1;
                                }
                            }
                            SystemValue.value_OP0507 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP0507 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP0507 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP0507 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP0507 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1001.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,154 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10读码完成标记
    /// </summary>
    public class DataCaptureHandler_OP1001: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1001 Instance = new DataCaptureHandler_OP1001();
        public DataCaptureHandler_OP1001()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP1001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue.lbl_Alert_OP1001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "刷新 OP05工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP1001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP1001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.WorkingProcedure = "OP10";
                                wplog.EquipmentID = "OP10";
                                wplog.Remarks = "OP10";
                                wplog.MonitoringPoint = "OP1001";
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.ReadQRcode(wplog, LogType.PLCOP10, plcService, _dataCaptureConfig.IsFeedback);
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP1001 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序上线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $"读取 {DataCapturePointCode}工序上线数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1001 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序上线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP10, $"{DataCapturePointCode}上线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1002.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10测试完成标记 ï¼ˆOP10)
    /// </summary>
    public class DataCaptureHandler_OP1002: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1002 Instance = new DataCaptureHandler_OP1002();
        public DataCaptureHandler_OP1002()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1002 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP1002.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = "自动";
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                wplog.QualityType = QualityType.Online.ToString();
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //#region å·¥æŽ§æœºè¯»å–质量信息
                                ////扫描共享目录并将新的文件扫描返回
                                //var newFiles = FileHelper.DetectNewFilesCSV("", 10, DateTimeHelper.GetDateTime(), DateTimeHelper.GetDateTime());
                                //foreach (System.IO.FileInfo file in newFiles)
                                //{
                                //    var datatable = CSVHelper.ReadCSV(file.FullName);
                                //}
                                //#endregion
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            SystemValue.value_OP1002 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1002 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}质量信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}质量信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1003.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,172 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10测试完成标记 ï¼ˆOP40)
    /// </summary>
    public class DataCaptureHandler_OP1003 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1003 Instance = new DataCaptureHandler_OP1003();
        public DataCaptureHandler_OP1003()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1003 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP1003 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP1003.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = "自动";
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                if (wplog.WorkPieceID.Length != 22)
                                {//获取到的工件号异常
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码数据时异常:");
                                    continue;
                                }
                                //#region å·¥æŽ§æœºè¯»å–质量信息
                                ////扫描共享目录并将新的文件扫描返回
                                //var newFiles = FileHelper.DetectNewFilesCSV("", 10, DateTimeHelper.GetDateTime(), DateTimeHelper.GetDateTime());
                                //foreach (System.IO.FileInfo file in newFiles)
                                //{
                                //    var datatable = CSVHelper.ReadCSV(file.FullName);
                                //}
                                //#endregion
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            SystemValue.value_OP1003 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1003 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1003 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}质量信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}质量信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1003 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1004.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10/OP40推出标记
    /// </summary>
    public class DataCaptureHandler_OP1004: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1004 Instance = new DataCaptureHandler_OP1004();
        public DataCaptureHandler_OP1004()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1004 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP1004 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP1004.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码  1.取推出标记,2取推出原因(1:nok,2和3:spc,4:状态不明 ï¼‰ï¼Œ3 å–推出二维码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = "自动";
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                if (wplog.OP10Flag != 1 && wplog.OP10Flag != 2 && wplog.OP10Flag != 3)
                                {//获取到的工件号异常
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码数据{wplog.WorkPieceID}推出原因[{wplog.OP10Flag}]异常");
                                    wplog.Remarks = $"推出原因[{wplog.OP10Flag}]异常";
                                }
                                if (wplog.OP10Flag == 1)
                                {
                                    WorkPieceInfoManager.WorkPiecePushOff(wplog, LogType.PLCOP10);
                                    threadStatusMonitor.Threadstatue = 1;
                                }
                                //else if (wplog.OP10Flag == 2 || wplog.OP10Flag == 3)
                                else
                                {
                                    WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, LogType.PLCOP10);
                                    threadStatusMonitor.Threadstatue = 1;
                                }
                            }
                            SystemValue.value_OP1004 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1004 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1004 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}推出信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}推出信息 æ•°æ®æ—¶å¼‚常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1004 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}推出信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}推出信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1005.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,160 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10工序完成标记
    /// </summary>
    public class DataCaptureHandler_OP1005: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1005 Instance = new DataCaptureHandler_OP1005();
        public DataCaptureHandler_OP1005()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1005 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP1005 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP1005.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = Environment.MachineName+"自动";
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控完成标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控完成标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP1005 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1005 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1005 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序完成标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}工序完成标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1005 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序完成标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}工序完成标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1006.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,160 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10设备信息采集
    /// </summary>
    public class DataCaptureHandler_OP1006: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1006 Instance = new DataCaptureHandler_OP1006();
        public DataCaptureHandler_OP1006()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1006 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP1006 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            //var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            //if (SystemValue.value_OP1006.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = Environment.MachineName+"自动";
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.EquipmentMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            //SystemValue.value_OP1006 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1006 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1006 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备采集 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $"{DataCapturePointCode}工序设备采集数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1006 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序设备采集 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"{DataCapturePointCode}工序设备采集数据 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP1007.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10 å‘Šè­¦ç›‘控
    /// </summary>
    public class DataCaptureHandler_OP1007: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1007 Instance = new DataCaptureHandler_OP1007();
        public DataCaptureHandler_OP1007()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.AlertTime = DateTime.Now;
                Random ran = new Random();
                //wplog.FailureType = "1101"+ ran.Next(0,100);
                wplog.AlertMsg = "测试告警 1101";
                wplog.EquipmentCurrentState = ((int)EnumEquipmentCurrentStateDisplay.故障).ToString();
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1007 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP1007 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP1007.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            SystemValue.value_OP1007 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1007 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP1007 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1007 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1007 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2001.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,146 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP20读码完成标记
    /// </summary>
    public class DataCaptureHandler_OP2001: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP2001 Instance = new DataCaptureHandler_OP2001();
        public DataCaptureHandler_OP2001()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP2001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "刷新 OP05工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue._lbl_Alert_OP2001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP2001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.WorkingProcedure = "OP20";
                                wplog.EquipmentID = "OP20";
                                wplog.Remarks = "OP20";
                                wplog.MonitoringPoint = "OP2001";
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.ReadQRcode(wplog, LogType.PLCOP20, plcService, _dataCaptureConfig.IsFeedback);
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP2001 = value.ToString();
                        }
                        SystemValue._lbl_Alert_OP2001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                    }
                    catch (Exception ex)
                    {
                        SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "读取 OP05工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP20工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP20, "读OP20工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2002.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,153 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP20测试完成标记
    /// </summary>
    public class DataCaptureHandler_OP2002: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP2002 Instance = new DataCaptureHandler_OP2002();
        public DataCaptureHandler_OP2002()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP2001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "刷新 OP05工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue._lbl_Alert_OP2001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP2001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.WorkingProcedure = "OP20";
                                wplog.EquipmentID = "OP20";
                                wplog.Remarks = "OP20";
                                wplog.MonitoringPoint = "OP2002";
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case ""://读取二维码
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                #region å·¥æŽ§æœºè¯»å–质量信息
                                //扫描共享目录并将新的文件扫描返回
                                var newFiles = FileHelper.DetectNewFilesCSV("", 10, DateTimeHelper.GetDateTime(), DateTimeHelper.GetDateTime());
                                foreach (System.IO.FileInfo file in newFiles)
                                {
                                    var datatable = CSVHelper.ReadCSV(file.FullName);
                                }
                                #endregion
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, LogType.PLCOP20);
                            }
                            SystemValue.value_OP2001 = value.ToString();
                        }
                        SystemValue._lbl_Alert_OP2001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                    }
                    catch (Exception ex)
                    {
                        SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "读取 OP05工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, "读OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2003.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP20推出标记
    /// </summary>
    public class DataCaptureHandler_OP2003: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP2003 Instance = new DataCaptureHandler_OP2003();
        public DataCaptureHandler_OP2003()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP2001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "刷新 OP05工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue._lbl_Alert_OP2001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP2001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.WorkingProcedure = "OP20";
                                wplog.EquipmentID = "OP20";
                                wplog.Remarks = "OP20";
                                wplog.MonitoringPoint = "OP2003";
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.ReadQRcode(wplog, LogType.PLCOP20, plcService, _dataCaptureConfig.IsFeedback);
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP2001 = value.ToString();
                        }
                        SystemValue._lbl_Alert_OP2001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                    }
                    catch (Exception ex)
                    {
                        SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "读取 OP05工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, "读OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2004.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP20SPC推出标记
    /// </summary>
    public class DataCaptureHandler_OP2004: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP2004 Instance = new DataCaptureHandler_OP2004();
        public DataCaptureHandler_OP2004()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP2001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "刷新 OP05工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue._lbl_Alert_OP2001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP2001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.WorkingProcedure = "OP20";
                                wplog.EquipmentID = "OP20";
                                wplog.Remarks = "OP20";
                                wplog.MonitoringPoint = "OP2004";
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.ReadQRcode(wplog, LogType.PLCOP20, plcService, _dataCaptureConfig.IsFeedback);
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP2001 = value.ToString();
                        }
                        SystemValue._lbl_Alert_OP2001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                    }
                    catch (Exception ex)
                    {
                        SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "读取 OP05工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, "读OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2005.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP20工序完成标记
    /// </summary>
    public class DataCaptureHandler_OP2005: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP2005 Instance = new DataCaptureHandler_OP2005();
        public DataCaptureHandler_OP2005()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP2001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "刷新 OP05工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue._lbl_Alert_OP2001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP2001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.WorkingProcedure = "OP20";
                                wplog.EquipmentID = "OP20";
                                wplog.Remarks = "OP20";
                                wplog.MonitoringPoint = "OP2005";
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.ReadQRcode(wplog, LogType.PLCOP20, plcService, _dataCaptureConfig.IsFeedback);
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP2001 = value.ToString();
                        }
                        SystemValue._lbl_Alert_OP2001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                    }
                    catch (Exception ex)
                    {
                        SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "读取 OP05工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, "读OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP2006.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,143 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP20告警标记
    /// </summary>
    public class DataCaptureHandler_OP2006: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP2006 Instance = new DataCaptureHandler_OP2006();
        public DataCaptureHandler_OP2006()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP2001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "刷新 OP05工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue._lbl_Alert_OP2001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP2001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.WorkingProcedure = "OP20";
                                wplog.EquipmentID = "OP20";
                                wplog.Remarks = "OP20";
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.ReadQRcode(wplog, LogType.PLCOP20, plcService, _dataCaptureConfig.IsFeedback);
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP2001 = value.ToString();
                        }
                        SystemValue._lbl_Alert_OP2001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                    }
                    catch (Exception ex)
                    {
                        SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–OP05工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "读取 OP05工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue._lbl_Alert_OP2001 = $" {RandomHelper.GenerateRandomCode(4)} OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, "读OP05工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3001.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,234 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP30读码完成标记
    /// </summary>
    public class DataCaptureHandler_OP3001: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3001 Instance = new DataCaptureHandler_OP3001();
        public DataCaptureHandler_OP3001()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP3001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP3001 = $" {RandomHelper.GenerateRandomCode(4)} OP30工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP30工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLog wplog = new WorkPieceLog();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                //var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.WorkPieceID = WorkPieceID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                //var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                //wplog.WorkPieceID = PLCManger.GetWorkPieceIDForPLC(_dataCaptureConfig, plcService);
                if (wplog.WorkPieceID.Length != 22)
                {//获取到的工件号异常
                    return;
                }
                else
                {//获取其他配置的待采集项
                    //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                    //{
                    //    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                    //    wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                    //}
                }
                //读取二维码后更新数据库
                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                //var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                                //var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                                wplog.WorkPieceID = PLCManger.GetWorkPieceIDForPLC(_dataCaptureConfig,plcService);
                                if(wplog.WorkPieceID.Length!=22)
                                {//获取到的工件号异常
                                    continue;
                                }
                                else
                                {//获取其他配置的待采集项
                                    foreach (var col in colConfig.Where(o=>o.DataCapturePointCode== DataCapturePointCode))
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset,col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                }
                                //读取二维码后更新数据库
                                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),plcService, _dataCaptureConfig.IsFeedback);
                                //#region åé¦ˆPLC
                                //bool checkQualityInfoCompleteFlag = false;
                                //bool plcFlag = true;//反馈给PLC的标记
                                //string message = "";
                                //checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK)
                                //{
                                //    plcFlag = false;
                                //    message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                                    //message += info.QualityState != (int)QualityState.OK ? "质量不符合" : "";
                                //}
                                ////反馈给PLC,(写入点待定)
                                //MessageModel fr = null;
                                //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
                                //if (fr.result)
                                //{
                                //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC æˆåŠŸï¼Œ å‡ºçް {message}");
                                //}
                                //else
                                //{
                                //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC å¤±è´¥ï¼Œ å‡ºçް {message} ï¼Œå¤±è´¥åŽŸå› ï¼š{fr.resMsg}");
                                //}
                                //#endregion
                            }
                            SystemValue.value_OP3001 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    //catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    //{
                    //    SystemValue.lbl_Alert_OP3001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                    //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    //}
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3002.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,194 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP30测量完成标记
    /// </summary>
    public class DataCaptureHandler_OP3002: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3002 Instance = new DataCaptureHandler_OP3002();
        public DataCaptureHandler_OP3002()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP3002":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP3002 = $" {RandomHelper.GenerateRandomCode(4)} OP30工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP30工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.WorkPieceID = "123456";
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.QualityType = QualityType.Online.ToString();
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.QualityState = (int)QualityState.NG;
                wplog.QualityStateUpdateUser = WorkingProcedure;
                wplog.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                wplog.QualityOP30To1 = "QualityOP30To1";
                wplog.QualityOP30To2 = "QualityOP30To2";
                wplog.QualityOP30To3 = "QualityOP30To3";
                wplog.QualityOP30To4 = "QualityOP30To4";
                wplog.QualityOP30To5 = "QualityOP30To5";
                wplog.QualityOP30To6 = "QualityOP30To6";
                wplog.QualityOP30To7 = "QualityOP30To7";
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3002 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3002 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3002.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                wplog.QualityType = QualityType.Online.ToString();
                                //foreach (var col in colConfig)
                                //{
                                //    switch(col.DbNumber+ col.Offset)
                                //    {
                                //        case "":
                                            var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                                            wplog.WorkPieceID = valuecol.ToString();
                                //            break;
                                //    }
                                //}
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            }
                            SystemValue.value_OP3002 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3002 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3002 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3002 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3003.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,184 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP30 NOOK推出标记
    /// </summary>
    public class DataCaptureHandler_OP3003: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3003 Instance = new DataCaptureHandler_OP3003();
        public DataCaptureHandler_OP3003()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP3003":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP3003 = $" {RandomHelper.GenerateRandomCode(4)} OP30工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP30工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3003 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3003 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            //var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            //if (SystemValue.value_OP3003.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                //foreach (var col in colConfig)
                                //{
                                //    switch(col.DbNumber+ col.Offset)
                                //    {
                                //        case "":
                                            var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                                            wplog.WorkPieceID = valuecol.ToString();
                                //            break;
                                //    }
                                //}
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            }
                            //SystemValue.value_OP3003 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3003 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3003 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3003 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3003 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3004.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,188 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP30 SPC推出标记
    /// </summary>
    public class DataCaptureHandler_OP3004: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3004 Instance = new DataCaptureHandler_OP3004();
        public DataCaptureHandler_OP3004()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP3004":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP3004 = $" {RandomHelper.GenerateRandomCode(4)} OP30工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP30工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3004 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3004 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3004.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            //SystemValue.value_OP3004 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3004 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3004 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3004 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3004 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3005.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,191 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP30 å·¥åºå®Œæˆ
    /// </summary>
    public class DataCaptureHandler_OP3005: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3005 Instance = new DataCaptureHandler_OP3005();
        public DataCaptureHandler_OP3005()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP3005":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP3005 = $" {RandomHelper.GenerateRandomCode(4)} OP30工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP30工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.WorkPieceID = "123456";
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3005 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                SystemValue.lbl_Alert_OP3501 = $"{RandomHelper.GenerateRandomCode(4)} å¼€å§‹é‡‡é›†{_dataCaptureConfig.WorkingProcedure}的PLC设备{DataCapturePointCode}";
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3005 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3005.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {_dataCaptureConfig.WorkingProcedure}工序获取到{DataCapturePointCode}标志位");
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    switch(col.DataCaptureColumnTabelName)
                                    {
                                        case "WorkPieceID":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP3005 = value.ToString().ToUpper();
                        }
                        SystemValue.lbl_Alert_OP3005 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3005 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3005 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3005 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3006.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP30 å¿ƒè·³ç›‘控
    /// </summary>
    public class DataCaptureHandler_OP3006: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3006 Instance = new DataCaptureHandler_OP3006();
        public DataCaptureHandler_OP3006()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3006 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                DateTime PLCHeartBeatMonitorTime = DateTime.Now;
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3006 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (!SystemValue.value_OP3006.Equals(value.ToString()))
                            {//心跳监控
                                PLCHeartBeatMonitorTime = DateTime.Now;
                            }
                            if((DateTime.Now- PLCHeartBeatMonitorTime).TotalSeconds> heartBeatAlertInterval)
                            {
                                SystemValue.lbl_Alert_OP3006 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接心跳异常!";
                            }
                            SystemValue.value_OP3006 = value.ToString();
                            //写入心跳
                        }
                        SystemValue.lbl_Alert_OP3006 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3006 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3006 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3006 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3007.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,195 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP30 å‘Šè­¦ç›‘控
    /// </summary>
    public class DataCaptureHandler_OP3007: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3007 Instance = new DataCaptureHandler_OP3007();
        public DataCaptureHandler_OP3007()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP3007":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP3007 = $" {RandomHelper.GenerateRandomCode(4)} OP30工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP30工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.AlertTime = DateTime.Now;
                Random ran = new Random();
                //wplog.FailureType = "1101"+ ran.Next(0,100);
                wplog.AlertMsg = "测试告警 1101";
                wplog.EquipmentCurrentState = ((int)EnumEquipmentCurrentStateDisplay.故障).ToString();
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3007 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3007 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3007.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            //SystemValue.value_OP3007 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3007 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3007 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3007 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3007 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3501.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,205 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.TableModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP35读码完成标记
    /// </summary>
    public class DataCaptureHandler_OP3501 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3501 Instance = new DataCaptureHandler_OP3501();
        public DataCaptureHandler_OP3501()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLog wplog = new WorkPieceLog();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                //var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.WorkPieceID = WorkPieceID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                //var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                //wplog.WorkPieceID = PLCManger.GetWorkPieceIDForPLC(_dataCaptureConfig, plcService);
                if (wplog.WorkPieceID.Length != 22)
                {//获取到的工件号异常
                    return;
                }
                else
                {//获取其他配置的待采集项
                    //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                    //{
                    //    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                    //    wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                    //}
                }
                //读取二维码后更新数据库
                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3501 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.Remarks= $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_OP3501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3501.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = Environment.MachineName+"自动";
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控上线完成标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控上线完成标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //读取二维码后更新数据库
                                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            SystemValue.value_OP3501 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3501 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            threadStatusMonitor.ThreadFrequency = 5000;
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            threadStatusMonitor.ThreadFrequency = _dataCaptureConfig.DataCaptureFrequency.Value;
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3501 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控上线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控上线标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3501 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控上线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控上线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3502.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,195 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP35测量完成标记
    /// </summary>
    public class DataCaptureHandler_OP3502: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3502 Instance = new DataCaptureHandler_OP3502();
        public DataCaptureHandler_OP3502()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.WorkPieceID = "123456";
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.QualityType = QualityType.Online.ToString();
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.QualityState = (int)QualityState.NG;
                wplog.QualityStateUpdateUser = WorkingProcedure;
                wplog.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                wplog.QualityOP35To1 = "QualityOP35To1";
                wplog.QualityOP35To2 = "QualityOP35To2";
                //wplog.QualityOP35To3 = "QualityOP35To3";
                //wplog.QualityOP35To4 = "QualityOP35To4";
                //wplog.QualityOP35To5 = "QualityOP35To5";
                //wplog.QualityOP35To6 = "QualityOP35To6";
                //wplog.QualityOP35To7 = "QualityOP35To7";
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3502 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3502 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3502.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                wplog.QualityType = QualityType.Online.ToString();
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控测量完成标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控测量完成标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            SystemValue.value_OP3502 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3502 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3502 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控测量标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控测量标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3502 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控测量标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控测量标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3503.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,185 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP35 NOOK推出标记
    /// </summary>
    public class DataCaptureHandler_OP3503: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3503 Instance = new DataCaptureHandler_OP3503();
        public DataCaptureHandler_OP3503()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3503 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3503 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3503.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控NOOK标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控NOOK标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            SystemValue.value_OP3503 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3503 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3503 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控NOOK标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控NOOK标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3503 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控NOOK标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控NOOK标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3503 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控NOOK标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控NOOK标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3504.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP35 SPC推出标记
    /// </summary>
    public class DataCaptureHandler_OP3504: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3504 Instance = new DataCaptureHandler_OP3504();
        public DataCaptureHandler_OP3504()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3504 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3504 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3504.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控spc标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控spc标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP3504 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3504 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3504 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控spc标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控spc标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3504 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控spc标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控spc标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3504 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控spc标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控spc标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3505.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,193 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP35 å·¥åºå®Œæˆ
    /// </summary>
    public class DataCaptureHandler_OP3505: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3505 Instance = new DataCaptureHandler_OP3505();
        public DataCaptureHandler_OP3505()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.WorkPieceID = "123456";
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3505 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{DataCapturePointCode}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                SystemValue.lbl_Alert_OP3501 = $"{RandomHelper.GenerateRandomCode(4)} å¼€å§‹é‡‡é›†{DataCapturePointCode}的PLC设备";
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3505 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3005.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序获取到下线标志位");
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{_dataCaptureConfig.WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch(Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态赋值【{_dataCaptureConfig.WorkingProcedure ?? "空字符串"}】异常{wplog.Id},赋值列名[{col.DataCaptureColumnTabelName ?? "空字符串"}]", setex);
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP3505 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3505 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3505 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}下线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}下线标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3505 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}下线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控打码标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3505 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}下线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}下线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3506.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP35 è®¾å¤‡ä¿¡æ¯é‡‡é›†
    /// </summary>
    public class DataCaptureHandler_OP3506 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3506 Instance = new DataCaptureHandler_OP3506();
        public DataCaptureHandler_OP3506()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3506 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            //业务代码
                            WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            wplog.WorkingProcedure = WorkingProcedure;
                            wplog.EquipmentID = WorkingProcedure;
                            wplog.MonitoringPoint = DataCapturePointCode;
                            wplog.CreatedTime = DateTimeHelper.GetDateTime();
                            wplog.CreatedUserName = DataCapturePointCode;
                            wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                            wplog.UpdatedUserName = Environment.MachineName+"自动";
                            wplog.OnlineTime = DateTimeHelper.GetDateTime();
                            wplog.IsDeleted = false;
                            foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                            {
                                try
                                {
                                    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                    //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                    var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                    if (set == null)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                    }
                                    set.SetValue(wplog, valuecol);//给动态字段赋值
                                }
                                catch (Exception setex)
                                {
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                }
                            }
                            WorkPieceInfoManager.EquipmentMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            threadStatusMonitor.Threadstatue = 1;
                        }
                        SystemValue.lbl_Alert_OP3506 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控设备采集 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控设备采集 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控设备采集 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控设备采集 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3507.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,163 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP35 å‘Šè­¦ç›‘控
    /// </summary>
    public class DataCaptureHandler_OP3507 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3507 Instance = new DataCaptureHandler_OP3507();
        public DataCaptureHandler_OP3507()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3507 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3507 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP3507.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //if (wplog.FailureType.Length > 0)
                                //{
                                    //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                    WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    threadStatusMonitor.Threadstatue = 1;
                                //}
                            }
                            SystemValue.value_OP3507 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP3507 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3507 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3507 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3507 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP7001.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,201 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP70读码完成标记
    /// </summary>
    public class DataCaptureHandler_OP7001: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP7001 Instance = new DataCaptureHandler_OP7001();
        public DataCaptureHandler_OP7001()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLog wplog = new WorkPieceLog();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                //var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.WorkPieceID = WorkPieceID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                //var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                //wplog.WorkPieceID = PLCManger.GetWorkPieceIDForPLC(_dataCaptureConfig, plcService);
                if (wplog.WorkPieceID.Length != 22)
                {//获取到的工件号异常
                    return;
                }
                else
                {//获取其他配置的待采集项
                    //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                    //{
                    //    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                    //    wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                    //}
                }
                //读取二维码后更新数据库
                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP7001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP7001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP7001.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = Environment.MachineName+"自动";
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控上线完成标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控上线完成标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //读取二维码后更新数据库
                                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),plcService, _dataCaptureConfig.IsFeedback);
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            SystemValue.value_OP7001 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP7001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP7001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控上线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控上线标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP7001 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控上线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控上线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP7005.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,199 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP70 å·¥åºå®Œæˆ
    /// </summary>
    public class DataCaptureHandler_OP7005 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP7005 Instance = new DataCaptureHandler_OP7005();
        public DataCaptureHandler_OP7005()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.WorkPieceID = "123456";
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP7005 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{DataCapturePointCode}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                SystemValue.lbl_Alert_OP7005 = $"{RandomHelper.GenerateRandomCode(4)} å¼€å§‹é‡‡é›†{DataCapturePointCode}的PLC设备";
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP7005 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP7005.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序获取到下线标志位");
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序监控下线标记 è¯»å–工件码动态由于字段名没找到,赋值【{_dataCaptureConfig.WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序监控下线标记 è¯»å–工件码动态赋值【{_dataCaptureConfig.WorkingProcedure ?? "空字符串"}】异常{wplog.Id},赋值列名[{col.DataCaptureColumnTabelName ?? "空字符串"}]", setex);
                                    }
                                }
                                if (wplog.WorkPieceID.Length != 22)
                                {//获取到的工件号异常
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序监控下线标记 è¯»å–工件码数据时异常:");
                                    continue;
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            SystemValue.value_OP7005 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP7005 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP7005 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}下线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}下线标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP7005 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}下线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控下线标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP7005 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}下线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}下线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP7006.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP70 è®¾å¤‡ä¿¡æ¯é‡‡é›†
    /// </summary>
    public class DataCaptureHandler_OP7006: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP7006 Instance = new DataCaptureHandler_OP7006();
        public DataCaptureHandler_OP7006()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP7006 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP7006 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            //业务代码
                            WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            wplog.WorkingProcedure = WorkingProcedure;
                            wplog.EquipmentID = WorkingProcedure;
                            wplog.MonitoringPoint = DataCapturePointCode;
                            wplog.CreatedTime = DateTimeHelper.GetDateTime();
                            wplog.CreatedUserName = DataCapturePointCode;
                            wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                            wplog.UpdatedUserName = Environment.MachineName+"自动";
                            wplog.OnlineTime = DateTimeHelper.GetDateTime();
                            wplog.IsDeleted = false;
                            foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                            {
                                try
                                {
                                    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                    //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                    var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                    if (set == null)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                    }
                                    set.SetValue(wplog, valuecol);//给动态字段赋值
                                }
                                catch (Exception setex)
                                {
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                }
                            }
                            WorkPieceInfoManager.EquipmentMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            threadStatusMonitor.Threadstatue = 1;
                        }
                        SystemValue.lbl_Alert_OP7006 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP7006 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控设备采集 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP7006 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控设备采集 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP7006 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控设备采集 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控设备采集 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP7007.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,193 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP70 å‘Šè­¦ç›‘控
    /// </summary>
    public class DataCaptureHandler_OP7007: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP7007 Instance = new DataCaptureHandler_OP7007();
        public DataCaptureHandler_OP7007()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.AlertTime = DateTime.Now;
                Random ran = new Random();
                //wplog.FailureType = "1101"+ ran.Next(0,100);
                wplog.AlertMsg = "测试告警 1101";
                wplog.EquipmentCurrentState = ((int)EnumEquipmentCurrentStateDisplay.故障).ToString();
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP7007 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP7007 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP7007.Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //if(wplog.FailureType.Length>0)
                                {
                                    //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                    WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    threadStatusMonitor.Threadstatue = 1;
                                }
                            }
                            SystemValue.value_OP7007 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP7007 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP7007 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP7007 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP7007 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8001.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,234 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP80读码完成标记
    /// </summary>
    public class DataCaptureHandler_OP8001: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP8001 Instance = new DataCaptureHandler_OP8001();
        public DataCaptureHandler_OP8001()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP8001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} OP80工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP80工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLog wplog = new WorkPieceLog();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                //var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.WorkPieceID = WorkPieceID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                //var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                //wplog.WorkPieceID = PLCManger.GetWorkPieceIDForPLC(_dataCaptureConfig, plcService);
                if (wplog.WorkPieceID.Length != 22)
                {//获取到的工件号异常
                    return;
                }
                else
                {//获取其他配置的待采集项
                    //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                    //{
                    //    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                    //    wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                    //}
                }
                //读取二维码后更新数据库
                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP8001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP8001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                //var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                                //var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                                wplog.WorkPieceID = PLCManger.GetWorkPieceIDForPLC(_dataCaptureConfig,plcService);
                                if(wplog.WorkPieceID.Length!=22)
                                {//获取到的工件号异常
                                    continue;
                                }
                                else
                                {//获取其他配置的待采集项
                                    foreach (var col in colConfig.Where(o=>o.DataCapturePointCode== DataCapturePointCode))
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset,col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                }
                                //读取二维码后更新数据库
                                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),plcService, _dataCaptureConfig.IsFeedback);
                                //#region åé¦ˆPLC
                                //bool checkQualityInfoCompleteFlag = false;
                                //bool plcFlag = true;//反馈给PLC的标记
                                //string message = "";
                                //checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK)
                                //{
                                //    plcFlag = false;
                                //    message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                                    //message += info.QualityState != (int)QualityState.OK ? "质量不符合" : "";
                                //}
                                ////反馈给PLC,(写入点待定)
                                //MessageModel fr = null;
                                //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
                                //if (fr.result)
                                //{
                                //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC æˆåŠŸï¼Œ å‡ºçް {message}");
                                //}
                                //else
                                //{
                                //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" å·¥ä»¶{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC å¤±è´¥ï¼Œ å‡ºçް {message} ï¼Œå¤±è´¥åŽŸå› ï¼š{fr.resMsg}");
                                //}
                                //#endregion
                            }
                            SystemValue.value_OP8001 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP8001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    //catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    //{
                    //    SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                    //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    //}
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8002.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,194 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP80测量完成标记
    /// </summary>
    public class DataCaptureHandler_OP8002: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP8002 Instance = new DataCaptureHandler_OP8002();
        public DataCaptureHandler_OP8002()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP8002":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP8002 = $" {RandomHelper.GenerateRandomCode(4)} OP80工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP80工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.WorkPieceID = "123456";
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.QualityType = QualityType.Online.ToString();
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.QualityState = (int)QualityState.NG;
                wplog.QualityStateUpdateUser = WorkingProcedure;
                wplog.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                wplog.QualityOP80To1 = "QualityOP80To1";
                wplog.QualityOP80To2 = "QualityOP80To2";
                wplog.QualityOP80To3 = "QualityOP80To3";
                wplog.QualityOP80To4 = "QualityOP80To4";
                wplog.QualityOP80To5 = "QualityOP80To5";
                wplog.QualityOP80To6 = "QualityOP80To6";
                wplog.QualityOP80To7 = "QualityOP80To7";
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP8002 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP8002 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP8002.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                wplog.QualityType = QualityType.Online.ToString();
                                //foreach (var col in colConfig)
                                //{
                                //    switch(col.DbNumber+ col.Offset)
                                //    {
                                //        case "":
                                            var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                                            wplog.WorkPieceID = valuecol.ToString();
                                //            break;
                                //    }
                                //}
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            }
                            SystemValue.value_OP8002 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP8002 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP8002 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP8002 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8003.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,184 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP80 NOOK推出标记
    /// </summary>
    public class DataCaptureHandler_OP8003: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP8003 Instance = new DataCaptureHandler_OP8003();
        public DataCaptureHandler_OP8003()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP8003":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP8003 = $" {RandomHelper.GenerateRandomCode(4)} OP80工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP80工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP8003 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP8003 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            //var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            //if (SystemValue.value_OP8003.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                //foreach (var col in colConfig)
                                //{
                                //    switch(col.DbNumber+ col.Offset)
                                //    {
                                //        case "":
                                            var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                                            wplog.WorkPieceID = valuecol.ToString();
                                //            break;
                                //    }
                                //}
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            }
                            //SystemValue.value_OP8003 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP8003 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP8003 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP8003 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP8003 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8004.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,188 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP80 æµ‹é‡å®ŒæˆåŽè¯»ç å®Œæˆ
    /// </summary>
    public class DataCaptureHandler_OP8004: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP8004 Instance = new DataCaptureHandler_OP8004();
        public DataCaptureHandler_OP8004()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP8004":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP8004 = $" {RandomHelper.GenerateRandomCode(4)} OP80工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP80工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP8004 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP8004 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP8004.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            //SystemValue.value_OP8004 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP8004 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP8004 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP8004 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP8004 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8005.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP80 å·¥åºå®Œæˆ
    /// </summary>
    public class DataCaptureHandler_OP8005: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP8005 Instance = new DataCaptureHandler_OP8005();
        public DataCaptureHandler_OP8005()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP8005":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP8005 = $" {RandomHelper.GenerateRandomCode(4)} OP80工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP80工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.WorkPieceID = "123456";
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP8005 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP8005 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP8005.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            //SystemValue.value_OP8005 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP8005 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP8005 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP8005 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP8005 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8006.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP80 å¿ƒè·³ç›‘控
    /// </summary>
    public class DataCaptureHandler_OP8006: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP8006 Instance = new DataCaptureHandler_OP8006();
        public DataCaptureHandler_OP8006()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP8006 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                DateTime PLCHeartBeatMonitorTime = DateTime.Now;
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (!SystemValue.value_OP8006.Equals(value.ToString()))
                            {//心跳监控
                                PLCHeartBeatMonitorTime = DateTime.Now;
                            }
                            if((DateTime.Now- PLCHeartBeatMonitorTime).TotalSeconds> heartBeatAlertInterval)
                            {
                                SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接心跳异常!";
                            }
                            SystemValue.value_OP8006 = value.ToString();
                            //写入心跳
                        }
                        SystemValue.lbl_Alert_OP8006 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8007.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,195 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP80 å‘Šè­¦ç›‘控
    /// </summary>
    public class DataCaptureHandler_OP8007: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP8007 Instance = new DataCaptureHandler_OP8007();
        public DataCaptureHandler_OP8007()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
            //        {
            //            case "OP8007":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP8007 = $" {RandomHelper.GenerateRandomCode(4)} OP80工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP80工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.AlertTime = DateTime.Now;
                Random ran = new Random();
                //wplog.FailureType = "1101"+ ran.Next(0,100);
                wplog.AlertMsg = "测试告警 1101";
                wplog.EquipmentCurrentState = ((int)EnumEquipmentCurrentStateDisplay.生产).ToString();
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP8007 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP8007 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP8007.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = WorkingProcedure;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig)
                                {
                                    switch(col.DbNumber+ col.Offset)
                                    {
                                        case "":
                                            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                            wplog.WorkPieceID = valuecol.ToString();
                                            break;
                                    }
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            //SystemValue.value_OP8007 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP8007 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP8007 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP8007 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序监控打码标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP8007 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/HMIBeartBeatMonitor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data.Entity.Core.Common.CommandTrees;
using System.Data.Entity.Validation;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// HMI心跳监控
    /// </summary>
    public class HMIBeartBeatMonitor: DataCaptureHandler
    {
        public static readonly HMIBeartBeatMonitor Instance = new HMIBeartBeatMonitor();
        public HMIBeartBeatMonitor()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_HMIBeartBeatMonitor = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                Dictionary<bool, DateTime> beartBeatDic = new Dictionary<bool, DateTime>();
                bool BeartBeatMonitorflag = true;
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        if(DataCapturePointCode.Equals("OP1008"))
                        {
                        }
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_HMIBeartBeatMonitor = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            try
                            {//获取设备plc的心跳
                                var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                                if (BeartBeatMonitorflag != (bool)value)
                                {//PLC心跳变化
                                    if(beartBeatDic.ContainsKey((bool)value))
                                    {
                                        beartBeatDic[(bool)value]=DateTime.Now;
                                    }
                                    else
                                    {
                                        beartBeatDic.Add((bool)value, DateTime.Now);
                                    }
                                }
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                                wplog.Remarks = "HMI";
                                wplog.MonitoringPoint = DataCapturePointCode;
                                var max = beartBeatDic.Max(kvp => kvp.Value);
                                if(max==null||(DateTime.Now-max).TotalSeconds>10)
                                {//心跳10秒没有更新认为设备断线了
                                    wplog.IsConnect = false;
                                }
                                else
                                {
                                    wplog.IsConnect = true;
                                }
                                //更新设备当前连接情况
                                WorkPieceInfoManager.EquipmentBeartBeatMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                BeartBeatMonitorflag = (bool)value;
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            catch (DbEntityValidationException ex1)
                            {
                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{WorkingProcedure}心跳读取异常1:", ex1);
                            }
                            catch (Exception ex)
                            {
                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{WorkingProcedure}心跳读取异常:", ex);
                            }
                            try
                            {//反写心跳
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode && o.IsFeedback == 1))
                                {//获取配置详情表中需写入心跳信息 pc
                                    bool flag = true;
                                    var colflag = plcService.ReadValuePoint(col.DbNumber, col.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                                    if ((bool)colflag)
                                    {
                                        flag = false;
                                    }
                                    else
                                    {
                                        flag = true;
                                    }
                                    var write= plcService.WriteValuePointNew(col.DbNumber, col.Offset, flag);
                                    if(!write.result)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{WorkingProcedure}数采心跳写入异常:{write.resMsg}");
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{WorkingProcedure}数采心跳写入异常:", ex);
                            }
                        }
                        SystemValue.lbl_Alert_HMIBeartBeatMonitor = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_HMIBeartBeatMonitor = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序心跳 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序心跳异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_HMIBeartBeatMonitor = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序心跳 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序心跳 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/HMI_WorkpieceReading.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,358 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// HML读取
    /// </summary>
    public class HMI_WorkpieceReading : DataCaptureHandler
    {
        public static readonly HMI_WorkpieceReading Instance = new HMI_WorkpieceReading();
        /// <summary>
        ///
        /// </summary>
        public HMI_WorkpieceReading()
        {
        }
        /// <summary>
        ///
        /// </summary>
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        /// <summary>
        ///
        /// </summary>
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        /// <summary>
        ///
        /// </summary>
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        /// <summary>
        /// åˆ·æ–°æ•°æ®åˆ—表
        /// </summary>
        /// <param name="dataCaptureConfig"></param>
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        /// <summary>
        /// æ•°æ®é‡‡é›†å¼€å§‹
        /// </summary>
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    switch (_dataCaptureConfig.DataCapturePointCode)
                    {
                        case "RHMIOP104001":
                            SystemValue.lbl_Alert_HMIOP104001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        case "RHMIOP2001":
                            SystemValue.lbl_Alert_HMIOP2001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        case "RHMIOP303501":
                            SystemValue.lbl_Alert_HMIOP303501 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        case "RHMIOP5001":
                            SystemValue.lbl_Alert_HMIOP5001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        case "RHMIOP6001":
                            SystemValue.lbl_Alert_HMIOP6001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        default:
                            break;
                    }
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            //switch (_dataCaptureConfig.DataCapturePointCode)
                            //{
                            //    case "RHMIOP104001":
                            //        SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            //        break;
                            //    case "RHMIOP2001":
                            //        SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            //        break;
                            //    case "RHMIOP303501":
                            //        SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            //        break;
                            //    case "RHMIOP5001":
                            //        SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            //        break;
                            //    case "RHMIOP6001":
                            //        SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            //        break;
                            //    default:
                            //        break;
                            //}
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)}";
                            SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)}";
                            SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)}";
                            SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)}";
                            SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)}";
                            object value1 = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, "88", 2, PLCManger.GetTypeForString("int"));
                            string value2 = value1 == null ? "" : value1.ToString();
                            if ("21" .Equals(value2))
                            {
                                //10:数采读取失败
                                //11 :数采读取成功
                                //21:扫码成功标记
                                plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 11);
                                object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                                if (value != null)
                                {
                                    string WorkPieceID = value.ToString().Trim();
                                    if (WorkPieceID.Length == 22)
                                    {
                                        // æ ¹æ®å·¥ä»¶å·èŽ·å–å·¥ä»¶ä¿¡æ¯
                                        WorkPieceInfo info = null;
                                        using (DbModel db = new DbModel())
                                        {
                                            info = new WorkPieceInfo();
                                            info = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID&&o.IsDeleted==false).FirstOrDefault();
                                        }
                                        if (info != null && info.Id > 0)
                                        {
                                            // æŠŠå¯¹åº”的工件信息写入PLC对应地址
                                            foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                            {
                                                switch (col.DataCaptureColumnTabelName)
                                                {
                                                    case "WorkPieceID":
                                                        //plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.WorkPieceID);
                                                        break;
                                                    case "WorkingProcedureCurrent":
                                                        plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.WorkingProcedureCurrent);
                                                        break;
                                                    case "WorkPieceState":
                                                        plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.WorkPieceState);
                                                        break;
                                                    case "QualityState":
                                                        plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.QualityState);
                                                        break;
                                                    case "ReaderEndState":
                                                        plcService.WriteValuePointNew(col.DbNumber, col.Offset, 11);
                                                        break;
                                                    default:
                                                        break;
                                                }
                                            }
                                        }
                                        else
                                        {
                                            foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                            {
                                                switch (col.DataCaptureColumnTabelName)
                                                {
                                                    case "ReaderEndState":
                                                        plcService.WriteValuePointNew(col.DbNumber, col.Offset, 10);
                                                        break;
                                                    default:
                                                        break;
                                                }
                                            }
                                            switch (_dataCaptureConfig.DataCapturePointCode)
                                            {
                                                case "RHMIOP104001":
                                                    SystemValue.lbl_Alert_HMIOP104001 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】在数据库中不存在";
                                                    break;
                                                case "RHMIOP2001":
                                                    SystemValue.lbl_Alert_HMIOP2001 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】在数据库中不存在";
                                                    break;
                                                case "RHMIOP303501":
                                                    SystemValue.lbl_Alert_HMIOP303501 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】在数据库中不存在";
                                                    break;
                                                case "RHMIOP5001":
                                                    SystemValue.lbl_Alert_HMIOP5001 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】在数据库中不存在";
                                                    break;
                                                case "RHMIOP6001":
                                                    SystemValue.lbl_Alert_HMIOP6001 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】在数据库中不存在";
                                                    break;
                                                default:
                                                    break;
                                            }
                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】在数据库中不存在");
                                        }
                                    }
                                    else
                                    {
                                        foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                        {
                                            switch (col.DataCaptureColumnTabelName)
                                            {
                                                case "ReaderEndState":
                                                    plcService.WriteValuePointNew(col.DbNumber, col.Offset, 10);
                                                    break;
                                                default:
                                                    break;
                                            }
                                        }
                                        switch (_dataCaptureConfig.DataCapturePointCode)
                                        {
                                            case "RHMIOP104001":
                                                SystemValue.lbl_Alert_HMIOP104001 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】长度异常,长度不等于22位";
                                                break;
                                            case "RHMIOP2001":
                                                SystemValue.lbl_Alert_HMIOP2001 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】长度异常,长度不等于22位";
                                                break;
                                            case "RHMIOP303501":
                                                SystemValue.lbl_Alert_HMIOP303501 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】长度异常,长度不等于22位";
                                                break;
                                            case "RHMIOP5001":
                                                SystemValue.lbl_Alert_HMIOP5001 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】长度异常,长度不等于22位";
                                                break;
                                            case "RHMIOP6001":
                                                SystemValue.lbl_Alert_HMIOP6001 = $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】长度异常,长度不等于22位";
                                                break;
                                            default:
                                                break;
                                        }
                                        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"HMI读取监控 äºŒç»´ç å€¼ï¼šã€" + WorkPieceID + "】长度异常,长度不等于22位");
                                    }
                                }
                                else
                                {
                                    foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                    {
                                        switch (col.DataCaptureColumnTabelName)
                                        {
                                            case "ReaderEndState":
                                                plcService.WriteValuePointNew(col.DbNumber, col.Offset, 10);
                                                break;
                                            default:
                                                break;
                                        }
                                    }
                                }
                            }
                        }
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(1000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        switch (_dataCaptureConfig.DataCapturePointCode)
                        {
                            case "RHMIOP104001":
                                SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            case "RHMIOP2001":
                                SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            case "RHMIOP303501":
                                SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            case "RHMIOP5001":
                                SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            case "RHMIOP6001":
                                SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            default:
                                break;
                        }
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序HMI读取二维码监控,数据时异常:", ex);
                    }
                }
            }
            else
            {
                switch (_dataCaptureConfig.DataCapturePointCode)
                {
                    case "RHMIOP104001":
                        SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    case "RHMIOP2001":
                        SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    case "RHMIOP303501":
                        SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    case "RHMIOP5001":
                        SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    case "RHMIOP6001":
                        SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    default:
                        break;
                }
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/HMI_WorkpieceWrite.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,409 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// HMI写入
    /// </summary>
    public class HMI_WorkpieceWrite : DataCaptureHandler
    {
        public static readonly HMI_WorkpieceWrite Instance = new HMI_WorkpieceWrite();
        /// <summary>
        ///
        /// </summary>
        public HMI_WorkpieceWrite()
        {
        }
        /// <summary>
        ///
        /// </summary>
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        /// <summary>
        ///
        /// </summary>
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        /// <summary>
        ///
        /// </summary>
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        /// <summary>
        /// åˆ·æ–°æ•°æ®åˆ—表
        /// </summary>
        /// <param name="dataCaptureConfig"></param>
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        /// <summary>
        /// æ•°æ®é‡‡é›†å¼€å§‹
        /// </summary>
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    switch (_dataCaptureConfig.DataCapturePointCode)
                    {
                        case "WHMIOP104002":
                            SystemValue.lbl_Alert_HMIOP104001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        case "WHMIOP2002":
                            SystemValue.lbl_Alert_HMIOP2001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        case "WHMIOP303502":
                            SystemValue.lbl_Alert_HMIOP303501 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        case "WHMIOP5002":
                            SystemValue.lbl_Alert_HMIOP5001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        case "WHMIOP6002":
                            SystemValue.lbl_Alert_HMIOP6001 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                            break;
                        default:
                            break;
                    }
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        if (plcService == null && !plcService.IsConnected)
                        {
                            switch (_dataCaptureConfig.DataCapturePointCode)
                            {
                                case "WHMIOP104002":
                                    SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                                    break;
                                case "WHMIOP2002":
                                    SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                                    break;
                                case "WHMIOP303502":
                                    SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                                    break;
                                case "WHMIOP5002":
                                    SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                                    break;
                                case "WHMIOP6002":
                                    SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                                    break;
                                default:
                                    break;
                            }
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            Object WorkPieceID = null;
                            Object QualityState = null;
                            Object CheckUpdate = null;
                            Object QualityErrorInfo = null;
                            int UpdateIsOK = 0;
                            // æŠŠå¯¹åº”的工件信息写入PLC对应地址
                            foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                            {
                                switch (col.DataCaptureColumnTabelName)
                                {
                                    case "WorkPieceID":
                                        WorkPieceID = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        break;
                                    case "QualityState":
                                        QualityState = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        break;
                                    case "CheckUpdate":
                                        CheckUpdate = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //plcService.WriteValuePoint(col.DbNumber, col.Offset, 0, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        break;
                                    case "QualityErrorInfo":
                                        QualityErrorInfo = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        break;
                                    case "UpdateIsOK":
                                        UpdateIsOK = col.IsFeedback;
                                        break;
                                    default:
                                        break;
                                }
                            }
                            if ((bool)CheckUpdate)
                            {
                                // è¯»å–内容检查
                                StringBuilder builder = new StringBuilder();
                                if (WorkPieceID != null)
                                {
                                    if (WorkPieceID.ToString().Length != 22)
                                    {
                                        builder.AppendLine("工件二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位!");
                                    }
                                    if (QualityState == null)
                                    {
                                        builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量状态不能为空");
                                    }
                                    else
                                    {
                                        if ((int)QualityState != 1 && (int)QualityState != 2 && (int)QualityState != 3)
                                        {
                                            builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量状态【" + QualityState + "】错误,只能为1:合格 2:不合格 3:疑似");
                                        }
                                        else if ((int)QualityState == 2 || (int)QualityState == 3)
                                        {
                                            if (QualityErrorInfo == null|| string.IsNullOrEmpty(QualityErrorInfo.ToString()))
                                            {
                                                builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量不合格原因不能为空");
                                            }
                                        }
                                    }
                                }
                                if (!string.IsNullOrEmpty(builder.ToString()))
                                {
                                    switch (_dataCaptureConfig.DataCapturePointCode)
                                    {
                                        case "WHMIOP104002":
                                            SystemValue.lbl_Alert_HMIOP104001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
                                            break;
                                        case "WHMIOP2002":
                                            SystemValue.lbl_Alert_HMIOP2001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
                                            break;
                                        case "WHMIOP303502":
                                            SystemValue.lbl_Alert_HMIOP303501 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
                                            break;
                                        case "WHMIOP5002":
                                            SystemValue.lbl_Alert_HMIOP5001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
                                            break;
                                        case "WHMIOP6002":
                                            SystemValue.lbl_Alert_HMIOP6001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString();
                                            break;
                                        default:
                                            break;
                                    }
                                    // æŠŠå¯¹åº”的工件信息写入PLC对应地址
                                    foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                    {
                                        switch (col.DataCaptureColumnTabelName)
                                        {
                                            case "UpdateIsOK":
                                                var aa = plcService.WriteValuePointNew(col.DbNumber, col.Offset, false);
                                                break;
                                            default:
                                                //plcService.WriteValuePoint(col.DbNumber, col.Offset, "", PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                                                break;
                                        }
                                    }
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工序HML写入监控,数据返回格式异常:" + builder.ToString());
                                    continue;
                                }
                                // å·¥ä»¶ä¿¡æ¯
                                WorkPieceInfo info = null;
                                // å·¥ä»¶æŽ¥æ”¶ä¿¡æ¯å±¥åކ
                                WorkPieceLog wplog = new WorkPieceLog();
                                using (DbModel db = new DbModel())
                                {
                                    info = new WorkPieceInfo();
                                    info = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID.ToString()&&o.IsDeleted==false).FirstOrDefault();
                                    if (info == null)
                                    {
                                        switch (_dataCaptureConfig.DataCapturePointCode)
                                        {
                                            case "WHMIOP104002":
                                                SystemValue.lbl_Alert_HMIOP104001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
                                                break;
                                            case "WHMIOP2002":
                                                SystemValue.lbl_Alert_HMIOP2001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
                                                break;
                                            case "WHMIOP303502":
                                                SystemValue.lbl_Alert_HMIOP303501 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
                                                break;
                                            case "WHMIOP5002":
                                                SystemValue.lbl_Alert_HMIOP5001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
                                                break;
                                            case "WHMIOP6002":
                                                SystemValue.lbl_Alert_HMIOP6001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在";
                                                break;
                                            default:
                                                break;
                                        }
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工序HML写入监控,数据返回格式异常:" + builder.ToString());
                                        continue;
                                    }
                                    info.QualityState = Convert.ToInt32(QualityState);
                                    info.QualityStateUpdateUser = "HMI";
                                    info.QualityStateUpdateTime = DateTime.Now;
                                    info.QualityStateUpdateMode = "自动";
                                    info.QualityErrorInfo = QualityErrorInfo.ToString();
                                    // å†™å…¥å·¥ä»¶æŽ¥æ”¶ä¿¡æ¯å±¥åކ
                                    //wplog = CommonManager.Instance.GetWorkPieceID(wplog, LogType.PLCHMI04);
                                    wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                    wplog.WorkPieceID = info.WorkPieceID;
                                    wplog.WorkingProcedure = WorkingProcedure;
                                    wplog.EquipmentID = WorkingProcedure;
                                    wplog.Remarks = WorkingProcedure;
                                    wplog.MonitoringPoint = DataCapturePointCode;
                                    wplog.QualityState = Convert.ToInt32(QualityState);
                                    wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                    wplog.CreatedUserName = DataCapturePointCode;
                                    wplog.IsDeleted = false;
                                    db.WorkPieceLog.Add(wplog);
                                    db.SaveChanges();
                                }
                                if (UpdateIsOK == 1)
                                {
                                    // æŠŠå¯¹åº”的工件信息写入PLC对应地址
                                    foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                    {
                                        switch (col.DataCaptureColumnTabelName)
                                        {
                                            case "UpdateIsOK":
                                                var aa =  plcService.WriteValuePointNew(col.DbNumber, col.Offset, true);
                                                break;
                                            //case "WorkPieceID":
                                            //    plcService.WriteValuePointNew(col.DbNumber, col.Offset, "");
                                            //    break;
                                            default:
                                                //plcService.WriteValuePoint(col.DbNumber, col.Offset, "", PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                                                break;
                                        }
                                    }
                                }
                            }
                        }
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                        {
                            switch (col.DataCaptureColumnTabelName)
                            {
                                case "UpdateIsOK":
                                    var aa = plcService.WriteValuePointNew(col.DbNumber, col.Offset, true);
                                    break;
                                default:
                                    break;
                            }
                        }
                        switch (_dataCaptureConfig.DataCapturePointCode)
                        {
                            case "WHMIOP104002":
                                SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            case "WHMIOP2002":
                                SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            case "WHMIOP303502":
                                SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            case "WHMIOP5002":
                                SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            case "WHMIOP6002":
                                SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!";
                                break;
                            default:
                                break;
                        }
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序HML写入监控,数据时异常:", ex);
                    }
                }
            }
            else
            {
                switch (_dataCaptureConfig.DataCapturePointCode)
                {
                    case "WHMIOP104002":
                        SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    case "WHMIOP2002":
                        SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    case "WHMIOP303502":
                        SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    case "WHMIOP5002":
                        SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    case "WHMIOP6002":
                        SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 ä¸åšæ•°æ®é‡‡é›†ï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                        break;
                    default:
                        break;
                }
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序HML写入监控, ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/PLCDataCapture/PLCFactory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@

using iWare_SCADA_Model;
namespace iWare_SCADA_BusinessLogical
{
    public class PLCFactory
    {
        public static PLCService GetOPCService(PLCServiceTypeEnum _OPCServiceTypeEnum, HslCommunicationParam hslcpParam)
        {
            PLCService plcService = null;
            switch (_OPCServiceTypeEnum)
            {
                case PLCServiceTypeEnum.Siemens_HslCommunicationService:
                    plcService = new Siemens_HslCommunicationService(hslcpParam);
                    break;
            }
            return plcService;
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/PLCDataCapture/PLCManger.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
using HslCommunication.Profinet.Siemens;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using log4net;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    public class PLCManger
    {
        /// <summary>
        ///  å®žä¾‹åŒ–单个PLCService
        /// </summary>
        /// <param name="_ip"></param>
        /// <param name="device"></param>
        /// <returns></returns>
        public static PLCService GetSinglePLCService(DataCaptureConfig dataCaptureConfig)
        {
            HslCommunicationParam hslCommunicationParam = new HslCommunicationParam()
            {
                cpu = (SiemensPLCS)dataCaptureConfig.DataCapturePLCType,
                ip = dataCaptureConfig.PLCIP,
                //rack = WareSdaStruct.Srm_Rack,
                //slot = WareSdaStruct.Srm_Slot,
                port = dataCaptureConfig.PLCPort.Value
            };
            PLCService PLCService = PLCFactory.GetOPCService(PLCServiceTypeEnum.Siemens_HslCommunicationService, hslCommunicationParam);
            return PLCService;
        }
        public static Type GetTypeForString(string datatype)
        {
            switch (datatype.ToLower())
            {
                case "int":
                    return typeof(Int16);
                case "dint":
                    return typeof(Int32);
                case "char":
                    return typeof(Char);
                case "real":
                    return typeof(double);
                    //return typeof(Single);
                case "bool":
                    return typeof(bool);
                case "string":
                    return typeof(string);
                case "byte":
                    return typeof(Byte);
                case "other":
                    return typeof(string);
                default:
                    return typeof(string);
            }
        }
        public static object GetVauleForObjectType(object vaule,TypeCode type)
        {
            switch (type)
            {
                case TypeCode.Int16:
                    return Convert.ToInt16(vaule);
                case TypeCode.Int32:
                    return Convert.ToInt32(vaule);
                case TypeCode.Char:
                    return Convert.ToChar(vaule);
                case TypeCode.Single:
                    return Convert.ToSingle(vaule);
                case TypeCode.Boolean:
                    return Convert.ToBoolean(vaule);
                case TypeCode.String:
                    return Convert.ToString(vaule);
                case TypeCode.Byte:
                    return Convert.ToByte(vaule);
                default:
                    return Convert.ToString(vaule);
            }
        }
        public static LogType GetLogTypeForWorkingProcedure(string wp)
        {
            switch(wp)
            {
                case "OP05":
                    return LogType.PLCOP05;
                case "OP10":
                    return LogType.PLCOP10;
                case "OP20":
                    return LogType.PLCOP20;
                case "OP30":
                    return LogType.PLCOP30;
                case "OP35":
                    return LogType.PLCOP35;
                case "OP40":
                    return LogType.PLCOP40;
                case "OP50":
                    return LogType.PLCOP50;
                case "OP60":
                    return LogType.PLCOP60;
                case "OP70":
                    return LogType.PLCOP70;
                case "OP80":
                    return LogType.PLCOP80;
                case "HMI":
                    return LogType.PLCHMI;
                default:
                    return LogType.PLCService;
            }
        }
        public static string GetWorkPieceIDForPLC(DataCaptureConfig _dataCaptureConfig,PLCService plcService)
        {
            try
            {
                var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                return valueid.ToString().Trim();
            }
            catch(Exception ex)
            {
                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {_dataCaptureConfig.WorkingProcedure}工序监控读码标记 è¯»å–工件码数据时异常:", ex);
                throw;
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/PLCDataCapture/PLCService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@

using iWare_SCADA_Model;
using System;
namespace iWare_SCADA_BusinessLogical
{
    public class PLCService
    {
        public LogType _LogType;
        public bool IsConnected { get; set; }
        /// <summary>
        /// æ‰“开服务
        /// </summary>
        /// <returns></returns>
        public virtual MessageModel OpenService()
        {
            this.IsConnected = false;
            return new MessageModel()
            {
                result = true
            };
        }
        ///// <summary>
        ///// å†™å…¥
        ///// </summary>
        ///// <param name="address">地址</param>
        ///// <param name="value">值</param>
        ///// <returns></returns>
        //public virtual MessageModel WriteValuePoint(string dbNumber, string offset, object value)
        //{
        //    return new MessageModel()
        //    {
        //        result = true
        //    };
        //}
        /// <summary>
        /// å†™å…¥
        /// </summary>
        /// <param name="fullAddress">地址</param>
        /// <param name="value">值</param>
        ///  <param name="proObj">属性对象</param>
        /// <returns></returns>
        public virtual MessageModel WriteValuePointNew(string dbNumber, string offset, object value)
        {
            return new MessageModel()
            {
                result = true
            };
        }
        /// <summary>
        /// å†™å…¥
        /// </summary>
        /// <param name="address">地址</param>
        /// <param name="value">值</param>
        ///  <param name="proObj">属性对象</param>
        /// <returns></returns>
        public virtual MessageModel WriteValuePoint(string dbNumber, string offset, object value, Object proObj)
        {
            return new MessageModel()
            {
                result = true
            };
        }
        /// <summary>
        /// å†™å…¥
        /// </summary>
        /// <param name="fullAddress">地址</param>
        /// <param name="value">值</param>
        ///  <param name="proObj">属性对象</param>
        /// <returns></returns>
        public virtual MessageModel WriteValuePoint(string fullAddress, object value, Object proObj)
        {
            return new MessageModel()
            {
                result = true
            };
        }
        /// <summary>
        /// è¯»å–
        /// </summary>
        /// <param name="dbNumber">DB块名</param>
        /// <param name="offset">偏移量</param>
        /// <param name="type"></param>
        /// <returns></returns>
        public virtual object ReadValuePoint(string dbNumber, string offset,int stringlen, Type type = default(Type))
        {
            return null;
        }
        /// <summary>
        /// è¯»å–
        /// </summary>
        /// <param name="dbNumber">DB块名</param>
        /// <param name="offset">偏移量</param>
        /// <param name="type"></param>
        /// <returns></returns>
        public virtual object ReadValuePoint(string dbNumber, string offset, Type type = default(Type))
        {
            return null;
        }
        public virtual object ReadValuePointV2(string fullAddress, Type type = default(Type), int stringlen = 0)
        {
            return null;
        }
        /// <summary>
        /// è¯»å–
        /// </summary>
        /// <param name="fullAddress">地址</param>
        /// <param name="type"></param>
        /// <returns></returns>
        public virtual object ReadValuePoint(string fullAddress, Type type = default(Type))
        {
            return null;
        }
        /// <summary>
        /// èŽ·å–æœ€ç»ˆçš„DB块地址
        /// </summary>
        /// <param name="dbNumber"></param>
        /// <param name="offset"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public virtual string GetAddress(string dbNumber, string offset, Type type = default(Type))
        {
            return null;
        }
        /// <summary>
        /// å…³é—­è¿žæŽ¥
        /// </summary>
        public virtual void Close()
        {
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/PLCDataCapture/Siemens_HslCommunicationService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,433 @@
using System;
using System.Net;
using System.Security.Cryptography;
using HslCommunication;
using HslCommunication.Profinet.Siemens;
using iTextSharp.text.pdf;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// è¥¿ä¹ˆå­PLC
    /// </summary>
    public class Siemens_HslCommunicationService : PLCService
    {
        private SiemensS7Net siemensTcpNet = null;
        private readonly SiemensPLCS _cpu;
        private readonly string _ip;
        private readonly int _port;
        public Siemens_HslCommunicationService(HslCommunicationParam hslcpParam)
        {
            _cpu = hslcpParam.cpu;
            _ip = hslcpParam.ip;
            _port = hslcpParam.port;
            _LogType = LogType.HslCommunicationService;
        }
        /// <summary>
        /// æ‰“开连接
        /// </summary>
        /// <returns></returns>
        public override MessageModel OpenService()
        {
            MessageModel fre = new MessageModel();
            try
            {
                //创建连接对象
                siemensTcpNet = new SiemensS7Net(_cpu, _ip);
                siemensTcpNet.IpAddress = _ip;
                siemensTcpNet.Port = Convert.ToInt16(_port);
                //siemensTcpNet.Rack = Convert.ToInt16(tb_Rack.Text);
                //siemensTcpNet
                //不记录日志!!!!否则文件太大导致问题!
                //siemensTcpNet.LogNet = new HslCommunication.LogNet.LogNetSingle("Siemens_HslCommunicationService_logs.txt");
                OperateResult operateResult = siemensTcpNet.ConnectServer();
                if (operateResult.IsSuccess)
                {
                    base.IsConnected = true;
                    fre.result = true;
                    return fre;
                }
                base.IsConnected = false;
                fre.result = false;
                fre.resMsg = "打开失败," + operateResult.Message;
                return fre;
            }
            catch (Exception ex)
            {
                base.IsConnected = false;
                Log4NetHelper.WriteErrorLog(_LogType, "初始化西门子PLC出现异常", ex);
                throw ex;
            }
        }
        public override MessageModel WriteValuePointNew(string dbNumber, string offset, object value)
        {//此方法不再使用西门子PLC
            if (dbNumber.IndexOf(SystemValue.PLCDBADDRESS_SEPARATE.ToString()) > -1)
            {
                throw new Exception("参数不正确,不应该带" + SystemValue.PLCDBADDRESS_SEPARATE.ToString());
            }
            MessageModel fre = new MessageModel();
            OperateResult operateResult = null;
            //Type proObjType = proObj.GetType();
            var address = GetAddress(dbNumber, offset, value.GetType());
            try
            {
                if (value is bool)
                {
                    bool myData = Convert.ToBoolean(value);
                    operateResult = siemensTcpNet.Write(address, myData);
                }
                else if (value is int)
                {
                    operateResult = siemensTcpNet.Write(address, Int16.Parse(value.ToString()));
                }
                else if (value is short)
                {
                    operateResult = siemensTcpNet.Write(address, (short)value);
                }
                else if (value is string)
                {
                    operateResult = siemensTcpNet.Write(address, (string)value);
                }
                else if (value is char)
                {
                    operateResult = siemensTcpNet.Write(address, (char)value);
                }
                else if (value is double|| value is float)
                {
                    operateResult = siemensTcpNet.Write(address, (double)value);
                }
                else
                {
                    operateResult = siemensTcpNet.Write(address, value.ToString());
                }
                if (!operateResult.IsSuccess)
                {
                    Log4NetHelper.WriteErrorLog(_LogType, String.Format("写入出现异常:" + operateResult.Message + ",地址:{0},值:{1}", address, value.ToString()), null);
                    fre.result = false;
                    fre.resMsg = "写入失败:" + operateResult.Message;
                }
                else
                {
                    fre.result = true;
                    //Log4NetHelper.WriteInfoLog(_LogType, String.Format("写入成功,写入地址:{0},值:{1}", address, value.ToString()));
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteErrorLog(_LogType, String.Format("写入出现异常:" + ex.Message + ",地址:{0},值:{1}", address, value.ToString()), ex);
                fre.result = false;
                fre.resMsg = "写入失败:" + ex.Message;
            }
            return fre;
        }
        /// <summary>
        /// å†™å…¥
        /// </summary>
        /// <param name="address">地址</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        public override MessageModel WriteValuePoint(string dbNumber, string offset, object value, Object proObj)
        {//此方法不再使用西门子PLC
            if (dbNumber.IndexOf(SystemValue.PLCDBADDRESS_SEPARATE.ToString()) > -1)
            {
                throw new Exception("参数不正确,不应该带" + SystemValue.PLCDBADDRESS_SEPARATE.ToString());
            }
            MessageModel fre = new MessageModel();
            OperateResult operateResult = null;
            Type proObjType = proObj.GetType();
            var address = GetAddress(dbNumber, offset, value.GetType());
            try
            {
                if (proObjType == typeof(Boolean))
                {//布尔类型
                    bool myData = Convert.ToBoolean(value);
                    operateResult = siemensTcpNet.Write(address, myData);
                }
                //浮点
                else if (proObjType == typeof(double) || proObjType == typeof(float))
                {
                    double MyData = Convert.ToDouble(value);
                    operateResult = siemensTcpNet.Write(address, MyData);
                }
                //整数
                else if (proObjType == typeof(Int16) || proObjType == typeof(short))
                {
                    short MyData = Convert.ToInt16(value);
                    operateResult = siemensTcpNet.Write(address, MyData);//此处需要注意,短整型的此处不确定是否会报错,需要测试
                    //operateResult = siemensTcpNet.Write(address, MyData.ConvertToUshort());
                }
                //双整数
                else if (proObjType == typeof(Int32))
                {
                    int myData = Convert.ToInt32(value);
                    operateResult = siemensTcpNet.Write(address, myData);
                }
                //Char
                else if (proObjType == typeof(Char))
                {//char要转换成int类型,写给PLC
                    int myData = Convert.ToInt32(value);
                    byte b = (byte)myData;
                    operateResult = siemensTcpNet.Write(address, b);
                }
                //String
                else if (proObjType == typeof(String))
                {
                    operateResult = siemensTcpNet.Write(address, value.ToString());
                }
                else
                {
                    operateResult = siemensTcpNet.Write(address, value.ToString());
                }
                if (!operateResult.IsSuccess)
                {
                    Log4NetHelper.WriteErrorLog(_LogType, String.Format("写入出现异常:" + operateResult.Message + ",地址:{0},值:{1}", address, value.ToString()), null);
                    fre.result = false;
                    fre.resMsg = "写入失败:" + operateResult.Message;
                }
                else
                {
                    fre.result = true;
                    //Log4NetHelper.WriteInfoLog(_LogType, String.Format("写入成功,写入地址:{0},值:{1}", address, value.ToString()));
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteErrorLog(_LogType, String.Format("写入出现异常:" + ex.Message + ",地址:{0},值:{1}", address, value.ToString()), ex);
                fre.result = false;
                fre.resMsg = "写入失败:" + ex.Message;
            }
            return fre;
        }
        public override MessageModel WriteValuePoint(string fullAddress, object value, object proObj)
        {
            var arr = fullAddress.Split(SystemValue.PLCDBADDRESS_SEPARATE);
            string dbNumber = arr[0];
            string offset = arr[1];
            return WriteValuePoint(dbNumber, offset, value, proObj);
        }
        /// <summary>
        /// è¯»å–
        /// </summary>
        /// <param name="dbNumber">DB块名</param>
        /// <param name="offset">偏移量</param>
        /// <param name="type"></param>
        /// <returns></returns>
        public override object ReadValuePoint(string dbNumber, string offset, int stringlen, Type type = default(Type))
        {
            if (dbNumber.IndexOf(SystemValue.PLCDBADDRESS_SEPARATE.ToString()) > -1)
            {
                throw new Exception("参数不正确,不应该带" + SystemValue.PLCDBADDRESS_SEPARATE.ToString());
            }
            var address = GetAddress(dbNumber, offset, type);
            try
            {
                if (type == typeof(bool))
                {//布尔要转换成1和0写入
                    bool MyPlcData = siemensTcpNet.ReadBool(address).Content;
                    return MyPlcData;
                }
                //浮点
                else if (type == typeof(double) || type == typeof(float))
                {
                    var MyPlcData = siemensTcpNet.ReadFloat(address).Content;
                    return MyPlcData;
                }
                //整数
                else if (type == typeof(short))
                {
                    int MyPlcData = siemensTcpNet.ReadInt16(address).Content;
                    return MyPlcData;
                }
                //双整数
                else if (type == typeof(Int32))
                {
                    long MyPlcData = siemensTcpNet.ReadInt32(address).Content;
                    return MyPlcData;
                }
                //Char
                else if (type == typeof(Char))
                {//char要转换成int类型,写给PLC
                    char MyPlcData = (char)(siemensTcpNet.ReadByte(address).Content);
                    return MyPlcData.ToString();
                }
                //String
                else if (type == typeof(String))
                {
                    var data = siemensTcpNet.ReadString(address, (ushort)stringlen);
                    var MyPlcData = siemensTcpNet.ReadString(address, (ushort)stringlen).Content;
                    //write.Message = siemensTcpNet.ReadString(write.Name).Message;
                    //string MyPlcData = siemensTcpNet.ReadString(address).Content;
                    return MyPlcData == null ? "" : MyPlcData.ToString();
                }
                else
                {
                    var MyPlcData = siemensTcpNet.ReadString(address).Content;
                    return MyPlcData == null ? "" : MyPlcData.ToString();
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteErrorLog(_LogType, String.Format("读取出现异常:" + ex.Message + ",地址:{0}", address), ex);
                throw;
            }
        }
        /// <summary>
        /// è¯»å–
        /// </summary>
        /// <param name="dbNumber">DB块名</param>
        /// <param name="offset">偏移量</param>
        /// <param name="type"></param>
        /// <returns></returns>
        public override object ReadValuePoint(string dbNumber, string offset, Type type = default(Type))
        {
            if (dbNumber.IndexOf(SystemValue.PLCDBADDRESS_SEPARATE.ToString()) > -1)
            {
                throw new Exception("参数不正确,不应该带" + SystemValue.PLCDBADDRESS_SEPARATE.ToString());
            }
            var address = GetAddress(dbNumber, offset, type);
            try
            {
                if (type == typeof(bool))
                {//布尔要转换成1和0写入
                    var MyPlcData11 = siemensTcpNet.ReadBool(address);
                    bool MyPlcData = siemensTcpNet.ReadBool(address).Content;
                    return MyPlcData;
                }
                //浮点
                else if (type == typeof(double) || type == typeof(float))
                {
                    var MyPlcData = siemensTcpNet.ReadFloat(address).Content;
                    return MyPlcData;
                }
                //整数
                else if (type == typeof(short))
                {
                    int MyPlcData = siemensTcpNet.ReadInt16(address).Content;
                    return MyPlcData;
                }
                //双整数
                else if (type == typeof(Int32))
                {
                    long MyPlcData = siemensTcpNet.ReadInt32(address).Content;
                    return MyPlcData;
                }
                //Char
                else if (type == typeof(Char))
                {//char要转换成int类型,写给PLC
                    char MyPlcData = (char)(siemensTcpNet.ReadByte(address).Content);
                    return MyPlcData.ToString();
                }
                //String
                else if (type == typeof(String))
                {
                    string MyPlcData = siemensTcpNet.ReadString(address).Content;
                    return MyPlcData == null ? "" : MyPlcData.ToString();
                }
                else
                {
                    var MyPlcData = siemensTcpNet.ReadString(address).Content;
                    return MyPlcData == null ? "" : MyPlcData.ToString();
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteErrorLog(_LogType, String.Format("读取出现异常:" + ex.Message + ",地址:{0}", address), ex);
                throw;
            }
        }
        public override object ReadValuePointV2(string fullAddress, Type type = default(Type), int stringlen=0)
        {
            if (fullAddress.IndexOf(SystemValue.PLCDBADDRESS_SEPARATE.ToString()) > -1)
            {
                throw new Exception("参数不正确,不应该带" + SystemValue.PLCDBADDRESS_SEPARATE.ToString());
            }
            var address = fullAddress;
            try
            {
                if (type == typeof(bool))
                {//布尔要转换成1和0写入
                    bool MyPlcData = siemensTcpNet.ReadBool(address).Content;
                    return MyPlcData;
                }
                //浮点
                else if (type == typeof(double) || type == typeof(float))
                {
                    var MyPlcData = siemensTcpNet.ReadFloat(address).Content;
                    return MyPlcData;
                }
                //整数
                else if (type == typeof(short))
                {
                    int MyPlcData = siemensTcpNet.ReadInt16(address).Content;
                    return MyPlcData;
                }
                //双整数
                else if (type == typeof(Int32))
                {
                    long MyPlcData = siemensTcpNet.ReadInt32(address).Content;
                    return MyPlcData;
                }
                //Char
                else if (type == typeof(Char))
                {//char要转换成int类型,写给PLC
                    char MyPlcData = (char)(siemensTcpNet.ReadByte(address).Content);
                    return MyPlcData.ToString();
                }
                //String
                else if (type == typeof(String))
                {
                    var data = siemensTcpNet.ReadString(address, (ushort)stringlen);
                    var MyPlcData = siemensTcpNet.ReadString(address, (ushort)stringlen).Content;
                    //write.Message = siemensTcpNet.ReadString(write.Name).Message;
                    //string MyPlcData = siemensTcpNet.ReadString(address).Content;
                    return MyPlcData == null ? "" : MyPlcData.ToString();
                }
                else
                {
                    var MyPlcData = siemensTcpNet.ReadString(address).Content;
                    return MyPlcData == null ? "" : MyPlcData.ToString();
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteErrorLog(_LogType, String.Format("读取出现异常:" + ex.Message + ",地址:{0}", address), ex);
                throw;
            }
        }
        public override object ReadValuePoint(string fullAddress, Type type = default(Type))
        {
            var arr = fullAddress.Split(SystemValue.PLCDBADDRESS_SEPARATE);
            string dbNumber = arr[0];
            string offset = arr[1];
            return ReadValuePoint(dbNumber, offset, type);
        }
        public override string GetAddress(string dbNumber, string offset, Type type = default(Type))
        {
            return "DB" + dbNumber + "." + offset;
        }
        public override void Close()
        {
            if (siemensTcpNet != null)
                siemensTcpNet.ConnectClose();
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/AlertMonitor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data.Entity.Core.Common.CommandTrees;
using System.Data.Entity.Validation;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// å‘Šè­¦ç›‘控
    /// </summary>
    public class AlertMonitor: DataCaptureHandler
    {
        public static readonly AlertMonitor Instance = new AlertMonitor();
        public AlertMonitor()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            while (true)
            {
                try
                {
                    WorkPieceInfoManager.AlertMonitor(LogType.FormMain);
                }
                catch (Exception ex)
                {
                    Log4NetHelper.WriteErrorLog(LogType.FormMain, $"计算告警异常:", ex);
                }
                finally
                {
                }
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_01.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,222 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using iWare_SCADA_Model.TableModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// è¯»ç å®Œæˆæ ‡è®°
    /// </summary>
    public class DataCaptureHandler_01 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_01 Instance = new DataCaptureHandler_01();
        public DataCaptureHandler_01()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLog wplog = new WorkPieceLog();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                //var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.WorkPieceID = WorkPieceID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                //var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                //wplog.WorkPieceID = PLCManger.GetWorkPieceIDForPLC(_dataCaptureConfig, plcService);
                if (wplog.WorkPieceID.Length != 22)
                {//获取到的工件号异常
                    return;
                }
                else
                {//获取其他配置的待采集项
                    //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                    //{
                    //    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                    //    wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                    //}
                }
                //读取二维码后更新数据库
                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                return;
            }
            ThreadStatusMonitorMiddle threadStatusMonitor = new ThreadStatusMonitorMiddle();
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    threadStatusMonitor.ErrorMsg = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                string value_01 = "";
                while (true)
                {
                    threadStatusMonitor.ErrorMsg = "";
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg= $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                            continue;
                        }
                        else
                        {
                            //System.Net.IPHostEntry myEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
                            //string ipAddress = myEntry.AddressList[0].ToString();
                            //string hostname = Environment.MachineName;
                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (value_01.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLog wplog = new WorkPieceLog();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID; ;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = Environment.MachineName+"自动"+ Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控上线完成标记 è¯»å–工件码动态由于字段名{col.DataCaptureColumnTabelName}没找到失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控上线完成标记 å­—段{col.DataCaptureColumnTabelName}动态赋值异常{wplog.Id}", setex);
                                    }
                                }
                                //读取二维码后更新数据库
                                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            value_01 = value.ToString();
                        }
                        threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            threadStatusMonitor.ThreadFrequency = 5000;
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            threadStatusMonitor.ThreadFrequency = _dataCaptureConfig.DataCaptureFrequency.Value;
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控上线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控上线标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                threadStatusMonitor.ErrorMsg = "";
                threadStatusMonitor.Threadcode = DataCapturePointCode;
                threadStatusMonitor.Threadcname = DataCapturePointCname;
                threadStatusMonitor.Threadendtime = DateTime.Now;
                threadStatusMonitor.Threadstatue = 0;
                threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                threadStatusMonitor.Remarks = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控上线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控上线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_02.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,710 @@
using iTextSharp.text.pdf;
using iTextSharp.text;
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using iTextSharp.text.pdf.parser.clipper;
using iTextSharp.text.pdf.parser;
using iWare_SCADA_Model.TableModelSC;
using static System.Net.WebRequestMethods;
using File = System.IO.File;
using Spire.Additions.Xps.Schema;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// æµ‹é‡å®Œæˆæ ‡è®°
    /// </summary>
    public class DataCaptureHandler_02: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_02 Instance = new DataCaptureHandler_02();
        public DataCaptureHandler_02()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.WorkPieceID = "123456";
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.QualityType = QualityType.Online.ToString();
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.QualityState = (int)QualityState.NG;
                wplog.QualityStateUpdateUser = WorkingProcedure;
                wplog.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString();
                //wplog.QualityTo1 = "QualityTo1";
                //wplog.QualityTo2 = "QualityTo2";
                //wplog.QualityTo3 = "QualityTo3";
                //wplog.QualityTo4 = "QualityTo4";
                //wplog.QualityTo5 = "QualityTo5";
                //wplog.QualityTo6 = "QualityTo6";
                //wplog.QualityTo7 = "QualityTo7";
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            ThreadStatusMonitorMiddle threadStatusMonitor = new ThreadStatusMonitorMiddle();
            if (IsCaptureflag)
            {
                //_dataCaptureConfig.DataCapturePLCType = 5;
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    threadStatusMonitor.ErrorMsg = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                string value_02 = "";
                string path36 = ConfigHelper.GetConfigString("OP30QualityDataFor36Station");//op30 3工位,6工位地址
                string path45 = ConfigHelper.GetConfigString("OP30QualityDataFor45Station");//op30 4工位,5工位地址
                string pathOP20 = ConfigHelper.GetConfigString("OP20QualityData");
                string pathOP60 = ConfigHelper.GetConfigString("OP60QualityData");
                if (string.IsNullOrEmpty(path36))
                {
                    path36 = @"Z:\";
                }
                if (string.IsNullOrEmpty(path45))
                {
                    path45 = @"U:\";
                }
                if (string.IsNullOrEmpty(pathOP20))
                {
                    pathOP20 = @"W:\";
                }
                if (string.IsNullOrEmpty(pathOP60))
                {
                    pathOP60 = @"V:\";
                }
                if (DataCapturePointCode.Contains("CH3"))
                {//工位3 æ¶¨æ–­åŠ›çŸ©
                    path36 = path36 + "kistler_crack";
                }
                else if (DataCapturePointCode.Contains("CH4"))
                {//工位4 é¢„拧紧力矩  SEQ_04
                    path45 = path45 + "NutrunnerData\\FO\\SEQ_04";
                }
                else if (DataCapturePointCode.Contains("CH5"))
                {//工位5 æ‹§ç´§åŠ›çŸ©  SEQ_24
                    path45 = path45 + "NutrunnerData\\FO\\SEQ_24";
                }
                else if (DataCapturePointCode.Contains("CH6"))
                {//工位6 è¡¬å¥—压装力矩
                    path36 = path36 + "kistler_bush";
                }
                DateTime? fileFindTime = null;
                DateTime? op60QualityTime = null;
                //                è´¨é‡ä¿¡æ¯ï¼šæ¶¨æ–­åŠ›çŸ©...    é¢„拧紧力矩 é¢„拧紧角度   ç»ˆæ‹§ç´§åŠ›çŸ© ç»ˆæ‹§ç´§è§’度
                //kistler_crack æ¶¨æ–­åŠ›çŸ© å·¥ä½3 æ¶¨æ–­åŠ›çŸ©ï¼ˆY - Maximum)  è´¨é‡ç»“果(Result)
                //kistler_bush åŽ‹è£…åŠ›çŸ© å·¥ä½6 è¡¬å¥—压装力矩(Y - Maximum)  è¡¬å¥—压装位移(Block X) è´¨é‡ç»“果(Result)
                //Bosch_Rexroth /(Ch_0_1.csv / Ch_0_2.csv ä¸¤é€šé“ åŒæ—¶å–最新的(或者id对应?))  é¢„拧紧力矩工位4 é¢„拧紧角度  é¢„拧紧力矩(T + Nm)  è´¨é‡ç»“果(结果)    ç›®å‰æ–‡ä»¶ä¸èƒ½è‡ªåŠ¨ç”Ÿæˆ åšä¸– åŠ›å£«ä¹æ‹§ç´§ç³»ç»Ÿ
                //Bosch_Rexroth /(Ch_0_3.csv / Ch_0_4.csv ä¸¤é€šé“ åŒæ—¶å–最新的(或者id对应?)) ç»ˆæ‹§ç´§å·¥ä½5 ç»ˆæ‹§ç´§è§’度  æ‹§ç´§åŠ›çŸ©ï¼ˆT + Nm)  ç»ˆæ‹§ç´§è§’度
                while (true)
                {
                    threadStatusMonitor.ErrorMsg = "";
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}测量完成【{value_02}】【{value.ToString()}】【{_dataCaptureConfig.PLCIP}】【{_dataCaptureConfig.DbNumber}】【{_dataCaptureConfig.Offset}】[{_dataCaptureConfig.DataCapturePLCType}][{plcService.IsConnected.ToString()}]");
                            if (value_02.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                             Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}进入测量完成【{value_02}】【{value.ToString()}】");
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID; ;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                wplog.QualityType = QualityType.Online.ToString();
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控测量完成标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        if(set.PropertyType.FullName.Equals("System.String"))
                                        {
                                            set.SetValue(wplog, valuecol.ToString());//给动态字段赋值
                                        }
                                        else
                                        {
                                            set.SetValue(wplog, valuecol);//给动态字段赋值
                                        }
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控测量完成标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                try
                                {
                                    if (WorkingProcedure.Equals("OP30"))
                                    {
                                        var time = DateTimeHelper.GetDateTime();
                                        if (fileFindTime==null)
                                        {
                                            fileFindTime = time.AddMinutes(-10);
                                        }
                                        //获取文件夹名称
                                        List<string> directorylist = new List<string>();
                                        string directory = time.ToString("yyyy-MM-dd_HH");
                                        string directoryOther = time.AddSeconds(-30).ToString("yyyy-MM-dd_HH");
                                        directorylist.Add(directory);
                                        if (!directory.Equals(directoryOther))
                                        {//如果30秒前是另一个文件夹
                                            directorylist.Add(directoryOther);
                                        }
                                        List<FileInfo> files = new List<FileInfo>();
                                        foreach (var dir in directorylist)
                                        {
                                            try
                                            {
                                                if (DataCapturePointCode.Contains("CH3")|| DataCapturePointCode.Contains("CH6"))
                                                {//工位3 æ¶¨æ–­åŠ›çŸ©
                                                 //扫描当前时间与30秒前出现的文件,一般节拍在15秒左右(两个服务器时间不一样会导致取不到文件)
                                                    var newFiles = FileHelper.DetectNewFiles(path36 + @"\" + dir, "*.pdf", 10, fileFindTime.Value, time.AddMinutes(120));
                                                    foreach (var file in newFiles)
                                                    {
                                                        files.Add((FileInfo)file);
                                                    }
                                                }
                                                else if (DataCapturePointCode.Contains("CH4")|| DataCapturePointCode.Contains("CH5"))
                                                {//工位4 é¢„拧紧力矩  SEQ_04
                                                    //扫描当前时间与30秒前出现的文件,一般节拍在15秒左右(两个服务器时间不一样会导致取不到文件)
                                                    var newFiles = FileHelper.DetectNewFiles(path45, "*.txt", 10, fileFindTime.Value, time.AddMinutes(120));
                                                    foreach (var file in newFiles)
                                                    {
                                                        files.Add((FileInfo)file);
                                                    }
                                                }
                                            }
                                            catch(Exception ex)
                                            {
                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}测量完成读取文件{dir}数据时异常,采集时间{fileFindTime.Value},避免工序完成异常1:", ex);
                                            }
                                        }
                                        files = files.OrderByDescending(o => o.LastWriteTime).ToList();
                                        if(files.Count>0)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工位【{DataCapturePointCode}】工件【{wplog.WorkPieceID??"空字符"}】文件{files[0].FullName}测量完成读取文件数据开始");
                                            switch (DataCapturePointCode)
                                            {
                                                case "OP3002CH3":
                                                    wplog.OP30QualityFilePathCH3 = files[0].FullName;
                                                    wplog.QualityStateStr= FileHelper.ReadPdfFileForSpire(files[0].FullName, "Result");
                                                    wplog.QualityOP30To1 = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Y-Maximum");//涨断力矩
                                                    break;
                                                case "OP3002CH4":
                                                    wplog = GetCH4Info(files[0].FullName, wplog);
                                                    wplog.OP30QualityFilePathCH4 = files[0].FullName;
                                                    break;
                                                case "OP3002CH5":
                                                    wplog = GetCH5Info(files[0].FullName, wplog);
                                                    wplog.OP30QualityFilePathCH5 = files[0].FullName;
                                                    break;
                                                case "OP3002CH6":
                                                    wplog.OP30QualityFilePathCH6 = files[0].FullName;
                                                    wplog.QualityStateStr = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Result");
                                                    wplog.QualityOP30To6 = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Y-Maximum");//衬套压装力矩
                                                    wplog.QualityOP30To7 = FileHelper.ReadPdfFileForSpire(files[0].FullName, "Block X");//衬套压装位移
                                                    break;
                                                default:
                                                    break;
                                            }
                                            fileFindTime = files[0].LastWriteTime;
                                        }
                                    }
                                    else if(WorkingProcedure.Equals("OP35"))
                                    {
                                        if(wplog.OP35OK)
                                        {
                                            wplog.QualityStateStr = "OK";
                                        }
                                        else
                                        {
                                            wplog.QualityStateStr = "NG";
                                        }
                                    }
                                    else if(WorkingProcedure.Equals("OP60"))
                                    {
                                        var time = DateTimeHelper.GetDateTime();
                                        if (fileFindTime == null)
                                        {
                                            fileFindTime = time.AddMinutes(-10);
                                        }
                                        //OP60 éœ€è¦æ‰«ææ–‡ä»¶è¯»å–质量信息
                                        //扫描修改时间在上次扫描时间之前30秒到当前时间的之间的文件
                                        List<FileInfo> files = new List<FileInfo>();
                                        var newFiles = FileHelper.DetectNewFiles(pathOP60, "*.dfq", 300, fileFindTime.Value, time.AddHours(2));
                                        foreach (var file in newFiles)
                                        {
                                            files.Add((FileInfo)file);
                                        }
                                        if(files.Count()>0)
                                        {
                                            files = files.OrderByDescending(o => o.LastWriteTime).ToList();
                                            List<OP60Info> op60Infos = new List<OP60Info>();
                                            foreach (var file in files)
                                            {//取倒序匹配的文件名为工件号的文件
                                                if (file.Name.Contains("SP-" + DataCapturePointCode.Substring(DataCapturePointCode.Length - 1, 1)))
                                                {
                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}下线完成读取到文件{file.Name},是指定的工件");
                                                    var datatable = CSVHelper.ReadCSVList(file.FullName);
                                                    if (datatable.Count < 106)
                                                    {//质量数据从106行开始
                                                        continue;
                                                    }
                                                    datatable.Reverse();
                                                    System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
                                                    byte[] byteArray = new byte[] { (byte)15 };
                                                    string strCharacter = asciiEncoding.GetString(byteArray);
                                                    var list = datatable[0].Split(new String[] { strCharacter }, StringSplitOptions.None);
                                                    byte[] byteArray2 = new byte[] { (byte)20 };
                                                    string strCharacter2 = asciiEncoding.GetString(byteArray2);
                                                    foreach (var item in list)
                                                    {
                                                        var listitem = item.Split(new String[] { strCharacter2 }, StringSplitOptions.None);
                                                        if (listitem.Count() == 3)
                                                        {
                                                            OP60Info info = new OP60Info();
                                                            info.datetime = listitem[2];
                                                            info.col2 = listitem[1];
                                                            info.value = listitem[0];
                                                            info.datetimeHandle = CommonManager.GetOP60Time(info.datetime);
                                                            op60Infos.Add(info);
                                                        }
                                                    }
                                                    if(op60Infos.Count()>=2)
                                                    {
                                                        if(op60QualityTime.HasValue)
                                                        {
                                                            if(op60Infos[0].datetimeHandle> op60QualityTime.Value)
                                                            {
                                                                wplog.QualityOP60To1 = op60Infos[0].value;
                                                                wplog.QualityOP60To2 = op60Infos[1].value;
                                                                wplog.OP60QualityFilePath = file.FullName;
                                                            }
                                                            else
                                                            {
                                                                break;
                                                            }
                                                        }
                                                        else
                                                        {
                                                            wplog.QualityOP60To1 = op60Infos[0].value;
                                                            wplog.QualityOP60To2 = op60Infos[1].value;
                                                            wplog.OP60QualityFilePath = file.FullName;
                                                        }
                                                        op60QualityTime = op60Infos[0].datetimeHandle;
                                                        break;
                                                    }
                                                }
                                                else
                                                {
                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}下线完成读取文件{file.FullName}不是指定工件{wplog.WorkPieceID}");
                                                }
                                            }
                                        }
                                    }
                                    else if (WorkingProcedure.Equals("OP20"))
                                    {
                                        var time = DateTimeHelper.GetDateTime();
                                        if (fileFindTime == null)
                                        {
                                            fileFindTime = time.AddMinutes(-60);
                                        }
                                        //OP20 éœ€è¦æ‰«ææ–‡ä»¶è¯»å–质量信息
                                        //扫描修改时间在上次扫描时间之前30秒到当前时间的之间的文件
                                        List<FileInfo> files = new List<FileInfo>();
                                        var newFiles = FileHelper.DetectNewFiles(pathOP20, "*.dfq", 300, fileFindTime.Value, time.AddHours(2));
                                        foreach (var file in newFiles)
                                        {
                                            files.Add((FileInfo)file);
                                        }
                                        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工位【{DataCapturePointCode}】工件【{wplog.WorkPieceID ?? "空字符"}】获取到【{files.Count()}】个文件,【{fileFindTime.Value}】【{time.AddHours(2)}】");
                                        if (files.Count() > 0)
                                        {
                                            files = files.OrderByDescending(o => o.LastWriteTime).ToList();
                                            List<OP60Info> op60Infos = new List<OP60Info>();
                                            foreach (var file in files)
                                            {//取倒序匹配的文件名为工件号的文件
                                                if (file.Name.Contains("SP-" + DataCapturePointCode.Substring(DataCapturePointCode.Length - 1, 1)))
                                                {
                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}下线完成读取到文件{file.Name},是指定的工件");
                                                    var datatable = CSVHelper.ReadCSVList(file.FullName);
                                                    if (datatable.Count < 57)
                                                    {//质量数据从106行开始
                                                        continue;
                                                    }
                                                    datatable.Reverse();
                                                    System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
                                                    byte[] byteArray = new byte[] { (byte)15 };
                                                    string strCharacter = asciiEncoding.GetString(byteArray);
                                                    var list = datatable[0].Split(new String[] { strCharacter }, StringSplitOptions.None);
                                                    byte[] byteArray2 = new byte[] { (byte)20 };
                                                    string strCharacter2 = asciiEncoding.GetString(byteArray2);
                                                    foreach (var item in list)
                                                    {
                                                        var listitem = item.Split(new String[] { strCharacter2 }, StringSplitOptions.None);
                                                        if (listitem.Count() == 3)
                                                        {
                                                            OP60Info info = new OP60Info();
                                                            info.datetime = listitem[2];
                                                            info.col2 = listitem[1];
                                                            info.value = listitem[0];
                                                            info.datetimeHandle = CommonManager.GetOP60Time(info.datetime);
                                                            op60Infos.Add(info);
                                                        }
                                                    }
                                                    if (op60Infos.Count() >= 1)
                                                    {
                                                        if (op60QualityTime.HasValue)
                                                        {
                                                            if (op60Infos[0].datetimeHandle > op60QualityTime.Value)
                                                            {
                                                                wplog.QualityOP20To1 = op60Infos[0].value;
                                                                wplog.OP20QualityFilePath = file.FullName;
                                                            }
                                                            else
                                                            {
                                                                break;
                                                            }
                                                        }
                                                        else
                                                        {
                                                            wplog.QualityOP20To1 = op60Infos[0].value;
                                                            wplog.OP20QualityFilePath = file.FullName;
                                                        }
                                                        op60QualityTime = op60Infos[0].datetimeHandle;
                                                        break;
                                                    }
                                                }
                                                else
                                                {
                                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}下线完成读取文件{file.FullName}不是指定工件{wplog.WorkPieceID}");
                                                }
                                            }
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}测量完成出现异常,请查看日志!";
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}测量完成读取文件数据时异常,避免工序完成异常:", ex);
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            value_02 = value.ToString();
                        }
                        threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            threadStatusMonitor.ThreadFrequency = 5000;
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            threadStatusMonitor.ThreadFrequency = _dataCaptureConfig.DataCaptureFrequency.Value;
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控测量标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控测量标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                threadStatusMonitor.ErrorMsg = "";
                threadStatusMonitor.Threadcode = DataCapturePointCode;
                threadStatusMonitor.Threadcname = DataCapturePointCname;
                threadStatusMonitor.Threadendtime = DateTime.Now;
                //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                threadStatusMonitor.Threadstatue = 0;
                threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                threadStatusMonitor.Remarks = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控测量标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控测量标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
        public WorkPieceLogMiddle GetCH4Info(string FullName, WorkPieceLogMiddle wplog)
        {
            try
            {
                string fileContent = File.ReadAllText(FullName);
                string[] lines2 = fileContent.Split('\n');
                bool IDCodeIndex = false;
                int Mcount = 0;
                int i = 0;
                int count = 0;
                foreach (string line in lines2)
                {
                    count++;
                    if (count==4)
                    {//获取质量结果
                        var list = line.Split(' ');
                        if(list.Count()>0)
                        {
                            var str = list[list.Count() - 1].ToString().Trim();
                            wplog.QualityStateStr= str.Equals("OK")?"OK":"NG";
                        }
                    }
                    // å¤„理每一行的逻辑
                    if (line.Contains("ID-Code"))//两个拧紧,每个前面都有ID-Code
                    {
                        i++;
                        IDCodeIndex = true;
                        Mcount = 0;
                    }
                    if (IDCodeIndex)
                    {
                        if (line.Contains(" M "))//第三个M行是拧紧数据
                        {//预拧紧力矩
                            Mcount++;
                            if (Mcount == 3)
                            {
                                i++;
                                var str = line.Replace("+", "").Replace("-", "");
                                var list = str.Split('M');
                                if (list.Count() == 4)
                                {
                                    if (i <= 2)
                                    {//CH1
                                        wplog.QualityOP30To2 = list[2].ToString().Trim();
                                    }
                                    else
                                    {//CH2
                                        wplog.QualityOP30To8 = list[2].ToString().Trim();
                                    }
                                }
                                IDCodeIndex = false;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}CH4工位质量数据异常工件号:{(wplog.WorkPieceID == null ? "" : wplog.WorkPieceID)} æ–‡ä»¶åï¼š{FullName}:", ex);
            }
            return wplog;
        }
        public WorkPieceLogMiddle GetCH5Info(string FullName, WorkPieceLogMiddle wplog)
        {
            try
            {
                string fileContent = File.ReadAllText(FullName);
                string[] lines2 = fileContent.Split('\n');
                bool IDCodeIndex = false;
                int Mcount = 0;
                int i = 0;
                int count = 0;
                foreach (string line in lines2)
                {
                    count++;
                    if (count == 4)
                    {//获取质量结果
                        var list = line.Split(' ');
                        if (list.Count() > 0)
                        {
                            var str = list[list.Count() - 1].ToString().Trim();
                            wplog.QualityStateStr = str.Equals("OK") ? "OK" : "NG";
                        }
                    }
                    // å¤„理每一行的逻辑
                    if (line.Contains("ID-Code"))//两个拧紧,每个前面都有ID-Code
                    {
                        i++;
                        IDCodeIndex = true;
                        Mcount = 0;
                    }
                    if (IDCodeIndex)
                    {
                        if (line.Contains(" M "))//第三个M行是拧紧数据
                        {//最终力矩
                            Mcount++;
                            if (Mcount == 3)
                            {
                                var str = line.Replace("+", "").Replace("-", "");
                                var list = str.Split('M');
                                if (list.Count() == 4)
                                {
                                    if (i == 1)
                                    {//CH3
                                        wplog.QualityOP30To3 = list[2].ToString().Trim();
                                    }
                                    else
                                    {//CH4
                                        wplog.QualityOP30To9 = list[2].ToString().Trim();
                                    }
                                }
                                IDCodeIndex = false;
                            }
                        }
                    }
                    if (line.Contains(" MWSP "))
                    {//终拧紧力矩  ç»ˆæ‹§ç´§è§’度
                        var list = line.Split(new String[] { " MWS " }, StringSplitOptions.None);
                        if (list.Count() == 2)
                        {
                            if (i == 1)
                            {//CH3
                                wplog.QualityOP30To4 = list[1].ToString().Trim();
                            }
                            else
                            {//CH4
                                wplog.QualityOP30To10 = list[1].ToString().Trim();
                            }
                            var list2 = list[0].Split(new String[] { " W " }, StringSplitOptions.None);
                            if (list2.Count() == 2)
                            {
                                var str = list2[1].ToString();
                                if (i == 1)
                                {//CH3
                                    wplog.QualityOP30To5 = str.Substring(0, str.IndexOf("MWSP")).Trim();
                                }
                                else
                                {//CH4
                                    wplog.QualityOP30To11 = str.Substring(0, str.IndexOf("MWSP")).Trim();
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}CH5工位质量数据异常工件号:{(wplog.WorkPieceID == null ? "" : wplog.WorkPieceID)} æ–‡ä»¶åï¼š{FullName}:", ex);
            }
            return wplog;
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_03.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,225 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// NOOK推出标记
    /// </summary>
    public class DataCaptureHandler_03: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_03 Instance = new DataCaptureHandler_03();
        public DataCaptureHandler_03()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            ThreadStatusMonitorMiddle threadStatusMonitor = new ThreadStatusMonitorMiddle();
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    threadStatusMonitor.ErrorMsg = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                string value_03 = "";
                while (true)
                {
                    threadStatusMonitor.ErrorMsg = "";
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (value_03.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID; ;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控NOOK标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控NOOK标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                if(_dataCaptureConfig.WorkingProcedure.Equals("OP20")
                                    //||_dataCaptureConfig.WorkingProcedure.Equals("OP60")
                                    )
                                {//op20会同时推出多件,所以特殊处理
                                    wplog.WorkPieceID = wplog.WorkPieceIDA;
                                    wplog.Remarks = "NOOK推出工件A";
                                    WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    wplog.WorkPieceID = wplog.WorkPieceIDB;
                                    wplog.Remarks = "NOOK推出工件B";
                                    WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    wplog.WorkPieceID = wplog.WorkPieceIDC;
                                    wplog.Remarks = "NOOK推出工件C";
                                    WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    //wplog.WorkPieceID = wplog.WorkPieceIDD;
                                    //wplog.Remarks = "NOOK推出工件D";
                                    //WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                }
                                else
                                {
                                    //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                    WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                }
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            value_03 = value.ToString();
                        }
                        threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            threadStatusMonitor.ThreadFrequency = 5000;
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            threadStatusMonitor.ThreadFrequency = _dataCaptureConfig.DataCaptureFrequency.Value;
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控NOOK标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控NOOK标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控NOOK标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控NOOK标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                threadStatusMonitor.ErrorMsg = "";
                threadStatusMonitor.Threadcode = DataCapturePointCode;
                threadStatusMonitor.Threadcname = DataCapturePointCname;
                threadStatusMonitor.Threadendtime = DateTime.Now;
                //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                threadStatusMonitor.Threadstatue = 0;
                threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                threadStatusMonitor.Remarks = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控NOOK标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控NOOK标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_04.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,232 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    ///  SPC推出标记
    /// </summary>
    public class DataCaptureHandler_04: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_04 Instance = new DataCaptureHandler_04();
        public DataCaptureHandler_04()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            ThreadStatusMonitorMiddle threadStatusMonitor = new ThreadStatusMonitorMiddle();
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    threadStatusMonitor.ErrorMsg = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                string value_04 = "";
                while (true)
                {
                    threadStatusMonitor.ErrorMsg = "";
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (value_04.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID; ;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.WorkPieceID = "123456";
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控spc标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控spc标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                if (_dataCaptureConfig.WorkingProcedure.Equals("OP20")|| _dataCaptureConfig.WorkingProcedure.Equals("OP60")
                                    )
                                {//op20,op50,op60 ä¼šåŒæ—¶æŽ¨å‡ºå¤šä»¶ï¼Œæ‰€ä»¥ç‰¹æ®Šå¤„理
                                    wplog.WorkPieceID = wplog.WorkPieceIDA;
                                    wplog.Remarks = "SPC推出工件A";
                                    WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    wplog.WorkPieceID = wplog.WorkPieceIDB;
                                    wplog.Remarks = "SPC推出工件B";
                                    WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    wplog.WorkPieceID = wplog.WorkPieceIDC;
                                    wplog.Remarks = "SPC推出工件C";
                                    WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    if(_dataCaptureConfig.WorkingProcedure.Equals("OP60"))
                                    {
                                        wplog.WorkPieceID = wplog.WorkPieceIDD;
                                        wplog.Remarks = "SPC推出工件D";
                                        WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    }
                                }
                                else
                                {
                                    //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                    WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                }
                                threadStatusMonitor.Threadstatue = 1;
                                //判断是否跳序,上一工序质量是否合格
                                //反馈给PLC,写入
                            }
                            value_04 = value.ToString();
                        }
                        threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            threadStatusMonitor.ThreadFrequency = 5000;
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            threadStatusMonitor.ThreadFrequency = _dataCaptureConfig.DataCaptureFrequency.Value;
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控spc标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控spc标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控spc标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控spc标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                threadStatusMonitor.ErrorMsg = "";
                threadStatusMonitor.Threadcode = DataCapturePointCode;
                threadStatusMonitor.Threadcname = DataCapturePointCname;
                threadStatusMonitor.Threadendtime = DateTime.Now;
                //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                threadStatusMonitor.Threadstatue = 0;
                threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                threadStatusMonitor.Remarks = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控spc标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控spc标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_05.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,357 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using static System.Net.WebRequestMethods;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    ///  å·¥åºå®Œæˆ
    /// </summary>
    public class DataCaptureHandler_05: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_05 Instance = new DataCaptureHandler_05();
        public DataCaptureHandler_05()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.WorkPieceID = "123456";
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            ThreadStatusMonitorMiddle threadStatusMonitor = new ThreadStatusMonitorMiddle();
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    threadStatusMonitor.ErrorMsg = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                string value_05 = "";
                string path = ConfigHelper.GetConfigString("OP80QualityData");//OP80的地址
                //string path = "C:\\Users\\SY-PC\\Desktop\\FO";//OP80的地址
                DateTime? fileFindTime = null;
                while (true)
                {
                    threadStatusMonitor.ErrorMsg = "";
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序开始获取标志位");
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (value_05.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序获取到下线标志位");
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID; ;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{_dataCaptureConfig.WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch(Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(_dataCaptureConfig.WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态赋值【{_dataCaptureConfig.WorkingProcedure ?? "空字符串"}】异常{wplog.Id},赋值列名[{col.DataCaptureColumnTabelName ?? "空字符串"}]", setex);
                                    }
                                }
                                try
                                {
                                    if (WorkingProcedure.Equals("OP80"))
                                    {
                                        var time = DateTimeHelper.GetDateTime();
                                        if (fileFindTime == null)
                                        {
                                            fileFindTime = time.AddMinutes(-10);
                                        }
                                        //OP80 éœ€è¦æ‰«ææ–‡ä»¶è¯»å–质量信息
                                        //扫描修改时间在上次扫描时间之前30秒到当前时间的之间的文件
                                        List<FileInfo> files = new List<FileInfo>();
                                        var newFiles = FileHelper.DetectNewFilesCSV(path, 300, fileFindTime.Value, time.AddHours(2));
                                        foreach (var file in newFiles)
                                        {
                                            files.Add((FileInfo)file);
                                        }
                                        files = files.OrderByDescending(o => o.LastWriteTime).ToList();
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"OP80下线完成读取到文件{files.Count()}个工件{wplog.WorkPieceID}  æ—¶é—´{fileFindTime.Value.ToString()}");
                                        foreach (var file in files)
                                        {//取倒序匹配的文件名为工件号的文件
                                            if (file.Name.Contains(wplog.WorkPieceID))
                                            {
                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"OP80下线完成读取到文件{file.Name},是指定的工件");
                                                var datatable = CSVHelper.ReadCSVList(file.FullName);
                                                List<string> rowFirst = new List<string>();
                                                List<string> rowSecond = new List<string>();
                                                if (datatable.Count == 2)
                                                {
                                                    rowFirst = datatable[0].Split(',').ToList();
                                                    rowSecond = datatable[1].Split(',').ToList();
                                                    if(rowSecond.Count<11)
                                                    {
                                                        continue;
                                                    }
                                                    //日期和时间    æ‰¹å·/标识号    åµŒå¥—号/主轴号    æ“ä½œç¬¦    æ–‡æœ¬    æµ‹é‡æœº    è¿‡ç¨‹å‚æ•°    æµ‹é‡ç³»ç»Ÿ    è¿‡ç¨‹å‚数值    åºåˆ—号    é›¶ä»¶è¯†åˆ«å·    1
                                                    OP80Info oP80Info = new OP80Info();
                                                    oP80Info.日期和时间 = rowSecond[0];
                                                    oP80Info.批号 = rowSecond[1];
                                                    oP80Info.嵌套号 = rowSecond[2];
                                                    oP80Info.操作符 = rowSecond[3];
                                                    oP80Info.文本 = rowSecond[4];
                                                    oP80Info.测量机 = rowSecond[5];
                                                    oP80Info.过程参数 = rowSecond[6];
                                                    oP80Info.测量系统 = rowSecond[7];
                                                    oP80Info.过程参数值 = rowSecond[8];
                                                    oP80Info.序列号 = rowSecond[9];
                                                    oP80Info.零件识别号 = rowSecond[10];
                                                    for (int i = 1; i <= (rowSecond.Count - 11) / 10; i++)
                                                    {
                                                        if (rowSecond.Count < (11 + i * 10))
                                                        {
                                                            break;
                                                        }
                                                        //名称 ç›¸å¯¹å€¼ ç›¸å¯¹å€¼å•位 ç»å¯¹å€¼ ç»å¯¹å€¼å•位 åä¹‰å€¼ ä¸Šé™ ä¸‹é™  çŠ¶æ€/等级 åˆ†éš”符
                                                        OP80ItemInfo item = new OP80ItemInfo();
                                                        item.分隔符 = rowSecond[1 + i * 10];
                                                        item.名称 = rowSecond[2 + i * 10];
                                                        item.相对值 = rowSecond[3 + i * 10];
                                                        item.相对值单位 = rowSecond[4 + i * 10];
                                                        item.绝对值 = rowSecond[5 + i * 10];
                                                        item.绝对值单位 = rowSecond[6 + i * 10];
                                                        item.名义值 = rowSecond[7 + i * 10];
                                                        item.上限 = rowSecond[8 + i * 10];
                                                        item.下限 = rowSecond[9 + i * 10];
                                                        item.状态 = rowSecond[10 + i * 10];
                                                        oP80Info.OP80ItemInfolist.Add(item);
                                                        if(item.名称.Equals("Weight Class") || item.名称.Equals("Weight Small End")
                                                            || item.名称.Equals("Weight Big End") || item.名称.Equals("Dime Small_End Class")
                                                            || item.名称.Equals("Dime Big_End Class"))
                                                        {
                                                        }
                                                        else
                                                        {
                                                            if(!string.IsNullOrEmpty(item.状态))
                                                            {
                                                                oP80Info.OP80ItemStatusInfolist.Add(item);
                                                            }
                                                        }
                                                    }
                                                    if(oP80Info.OP80ItemStatusInfolist.Count>0)
                                                    {
                                                        if(oP80Info.OP80ItemStatusInfolist.Any(o=>!o.状态.Equals("OK")))
                                                        {
                                                            wplog.QualityStateStr = "NG";
                                                        }
                                                        else
                                                        {
                                                            wplog.QualityStateStr = "OK";
                                                        }
                                                    }
                                                    else
                                                    {
                                                        wplog.QualityStateStr = "OK";
                                                    }
                                                    wplog.OP80QualityFilePath = file.FullName;
                                                    wplog.OP80NewCode = oP80Info.批号?.Replace("#", "");
                                                    //大头重量
                                                    wplog.QualityOP80To1 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Weight Big End")).FirstOrDefault()?.绝对值;
                                                    //小头重量
                                                    wplog.QualityOP80To2 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Weight Small End")).FirstOrDefault()?.绝对值;
                                                    //总重
                                                    wplog.QualityOP80To3 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Total Weight")).FirstOrDefault()?.绝对值;
                                                    //弯曲
                                                    wplog.QualityOP80To4 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Bend to A")).FirstOrDefault()?.绝对值;
                                                    //扭度
                                                    wplog.QualityOP80To5 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Twist to A")).FirstOrDefault()?.绝对值;
                                                    //大头垂直度
                                                    wplog.QualityOP80To6 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Big_End_C_Squareness")).FirstOrDefault()?.绝对值;
                                                    //小头垂直度
                                                    wplog.QualityOP80To10 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Sma_End_C_Squareness")).FirstOrDefault()?.绝对值;
                                                    //大头孔分组级别
                                                    wplog.QualityOP80To7 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Dime Big_End Class")).FirstOrDefault()?.状态;
                                                    //小头孔分组级别
                                                    wplog.QualityOP80To8 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Dime Small_End Class")).FirstOrDefault()?.状态;
                                                    //重量组别
                                                    wplog.QualityOP80To9 = oP80Info.OP80ItemInfolist.Where(o => o.名称.Equals("Weight Class")).FirstOrDefault()?.状态;
                                                    //wplog.Remarks = (wplog.Remarks ?? "") + $"OP80下线完成读取文件{file.FullName},数据【{wplog.OP80NewCode??"空"}】【{wplog.QualityOP80To1 ?? "空"}】【{wplog.QualityOP80To2 ?? "空"}】【{wplog.QualityOP80To3 ?? "空"}】【{wplog.QualityOP80To4 ?? "空"}】【{wplog.QualityOP80To5 ?? "空"}】";
                                                }
                                                else
                                                {
                                                    wplog.Remarks = (wplog.Remarks ?? "") + $"OP80下线完成读取文件{file.FullName}异常,行数不是2行";
                                                }
                                                fileFindTime = files[0].LastWriteTime;
                                                break;
                                            }
                                            else
                                            {
                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"OP80下线完成读取文件{file.FullName}不是指定工件{wplog.WorkPieceID}");
                                            }
                                        }
                                    }
                                }
                                catch(Exception ex)
                                {
                                    threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}下线标记 å®Œæˆè¯»å–文件数据时异常,请查看日志!";
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"OP80下线完成读取文件数据时异常,避免工序完成异常:", ex);
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.WorkingProcedureComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            value_05 = value.ToString();
                        }
                        threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            threadStatusMonitor.ThreadFrequency = 5000;
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            threadStatusMonitor.ThreadFrequency = _dataCaptureConfig.DataCaptureFrequency.Value;
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}下线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}下线标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{WorkingProcedure}下线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控打码标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                threadStatusMonitor.ErrorMsg = "";
                threadStatusMonitor.Threadcode = DataCapturePointCode;
                threadStatusMonitor.Threadcname = DataCapturePointCname;
                threadStatusMonitor.Threadendtime = DateTime.Now;
                //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                threadStatusMonitor.Threadstatue = 0;
                threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                threadStatusMonitor.Remarks = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}下线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}下线标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_06.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,267 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    ///  è®¾å¤‡ä¿¡æ¯é‡‡é›†
    /// </summary>
    public class DataCaptureHandler_06 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_06 Instance = new DataCaptureHandler_06();
        public DataCaptureHandler_06()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            Dictionary<bool, DateTime> fullBeatDic = new Dictionary<bool, DateTime>();//FullMaterial  å µæ–™  10秒false算堵料
            Dictionary<bool, DateTime> lackBeatDic = new Dictionary<bool, DateTime>();//LackMaterial  ç¼ºæ–™  10秒false算缺料
            fullBeatDic.Add(false, DateTime.Now);
            lackBeatDic.Add(false, DateTime.Now);
            bool fullBeatMonitorflag = true;
            bool lackBeatMonitorflag = true;
            ThreadStatusMonitorMiddle threadStatusMonitor = new ThreadStatusMonitorMiddle();
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    threadStatusMonitor.ErrorMsg = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                string value_06 = "";
                string AlertStatus = "";//故障状态是否变更
                string MessageStatus = "";//告警状态是否变更
                while (true)
                {
                    threadStatusMonitor.ErrorMsg = "";
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            //业务代码
                            WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            wplog.WorkingProcedure = WorkingProcedure;
                            wplog.EquipmentID = _dataCaptureConfig.EquipmentID;;
                            wplog.MonitoringPoint = DataCapturePointCode;
                            wplog.CreatedTime = DateTimeHelper.GetDateTime();
                            wplog.CreatedUserName = DataCapturePointCode;
                            wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                            wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                            wplog.OnlineTime = DateTimeHelper.GetDateTime();
                            wplog.IsDeleted = false;
                            foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                            {
                                try
                                {
                                    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                    //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                    var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                    if (set == null)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 è¯»å–工件码动态由于字段名{col.DataCaptureColumnTabelName}没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        continue;
                                    }
                                    set.SetValue(wplog, valuecol);//给动态字段赋值
                                }
                                catch (Exception setex)
                                {
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                }
                            }
                            //if((AlertStatus.Equals("") && wplog.IsCloseAlert.ToString().ToUpper().Equals("TRUE")) || !(AlertStatus.ToUpper().Equals(wplog.IsCloseAlert.ToString().ToUpper())))
                            //{//说明告警信息数据发生变更
                            //    wplog.ischeckAlertStatus=true;
                            //}
                            //if ((MessageStatus.Equals("") && wplog.IsMessage.ToString().ToUpper().Equals("TRUE")) || !(MessageStatus.ToUpper().Equals(wplog.IsMessage.ToString().ToUpper())))
                            //{//说明告警信息数据发生变更
                            //    wplog.ischeckMessageStatus = true;
                            //}
                            if(wplog.WorkingProcedure.Equals("OP05"))
                            {
                                if (fullBeatMonitorflag != wplog.FullMaterial)
                                {//堵料心跳变化
                                    if (fullBeatDic.ContainsKey(wplog.FullMaterial))
                                    {
                                        fullBeatDic[wplog.FullMaterial] = DateTime.Now;
                                    }
                                    else
                                    {
                                        fullBeatDic.Add((bool)wplog.FullMaterial, DateTime.Now);
                                    }
                                }
                                fullBeatMonitorflag = wplog.FullMaterial;
                                var maxfull = fullBeatDic.Max(kvp => kvp.Value);
                                if (maxfull == null || (DateTime.Now - maxfull).TotalSeconds > 10)
                                {//心跳10秒没有更新认为设备堵料
                                    wplog.FullMaterial = true;
                                }
                                else
                                {
                                    wplog.FullMaterial = false;
                                }
                                if (lackBeatMonitorflag != wplog.LackMaterial)
                                {//缺料心跳变化
                                    if (lackBeatDic.ContainsKey(wplog.LackMaterial))
                                    {
                                        lackBeatDic[wplog.LackMaterial] = DateTime.Now;
                                    }
                                    else
                                    {
                                        lackBeatDic.Add((bool)wplog.LackMaterial, DateTime.Now);
                                    }
                                }
                                lackBeatMonitorflag = wplog.LackMaterial;
                                var maxlack = lackBeatDic.Max(kvp => kvp.Value);
                                if (maxlack == null || (DateTime.Now - maxlack).TotalSeconds > 10)
                                {//心跳10秒没有更新认为设备堵料
                                    wplog.LackMaterial = true;
                                }
                                else
                                {
                                    wplog.LackMaterial = false;
                                }
                            }
                            AlertStatus = wplog.IsCloseAlert.ToString().ToUpper();
                            AlertStatus = wplog.IsMessage.ToString().ToUpper();
                            WorkPieceInfoManager.EquipmentMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            threadStatusMonitor.Threadstatue = 1;
                        }
                        threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            threadStatusMonitor.ThreadFrequency = 5000;
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            threadStatusMonitor.ThreadFrequency = _dataCaptureConfig.DataCaptureFrequency.Value;
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控设备采集 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控设备采集 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                threadStatusMonitor.ErrorMsg = "";
                threadStatusMonitor.Threadcode = DataCapturePointCode;
                threadStatusMonitor.Threadcname = DataCapturePointCname;
                threadStatusMonitor.Threadendtime = DateTime.Now;
                //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                threadStatusMonitor.Threadstatue = 0;
                threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                threadStatusMonitor.Remarks = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控设备采集 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控设备采集 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_07.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,154 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    ///  å‘Šè­¦ç›‘控(PLC的告警由设备监控来实现,本处用来从机床取数据)
    /// </summary>
    public class DataCaptureHandler_07 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_07 Instance = new DataCaptureHandler_07();
        public DataCaptureHandler_07()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            ThreadStatusMonitorMiddle threadStatusMonitor = new ThreadStatusMonitorMiddle();
            if (IsCaptureflag)
            {
                string value_07 = "";
                while (true)
                {
                    threadStatusMonitor.ErrorMsg = "";
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                        //if ((value_07.Equals("") && value.ToString().ToUpper().Equals("TRUE")) || !(value_07.ToUpper().Equals(value.ToString().ToUpper())))
                        //{//当告警标记与上次不同时
                        // //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                        // //业务代码
                        //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                        //    WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                        //    wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                        //    wplog.WorkingProcedure = WorkingProcedure;
                        //    wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                        //    wplog.Remarks = WorkingProcedure;
                        //    wplog.MonitoringPoint = DataCapturePointCode;
                        //    wplog.CreatedTime = DateTimeHelper.GetDateTime();
                        //    wplog.CreatedUserName = DataCapturePointCode;
                        //wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                        //wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                        //    wplog.IsDeleted = false;
                        //    wplog.IsCloseAlert = (bool)value;
                        //    foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                        //    {//获取是否告警,告警类型(20个)
                        //        try
                        //        {
                        //            var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                        //            //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                        //            var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                        //            if (set == null)
                        //            {
                        //                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                        //            }
                        //            set.SetValue(wplog, valuecol);//给动态字段赋值
                        //        }
                        //        catch (Exception setex)
                        //        {
                        //            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                        //        }
                        //    }
                        //    //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                        //    WorkPieceInfoManager.AlertMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                        //    threadStatusMonitor.Threadstatue = 1;
                        //}
                        //value_07 = value.ToString();
                        //threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        //if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        //{
                        //    threadStatusMonitor.ThreadFrequency = 5000;
                        //    Thread.Sleep(5000);
                        //}
                        //else
                        //{
                        //    threadStatusMonitor.ThreadFrequency = _dataCaptureConfig.DataCaptureFrequency.Value;
                        //    Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        //}
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序设备告警信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序设备告警信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                threadStatusMonitor.ErrorMsg = "";
                threadStatusMonitor.Threadcode = DataCapturePointCode;
                threadStatusMonitor.Threadcname = DataCapturePointCname;
                threadStatusMonitor.Threadendtime = DateTime.Now;
                //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                threadStatusMonitor.Threadstatue = 0;
                threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                threadStatusMonitor.Remarks = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序设备告警信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP0501.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,350 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP05 æ‰“标完成标记,读取工控机中打印二维码信息
    /// </summary>
    public class DataCaptureHandler_OP0501 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP0501 Instance = new DataCaptureHandler_OP0501();
        public DataCaptureHandler_OP0501()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                //// plc连接
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                //if (plcService == null)
                //{
                //    SystemValue.lbl_Alert_OP0501 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                //    return;
                //}
                //if (plcService != null && !plcService.IsConnected)
                //{
                //    plcService.Close();
                //    plcService.OpenService();
                //}
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        ////_dataCaptureConfig
                        //if (plcService == null || !plcService.IsConnected)
                        //{
                        //    SystemValue.lbl_Alert_OP0501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                        //    plcService.Close();
                        //    plcService.OpenService();
                        //    Thread.Sleep(100);
                        //    continue;
                        //}
                        //else
                        {
                            //var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            //if (SystemValue.value_OP0501.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                             //读码完成没啥业务操作,获取二维码,然后放到队列中
                                #region ä»Žå·¥æŽ§æœºèŽ·å–ç›¸å…³äºŒç»´ç 
                                var path = ConfigHelper.GetConfigString("WorkPeiceIDPath");//打码机打码二维码路径
                                //扫描共享目录并将新的文件扫描返回  ä¸€èˆ¬èŠ‚æ‹åœ¨15秒左右(可以确认一下)
                                //扫描修改时间在上次扫描时间之前10秒到当前时间的之间的文件
                                var dataTime = CommonManager.Instance.CheackPath(Environment.CurrentDirectory + "\\LastModifyTime\\OP05-LastScapTime.txt", 4,-10);
                                var scapEndTime = DateTimeHelper.GetDateTime();
                                var newFiles = FileHelper.DetectNewFilesCSV(path, 60, Convert.ToDateTime(dataTime), scapEndTime);
                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                    $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息开始:{dataTime}");
                                foreach (System.IO.FileInfo file in newFiles)
                                {
                                    threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                        $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,文件名:{file.FullName}");
                                    DataTable dt = null;
                                    dt = CSVHelper.ReadCSV(file.FullName);
                                    if (dt == null)
                                    {
                                        continue;
                                    }
                                    lock (SystemValue.lock5QRcodeList)
                                    {
                                        #region æ¸…过期缓存
                                        try
                                        {
                                            //清过期缓存
                                            var lstRemoveKey = SystemValue.QRcodeList
                                                .Where(p => p.Value < DateTimeHelper.GetDateTime().AddMinutes(-600))
                                                .Select(p => p.Key).ToList();
                                            if (lstRemoveKey.Count > 0)
                                            {
                                                foreach (var key in lstRemoveKey) SystemValue.QRcodeList.Remove(key);
                                                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"清除缓存数量:({lstRemoveKey.Count}) å‰©ä½™ç¼“存数量:({SystemValue.QRcodeList.Count})");
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "清除告警报文ID缓存错误!", ex);
                                        }
                                        #endregion
                                        ////筛选需要处理的二维码信息
                                        //DataRow[] drArr = dt.Select(" æ‰«ç ç»“æžœ='成功'");    //查询
                                        //DataTable dtNew = dt.Clone();
                                        //for (int i = 0; i < drArr.Length; i++)
                                        //{
                                        //    var now = DateTime.Now;
                                        //    var list = drArr[i]["时间"].ToString().Split(':');
                                        //    var d = new DateTime(now.Year, now.Month, now.Day, Convert.ToInt32(list[0]), Convert.ToInt32(list[1]), Convert.ToInt32(list[2]), DateTimeKind.Local);
                                        //    //and æ—¶é—´> '19:19:34:547'
                                        //    if (Convert.ToDateTime(DateTime.Now.ToShortDateString() + " " +drArr[i]["时间"]).TimeOfDay> Convert.ToDateTime(DateTime.Now.ToShortDateString() + " 19:19:34:547").TimeOfDay)
                                        //        dtNew.ImportRow(drArr[i]);
                                        //    //获取到的工件号异常
                                        //    SystemValue.lbl_Alert_OP0501 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位";
                                        //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                        //        $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位");
                                        //}
                                        DataTable newDt = new DataTable();
                                        var dates = file.Name.Split('-', '.');
                                        var date = string.Format("{0:D4}-{1:D2}-{2:D2}", int.Parse(dates[0]), int.Parse(dates[1]), int.Parse(dates[2]));
                                        if (DateTimeHelper.GetDateTime().Date != Convert.ToDateTime(date) && DateTimeHelper.GetDateTime().AddDays(-1).Date != Convert.ToDateTime(date))
                                        {
                                            continue;
                                        }
                                        DataRow[] filteredRows = new DataRow[dt.Rows.Count];
                                        if (dt.Rows.Count > 0)
                                        {
                                            int j = 0;
                                            var cache = DataCache.GetCache("OP501-LastTime");
                                            DateTime? lasttime = null;
                                            if (cache != null)
                                            {
                                                lasttime = Convert.ToDateTime(cache);
                                            }
                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                                $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,工件最新时间:{(cache==null?"无缓存":cache.ToString())}");
                                            for (int i = dt.Rows.Count - 1; i >= 0; i--)
                                            {
                                                string timeValue = " ";
                                                try
                                                {
                                                    timeValue = dt.Rows[i]["时间"].ToString();
                                                    string[] timeComponents = timeValue.Split(':');
                                                    string correctedTime = string.Format("{0:D2}:{1:D2}:{2:D2}", int.Parse(timeComponents[0]), int.Parse(timeComponents[1]), int.Parse(timeComponents[2]));
                                                    var newTime = date + " " + correctedTime;
                                                    dt.Rows[i]["时间"] = newTime;
                                                    var currrentTime = Convert.ToDateTime(dt.Rows[i]["时间"]);
                                                    if (cache == null)
                                                    {
                                                        if (j == 0)
                                                        {
                                                            if(currrentTime>DateTimeHelper.GetDateTime().AddHours(-10))
                                                            {
                                                                lasttime = currrentTime;
                                                            }
                                                        }
                                                        var oldTime = DateTime.Now.AddMinutes(-10);
                                                        if (currrentTime <= oldTime)
                                                        {
                                                            break;
                                                        }
                                                        filteredRows[j] = dt.Rows[i];
                                                    }
                                                    else
                                                    {
                                                        var cacheTime = Convert.ToDateTime(cache);
                                                        if (currrentTime <= cacheTime)
                                                        {
                                                            break;
                                                        }
                                                        filteredRows[j] = dt.Rows[i];
                                                    }
                                                    if (currrentTime > DateTimeHelper.GetDateTime().AddHours(-10))
                                                    {
                                                        if (lasttime != null && lasttime < currrentTime)
                                                        {
                                                            lasttime = currrentTime;
                                                        }
                                                    }
                                                    j++;
                                                }
                                                catch (Exception ex)
                                                {
                                                    SystemValue.lbl_Alert_OP0501 = $" {_dataCaptureConfig.WorkingProcedure}文件打标时间[{timeValue}]异常,请查看日志!";
                                                    Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}文件打标时间,出现异常:", ex);
                                                }
                                            }
                                            filteredRows = filteredRows.Where(item=>item!=null).ToArray();
                                            // è®¾ç½®ç¼“存值
                                            DateTime absoluteExpiration = DateTime.Now.AddDays(30);
                                            TimeSpan slidingExpiration = TimeSpan.FromMinutes(20);
                                            if (slidingExpiration == TimeSpan.Zero)
                                            {
                                                absoluteExpiration = DateTime.Now.AddDays(30);
                                            }
                                            else
                                            {
                                                absoluteExpiration = DateTime.MaxValue;
                                            }
                                            DataCache.SetCache("OP501-LastTime", lasttime, absoluteExpiration, slidingExpiration);
                                            if (filteredRows.Count() <= 0)
                                            {
                                                continue;
                                            }
                                            if (file.LastAccessTime < Convert.ToDateTime(dataTime)) continue;
                                            using (StreamWriter writer = new StreamWriter(Environment.CurrentDirectory + "\\OP05-LastScapTime.txt", false))
                                            {
                                                dataTime = file.LastAccessTime.ToString();
                                                writer.Write(dataTime);
                                            }
                                            Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"读取到{filteredRows.Count()}行数据,时间范围是{filteredRows[j-1]["时间"]}-{filteredRows[0]["时间"]}");
                                        }
                                        //// å·¥ä»¶å·ï¼ˆäºŒç»´ç å€¼ï¼‰
                                        //string WorkPieceID = dt.Rows[0][""].ToString();
                                        //if (WorkPieceID.Length != 22)
                                        //{
                                        //    //获取到的工件号异常
                                        //    SystemValue.lbl_Alert_HMI01 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位";
                                        //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                        //        $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位");
                                        //}
                                        //SystemValue.QRcodeList.Add("", DateTimeHelper.GetDateTime());//二维码添加到列表中
                                        WorkPieceLog wplog = new WorkPieceLog();
                                        wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                        wplog.WorkingProcedure = _dataCaptureConfig.WorkingProcedure; ;
                                        //wplog.EquipmentID = WorkingProcedure;
                                        wplog.Remarks = "cs";
                                        wplog.MonitoringPoint = DataCapturePointCode;
                                        wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                        wplog.CreatedUserName = DataCapturePointCode;
                                        wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                        wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                        wplog.IsDeleted = false;
                                        wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                                        wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                                        wplog.QualityState = 1;
                                        wplog.ProcessingDuration = 1;
                                        wplog.MachineToolState = 1;
                                        wplog.AlertType = 1;
                                        wplog.WorkPieceNumber = 1;
                                        wplog.WorkPieceOnlineTime = Convert.ToDateTime(dataTime);
                                        wplog.WorkPieceOfflineTime = Convert.ToDateTime(dataTime).AddHours(1);
                                        wplog.WorkPieceStartMachiningTime = Convert.ToDateTime(dataTime);
                                        wplog.WorkPieceEndMachiningTime = DateTime.Now.AddDays(7);
                                        wplog.KnifeEdgeNumber = 10;
                                        wplog.KnifeToolLife = 10;
                                        wplog.KnifeToolEarlyWarningLife = 3;
                                        wplog.KnifeToolSurplusLife = 10;
                                        foreach (var item in filteredRows)
                                        {
                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                                   $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,读取工件二维码:{item["打标内容"].ToString()}");
                                            if (item == null) break;
                                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                            wplog.WorkPieceID = item["打标内容"].ToString();
                                            wplog.OfflineTime = Convert.ToDateTime(dataTime);
                                            wplog.Remarks = item["时间"].ToString() + "|" + item["打标内容"].ToString() + "|" + item["打标内容"].ToString() + "|" + item["扫码等级"].ToString() + "|" + item["扫码结果"].ToString();
                                            WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), null, _dataCaptureConfig.IsFeedback);
                                            threadStatusMonitor.Threadstatue = 1;
                                        }
                                    }
                                }
                                #endregion
                                //var fileCount = ((iWare_SCADA_BusinessLogical.Utils.FindFiles)newFiles).;
                                //Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"扫描完成,共扫描到:({fileCount.Count()})个文件");
                            }
                            //SystemValue.value_OP0501 = value.ToString();
                        }
                    }
                    catch (Exception ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常,请查看日志!";
                        SystemValue.lbl_Alert_OP0501 = $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                    //线程多久执行一次(不包含业务处理时间)
                    if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                    {
                        Thread.Sleep(3000);
                    }
                    else
                    {
                        Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP0501 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置异常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP1002.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,196 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using log4net;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10测试完成标记 ï¼ˆOP10)
    /// </summary>
    public class DataCaptureHandler_OP1002: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1002 Instance = new DataCaptureHandler_OP1002();
        public DataCaptureHandler_OP1002()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1002 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now} *****0***");
                            Stopwatch stopwatch = Stopwatch.StartNew();
                            stopwatch.Start();
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            stopwatch.Stop();
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}*****01****{stopwatch.ElapsedMilliseconds}");
                            if (SystemValue.value_OP1002.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                             Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***1****");
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                wplog.QualityType = QualityType.Online.ToString();
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***2****{col.DataCaptureColumnTabelName} å€¼ {valuecol.ToString()??""}");
                                        if (col.DataCaptureColumnTabelName.Contains("Quality"))
                                        {//字段名包含Quality是认为是质量数据,都是转换成string
                                            set.SetValue(wplog, valuecol.ToString());//给动态字段赋值
                                        }
                                        else
                                        {
                                            set.SetValue(wplog, valuecol);//给动态字段赋值
                                        }
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                //#region å·¥æŽ§æœºè¯»å–质量信息
                                ////扫描共享目录并将新的文件扫描返回
                                //var newFiles = FileHelper.DetectNewFilesCSV("", 10, DateTimeHelper.GetDateTime(), DateTimeHelper.GetDateTime());
                                //foreach (System.IO.FileInfo file in newFiles)
                                //{
                                //    var datatable = CSVHelper.ReadCSV(file.FullName);
                                //}
                                //#endregion
                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***3****");
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            SystemValue.value_OP1002 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1002 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}质量信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}质量信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP1003.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,195 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10测试完成标记 ï¼ˆOP40)
    /// </summary>
    public class DataCaptureHandler_OP1003 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1003 Instance = new DataCaptureHandler_OP1003();
        public DataCaptureHandler_OP1003()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1003 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_OP1003 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now} *****0***");
                            Stopwatch stopwatch = Stopwatch.StartNew();
                            stopwatch.Start();
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            stopwatch.Stop();
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}*****01****{stopwatch.ElapsedMilliseconds}*****{value.ToString().ToUpper()}**");
                            if(value.ToString().ToUpper().Equals("TRUE"))
                            {
                            }
                            if (SystemValue.value_OP1003.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 {col.DataCaptureColumnTabelName}读取工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        if(col.DataCaptureColumnTabelName.Contains("Quality"))
                                        {//字段名包含Quality是认为是质量数据,都是转换成string
                                            set.SetValue(wplog, valuecol.ToString());//给动态字段赋值
                                        }
                                        else
                                        {
                                            set.SetValue(wplog, valuecol);//给动态字段赋值
                                        }
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 {col.DataCaptureColumnTabelName}读取工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                if (wplog.WorkPieceID.Length != 22)
                                {//获取到的工件号异常
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码数据时异常:");
                                    continue;
                                }
                                //#region å·¥æŽ§æœºè¯»å–质量信息
                                ////扫描共享目录并将新的文件扫描返回
                                //var newFiles = FileHelper.DetectNewFilesCSV("", 10, DateTimeHelper.GetDateTime(), DateTimeHelper.GetDateTime());
                                //foreach (System.IO.FileInfo file in newFiles)
                                //{
                                //    var datatable = CSVHelper.ReadCSV(file.FullName);
                                //}
                                //#endregion
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            SystemValue.value_OP1003 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1003 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1003 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}质量信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}质量信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1003 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP1004.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,184 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP10/OP40推出标记
    /// </summary>
    public class DataCaptureHandler_OP1004: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP1004 Instance = new DataCaptureHandler_OP1004();
        public DataCaptureHandler_OP1004()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1004 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_OP1004 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP1004.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码  1.取推出标记,2取推出原因(1:nok,2和3:spc,4:状态不明  5:二维码识别失败 ï¼‰ï¼Œ3 å–推出二维码
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                if (wplog.OP10Flag != "1" && wplog.OP10Flag != "2" && wplog.OP10Flag != "3")
                                {//获取到的工件号异常
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控读码标记 è¯»å–工件码数据{wplog.WorkPieceID}推出原因[{wplog.OP10Flag}]异常");
                                    wplog.Remarks = $"推出原因[{wplog.OP10Flag}]异常";
                                }
                                if (wplog.OP10Flag == "1")
                                {
                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序1监控读码标记 è¯»å–工件码数据{wplog.WorkPieceID}推出原因[{wplog.OP10Flag}]");
                                    WorkPieceInfoManager.WorkPiecePushOff(wplog, LogType.PLCOP10);
                                    threadStatusMonitor.Threadstatue = 1;
                                    wplog.Remarks = (wplog.Remarks ?? "") + $"推出原因[{wplog.OP10Flag}]   NOOK";
                                }
                                //else if (wplog.OP10Flag == 2 || wplog.OP10Flag == 3)
                                else
                                {
                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序23监控读码标记 è¯»å–工件码数据{wplog.WorkPieceID}推出原因[{wplog.OP10Flag}]");
                                    WorkPieceInfoManager.WorkPieceSPCPushOff(wplog, LogType.PLCOP10);
                                    wplog.Remarks = (wplog.Remarks ?? "") + $"推出原因[{wplog.OP10Flag}]   SPC";
                                    threadStatusMonitor.Threadstatue = 1;
                                }
                            }
                            SystemValue.value_OP1004 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP1004 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1004 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}推出信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}推出信息 æ•°æ®æ—¶å¼‚常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1004 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}推出信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}推出信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP3002.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,268 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// æµ‹é‡å®Œæˆæ ‡è®°
    /// </summary>
    public class DataCaptureHandler_OP3002: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3002 Instance = new DataCaptureHandler_OP3002();
        public DataCaptureHandler_OP3002()
        {
        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
        public override string DataCapturePointCode
        {
            get { return _dataCaptureConfig.DataCapturePointCode; }
        }
        public override string DataCapturePointCname
        {
            get { return _dataCaptureConfig.DataCapturePointCname; }
        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            ThreadStatusMonitorMiddle threadStatusMonitor = new ThreadStatusMonitorMiddle();
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    threadStatusMonitor.ErrorMsg = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //plcService.Close();
                    //plcService.OpenService();
                }
                string Station = "03";
                string value_02 = "";
                string path = ConfigHelper.GetConfigString("OP30QualityDataForStation");//打码机打码二维码路径
                if(string.IsNullOrEmpty(path))
                {
                    path = @"Z:\";
                }
                if(DataCapturePointCode.Contains("CH3"))
                {//工位3 æ¶¨æ–­åŠ›çŸ©
                    path = path + "kistler_crack";
                }
                else if (DataCapturePointCode.Contains("CH4"))
                {//工位4 é¢„拧紧力矩
                    path = path + "Bosch_Rexroth";
                }
                else if (DataCapturePointCode.Contains("CH5"))
                {//工位5 æ‹§ç´§åŠ›çŸ©
                    path = path + "Bosch_Rexroth";
                }
                else if (DataCapturePointCode.Contains("CH6"))
                {//工位6 è¡¬å¥—压装力矩
                    path = path + "kistler_bush";
                }
//                è´¨é‡ä¿¡æ¯ï¼šæ¶¨æ–­åŠ›çŸ©...    é¢„拧紧力矩 é¢„拧紧角度   ç»ˆæ‹§ç´§åŠ›çŸ© ç»ˆæ‹§ç´§è§’度
//kistler_crack æ¶¨æ–­åŠ›çŸ© å·¥ä½3 æ¶¨æ–­åŠ›çŸ©ï¼ˆY - Maximum)  è´¨é‡ç»“果(Result)
//kistler_bush åŽ‹è£…åŠ›çŸ© å·¥ä½6 è¡¬å¥—压装力矩(Y - Maximum)  è¡¬å¥—压装位移(Block X) è´¨é‡ç»“果(Result)
//Bosch_Rexroth /(Ch_0_1.csv / Ch_0_2.csv ä¸¤é€šé“ åŒæ—¶å–最新的(或者id对应?))  é¢„拧紧力矩工位4 é¢„拧紧力矩(T + Nm)  è´¨é‡ç»“果(结果)    ç›®å‰æ–‡ä»¶ä¸èƒ½è‡ªåŠ¨ç”Ÿæˆ åšä¸– åŠ›å£«ä¹æ‹§ç´§ç³»ç»Ÿ
//Bosch_Rexroth /(Ch_0_3.csv / Ch_0_4.csv ä¸¤é€šé“ åŒæ—¶å–最新的(或者id对应?)) ç»ˆæ‹§ç´§å·¥ä½5 æ‹§ç´§åŠ›çŸ©ï¼ˆT + Nm)  ç»ˆæ‹§ç´§è§’度
                while (true)
                {
                    threadStatusMonitor.ErrorMsg = "";
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (value_02.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  å¹¶ç»™é™æ€å˜é‡èµ‹å€¼ä¸º1
                             //业务代码
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                                wplog.WorkingProcedure = WorkingProcedure;
                                wplog.EquipmentID = _dataCaptureConfig.EquipmentID; ;
                                wplog.Remarks = WorkingProcedure;
                                wplog.MonitoringPoint = DataCapturePointCode;
                                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                                wplog.CreatedUserName = DataCapturePointCode;
                                wplog.UpdatedUserName = Environment.MachineName+"自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
                                wplog.QualityType = QualityType.Online.ToString();
                                ////扫描共享目录并将新的文件扫描返回  ä¸€èˆ¬èŠ‚æ‹åœ¨15秒左右(可以确认一下)
                                ////扫描修改时间在上次扫描时间之前10秒到当前时间的之间的文件
                                //var startTime = CommonManager.Instance.CheackPath(Environment.CurrentDirectory + $"\\LastModifyTime\\OP30Station{Station}-LastScapTime.txt", 6, -10);
                                //var endTime = DateTimeHelper.GetDateTime();
                                //var newFiles = FileHelper.DetectNewFilesCSV(path, 10, Convert.ToDateTime(startTime), endTime);
                                //foreach (System.IO.FileInfo file in newFiles)
                                //{
                                //}
                                foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                                {
                                    try
                                    {
                                        var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                        //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                        var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                        if (set == null)
                                        {
                                            Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控测量完成标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        }
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                    catch (Exception setex)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控测量完成标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    }
                                }
                                try
                                {
                                    if (WorkingProcedure.Equals("OP80"))
                                    {
                                        //OP80 éœ€è¦æ‰«ææ–‡ä»¶è¯»å–质量信息
                                        //扫描修改时间在上次扫描时间之前60秒到当前时间的之间的文件
                                        List<FileInfo> files = new List<FileInfo>();
                                        var newFiles = FileHelper.DetectNewFilesCSV(path, 60, DateTimeHelper.GetDateTime(), DateTimeHelper.GetDateTime().AddHours(1));
                                        foreach (var file in newFiles)
                                        {
                                            files.Add((FileInfo)file);
                                        }
                                        files = files.OrderByDescending(o => o.LastAccessTime).ToList();
                                        foreach (var file in files)
                                        {//取倒序匹配的文件名为工件号的文件
                                            if (file.Name.Contains(wplog.WorkPieceID))
                                            {
                                                var datatable = CSVHelper.ReadCSVList(file.FullName);
                                                List<string> rowFirst = new List<string>();
                                                List<string> rowSecond = new List<string>();
                                                if (datatable.Count == 2)
                                                {
                                                    rowFirst = datatable[0].Split(',').ToList();
                                                    rowSecond = datatable[1].Split(',').ToList();
                                                    //给相应质量数据赋值
                                                    wplog.OP80NewCode = rowSecond[1];
                                                    wplog.QualityOP80To1 = rowFirst[13];
                                                }
                                                else
                                                {
                                                    wplog.Remarks = (wplog.Remarks ?? "") + $"OP80下线完成读取文件{file.FullName}异常,行数不是2行";
                                                }
                                            }
                                            else
                                            {
                                                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"OP80下线完成读取文件{file.FullName}不是指定工件{wplog.WorkPieceID}");
                                            }
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}下线标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"OP80下线完成读取文件数据时异常,避免工序完成异常:", ex);
                                }
                                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                                WorkPieceInfoManager.QualityInfoComplete(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                threadStatusMonitor.Threadstatue = 1;
                            }
                            value_02 = value.ToString();
                        }
                        threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            threadStatusMonitor.ThreadFrequency = 5000;
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            threadStatusMonitor.ThreadFrequency = _dataCaptureConfig.DataCaptureFrequency.Value;
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}工序监控测量标记 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控测量标记数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                threadStatusMonitor.ErrorMsg = "";
                threadStatusMonitor.Threadcode = DataCapturePointCode;
                threadStatusMonitor.Threadcname = DataCapturePointCname;
                threadStatusMonitor.Threadendtime = DateTime.Now;
                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                threadStatusMonitor.Threadstatue = 0;
                threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                threadStatusMonitor.Remarks = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控测量标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控测量标记 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
在上述文件截断后对比
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_OP6002.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/HMIBeartBeatMonitor.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/HMI_WorkpieceReading.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/HMI_WorkpieceWrite.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Properties/AssemblyInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Properties/Resources.Designer.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Properties/Resources.resx DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/CSVHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/ComboBoxHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/ConfigHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/DataCache.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/DateTimeHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/EntityPropHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/EnumberHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FileDirectoryEnumerator.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FileHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FileOperationHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FindFiles.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/FolderHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/Log4Net/C_LogWriter.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/Log4Net/Log4netHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/LogTextHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/RandomHelper.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/Utils/RegexExtension.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/log4net_iWare.config DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/packages.config DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCapture.sln DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/App.config DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.Designer.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.resx DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormTest.Designer.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormTest.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormTest.resx DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Program.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/AssemblyInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/Resources.Designer.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/Resources.resx DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/Settings.Designer.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/Properties/Settings.settings DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/iWare_SCADA_DataCaptureV3.csproj DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/packages.config DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/App.Config DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/EnumberEntity.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Enums.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/ListItem.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MessageModel.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MiddleModel/ThreadStatusMonitorMiddle.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/MiddleModel/WorkPieceLogMiddle.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/PLCDataCapture/BasePlcParam.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/PLCDataCapture/HslCommunicationParam.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/Properties/AssemblyInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/SystemValue.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/DataCaptureColumnConfig.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/DataCaptureConfig.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/DbModel.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/EquipmentBaseInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/EquipmentCurrentMonitor.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/EquipmentWorkingLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/KnifeToolBaseInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/KnifeToolDataMonitor.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/QualityDataInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/SystemLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/WorkPieceInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/WorkPieceInfoLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel - 副本/WorkPieceLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/DataCaptureColumnConfig.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/DataCaptureConfig.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/DbModel.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/EquipmentBaseInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/EquipmentCurrentMonitor.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/EquipmentFailureCode.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/EquipmentWorkingLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolBaseInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolDataMonitor.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolEquipmentInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolEquipmentInfoLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolEquipmentMonitor.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/KnifeToolEquipmentUpdateLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/Model1.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/QualityDataInfoLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/SystemLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/ThreadStatusMonitor.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceInfoLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/WorkPieceProcess.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModel/v_get_equipment_alert.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/AlarmLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/CNCStatus.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/Count.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/CumulativeTime.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/CurrentToolNumber.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/FeedAndSpindle.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/Load.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/OEE.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/Postion.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/ProgramBlock.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/ProgramInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/SCModel.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/TableModelSC/TimeData.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/iWare_SCADA_Model.csproj DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/packages.config DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/DataCaptureColumnConfig.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/DataCaptureConfig.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/EquipmentBaseInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/EquipmentCurrentMonitor.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/EquipmentWorkingLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/Model1.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/Model2.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/Model3.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/QualityDataInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/QualityDataInfoLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/WorkPieceInfo.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/WorkPieceInfoLog.cs DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_Model/test/WorkPieceLog.cs iWara.SCADA.Code/.gitattributes iWara.SCADA.Code/.gitignore iWara.SCADA.Code/README.en.md iWara.SCADA.Code/README.md iWara.SCADA.Code/iWare.Wms.Application/Entity/LocationView.cs iWara.SCADA.Code/iWare.Wms.Application/Mapper/CustomMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Mapper/DataHandler.cs iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/AccessInterfaceService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/Dto/AccessWorPieceInfoOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/Dto/AccessWorkPieceInfoInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/IAccessInterfaceService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterface/Map/AccessInterfaceMap.cs iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterfaceLog/AccessInterfaceLogService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterfaceLog/Dto/AddAccessInterfaceLogInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/AccessInterfaceLog/IAccessInterfaceLogService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/DataCaptureColumnConfigService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/Dto/DataCaptureColumnConfigDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/Dto/DataCaptureColumnConfigInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/Dto/DataCaptureColumnConfigOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/IDataCaptureColumnConfigService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureColumnConfig/Map/DataCaptureColumnConfigMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/DataCaptureConfigService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/Dto/DataCaptureConfigDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/Dto/DataCaptureConfigInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/Dto/DataCaptureConfigOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/IDataCaptureConfigService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/DataCaptureConfig/Map/DataCaptureConfigMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/Dto/EquipmentBaseInfoDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/Dto/EquipmentBaseInfoInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/Dto/EquipmentBaseInfoOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/EquipmentBaseInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/IEquipmentBaseInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentBaseInfo/Map/EquipmentBaseInfoMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/Dto/EquipmentCurrentMonitorDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/Dto/EquipmentCurrentMonitorInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/Dto/EquipmentCurrentMonitorOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/EquipmentCurrentMonitorService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/IEquipmentCurrentMonitorService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentCurrentMonitor/Map/EquipmentCurrentMonitorMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/Dto/EquipmentStatusAnalyseDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/Dto/EquipmentStatusAnalyseInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/Dto/EquipmentStatusAnalyseOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/EquipmentStatusAnalyseService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/IEquipmentStatusAnalyseService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentStatusAnalyse/Map/EquipmentStatusAnalyseMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/Dto/EquipmentWorkingLogDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/Dto/EquipmentWorkingLogInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/Dto/EquipmentWorkingLogOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/EquipmentWorkingLogService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/EquipmentWorkingLog/IEquipmentWorkingLogService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/Dto/KnifeToolBaseInfoDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/Dto/KnifeToolBaseInfoInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/Dto/KnifeToolBaseInfoOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/IKnifeToolBaseInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/KnifeToolBaseInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolBaseInfo/Map/KnifeToolBaseInfoMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/Dto/KnifeToolDataMonitorDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/Dto/KnifeToolDataMonitorInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/Dto/KnifeToolDataMonitorOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/IKnifeToolDataMonitorService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/KnifeToolDataMonitorService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolDataMonitor/Map/KnifeToolDataMonitorMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/Dto/KnifeToolEquipmentInfoDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/Dto/KnifeToolEquipmentInfoInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/Dto/KnifeToolEquipmentInfoOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/IKnifeToolEquipmentInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/KnifeToolEquipmentInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentInfo/Map/KnifeToolEquipmentInfoMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/Dto/KnifeToolEquipmentMonitorDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/Dto/KnifeToolEquipmentMonitorInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/Dto/KnifeToolEquipmentMonitorOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/IKnifeToolEquipmentMonitorService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/KnifeToolEquipmentMonitorService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentMonitor/Map/KnifeToolEquipmentMonitorMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/Dto/KnifeToolEquipmentUpdateLogDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/Dto/KnifeToolEquipmentUpdateLogInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/Dto/KnifeToolEquipmentUpdateLogOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/IKnifeToolEquipmentUpdateLogService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/KnifeToolEquipmentUpdateLogService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolEquipmentUpdateLog/Map/KnifeToolEquipmentUpdateLogMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/Dto/KnifeToolUsageAnalysisDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/Dto/KnifeToolUsageAnalysisInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/Dto/KnifeToolUsageAnalysisOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/IKnifeToolUsageAnalysisService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/KnifeToolUsageAnalysisService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/KnifeToolUsageAnalysis/Map/KnifeToolUsageAnalysisMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Pda/Dto/WorkPieceByOP80NewCodeInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Pda/PdaService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/Dto/ProductionPlanInfoDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/Dto/ProductionPlanInfoInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/Dto/ProductionPlanInfoOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/IProductionPlanInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/Map/ProductionPlanInfoMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ProductionPlanInfo/ProductionPlanInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/Dto/QualityDataInfoDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/Dto/QualityDataInfoInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/Dto/QualityDataInfoOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/IQualityDataInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/QualityDataInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/Dto/ShiftInfoDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/Dto/ShiftInfoInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/Dto/ShiftInfoOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/IShiftInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/Map/ShiftInfoMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ShiftInfo/ShiftInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/App/Dto/AppInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/App/Dto/AppOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/App/ISysAppService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/App/SysAppService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/AuthService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/Dto/LoginInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/Dto/LoginOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/Dto/RegistInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Auth/IAuthService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Base/BaseService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Base/Dto/BaseDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Cache/ISysCacheService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Cache/SysCacheService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/ClickWord/ClickWordCaptcha.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/ClickWord/ClickWordCaptchaInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/ClickWord/ClickWordCaptchaResult.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/ClickWord/IClickWordCaptcha.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/General/GeneralCaptcha.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/General/GeneralCaptchaInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Captcha/General/IGeneralCaptcha.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/CodeGenConfigService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/CodeGenService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/CodeGenConfig.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/CodeGenInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/CodeGenModel.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/CodeGenOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/DatabaseOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/TableColumnOuput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/TableOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/Dto/XnCodeGenOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/ICodeGenConfigService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/CodeGen/ICodeGenService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Config/Dto/ConfigInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Config/ISysConfigService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Config/SysConfigService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/Dto/DictDataInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/Dto/DictDataOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/Dto/DictTreeOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/Dto/DictTypeInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/ISysDictDataService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/ISysDictTypeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/SysDictDataService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Dict/SysDictTypeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/Dto/EmpExtOrgPosOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/Dto/EmpOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/Dto/EmpOutput2.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/Dto/EmpPosOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/ISysEmpExtOrgPosService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/ISysEmpPosService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/ISysEmpService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/SysEmpExtOrgPosService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/SysEmpPosService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Emp/SysEmpService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Enum/Dto/EnumDataInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Enum/Dto/EnumDataOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Enum/ISysEnumDataService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Enum/SysEnumDataService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/File/Dto/FileInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/File/Dto/FileOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/File/ISysFileService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/File/SysFileService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormAddDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormEditDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormPageSearch.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/Dto/FormPublishDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/FormService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Forms/IFormService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Hubs/ChatHub.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Hubs/Dto/MessageinputDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Hubs/IChatClient.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/ContrasOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/ContrastLowCode.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/Front_CodeGenerate.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/GenEntity.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/Dto/LowCodeInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/GenEntityComparer.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/ILowCodeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/LowCode/LowCodeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/Dto/AntDesignTreeNode.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/Dto/MenuInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/Dto/MenuOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/Dto/MenuTreeOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/ISysMenuService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Menu/SysMenuService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Message/ISendMessageService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Message/SendMessageService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Monitor/IMachineService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Monitor/MachineService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/Dto/NoticeBase.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/Dto/NoticeDetailOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/Dto/NoticeInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/Dto/NoticeReceiveOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/ISysNoticeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/ISysNoticeUserService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/SysNoticeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Notice/SysNoticeUserService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/OnlineUser/Dto/OnlineUserOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/OnlineUser/ISysOnlineUserService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/OnlineUser/SysOnlineUserService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/Dto/OrgInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/Dto/OrgOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/Dto/OrgTreeNode.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/ISysOrgService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Org/SysOrgService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Pos/Dto/PosInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Pos/ISysPosService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Pos/SysPosService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/Dto/RoleInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/Dto/RoleOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/ISysRoleDataScopeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/ISysRoleMenuService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/ISysRoleService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/SysRoleDataScopeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/SysRoleMenuService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Role/SysRoleService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Timer/Dto/JobInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Timer/Dto/JobOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Timer/ISysTimerService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/Timer/SysTimerService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/CurrentUserInfo.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/Dto/AuthToken.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/Dto/AuthUserInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/Dto/UserInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/Dto/UserOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/ISysUserDataScopeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/ISysUserRoleService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/ISysUserService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/SysUserDataScopeService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/SysUserRoleService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/System/User/SysUserService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/Dto/ThreadStatusMonitorDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/Dto/ThreadStatusMonitorInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/Dto/ThreadStatusMonitorOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/IThreadStatusMonitorService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/Map/ThreadStatusMonitorMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/ThreadStatusMonitor/ThreadStatusMonitorService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/Dto/WmsAreaDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/Dto/WmsAreaInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/Dto/WmsAreaOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/IWmsAreaService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/Map/WmsAreaMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsArea/WmsAreaService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/IWmsContainerService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/Map/WmsContainerMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsContainer/WmsContainerService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/Dto/WmsMaterialOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/IWmsMaterialService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/Map/WmsMaterialMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/IWmsPlaceService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/Map/WmsPlaceMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsPlace/WmsPlaceService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsBase/WmsSeed/WmsSeed.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/Dto/View_AccessDetailsDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/Dto/View_AccessDetailsInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/Dto/View_AccessDetailsOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/IView_AccessDetailsService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/Map/View_AccessDetailsMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsAccessDetails/View_AccessDetailsService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsIndex/Dto/IndexInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsIndex/Dto/IndexOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsIndex/IIndexCountService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsIndex/IndexCountService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsLocationView/Dto/LocationViewInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsLocationView/Dto/LocationViewOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsLocationView/IlocationViewService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsCount/WmsLocationView/locationViewService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/Dto/PadBindEntranceInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/Dto/PadWmsMaterialContainerDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/Dto/PdaBindEntranceDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/Dto/PdaBindEntranceOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/Entrance/PdaBindEntranceService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/ExWare/Dto/ExWarehouseInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WmsPda/ExWare/ExWarePDAService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/BindEntranceService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/Dto/BindEntranceDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/Dto/BindEntranceInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/Dto/BindEntranceOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/Dto/WmsMaterialContainerDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsBindEntrance/IBindEntranceService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Dto/ExWarehouseInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Dto/WmsMaterialStockDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Dto/WmsMaterialStockInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Dto/WmsMaterialStockOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/ExWarehouseService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/IExWarehouseService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsExWarehouse/Map/WmsMaterialStockMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/Dto/WmsTaskDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/Dto/WmsTaskInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/Dto/WmsTaskOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/IWmsTaskService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/Map/WmsTaskMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/Wmsjob/WmsTask/WmsTaskService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/Dto/WorkPieceInfoDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/Dto/WorkPieceInfoInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/Dto/WorkPieceInfoOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/IWorkPieceInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/Map/WorkPieceInfoMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceInfo/WorkPieceInfoService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/Dto/WorkPieceOutboundDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/Dto/WorkPieceOutboundInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/Dto/WorkPieceOutboundOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/IWorkPieceOutboundService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/Map/WorkPieceOutboundMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceOutbound/WorkPieceOutboundService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Dto/WorkPieceProcessDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Dto/WorkPieceProcessInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Dto/WorkPieceProcessOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/IWorkPieceProcessService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/Map/WorkPieceProcessMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/WorkPieceProcessService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/Dto/YieldAnalysisDto.cs iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/Dto/YieldAnalysisInput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/Dto/YieldAnalysisOutput.cs iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/IYieldAnalysisService.cs iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/Map/YieldAnalysisMapper.cs iWara.SCADA.Code/iWare.Wms.Application/Service/YieldAnalysis/YieldAnalysisService.cs iWara.SCADA.Code/iWare.Wms.Application/SpareTimes/SpareTimeDemo.cs iWara.SCADA.Code/iWare.Wms.Application/Startup.cs iWara.SCADA.Code/iWare.Wms.Application/applicationsettings.json iWara.SCADA.Code/iWare.Wms.Application/iWare.Wms.Application.csproj iWara.SCADA.Code/iWare.Wms.Application/iWare.Wms.Application.xml iWara.SCADA.Code/iWare.Wms.Core/Const/ClaimConst.cs iWara.SCADA.Code/iWare.Wms.Core/Const/CommonConst.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/Access/AccessInterfaceLog.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/DEntityBase.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/IDataPermissions.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/DataCaptureColumnConfig.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/DataCaptureConfig.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/EquipmentCurrentMonitor.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/EquipmentStatusAnalyse.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/EquipmentWorkingLog.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/Equipmentbaseinfo.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/InfoAirport.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/KnifeToolBaseInfo.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/KnifeToolDataMonitor.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/KnifeToolEquipmentMonitor.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/KnifeToolUsageAnalysis.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/ProductionPlanInfo.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/QualityDataInfo.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/QualityDataInfoLog.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/ShiftInfo.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/SystemLog.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/TeamsAndGroups.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/ThreadStatusMonitor.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/V_GetEquipmentAlert.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceInfo.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceInfoLog.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceLog.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceOutBound.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/WorkPieceProcess.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/SCADA/YieldAnalysis.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysApp.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysCodeGen.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysCodeGenConfig.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysCodeModular.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysConfig.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysDictData.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysDictType.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysEmp.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysEmpExtOrgPos.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysEmpPos.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysFile.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysForm.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLogAudit.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLogEx.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLogOp.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLogVis.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLowCode.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysLowCodeDataBase.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysMenu.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysNotice.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysNoticeUser.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysOnlineUser.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysOrg.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysPos.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysRole.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysRoleDataScope.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysRoleMenu.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysTimer.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysUser.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysUserDataScope.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/System/SysUserRole.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsBase/WmsArea.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsBase/WmsContainer.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsBase/WmsMaterial.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsBase/WmsPlace.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsCount/WmsMaterialStock.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsCount/v_AccessDetails.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsJob/WmsContainerPlace.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsJob/WmsMaterialContainer.cs iWara.SCADA.Code/iWare.Wms.Core/Entity/WmsJob/WmsTask.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/AdminType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/CommonStatus.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/DataOpType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/DataScopeType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/EnumAuditStatus.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/EnumEquipmentCurrentState.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/EnumQualityErrorInfoType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/EnumQuantityState.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/Enums.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/ErrorCode.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/FileLocation.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/FormDesignType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/Gender.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/HttpMethod.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/HttpStatusCode.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/LoginType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/MenuOpenType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/MenuType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/MenuWeight.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/MessageType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/NoticeStatus.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/NoticeType.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/NoticeUserStatus.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/QueryTypeEnum.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/RequestTypeEnum.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/RoleTypeEnum.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/WmsAreaEnum.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/WmsContainerEnum.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/WmsMaterialEnum.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/WmsTaskEnum.cs iWara.SCADA.Code/iWare.Wms.Core/Enum/YesOrNot.cs iWara.SCADA.Code/iWare.Wms.Core/EventSubscriber/LogEventSubscriber.cs iWara.SCADA.Code/iWare.Wms.Core/Extension/CsRedisExtensions.cs iWara.SCADA.Code/iWare.Wms.Core/Extension/DictionaryExtensions.cs iWara.SCADA.Code/iWare.Wms.Core/Extension/FakeDeleteExtensions.cs iWara.SCADA.Code/iWare.Wms.Core/Extension/LambdaExpressionBuilder.cs iWara.SCADA.Code/iWare.Wms.Core/Extension/NewtonsoftJsonSerializerProvider .cs iWara.SCADA.Code/iWare.Wms.Core/Extension/QueryableExstenstions.cs iWara.SCADA.Code/iWare.Wms.Core/Filter/DisableOpLogAttribute.cs iWara.SCADA.Code/iWare.Wms.Core/Filter/LogExceptionHandler.cs iWara.SCADA.Code/iWare.Wms.Core/Filter/RequestActionFilter.cs iWara.SCADA.Code/iWare.Wms.Core/Options/RefreshTokenSettingOptions.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysAppSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysConfigSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysDictDataSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysDictTypeSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysEmpExtOrgPos.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysEmpPosSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysEmpSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysMenuSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysOrgSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysPosSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysRoleSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysTimerSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysUserDataScopeSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysUserRoleSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/SysUserSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsAreaSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsContainerPlaceSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsContainerSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsMaterialContainerSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsMaterialSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsMaterialStockSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsPlaceSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/SeedData/WmsTaskSeedData.cs iWara.SCADA.Code/iWare.Wms.Core/Service/BaseId.cs iWara.SCADA.Code/iWare.Wms.Core/Util/CodeGenUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/DataCompareUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/DataConvertUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/DateTimeOffSetToDateTime.cs iWara.SCADA.Code/iWare.Wms.Core/Util/DictCacheUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/EntityPropHelper.cs iWara.SCADA.Code/iWare.Wms.Core/Util/EnumEntity.cs iWara.SCADA.Code/iWare.Wms.Core/Util/EnumUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/ExcelUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/FileUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/IPUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/JsonUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Dto/Front_FileDto.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Enum/FieldType.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/EssentialFactor.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Factor/DateFactor.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Factor/DecimalFactor.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Factor/Interface/IFactor.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Factor/TextFactor.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Att/FrontTypeAttribute.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Att/FrontTypeBindDatabaseAttribute.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Code/AutoCode_Dynamic.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Code/AutoCode_Front.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Code/AutoCode_FrontModel.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Code/FileUrl_Code.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Alert.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Batch.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Button.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Card.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Cascader.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Checkbox.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Date.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Divider.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Editor.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Grid.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Html.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Input.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Number.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Radio.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Rate.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Select.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_SelectInputList.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Slider.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Switch.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Table.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Tabs.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Text.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Textarea.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_Time.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_TreeSelect.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_UploadFile.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Front_UploadImg.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Interface/IFront.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Interface/IFrontDynamic.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Interface/IFrontDynamicOptions.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Interface/IFrontLayout.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Base.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Config.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Convert.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Dynamic.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Model.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Option.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Rule.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/Front_Tree_Option.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/NotFoundFrontException.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/Front/Model/ViewDynamic.cs iWara.SCADA.Code/iWare.Wms.Core/Util/LowCode/SysFileServiceEx.cs iWara.SCADA.Code/iWare.Wms.Core/Util/MachineUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/PageInputOrder.cs iWara.SCADA.Code/iWare.Wms.Core/Util/PagedUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/ReflectionUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/ShellUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/StringUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/TreeBuildUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/TypeUtil.cs iWara.SCADA.Code/iWare.Wms.Core/Util/XnInputBase.cs iWara.SCADA.Code/iWare.Wms.Core/Util/XnPageResult.cs iWara.SCADA.Code/iWare.Wms.Core/Util/XnRestfulResultProvider.cs iWara.SCADA.Code/iWare.Wms.Core/applicationconfig.json iWara.SCADA.Code/iWare.Wms.Core/iWare.Wms.Core.csproj iWara.SCADA.Code/iWare.Wms.Database.Migrations/Migrations/20240112013535_v1.0.1.Designer.cs iWara.SCADA.Code/iWare.Wms.Database.Migrations/Migrations/20240112013535_v1.0.1.cs iWara.SCADA.Code/iWare.Wms.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs iWara.SCADA.Code/iWare.Wms.Database.Migrations/iWare.Wms.Database.Migrations.csproj iWara.SCADA.Code/iWare.Wms.Database.Migrations/note/note.txt iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/DbContexts/DefaultDbContext.cs iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/DbContexts/MultiTenantDbContext.cs iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/DbContexts/SCADAGatewayDbContext.cs iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/Startup.cs iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/dbsettings.json iWara.SCADA.Code/iWare.Wms.EntityFramework.Core/iWare.Wms.EntityFramework.Core.csproj iWara.SCADA.Code/iWare.Wms.Web.Core/Handlers/JwtHandler.cs iWara.SCADA.Code/iWare.Wms.Web.Core/ServiceExtension/BStyleServiceExtension.cs iWara.SCADA.Code/iWare.Wms.Web.Core/ServiceExtension/SnowflakeIdServiceExtension.cs iWara.SCADA.Code/iWare.Wms.Web.Core/Startup.cs iWara.SCADA.Code/iWare.Wms.Web.Core/iWare.Wms.Web.Core.csproj iWara.SCADA.Code/iWare.Wms.Web.Entry/.config/dotnet-tools.json iWara.SCADA.Code/iWare.Wms.Web.Entry/Controllers/HomeController.cs iWara.SCADA.Code/iWare.Wms.Web.Entry/Program.cs iWara.SCADA.Code/iWare.Wms.Web.Entry/Properties/launchSettings.json iWara.SCADA.Code/iWare.Wms.Web.Entry/Views/Home/Index.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/Views/Shared/_Layout.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/Views/_ViewImports.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/Views/_ViewStart.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/appsettings.json iWara.SCADA.Code/iWare.Wms.Web.Entry/iWare.Wms.Web.Entry.csproj iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Font/font1559.ttf iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/1.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/2.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/3.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/4.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/5.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/6.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/7.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Captcha/Image/8.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Image/logo.png iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template.zip iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Dto.cs.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Dto.cs.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Entity.cs.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Entity.cs.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/IService.cs.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/IService.cs.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Input.cs.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Input.cs.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Manage.js.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Manage.js.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Mapper.cs.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Mapper.cs.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Output.cs.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Output.cs.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Service.cs.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/Service.cs.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/addForm.vue.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/addForm.vue.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/editForm.vue.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/editForm.vue.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/index.vue.cshtml iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Template/index.vue.vm iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/273667564548165.jpeg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290520762908741.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290540885852229.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290541680373829.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290541696553029.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290541720457285.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543139135557.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543159849029.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543276712005.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543306960965.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543630598213.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290543643689029.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290544533905477.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/290544557092933.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/351604299395141.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/352893017190469.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/Upload/Default/352918594232389.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/avatar2.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/app.7633af46.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/app.7633af46.css.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/chunk-b7a16696.677134ab.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/chunk-b7a16696.677134ab.css.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/chunk-vendors.4659697d.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/chunk-vendors.4659697d.css.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/fail.8d6df989.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/fail.8d6df989.css.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/site.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/theme-colors-ef7df4e0.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/user.fa7ae686.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/css/user.fa7ae686.css.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/favicon.ico iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/bg.110420cf.png iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/logo.a0cbaad2.png iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/map.3425b845.jpg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/map.ae82c867.png iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/map2.48889afd.png iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/img/welcome.164ddad4.png iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/index.html iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/app.413ecdbc.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/app.413ecdbc.js.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/chunk-b7a16696.e8717d8b.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/chunk-b7a16696.e8717d8b.js.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/chunk-vendors.c9111d8d.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/chunk-vendors.c9111d8d.js.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/fail.c1daacfd.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/fail.c1daacfd.js.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/site.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/user.6ca40864.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/js/user.6ca40864.js.gz iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/LICENSE iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/LICENSE.md iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/dist/additional-methods.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/dist/additional-methods.min.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/dist/jquery.validate.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery/LICENSE.txt iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery/dist/jquery.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery/dist/jquery.min.js iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/lib/jquery/dist/jquery.min.map iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/loading.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/loading.html iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/option2/html_code_segment.html iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/option2/loading.css iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/loading/option2/loading.svg iWara.SCADA.Code/iWare.Wms.Web.Entry/wwwroot/logo.png iWara.SCADA.Code/iWare.Wms.sln iwara-scada-web/.browserslistrc iwara-scada-web/.editorconfig iwara-scada-web/.env iwara-scada-web/.env.development iwara-scada-web/.env.preview iwara-scada-web/.eslintrc.js iwara-scada-web/.gitignore iwara-scada-web/.prettierrc iwara-scada-web/.travis.yml iwara-scada-web/Dockerfile iwara-scada-web/LICENSE iwara-scada-web/WMS基准版前端文档.docx iwara-scada-web/babel.config.js iwara-scada-web/config/plugin.config.js iwara-scada-web/docker/docker-compose.yml iwara-scada-web/docker/nginx/Dockerfile iwara-scada-web/docker/nginx/nginx.conf iwara-scada-web/docker/nginx/vhost/default.conf iwara-scada-web/jest.config.js iwara-scada-web/jsconfig.json iwara-scada-web/package-lock.json iwara-scada-web/package.json iwara-scada-web/postcss.config.js iwara-scada-web/public/avatar2.jpg iwara-scada-web/public/config.js iwara-scada-web/public/index.html iwara-scada-web/public/loading/loading.css iwara-scada-web/public/loading/loading.html iwara-scada-web/public/loading/option2/html_code_segment.html iwara-scada-web/public/loading/option2/loading.css iwara-scada-web/public/loading/option2/loading.svg iwara-scada-web/public/logo.png iwara-scada-web/src/App.vue iwara-scada-web/src/api/modular/gen/codeGenerateManage.js iwara-scada-web/src/api/modular/gen/lowCodeManage.js iwara-scada-web/src/api/modular/gen/sysCodeGenerateConfigManage.js iwara-scada-web/src/api/modular/main/BasicDataMaintenance.js iwara-scada-web/src/api/modular/main/BindEntranceManage.js iwara-scada-web/src/api/modular/main/DataCaptureColumnConfigManage.js iwara-scada-web/src/api/modular/main/DataCaptureConfigManage.js iwara-scada-web/src/api/modular/main/EquipmentBaseInfoManage.js iwara-scada-web/src/api/modular/main/EquipmentCurrentMonitorManage.js iwara-scada-web/src/api/modular/main/EquipmentStatusAnalyseManage.js iwara-scada-web/src/api/modular/main/EquipmentWorkingLogManage.js iwara-scada-web/src/api/modular/main/ExWarehouseManage.js iwara-scada-web/src/api/modular/main/KnifeToolBaseInfoManage.js iwara-scada-web/src/api/modular/main/KnifeToolDataMonitorManage.js iwara-scada-web/src/api/modular/main/KnifeToolEquipmentUpdateLog.js iwara-scada-web/src/api/modular/main/KnifeToolUsageAnalysisManage.js iwara-scada-web/src/api/modular/main/LocationViewManage.js iwara-scada-web/src/api/modular/main/QualityDataInfoManage.js iwara-scada-web/src/api/modular/main/README.md iwara-scada-web/src/api/modular/main/ShiftManage.js iwara-scada-web/src/api/modular/main/SysTenantManage.js iwara-scada-web/src/api/modular/main/ThreadStatusMonitorManage.js iwara-scada-web/src/api/modular/main/View_AccessDetailsManage.js iwara-scada-web/src/api/modular/main/WmsAreaManage.js iwara-scada-web/src/api/modular/main/WmsContainerManage.js iwara-scada-web/src/api/modular/main/WmsMaterialManage.js iwara-scada-web/src/api/modular/main/WmsPlaceManage.js iwara-scada-web/src/api/modular/main/WmsTaskManage.js iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js iwara-scada-web/src/api/modular/main/WorkPieceOutboundManage.js iwara-scada-web/src/api/modular/main/WorkPieceProcessManage.js iwara-scada-web/src/api/modular/main/YieldAnalysisManage.js iwara-scada-web/src/api/modular/main/YieldMaintenanceManage.js iwara-scada-web/src/api/modular/main/ceManage.js iwara-scada-web/src/api/modular/main/cesManage.js iwara-scada-web/src/api/modular/system/README.md iwara-scada-web/src/api/modular/system/appManage.js iwara-scada-web/src/api/modular/system/auditorworkflowManage.js iwara-scada-web/src/api/modular/system/configManage.js iwara-scada-web/src/api/modular/system/dictDataManage.js iwara-scada-web/src/api/modular/system/dictManage.js iwara-scada-web/src/api/modular/system/emailManage.js iwara-scada-web/src/api/modular/system/enumManage.js iwara-scada-web/src/api/modular/system/fileManage.js iwara-scada-web/src/api/modular/system/formDesignmanage.js iwara-scada-web/src/api/modular/system/homeManage.js iwara-scada-web/src/api/modular/system/logManage.js iwara-scada-web/src/api/modular/system/loginManage.js iwara-scada-web/src/api/modular/system/machineManage.js iwara-scada-web/src/api/modular/system/menuManage.js iwara-scada-web/src/api/modular/system/noticeManage.js iwara-scada-web/src/api/modular/system/noticeReceivedManage.js iwara-scada-web/src/api/modular/system/onlineUserManage.js iwara-scada-web/src/api/modular/system/orgManage.js iwara-scada-web/src/api/modular/system/posManage.js iwara-scada-web/src/api/modular/system/roleManage.js iwara-scada-web/src/api/modular/system/smsManage.js iwara-scada-web/src/api/modular/system/tenantManage.js iwara-scada-web/src/api/modular/system/timersManage.js iwara-scada-web/src/api/modular/system/userManage.js iwara-scada-web/src/api/modular/system/workflowManage.js iwara-scada-web/src/assets/icons/bx-analyse.svg iwara-scada-web/src/assets/login_bk.png iwara-scada-web/src/assets/logo.png iwara-scada-web/src/assets/logo.svg iwara-scada-web/src/assets/logo2.jpg iwara-scada-web/src/assets/notice.png iwara-scada-web/src/assets/welcome.png iwara-scada-web/src/assets/welcome/blue.svg iwara-scada-web/src/assets/welcome/inner.png iwara-scada-web/src/components/ArticleListContent/ArticleListContent.vue iwara-scada-web/src/components/ArticleListContent/index.js iwara-scada-web/src/components/AvatarList/Item.vue iwara-scada-web/src/components/AvatarList/List.vue iwara-scada-web/src/components/AvatarList/index.js iwara-scada-web/src/components/AvatarList/index.less iwara-scada-web/src/components/AvatarList/index.md iwara-scada-web/src/components/Charts/Bar.vue iwara-scada-web/src/components/Charts/ChartCard.vue iwara-scada-web/src/components/Charts/Liquid.vue iwara-scada-web/src/components/Charts/MiniArea.vue iwara-scada-web/src/components/Charts/MiniBar.vue iwara-scada-web/src/components/Charts/MiniProgress.vue iwara-scada-web/src/components/Charts/MiniSmoothArea.vue iwara-scada-web/src/components/Charts/Radar.vue iwara-scada-web/src/components/Charts/RankList.vue iwara-scada-web/src/components/Charts/TagCloud.vue iwara-scada-web/src/components/Charts/TransferBar.vue iwara-scada-web/src/components/Charts/Trend.vue iwara-scada-web/src/components/Charts/chart.less iwara-scada-web/src/components/Charts/smooth.area.less iwara-scada-web/src/components/ChooseSiteModal.vue iwara-scada-web/src/components/CountDown/CountDown.vue iwara-scada-web/src/components/CountDown/index.js iwara-scada-web/src/components/CountDown/index.md iwara-scada-web/src/components/DepartmentSelect/DepartmentSelect.vue iwara-scada-web/src/components/DepartmentSelect/index.js iwara-scada-web/src/components/DescriptionList/DescriptionList.vue iwara-scada-web/src/components/DescriptionList/index.js iwara-scada-web/src/components/Dialog.js iwara-scada-web/src/components/Editor/QuillEditor.vue iwara-scada-web/src/components/Editor/WangEditor.vue iwara-scada-web/src/components/Ellipsis/Ellipsis.vue iwara-scada-web/src/components/Ellipsis/index.js iwara-scada-web/src/components/Ellipsis/index.md iwara-scada-web/src/components/Exception/ExceptionPage.vue iwara-scada-web/src/components/Exception/index.js iwara-scada-web/src/components/Exception/type.js iwara-scada-web/src/components/FooterToolbar/FooterToolBar.vue iwara-scada-web/src/components/FooterToolbar/index.js iwara-scada-web/src/components/FooterToolbar/index.less iwara-scada-web/src/components/FooterToolbar/index.md iwara-scada-web/src/components/GlobalFooter/GlobalFooter.vue iwara-scada-web/src/components/GlobalFooter/index.js iwara-scada-web/src/components/GlobalHeader/GlobalHeader.vue iwara-scada-web/src/components/GlobalHeader/index.js iwara-scada-web/src/components/IconSelector/IconSelector.vue iwara-scada-web/src/components/IconSelector/README.md iwara-scada-web/src/components/IconSelector/icons.js iwara-scada-web/src/components/IconSelector/index.js iwara-scada-web/src/components/Loading.js iwara-scada-web/src/components/Menu/SideMenu.vue iwara-scada-web/src/components/Menu/index.js iwara-scada-web/src/components/Menu/menu.js iwara-scada-web/src/components/Menu/menu.render.js iwara-scada-web/src/components/MultiTab/MultiTab.vue iwara-scada-web/src/components/MultiTab/events.js iwara-scada-web/src/components/MultiTab/index.js iwara-scada-web/src/components/MultiTab/index.less iwara-scada-web/src/components/NProgress/nprogress.less iwara-scada-web/src/components/NoticeIcon/NoticeIcon.vue iwara-scada-web/src/components/NoticeIcon/index.js iwara-scada-web/src/components/NumberInfo/NumberInfo.vue iwara-scada-web/src/components/NumberInfo/index.js iwara-scada-web/src/components/NumberInfo/index.less iwara-scada-web/src/components/NumberInfo/index.md iwara-scada-web/src/components/PageHeader/PageHeader.vue iwara-scada-web/src/components/PageHeader/index.js iwara-scada-web/src/components/PageLoading/index.jsx iwara-scada-web/src/components/Result/Result.vue iwara-scada-web/src/components/Result/index.js iwara-scada-web/src/components/Search/GlobalSearch.jsx iwara-scada-web/src/components/Search/index.less iwara-scada-web/src/components/SettingDrawer/SettingDrawer.vue iwara-scada-web/src/components/SettingDrawer/SettingItem.vue iwara-scada-web/src/components/SettingDrawer/index.js iwara-scada-web/src/components/SettingDrawer/settingConfig.js iwara-scada-web/src/components/SettingDrawer/themeColor.js iwara-scada-web/src/components/StandardFormRow/StandardFormRow.vue iwara-scada-web/src/components/StandardFormRow/index.js iwara-scada-web/src/components/Table/README.md iwara-scada-web/src/components/Table/columnSetting.vue iwara-scada-web/src/components/Table/index.js iwara-scada-web/src/components/Table/index.less iwara-scada-web/src/components/TagSelect/TagSelectOption.jsx iwara-scada-web/src/components/TagSelect/index.jsx iwara-scada-web/src/components/TextArea/index.jsx iwara-scada-web/src/components/TextArea/style.less iwara-scada-web/src/components/Tree/Tree.jsx iwara-scada-web/src/components/Trend/Trend.vue iwara-scada-web/src/components/Trend/index.js iwara-scada-web/src/components/Trend/index.less iwara-scada-web/src/components/Trend/index.md iwara-scada-web/src/components/UserSelect/UserSelect.vue iwara-scada-web/src/components/UserSelect/index.js iwara-scada-web/src/components/_util/util.js iwara-scada-web/src/components/global.less iwara-scada-web/src/components/index.js iwara-scada-web/src/components/index.less iwara-scada-web/src/components/tools/Breadcrumb.vue iwara-scada-web/src/components/tools/DetailList.vue iwara-scada-web/src/components/tools/HeadInfo.vue iwara-scada-web/src/components/tools/LangSelect.vue iwara-scada-web/src/components/tools/Logo.vue iwara-scada-web/src/components/tools/TwoStepCaptcha.vue iwara-scada-web/src/components/tools/UserMenu.vue iwara-scada-web/src/components/tools/index.js iwara-scada-web/src/components/verifition/Verify.vue iwara-scada-web/src/components/verifition/Verify/VerifyPoints.vue iwara-scada-web/src/components/verifition/Verify/VerifySlide.vue iwara-scada-web/src/components/verifition/utils/ase.js iwara-scada-web/src/components/verifition/utils/axios.js iwara-scada-web/src/components/verifition/utils/util.js iwara-scada-web/src/components/xnComponents/XCard.vue iwara-scada-web/src/config/defaultSettings.js iwara-scada-web/src/config/router.config.js iwara-scada-web/src/core/bootstrap.js iwara-scada-web/src/core/directives/action.js iwara-scada-web/src/core/icons.js iwara-scada-web/src/core/lazy_lib/components_use.js iwara-scada-web/src/core/lazy_use.js iwara-scada-web/src/core/use.js iwara-scada-web/src/layouts/BasicLayout.vue iwara-scada-web/src/layouts/BlankLayout.vue iwara-scada-web/src/layouts/Iframe.vue iwara-scada-web/src/layouts/PageView.vue iwara-scada-web/src/layouts/RouteView.vue iwara-scada-web/src/layouts/UserLayout.vue iwara-scada-web/src/layouts/index.js iwara-scada-web/src/main.js iwara-scada-web/src/mock/index.js iwara-scada-web/src/mock/services/article.js iwara-scada-web/src/mock/services/auth.js iwara-scada-web/src/mock/services/manage.js iwara-scada-web/src/mock/services/other.js iwara-scada-web/src/mock/services/tagCloud.js iwara-scada-web/src/mock/services/user.js iwara-scada-web/src/mock/util.js iwara-scada-web/src/permission.js iwara-scada-web/src/router/generator-routers.js iwara-scada-web/src/router/index.js iwara-scada-web/src/store/getters.js iwara-scada-web/src/store/index.js iwara-scada-web/src/store/modules/app.js iwara-scada-web/src/store/modules/async-router.js iwara-scada-web/src/store/modules/permission.js iwara-scada-web/src/store/modules/user.js iwara-scada-web/src/store/mutation-types.js iwara-scada-web/src/utils/applocation.js iwara-scada-web/src/utils/axios.js iwara-scada-web/src/utils/device.js iwara-scada-web/src/utils/domUtil.js iwara-scada-web/src/utils/filter.js iwara-scada-web/src/utils/helper/permission.js iwara-scada-web/src/utils/messagesend.js iwara-scada-web/src/utils/mixin.js iwara-scada-web/src/utils/permissions.js iwara-scada-web/src/utils/request.js iwara-scada-web/src/utils/routeConvert.js iwara-scada-web/src/utils/socket.js iwara-scada-web/src/utils/util.js iwara-scada-web/src/utils/utils.less iwara-scada-web/src/views/404.vue iwara-scada-web/src/views/Home.vue iwara-scada-web/src/views/gen/codeGenerate/addForm.vue iwara-scada-web/src/views/gen/codeGenerate/assembly.vue iwara-scada-web/src/views/gen/codeGenerate/editForm.vue iwara-scada-web/src/views/gen/codeGenerate/fkModal.vue iwara-scada-web/src/views/gen/codeGenerate/index.vue iwara-scada-web/src/views/gen/codeGenerate/indexConfig.vue iwara-scada-web/src/views/gen/lowCode/addForm.vue iwara-scada-web/src/views/gen/lowCode/editForm.vue iwara-scada-web/src/views/gen/lowCode/index.vue iwara-scada-web/src/views/main/BasicDataMaintenance/index.vue iwara-scada-web/src/views/main/BindEntrance/index.vue iwara-scada-web/src/views/main/BindEntrance/inputLayout.vue iwara-scada-web/src/views/main/BindEntrance/searchBox.vue iwara-scada-web/src/views/main/DataCaptureColumnConfig/addForm.vue iwara-scada-web/src/views/main/DataCaptureColumnConfig/editForm.vue iwara-scada-web/src/views/main/DataCaptureColumnConfig/index.vue iwara-scada-web/src/views/main/DataCaptureConfig/addForm.vue iwara-scada-web/src/views/main/DataCaptureConfig/editForm.vue iwara-scada-web/src/views/main/DataCaptureConfig/index.vue iwara-scada-web/src/views/main/EquipmentBaseInfo/addForm.vue iwara-scada-web/src/views/main/EquipmentBaseInfo/editForm.vue iwara-scada-web/src/views/main/EquipmentBaseInfo/index.vue iwara-scada-web/src/views/main/EquipmentCurrentMonitor/index.vue iwara-scada-web/src/views/main/EquipmentCurrentMonitor/modules/flexItem.vue iwara-scada-web/src/views/main/EquipmentCurrentMonitor/modules/tab.vue iwara-scada-web/src/views/main/EquipmentStatusAnalyse/api/getData.js iwara-scada-web/src/views/main/EquipmentStatusAnalyse/index.vue iwara-scada-web/src/views/main/EquipmentStatusAnalyse/modules/Echarts.vue iwara-scada-web/src/views/main/EquipmentWorkingLog/index.vue iwara-scada-web/src/views/main/ExWarehouse/index.vue iwara-scada-web/src/views/main/FaultFreetimeAnalysis/index.vue iwara-scada-web/src/views/main/FaultFreetimeAnalysis/modules/Echarts.vue iwara-scada-web/src/views/main/KnifeToolBaseInfo/addForm.vue iwara-scada-web/src/views/main/KnifeToolBaseInfo/editForm.vue iwara-scada-web/src/views/main/KnifeToolBaseInfo/index.vue iwara-scada-web/src/views/main/KnifeToolDataAction/index.vue iwara-scada-web/src/views/main/KnifeToolDataAction/modules/addEditForm.vue iwara-scada-web/src/views/main/KnifeToolDataAction/modules/toolDetail.vue iwara-scada-web/src/views/main/KnifeToolDataAction/modules/toolOff.vue iwara-scada-web/src/views/main/KnifeToolDataAction/modules/toolOnline.vue iwara-scada-web/src/views/main/KnifeToolDataMonitor/index.vue iwara-scada-web/src/views/main/KnifeToolEquipmentUpdateLog/index.vue iwara-scada-web/src/views/main/KnifeToolUsageAnalysis/api/getData.js iwara-scada-web/src/views/main/KnifeToolUsageAnalysis/index.vue iwara-scada-web/src/views/main/KnifeToolUsageAnalysis/modules/Echarts copy.vue iwara-scada-web/src/views/main/KnifeToolUsageAnalysis/modules/Echarts.vue iwara-scada-web/src/views/main/LocationView/DetailDrawer.vue iwara-scada-web/src/views/main/LocationView/SearchForm.vue iwara-scada-web/src/views/main/LocationView/index.vue iwara-scada-web/src/views/main/OEEManagement/index.vue iwara-scada-web/src/views/main/OEEManagement/modules/Echarts.vue iwara-scada-web/src/views/main/QualityDataInfo/index.vue iwara-scada-web/src/views/main/QualityDataInfo/modules/Tab.vue iwara-scada-web/src/views/main/README.md iwara-scada-web/src/views/main/ShiftManagement/addOrEditForm.vue iwara-scada-web/src/views/main/ShiftManagement/index.vue iwara-scada-web/src/views/main/SysTenant/addForm.vue iwara-scada-web/src/views/main/SysTenant/editForm.vue iwara-scada-web/src/views/main/SysTenant/index.vue iwara-scada-web/src/views/main/ThreadStatusMonitor/index.vue iwara-scada-web/src/views/main/View_AccessDetails/addForm.vue iwara-scada-web/src/views/main/View_AccessDetails/editForm.vue iwara-scada-web/src/views/main/View_AccessDetails/index.vue iwara-scada-web/src/views/main/WmsArea/addForm.vue iwara-scada-web/src/views/main/WmsArea/editForm.vue iwara-scada-web/src/views/main/WmsArea/index.vue iwara-scada-web/src/views/main/WmsBindIn/index.vue iwara-scada-web/src/views/main/WmsContainer/addForm.vue iwara-scada-web/src/views/main/WmsContainer/editForm.vue iwara-scada-web/src/views/main/WmsContainer/index.vue iwara-scada-web/src/views/main/WmsMaterial/addForm.vue iwara-scada-web/src/views/main/WmsMaterial/editForm.vue iwara-scada-web/src/views/main/WmsMaterial/index.vue iwara-scada-web/src/views/main/WmsPlace/addForm.vue iwara-scada-web/src/views/main/WmsPlace/editForm.vue iwara-scada-web/src/views/main/WmsPlace/index.vue iwara-scada-web/src/views/main/WmsTask/InfoModal.vue iwara-scada-web/src/views/main/WmsTask/PriorityModal.vue iwara-scada-web/src/views/main/WmsTask/addForm.vue iwara-scada-web/src/views/main/WmsTask/editForm.vue iwara-scada-web/src/views/main/WmsTask/index.vue iwara-scada-web/src/views/main/WorkPieceInfo/editForm.vue iwara-scada-web/src/views/main/WorkPieceInfo/index.vue iwara-scada-web/src/views/main/WorkPieceOutbound/addForm.vue iwara-scada-web/src/views/main/WorkPieceOutbound/editForm.vue iwara-scada-web/src/views/main/WorkPieceOutbound/index.vue iwara-scada-web/src/views/main/WorkPieceProcess copy/index.vue iwara-scada-web/src/views/main/WorkPieceProcess copy/modules/qualityDetail.vue iwara-scada-web/src/views/main/WorkPieceProcess/index.vue iwara-scada-web/src/views/main/WorkPieceProcess/modules/qualityDetail.vue iwara-scada-web/src/views/main/YieldAnalysis/api/getData.js iwara-scada-web/src/views/main/YieldAnalysis/index.vue iwara-scada-web/src/views/main/YieldAnalysis/modules/Echarts.vue iwara-scada-web/src/views/main/YieldMaintenance/index.vue iwara-scada-web/src/views/main/YieldMaintenance/modules/addEditForm.vue iwara-scada-web/src/views/main/YieldMaintenance/modules/yield.vue iwara-scada-web/src/views/main/screenMonitor/LabelTag.vue iwara-scada-web/src/views/main/screenMonitor/TopMiddleCmp.vue iwara-scada-web/src/views/main/screenMonitor/cards.vue iwara-scada-web/src/views/main/screenMonitor/digitalFlop.vue iwara-scada-web/src/views/main/screenMonitor/img/bg.png iwara-scada-web/src/views/main/screenMonitor/img/map.jpg iwara-scada-web/src/views/main/screenMonitor/img/map.png iwara-scada-web/src/views/main/screenMonitor/img/map2.png iwara-scada-web/src/views/main/screenMonitor/img/mapCenterPoint.png iwara-scada-web/src/views/main/screenMonitor/img/mapPoint.png iwara-scada-web/src/views/main/screenMonitor/index.vue iwara-scada-web/src/views/main/screenMonitor/left1.vue iwara-scada-web/src/views/main/screenMonitor/left12.vue iwara-scada-web/src/views/main/screenMonitor/left2.vue iwara-scada-web/src/views/main/screenMonitor/left22.vue iwara-scada-web/src/views/main/screenMonitor/left23.vue iwara-scada-web/src/views/main/screenMonitor/middle1.vue iwara-scada-web/src/views/main/screenMonitor/middle2.vue iwara-scada-web/src/views/main/screenMonitor/middle3.vue iwara-scada-web/src/views/main/screenMonitor/rankingBoard.vue iwara-scada-web/src/views/main/screenMonitor/right1.vue iwara-scada-web/src/views/main/screenMonitor/right2.vue iwara-scada-web/src/views/main/screenMonitor/right3.vue iwara-scada-web/src/views/main/screenMonitor/right4.vue iwara-scada-web/src/views/main/screenMonitor/scrollBoard.vue iwara-scada-web/src/views/main/screenMonitor/topHeader.vue iwara-scada-web/src/views/system/README.md iwara-scada-web/src/views/system/account/center/Index.vue iwara-scada-web/src/views/system/account/center/page/App.vue iwara-scada-web/src/views/system/account/center/page/Article.vue iwara-scada-web/src/views/system/account/center/page/Project.vue iwara-scada-web/src/views/system/account/center/page/index.js iwara-scada-web/src/views/system/account/settings/AvatarModal.vue iwara-scada-web/src/views/system/account/settings/BaseSetting.vue iwara-scada-web/src/views/system/account/settings/Binding.vue iwara-scada-web/src/views/system/account/settings/Custom.vue iwara-scada-web/src/views/system/account/settings/Index.vue iwara-scada-web/src/views/system/account/settings/Notification.vue iwara-scada-web/src/views/system/account/settings/Security.vue iwara-scada-web/src/views/system/account/settings/securityItem/updPwd.vue iwara-scada-web/src/views/system/app/addForm.vue iwara-scada-web/src/views/system/app/editForm.vue iwara-scada-web/src/views/system/app/index.vue iwara-scada-web/src/views/system/config/addForm.vue iwara-scada-web/src/views/system/config/editForm.vue iwara-scada-web/src/views/system/config/index.vue iwara-scada-web/src/views/system/dashboard/Analysis.vue iwara-scada-web/src/views/system/dashboard/Monitor.vue iwara-scada-web/src/views/system/dashboard/TestWork.vue iwara-scada-web/src/views/system/dashboard/Workplace.vue iwara-scada-web/src/views/system/dict/addForm.vue iwara-scada-web/src/views/system/dict/dictdata/addForm.vue iwara-scada-web/src/views/system/dict/dictdata/editForm.vue iwara-scada-web/src/views/system/dict/dictdata/index.vue iwara-scada-web/src/views/system/dict/editForm.vue iwara-scada-web/src/views/system/dict/index.vue iwara-scada-web/src/views/system/email/index.vue iwara-scada-web/src/views/system/exception/403.vue iwara-scada-web/src/views/system/exception/404.vue iwara-scada-web/src/views/system/exception/500.vue iwara-scada-web/src/views/system/file/detailForm.vue iwara-scada-web/src/views/system/file/index.vue iwara-scada-web/src/views/system/file/previewForm.vue iwara-scada-web/src/views/system/formDesign/edit.vue iwara-scada-web/src/views/system/formDesign/index.vue iwara-scada-web/src/views/system/formDesign/list.vue iwara-scada-web/src/views/system/index/Echarts.vue iwara-scada-web/src/views/system/index/LineEcharts.vue iwara-scada-web/src/views/system/index/ModuleA.vue iwara-scada-web/src/views/system/index/ModuleB.vue iwara-scada-web/src/views/system/index/ModuleC.vue iwara-scada-web/src/views/system/index/SmoothLineEcharts.vue iwara-scada-web/src/views/system/index/modules/EquipmentRunStatus.vue iwara-scada-web/src/views/system/index/modules/ProdlineHealthy.vue iwara-scada-web/src/views/system/index/modules/ProductionCompletionTrend.vue iwara-scada-web/src/views/system/index/modules/ProductionStatistics.vue iwara-scada-web/src/views/system/index/modules/QualityDataTrends.vue iwara-scada-web/src/views/system/index/welcome.vue iwara-scada-web/src/views/system/log/exlog/details.vue iwara-scada-web/src/views/system/log/exlog/index.vue iwara-scada-web/src/views/system/log/oplog/details.vue iwara-scada-web/src/views/system/log/oplog/index.vue iwara-scada-web/src/views/system/log/vislog/details.vue iwara-scada-web/src/views/system/log/vislog/index.vue iwara-scada-web/src/views/system/machine/index.vue iwara-scada-web/src/views/system/menu/addForm.vue iwara-scada-web/src/views/system/menu/editForm.vue iwara-scada-web/src/views/system/menu/index.vue iwara-scada-web/src/views/system/myworkflow/auditor.vue iwara-scada-web/src/views/system/myworkflow/components/auditoropera.vue iwara-scada-web/src/views/system/myworkflow/components/viewworkflow.vue iwara-scada-web/src/views/system/myworkflow/create.vue iwara-scada-web/src/views/system/myworkflow/index.vue iwara-scada-web/src/views/system/myworkflow/unauditor.vue iwara-scada-web/src/views/system/notice/addForm.vue iwara-scada-web/src/views/system/notice/detailForm.vue iwara-scada-web/src/views/system/notice/editForm.vue iwara-scada-web/src/views/system/notice/index.vue iwara-scada-web/src/views/system/noticeReceived/detailForm.vue iwara-scada-web/src/views/system/noticeReceived/index.vue iwara-scada-web/src/views/system/onlineUser/index.vue iwara-scada-web/src/views/system/org/addForm.vue iwara-scada-web/src/views/system/org/editForm.vue iwara-scada-web/src/views/system/org/index.vue iwara-scada-web/src/views/system/pos/addForm.vue iwara-scada-web/src/views/system/pos/editForm.vue iwara-scada-web/src/views/system/pos/index.vue iwara-scada-web/src/views/system/role/addForm.vue iwara-scada-web/src/views/system/role/editForm.vue iwara-scada-web/src/views/system/role/index.vue iwara-scada-web/src/views/system/role/roleMenuForm.vue iwara-scada-web/src/views/system/role/roleOrgForm.vue iwara-scada-web/src/views/system/sms/index.vue iwara-scada-web/src/views/system/tenant/addForm.vue iwara-scada-web/src/views/system/tenant/editForm.vue iwara-scada-web/src/views/system/tenant/index.vue iwara-scada-web/src/views/system/tenant/tenantMenuForm.vue iwara-scada-web/src/views/system/timers/addForm.vue iwara-scada-web/src/views/system/timers/editForm.vue iwara-scada-web/src/views/system/timers/index.vue iwara-scada-web/src/views/system/user/addForm.vue iwara-scada-web/src/views/system/user/editForm.vue iwara-scada-web/src/views/system/user/index.vue iwara-scada-web/src/views/system/user/userOrgForm.vue iwara-scada-web/src/views/system/user/userRoleForm.vue iwara-scada-web/src/views/system/workflow/components/builderWorkFlow.vue iwara-scada-web/src/views/system/workflow/components/nomalWorkFlow.vue iwara-scada-web/src/views/system/workflow/components/store/conditionflownode.js iwara-scada-web/src/views/system/workflow/components/store/flowNodeGroup.vue iwara-scada-web/src/views/system/workflow/components/store/flowentity.js iwara-scada-web/src/views/system/workflow/components/store/flownodes.js iwara-scada-web/src/views/system/workflow/components/store/nodeProperty.vue iwara-scada-web/src/views/system/workflow/components/store/readme.md iwara-scada-web/src/views/system/workflow/components/store/sourcenodes.js iwara-scada-web/src/views/system/workflow/create.vue iwara-scada-web/src/views/system/workflow/edit.vue iwara-scada-web/src/views/system/workflow/index.vue iwara-scada-web/src/views/system/workflow/startworkflow.vue iwara-scada-web/src/views/userLoginReg/Login.vue iwara-scada-web/src/views/userLoginReg/Register.vue iwara-scada-web/src/views/userLoginReg/RegisterResult.vue iwara-scada-web/tests/unit/.eslintrc.js iwara-scada-web/vue.config.js iwara-scada-web/webstorm.config.js yiqi_pda/.gitignore yiqi_pda/.hbuilderx/launch.json yiqi_pda/App.vue yiqi_pda/README.md yiqi_pda/__json_server_mock__/db.json yiqi_pda/api/api.js yiqi_pda/api/common/index.js yiqi_pda/api/home/index.js yiqi_pda/api/outBound/index.js yiqi_pda/api/production/index.js yiqi_pda/api/retrospect/index.js yiqi_pda/api/shift/index.js yiqi_pda/api/unBind/index.js yiqi_pda/api/unBindAll/index.js yiqi_pda/components/ActionUserRow.vue yiqi_pda/components/DefaultHeaderPageLayout.vue yiqi_pda/components/EasyPicker.vue yiqi_pda/components/EasySelectFormItem.vue yiqi_pda/components/FullPageLayout.vue yiqi_pda/components/HeaderPageLayout.vue yiqi_pda/components/PageHeader.vue yiqi_pda/components/ScanInputFormItem.vue yiqi_pda/components/UViewFormSelectPicker.vue yiqi_pda/config/index.js yiqi_pda/config/modules/ajax.js yiqi_pda/config/modules/pagination.js yiqi_pda/index.html yiqi_pda/main.js yiqi_pda/manifest.json yiqi_pda/mdImgs/1664329468868.jpg yiqi_pda/mdImgs/1664329790970.jpg yiqi_pda/mdImgs/1664330296712.png yiqi_pda/mdImgs/1665970038354.jpg yiqi_pda/package.json yiqi_pda/pages.json yiqi_pda/pages/baseTask/in.vue yiqi_pda/pages/baseTask/out.vue yiqi_pda/pages/home/detail.vue yiqi_pda/pages/home/index.vue yiqi_pda/pages/home/modules/warnContent.vue yiqi_pda/pages/home/modules/warnItem.vue yiqi_pda/pages/login/index.vue yiqi_pda/pages/outBound/index.vue yiqi_pda/pages/outBound/modules/ScanInputFormItem.vue yiqi_pda/pages/outBound/modules/content.vue yiqi_pda/pages/outBound/modules/modalPwd.vue yiqi_pda/pages/print/bluePrint.js yiqi_pda/pages/print/bluetoothConnection.vue yiqi_pda/pages/production/addOrEditProd.vue yiqi_pda/pages/production/index.vue yiqi_pda/pages/retrospect/index.vue yiqi_pda/pages/retrospect/modules/barContent.vue yiqi_pda/pages/retrospect/modules/barStatus.vue yiqi_pda/pages/setting/host.vue yiqi_pda/pages/shift/addOrEditShift.vue yiqi_pda/pages/shift/index.vue yiqi_pda/pages/start/index.vue yiqi_pda/pages/unBind/index.vue yiqi_pda/pages/unBind/modules/barContent.vue yiqi_pda/pages/unBind/modules/barStatus.vue yiqi_pda/pages/unBind/modules/modalPwd.vue yiqi_pda/pages/unBindAll/index.vue yiqi_pda/pages/unBindAll/modules/Tab.vue yiqi_pda/pages/unBindAll/modules/barContent.vue yiqi_pda/pages/unBindAll/modules/barListItem.vue yiqi_pda/pages/unBindAll/modules/barStatus.vue yiqi_pda/pages/unBindAll/modules/detailModal.vue yiqi_pda/pages/unBindAll/modules/statusSelect.vue yiqi_pda/service/request/index.js yiqi_pda/service/request/modules/beforeSend.js yiqi_pda/service/store/index.js yiqi_pda/service/store/modules/print.js yiqi_pda/service/store/modules/system.js yiqi_pda/service/store/modules/user.js yiqi_pda/static/fonts/iconfont.css yiqi_pda/static/fonts/iconfont.ttf yiqi_pda/static/fonts/iconfont.woff yiqi_pda/static/fonts/iconfont.woff2 yiqi_pda/static/img/icon.png yiqi_pda/static/img/logo.jpg yiqi_pda/static/js/print/gbk.js yiqi_pda/static/js/print/printerjobs.js yiqi_pda/static/js/utils/filter.js yiqi_pda/static/js/utils/index.js yiqi_pda/static/js/utils/modules/color.js yiqi_pda/static/js/utils/modules/regexValidate.js yiqi_pda/static/logo.png yiqi_pda/uni.scss yiqi_pda/uni_modules/uview-ui/LICENSE yiqi_pda/uni_modules/uview-ui/README.md yiqi_pda/uni_modules/uview-ui/changelog.md yiqi_pda/uni_modules/uview-ui/components/u--form/u--form.vue yiqi_pda/uni_modules/uview-ui/components/u--image/u--image.vue yiqi_pda/uni_modules/uview-ui/components/u--input/u--input.vue yiqi_pda/uni_modules/uview-ui/components/u--text/u--text.vue yiqi_pda/uni_modules/uview-ui/components/u--textarea/u--textarea.vue yiqi_pda/uni_modules/uview-ui/components/u-action-sheet/props.js yiqi_pda/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue yiqi_pda/uni_modules/uview-ui/components/u-album/props.js yiqi_pda/uni_modules/uview-ui/components/u-album/u-album.vue yiqi_pda/uni_modules/uview-ui/components/u-alert/props.js yiqi_pda/uni_modules/uview-ui/components/u-alert/u-alert.vue yiqi_pda/uni_modules/uview-ui/components/u-avatar-group/props.js yiqi_pda/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue yiqi_pda/uni_modules/uview-ui/components/u-avatar/props.js yiqi_pda/uni_modules/uview-ui/components/u-avatar/u-avatar.vue yiqi_pda/uni_modules/uview-ui/components/u-back-top/props.js yiqi_pda/uni_modules/uview-ui/components/u-back-top/u-back-top.vue yiqi_pda/uni_modules/uview-ui/components/u-badge/props.js yiqi_pda/uni_modules/uview-ui/components/u-badge/u-badge.vue yiqi_pda/uni_modules/uview-ui/components/u-button/nvue.scss yiqi_pda/uni_modules/uview-ui/components/u-button/props.js yiqi_pda/uni_modules/uview-ui/components/u-button/u-button.vue yiqi_pda/uni_modules/uview-ui/components/u-button/vue.scss yiqi_pda/uni_modules/uview-ui/components/u-calendar/header.vue yiqi_pda/uni_modules/uview-ui/components/u-calendar/month.vue yiqi_pda/uni_modules/uview-ui/components/u-calendar/props.js yiqi_pda/uni_modules/uview-ui/components/u-calendar/u-calendar.vue yiqi_pda/uni_modules/uview-ui/components/u-calendar/util.js yiqi_pda/uni_modules/uview-ui/components/u-car-keyboard/props.js yiqi_pda/uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue yiqi_pda/uni_modules/uview-ui/components/u-cell-group/props.js yiqi_pda/uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue yiqi_pda/uni_modules/uview-ui/components/u-cell/props.js yiqi_pda/uni_modules/uview-ui/components/u-cell/u-cell.vue yiqi_pda/uni_modules/uview-ui/components/u-checkbox-group/props.js yiqi_pda/uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue yiqi_pda/uni_modules/uview-ui/components/u-checkbox/props.js yiqi_pda/uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue yiqi_pda/uni_modules/uview-ui/components/u-circle-progress/props.js yiqi_pda/uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue yiqi_pda/uni_modules/uview-ui/components/u-code-input/props.js yiqi_pda/uni_modules/uview-ui/components/u-code-input/u-code-input.vue yiqi_pda/uni_modules/uview-ui/components/u-code/props.js yiqi_pda/uni_modules/uview-ui/components/u-code/u-code.vue yiqi_pda/uni_modules/uview-ui/components/u-col/props.js yiqi_pda/uni_modules/uview-ui/components/u-col/u-col.vue yiqi_pda/uni_modules/uview-ui/components/u-collapse-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue yiqi_pda/uni_modules/uview-ui/components/u-collapse/props.js yiqi_pda/uni_modules/uview-ui/components/u-collapse/u-collapse.vue yiqi_pda/uni_modules/uview-ui/components/u-column-notice/props.js yiqi_pda/uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue yiqi_pda/uni_modules/uview-ui/components/u-count-down/props.js yiqi_pda/uni_modules/uview-ui/components/u-count-down/u-count-down.vue yiqi_pda/uni_modules/uview-ui/components/u-count-down/utils.js yiqi_pda/uni_modules/uview-ui/components/u-count-to/props.js yiqi_pda/uni_modules/uview-ui/components/u-count-to/u-count-to.vue yiqi_pda/uni_modules/uview-ui/components/u-datetime-picker/props.js yiqi_pda/uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue yiqi_pda/uni_modules/uview-ui/components/u-divider/props.js yiqi_pda/uni_modules/uview-ui/components/u-divider/u-divider.vue yiqi_pda/uni_modules/uview-ui/components/u-dropdown-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue yiqi_pda/uni_modules/uview-ui/components/u-dropdown/props.js yiqi_pda/uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue yiqi_pda/uni_modules/uview-ui/components/u-empty/props.js yiqi_pda/uni_modules/uview-ui/components/u-empty/u-empty.vue yiqi_pda/uni_modules/uview-ui/components/u-form-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-form-item/u-form-item.vue yiqi_pda/uni_modules/uview-ui/components/u-form/props.js yiqi_pda/uni_modules/uview-ui/components/u-form/u-form.vue yiqi_pda/uni_modules/uview-ui/components/u-gap/props.js yiqi_pda/uni_modules/uview-ui/components/u-gap/u-gap.vue yiqi_pda/uni_modules/uview-ui/components/u-grid-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue yiqi_pda/uni_modules/uview-ui/components/u-grid/props.js yiqi_pda/uni_modules/uview-ui/components/u-grid/u-grid.vue yiqi_pda/uni_modules/uview-ui/components/u-icon/iconfont.ttf yiqi_pda/uni_modules/uview-ui/components/u-icon/icons.js yiqi_pda/uni_modules/uview-ui/components/u-icon/props.js yiqi_pda/uni_modules/uview-ui/components/u-icon/u-icon.vue yiqi_pda/uni_modules/uview-ui/components/u-image/props.js yiqi_pda/uni_modules/uview-ui/components/u-image/u-image.vue yiqi_pda/uni_modules/uview-ui/components/u-index-anchor/props.js yiqi_pda/uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue yiqi_pda/uni_modules/uview-ui/components/u-index-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-index-item/u-index-item.vue yiqi_pda/uni_modules/uview-ui/components/u-index-list/props.js yiqi_pda/uni_modules/uview-ui/components/u-index-list/u-index-list.vue yiqi_pda/uni_modules/uview-ui/components/u-input/props.js yiqi_pda/uni_modules/uview-ui/components/u-input/u-input.vue yiqi_pda/uni_modules/uview-ui/components/u-keyboard/props.js yiqi_pda/uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue yiqi_pda/uni_modules/uview-ui/components/u-line-progress/props.js yiqi_pda/uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue yiqi_pda/uni_modules/uview-ui/components/u-line/props.js yiqi_pda/uni_modules/uview-ui/components/u-line/u-line.vue yiqi_pda/uni_modules/uview-ui/components/u-link/props.js yiqi_pda/uni_modules/uview-ui/components/u-link/u-link.vue yiqi_pda/uni_modules/uview-ui/components/u-list-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-list-item/u-list-item.vue yiqi_pda/uni_modules/uview-ui/components/u-list/props.js yiqi_pda/uni_modules/uview-ui/components/u-list/u-list.vue yiqi_pda/uni_modules/uview-ui/components/u-loading-icon/props.js yiqi_pda/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue yiqi_pda/uni_modules/uview-ui/components/u-loading-page/props.js yiqi_pda/uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue yiqi_pda/uni_modules/uview-ui/components/u-loadmore/props.js yiqi_pda/uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue yiqi_pda/uni_modules/uview-ui/components/u-modal/props.js yiqi_pda/uni_modules/uview-ui/components/u-modal/u-modal.vue yiqi_pda/uni_modules/uview-ui/components/u-navbar/props.js yiqi_pda/uni_modules/uview-ui/components/u-navbar/u-navbar.vue yiqi_pda/uni_modules/uview-ui/components/u-no-network/props.js yiqi_pda/uni_modules/uview-ui/components/u-no-network/u-no-network.vue yiqi_pda/uni_modules/uview-ui/components/u-notice-bar/props.js yiqi_pda/uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue yiqi_pda/uni_modules/uview-ui/components/u-notify/props.js yiqi_pda/uni_modules/uview-ui/components/u-notify/u-notify.vue yiqi_pda/uni_modules/uview-ui/components/u-number-box/props.js yiqi_pda/uni_modules/uview-ui/components/u-number-box/u-number-box.vue yiqi_pda/uni_modules/uview-ui/components/u-number-keyboard/props.js yiqi_pda/uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue yiqi_pda/uni_modules/uview-ui/components/u-overlay/props.js yiqi_pda/uni_modules/uview-ui/components/u-overlay/u-overlay.vue yiqi_pda/uni_modules/uview-ui/components/u-parse/node/node.vue yiqi_pda/uni_modules/uview-ui/components/u-parse/parser.js yiqi_pda/uni_modules/uview-ui/components/u-parse/props.js yiqi_pda/uni_modules/uview-ui/components/u-parse/u-parse.vue yiqi_pda/uni_modules/uview-ui/components/u-picker-column/props.js yiqi_pda/uni_modules/uview-ui/components/u-picker-column/u-picker-column.vue yiqi_pda/uni_modules/uview-ui/components/u-picker/props.js yiqi_pda/uni_modules/uview-ui/components/u-picker/u-picker.vue yiqi_pda/uni_modules/uview-ui/components/u-popup/props.js yiqi_pda/uni_modules/uview-ui/components/u-popup/u-popup.vue yiqi_pda/uni_modules/uview-ui/components/u-radio-group/props.js yiqi_pda/uni_modules/uview-ui/components/u-radio-group/u-radio-group.vue yiqi_pda/uni_modules/uview-ui/components/u-radio/props.js yiqi_pda/uni_modules/uview-ui/components/u-radio/u-radio.vue yiqi_pda/uni_modules/uview-ui/components/u-rate/props.js yiqi_pda/uni_modules/uview-ui/components/u-rate/u-rate.vue yiqi_pda/uni_modules/uview-ui/components/u-read-more/props.js yiqi_pda/uni_modules/uview-ui/components/u-read-more/u-read-more.vue yiqi_pda/uni_modules/uview-ui/components/u-row-notice/props.js yiqi_pda/uni_modules/uview-ui/components/u-row-notice/u-row-notice.vue yiqi_pda/uni_modules/uview-ui/components/u-row/props.js yiqi_pda/uni_modules/uview-ui/components/u-row/u-row.vue yiqi_pda/uni_modules/uview-ui/components/u-safe-bottom/props.js yiqi_pda/uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.vue yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/nvue.js yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/other.js yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/props.js yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/scrollWxs.wxs yiqi_pda/uni_modules/uview-ui/components/u-scroll-list/u-scroll-list.vue yiqi_pda/uni_modules/uview-ui/components/u-search/props.js yiqi_pda/uni_modules/uview-ui/components/u-search/u-search.vue yiqi_pda/uni_modules/uview-ui/components/u-skeleton/props.js yiqi_pda/uni_modules/uview-ui/components/u-skeleton/u-skeleton.vue yiqi_pda/uni_modules/uview-ui/components/u-slider/mpother.js yiqi_pda/uni_modules/uview-ui/components/u-slider/mpwxs.js yiqi_pda/uni_modules/uview-ui/components/u-slider/mpwxs.wxs yiqi_pda/uni_modules/uview-ui/components/u-slider/nvue - 副本.js yiqi_pda/uni_modules/uview-ui/components/u-slider/nvue.js yiqi_pda/uni_modules/uview-ui/components/u-slider/props.js yiqi_pda/uni_modules/uview-ui/components/u-slider/u-slider.vue yiqi_pda/uni_modules/uview-ui/components/u-status-bar/props.js yiqi_pda/uni_modules/uview-ui/components/u-status-bar/u-status-bar.vue yiqi_pda/uni_modules/uview-ui/components/u-steps-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-steps-item/u-steps-item.vue yiqi_pda/uni_modules/uview-ui/components/u-steps/props.js yiqi_pda/uni_modules/uview-ui/components/u-steps/u-steps.vue yiqi_pda/uni_modules/uview-ui/components/u-sticky/props.js yiqi_pda/uni_modules/uview-ui/components/u-sticky/u-sticky.vue yiqi_pda/uni_modules/uview-ui/components/u-subsection/props.js yiqi_pda/uni_modules/uview-ui/components/u-subsection/u-subsection.vue yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/index - backup.wxs yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/index.wxs yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/nvue - backup.js yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/nvue.js yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/u-swipe-action-item.vue yiqi_pda/uni_modules/uview-ui/components/u-swipe-action-item/wxs.js yiqi_pda/uni_modules/uview-ui/components/u-swipe-action/props.js yiqi_pda/uni_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue yiqi_pda/uni_modules/uview-ui/components/u-swiper-indicator/props.js yiqi_pda/uni_modules/uview-ui/components/u-swiper-indicator/u-swiper-indicator.vue yiqi_pda/uni_modules/uview-ui/components/u-swiper/props.js yiqi_pda/uni_modules/uview-ui/components/u-swiper/u-swiper.vue yiqi_pda/uni_modules/uview-ui/components/u-switch/props.js yiqi_pda/uni_modules/uview-ui/components/u-switch/u-switch.vue yiqi_pda/uni_modules/uview-ui/components/u-tabbar-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue yiqi_pda/uni_modules/uview-ui/components/u-tabbar/props.js yiqi_pda/uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue yiqi_pda/uni_modules/uview-ui/components/u-table/props.js yiqi_pda/uni_modules/uview-ui/components/u-table/u-table.vue yiqi_pda/uni_modules/uview-ui/components/u-tabs-item/props.js yiqi_pda/uni_modules/uview-ui/components/u-tabs-item/u-tabs-item.vue yiqi_pda/uni_modules/uview-ui/components/u-tabs/props.js yiqi_pda/uni_modules/uview-ui/components/u-tabs/u-tabs.vue yiqi_pda/uni_modules/uview-ui/components/u-tag/props.js yiqi_pda/uni_modules/uview-ui/components/u-tag/u-tag.vue yiqi_pda/uni_modules/uview-ui/components/u-td/props.js yiqi_pda/uni_modules/uview-ui/components/u-td/u-td.vue yiqi_pda/uni_modules/uview-ui/components/u-text/props.js yiqi_pda/uni_modules/uview-ui/components/u-text/u-text.vue yiqi_pda/uni_modules/uview-ui/components/u-text/value.js yiqi_pda/uni_modules/uview-ui/components/u-textarea/props.js yiqi_pda/uni_modules/uview-ui/components/u-textarea/u-textarea.vue yiqi_pda/uni_modules/uview-ui/components/u-toast/u-toast.vue yiqi_pda/uni_modules/uview-ui/components/u-toolbar/props.js yiqi_pda/uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue yiqi_pda/uni_modules/uview-ui/components/u-tooltip/clipboard.min.js yiqi_pda/uni_modules/uview-ui/components/u-tooltip/props.js yiqi_pda/uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue yiqi_pda/uni_modules/uview-ui/components/u-tr/props.js yiqi_pda/uni_modules/uview-ui/components/u-tr/u-tr.vue yiqi_pda/uni_modules/uview-ui/components/u-transition/nvue.ani-map.js yiqi_pda/uni_modules/uview-ui/components/u-transition/props.js yiqi_pda/uni_modules/uview-ui/components/u-transition/transition.js yiqi_pda/uni_modules/uview-ui/components/u-transition/u-transition.vue yiqi_pda/uni_modules/uview-ui/components/u-transition/vue.ani-style.scss yiqi_pda/uni_modules/uview-ui/components/u-upload/mixin.js yiqi_pda/uni_modules/uview-ui/components/u-upload/props.js yiqi_pda/uni_modules/uview-ui/components/u-upload/u-upload.vue yiqi_pda/uni_modules/uview-ui/components/u-upload/utils.js yiqi_pda/uni_modules/uview-ui/components/uview-ui/uview-ui.vue yiqi_pda/uni_modules/uview-ui/index.js yiqi_pda/uni_modules/uview-ui/index.scss yiqi_pda/uni_modules/uview-ui/libs/config/color.js yiqi_pda/uni_modules/uview-ui/libs/config/config.js yiqi_pda/uni_modules/uview-ui/libs/config/props.js yiqi_pda/uni_modules/uview-ui/libs/config/props/actionSheet.js yiqi_pda/uni_modules/uview-ui/libs/config/props/album.js yiqi_pda/uni_modules/uview-ui/libs/config/props/alert.js yiqi_pda/uni_modules/uview-ui/libs/config/props/avatar.js yiqi_pda/uni_modules/uview-ui/libs/config/props/avatarGroup.js yiqi_pda/uni_modules/uview-ui/libs/config/props/backtop.js yiqi_pda/uni_modules/uview-ui/libs/config/props/badge.js yiqi_pda/uni_modules/uview-ui/libs/config/props/button.js yiqi_pda/uni_modules/uview-ui/libs/config/props/calendar.js yiqi_pda/uni_modules/uview-ui/libs/config/props/carKeyboard.js yiqi_pda/uni_modules/uview-ui/libs/config/props/cell.js yiqi_pda/uni_modules/uview-ui/libs/config/props/cellGroup.js yiqi_pda/uni_modules/uview-ui/libs/config/props/checkbox.js yiqi_pda/uni_modules/uview-ui/libs/config/props/checkboxGroup.js yiqi_pda/uni_modules/uview-ui/libs/config/props/circleProgress.js yiqi_pda/uni_modules/uview-ui/libs/config/props/code.js yiqi_pda/uni_modules/uview-ui/libs/config/props/codeInput.js yiqi_pda/uni_modules/uview-ui/libs/config/props/col.js yiqi_pda/uni_modules/uview-ui/libs/config/props/collapse.js yiqi_pda/uni_modules/uview-ui/libs/config/props/collapseItem.js yiqi_pda/uni_modules/uview-ui/libs/config/props/columnNotice.js yiqi_pda/uni_modules/uview-ui/libs/config/props/countDown.js yiqi_pda/uni_modules/uview-ui/libs/config/props/countTo.js yiqi_pda/uni_modules/uview-ui/libs/config/props/datetimePicker.js yiqi_pda/uni_modules/uview-ui/libs/config/props/divider.js yiqi_pda/uni_modules/uview-ui/libs/config/props/empty.js yiqi_pda/uni_modules/uview-ui/libs/config/props/form.js yiqi_pda/uni_modules/uview-ui/libs/config/props/formItem.js yiqi_pda/uni_modules/uview-ui/libs/config/props/gap.js yiqi_pda/uni_modules/uview-ui/libs/config/props/grid.js yiqi_pda/uni_modules/uview-ui/libs/config/props/gridItem.js yiqi_pda/uni_modules/uview-ui/libs/config/props/icon.js yiqi_pda/uni_modules/uview-ui/libs/config/props/image.js yiqi_pda/uni_modules/uview-ui/libs/config/props/indexAnchor.js yiqi_pda/uni_modules/uview-ui/libs/config/props/indexList.js yiqi_pda/uni_modules/uview-ui/libs/config/props/input.js yiqi_pda/uni_modules/uview-ui/libs/config/props/keyboard.js yiqi_pda/uni_modules/uview-ui/libs/config/props/line.js yiqi_pda/uni_modules/uview-ui/libs/config/props/lineProgress.js yiqi_pda/uni_modules/uview-ui/libs/config/props/link.js yiqi_pda/uni_modules/uview-ui/libs/config/props/list.js yiqi_pda/uni_modules/uview-ui/libs/config/props/listItem.js yiqi_pda/uni_modules/uview-ui/libs/config/props/loadingIcon.js yiqi_pda/uni_modules/uview-ui/libs/config/props/loadingPage.js yiqi_pda/uni_modules/uview-ui/libs/config/props/loadmore.js yiqi_pda/uni_modules/uview-ui/libs/config/props/modal.js yiqi_pda/uni_modules/uview-ui/libs/config/props/navbar.js yiqi_pda/uni_modules/uview-ui/libs/config/props/noNetwork.js yiqi_pda/uni_modules/uview-ui/libs/config/props/noticeBar.js yiqi_pda/uni_modules/uview-ui/libs/config/props/notify.js yiqi_pda/uni_modules/uview-ui/libs/config/props/numberBox.js yiqi_pda/uni_modules/uview-ui/libs/config/props/numberKeyboard.js yiqi_pda/uni_modules/uview-ui/libs/config/props/overlay.js yiqi_pda/uni_modules/uview-ui/libs/config/props/parse.js yiqi_pda/uni_modules/uview-ui/libs/config/props/picker.js yiqi_pda/uni_modules/uview-ui/libs/config/props/popup.js yiqi_pda/uni_modules/uview-ui/libs/config/props/radio.js yiqi_pda/uni_modules/uview-ui/libs/config/props/radioGroup.js yiqi_pda/uni_modules/uview-ui/libs/config/props/rate.js yiqi_pda/uni_modules/uview-ui/libs/config/props/readMore.js yiqi_pda/uni_modules/uview-ui/libs/config/props/row.js yiqi_pda/uni_modules/uview-ui/libs/config/props/rowNotice.js yiqi_pda/uni_modules/uview-ui/libs/config/props/scrollList.js yiqi_pda/uni_modules/uview-ui/libs/config/props/search.js yiqi_pda/uni_modules/uview-ui/libs/config/props/section.js yiqi_pda/uni_modules/uview-ui/libs/config/props/skeleton.js yiqi_pda/uni_modules/uview-ui/libs/config/props/slider.js yiqi_pda/uni_modules/uview-ui/libs/config/props/statusBar.js yiqi_pda/uni_modules/uview-ui/libs/config/props/steps.js yiqi_pda/uni_modules/uview-ui/libs/config/props/stepsItem.js yiqi_pda/uni_modules/uview-ui/libs/config/props/sticky.js yiqi_pda/uni_modules/uview-ui/libs/config/props/subsection.js yiqi_pda/uni_modules/uview-ui/libs/config/props/swipeAction.js yiqi_pda/uni_modules/uview-ui/libs/config/props/swipeActionItem.js yiqi_pda/uni_modules/uview-ui/libs/config/props/swiper.js yiqi_pda/uni_modules/uview-ui/libs/config/props/swipterIndicator.js yiqi_pda/uni_modules/uview-ui/libs/config/props/switch.js yiqi_pda/uni_modules/uview-ui/libs/config/props/tabbar.js yiqi_pda/uni_modules/uview-ui/libs/config/props/tabbarItem.js yiqi_pda/uni_modules/uview-ui/libs/config/props/tabs.js yiqi_pda/uni_modules/uview-ui/libs/config/props/tag.js yiqi_pda/uni_modules/uview-ui/libs/config/props/text.js yiqi_pda/uni_modules/uview-ui/libs/config/props/textarea.js yiqi_pda/uni_modules/uview-ui/libs/config/props/toast.js yiqi_pda/uni_modules/uview-ui/libs/config/props/toolbar.js yiqi_pda/uni_modules/uview-ui/libs/config/props/tooltip.js yiqi_pda/uni_modules/uview-ui/libs/config/props/transition.js yiqi_pda/uni_modules/uview-ui/libs/config/props/upload.js yiqi_pda/uni_modules/uview-ui/libs/config/zIndex.js yiqi_pda/uni_modules/uview-ui/libs/css/color.scss yiqi_pda/uni_modules/uview-ui/libs/css/common.scss yiqi_pda/uni_modules/uview-ui/libs/css/components.scss yiqi_pda/uni_modules/uview-ui/libs/css/flex.scss yiqi_pda/uni_modules/uview-ui/libs/css/h5.scss yiqi_pda/uni_modules/uview-ui/libs/css/mixin.scss yiqi_pda/uni_modules/uview-ui/libs/css/mp.scss yiqi_pda/uni_modules/uview-ui/libs/css/nvue.scss yiqi_pda/uni_modules/uview-ui/libs/css/vue.scss yiqi_pda/uni_modules/uview-ui/libs/function/colorGradient.js yiqi_pda/uni_modules/uview-ui/libs/function/debounce.js yiqi_pda/uni_modules/uview-ui/libs/function/digit.js yiqi_pda/uni_modules/uview-ui/libs/function/index.js yiqi_pda/uni_modules/uview-ui/libs/function/platform.js yiqi_pda/uni_modules/uview-ui/libs/function/test.js yiqi_pda/uni_modules/uview-ui/libs/function/throttle.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/adapters/index.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/Request.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/defaults.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/core/settle.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/index.d.ts yiqi_pda/uni_modules/uview-ui/libs/luch-request/index.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/utils.js yiqi_pda/uni_modules/uview-ui/libs/luch-request/utils/clone.js yiqi_pda/uni_modules/uview-ui/libs/mixin/button.js yiqi_pda/uni_modules/uview-ui/libs/mixin/mixin.js yiqi_pda/uni_modules/uview-ui/libs/mixin/mpMixin.js yiqi_pda/uni_modules/uview-ui/libs/mixin/mpShare.js yiqi_pda/uni_modules/uview-ui/libs/mixin/openType.js yiqi_pda/uni_modules/uview-ui/libs/mixin/style.js yiqi_pda/uni_modules/uview-ui/libs/mixin/touch.js yiqi_pda/uni_modules/uview-ui/libs/util/async-validator.js yiqi_pda/uni_modules/uview-ui/libs/util/calendar.js yiqi_pda/uni_modules/uview-ui/libs/util/dayjs.js yiqi_pda/uni_modules/uview-ui/libs/util/emitter.js yiqi_pda/uni_modules/uview-ui/libs/util/route.js yiqi_pda/uni_modules/uview-ui/package.json yiqi_pda/uni_modules/uview-ui/theme.scss yiqi_pda/unpackage/cache/apk/__UNI__2005783_cm.apk yiqi_pda/unpackage/cache/apk/__UNI__3710012_cm.apk yiqi_pda/unpackage/cache/apk/__UNI__9945D9A_cm.apk yiqi_pda/unpackage/cache/apk/apkurl yiqi_pda/unpackage/cache/apk/cmManifestCache.json yiqi_pda/unpackage/cache/certdata yiqi_pda/unpackage/cache/cloudcertificate/certini yiqi_pda/unpackage/cache/cloudcertificate/package.keystore yiqi_pda/unpackage/cache/wgt/__UNI__2005783/.manifest/icon-android-hdpi.png yiqi_pda/unpackage/cache/wgt/__UNI__2005783/.manifest/icon-android-xhdpi.png yiqi_pda/unpackage/cache/wgt/__UNI__2005783/.manifest/icon-android-xxhdpi.png yiqi_pda/unpackage/cache/wgt/__UNI__2005783/.manifest/icon-android-xxxhdpi.png yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappchooselocation.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniapperror.png yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappes6.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappopenlocation.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniapppicker.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappquill.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappquillimageresize.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappscan.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappsuccess.png yiqi_pda/unpackage/cache/wgt/__UNI__2005783/__uniappview.html yiqi_pda/unpackage/cache/wgt/__UNI__2005783/app-config-service.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/app-config.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/app-service.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/app-view.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/manifest.json yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/fonts/iconfont.css yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/fonts/iconfont.ttf yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/fonts/iconfont.woff yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/fonts/iconfont.woff2 yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/img/icon.png yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/img/logo.jpg yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/print/gbk.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/print/printerjobs.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/utils/filter.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/utils/index.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/utils/modules/color.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/js/utils/modules/regexValidate.js yiqi_pda/unpackage/cache/wgt/__UNI__2005783/static/logo.png yiqi_pda/unpackage/cache/wgt/__UNI__2005783/uni_modules/uview-ui/components/u-icon/iconfont.ttf yiqi_pda/unpackage/cache/wgt/__UNI__2005783/view.css yiqi_pda/unpackage/cache/wgt/__UNI__2005783/view.umd.min.js yiqi_pda/unpackage/dist/build/.automator/app-plus/.automator.json yiqi_pda/unpackage/dist/build/app-plus/__uniappchooselocation.js yiqi_pda/unpackage/dist/build/app-plus/__uniapperror.png yiqi_pda/unpackage/dist/build/app-plus/__uniappes6.js yiqi_pda/unpackage/dist/build/app-plus/__uniappopenlocation.js yiqi_pda/unpackage/dist/build/app-plus/__uniapppicker.js yiqi_pda/unpackage/dist/build/app-plus/__uniappquill.js yiqi_pda/unpackage/dist/build/app-plus/__uniappquillimageresize.js yiqi_pda/unpackage/dist/build/app-plus/__uniappscan.js yiqi_pda/unpackage/dist/build/app-plus/__uniappsuccess.png yiqi_pda/unpackage/dist/build/app-plus/__uniappview.html yiqi_pda/unpackage/dist/build/app-plus/app-config-service.js yiqi_pda/unpackage/dist/build/app-plus/app-config.js yiqi_pda/unpackage/dist/build/app-plus/app-service.js yiqi_pda/unpackage/dist/build/app-plus/app-view.js yiqi_pda/unpackage/dist/build/app-plus/manifest.json yiqi_pda/unpackage/dist/build/app-plus/static/fonts/iconfont.css yiqi_pda/unpackage/dist/build/app-plus/static/fonts/iconfont.ttf yiqi_pda/unpackage/dist/build/app-plus/static/fonts/iconfont.woff yiqi_pda/unpackage/dist/build/app-plus/static/fonts/iconfont.woff2 yiqi_pda/unpackage/dist/build/app-plus/static/img/icon.png yiqi_pda/unpackage/dist/build/app-plus/static/img/logo.jpg yiqi_pda/unpackage/dist/build/app-plus/static/js/print/gbk.js yiqi_pda/unpackage/dist/build/app-plus/static/js/print/printerjobs.js yiqi_pda/unpackage/dist/build/app-plus/static/js/utils/filter.js yiqi_pda/unpackage/dist/build/app-plus/static/js/utils/index.js yiqi_pda/unpackage/dist/build/app-plus/static/js/utils/modules/color.js yiqi_pda/unpackage/dist/build/app-plus/static/js/utils/modules/regexValidate.js yiqi_pda/unpackage/dist/build/app-plus/static/logo.png yiqi_pda/unpackage/dist/build/app-plus/uni_modules/uview-ui/components/u-icon/iconfont.ttf yiqi_pda/unpackage/dist/build/app-plus/view.css yiqi_pda/unpackage/dist/build/app-plus/view.umd.min.js yiqi_pda/unpackage/dist/dev/.automator/app-plus/.automator.json yiqi_pda/unpackage/dist/dev/app-plus/__uniappchooselocation.js yiqi_pda/unpackage/dist/dev/app-plus/__uniapperror.png yiqi_pda/unpackage/dist/dev/app-plus/__uniappes6.js yiqi_pda/unpackage/dist/dev/app-plus/__uniappopenlocation.js yiqi_pda/unpackage/dist/dev/app-plus/__uniapppicker.js yiqi_pda/unpackage/dist/dev/app-plus/__uniappquill.js yiqi_pda/unpackage/dist/dev/app-plus/__uniappquillimageresize.js yiqi_pda/unpackage/dist/dev/app-plus/__uniappscan.js yiqi_pda/unpackage/dist/dev/app-plus/__uniappsuccess.png yiqi_pda/unpackage/dist/dev/app-plus/__uniappview.html yiqi_pda/unpackage/dist/dev/app-plus/app-config-service.js yiqi_pda/unpackage/dist/dev/app-plus/app-config.js yiqi_pda/unpackage/dist/dev/app-plus/app-service.js yiqi_pda/unpackage/dist/dev/app-plus/app-view.js yiqi_pda/unpackage/dist/dev/app-plus/manifest.json yiqi_pda/unpackage/dist/dev/app-plus/static/fonts/iconfont.css yiqi_pda/unpackage/dist/dev/app-plus/static/fonts/iconfont.ttf yiqi_pda/unpackage/dist/dev/app-plus/static/fonts/iconfont.woff yiqi_pda/unpackage/dist/dev/app-plus/static/fonts/iconfont.woff2 yiqi_pda/unpackage/dist/dev/app-plus/static/img/icon.png yiqi_pda/unpackage/dist/dev/app-plus/static/img/logo.jpg yiqi_pda/unpackage/dist/dev/app-plus/static/js/print/gbk.js yiqi_pda/unpackage/dist/dev/app-plus/static/js/print/printerjobs.js yiqi_pda/unpackage/dist/dev/app-plus/static/js/utils/filter.js yiqi_pda/unpackage/dist/dev/app-plus/static/js/utils/index.js yiqi_pda/unpackage/dist/dev/app-plus/static/js/utils/modules/color.js yiqi_pda/unpackage/dist/dev/app-plus/static/js/utils/modules/regexValidate.js yiqi_pda/unpackage/dist/dev/app-plus/static/logo.png yiqi_pda/unpackage/dist/dev/app-plus/uni_modules/uview-ui/components/u-icon/iconfont.ttf yiqi_pda/unpackage/dist/dev/app-plus/view.css yiqi_pda/unpackage/dist/dev/app-plus/view.umd.min.js yiqi_pda/unpackage/res/icons/1024x1024.png yiqi_pda/unpackage/res/icons/120x120.png yiqi_pda/unpackage/res/icons/144x144.png yiqi_pda/unpackage/res/icons/152x152.png yiqi_pda/unpackage/res/icons/167x167.png yiqi_pda/unpackage/res/icons/180x180.png yiqi_pda/unpackage/res/icons/192x192.png yiqi_pda/unpackage/res/icons/20x20.png yiqi_pda/unpackage/res/icons/29x29.png yiqi_pda/unpackage/res/icons/40x40.png yiqi_pda/unpackage/res/icons/58x58.png yiqi_pda/unpackage/res/icons/60x60.png yiqi_pda/unpackage/res/icons/72x72.png yiqi_pda/unpackage/res/icons/76x76.png yiqi_pda/unpackage/res/icons/80x80.png yiqi_pda/unpackage/res/icons/87x87.png yiqi_pda/unpackage/res/icons/96x96.png yiqi_screen/.gitignore yiqi_screen/README.md yiqi_screen/babel.config.js yiqi_screen/dist.zip yiqi_screen/jsconfig.json yiqi_screen/package-lock.json yiqi_screen/package.json yiqi_screen/public/favicon.ico yiqi_screen/public/index.html yiqi_screen/src/App.vue yiqi_screen/src/api/api.js yiqi_screen/src/api/common.js yiqi_screen/src/assets/bg1.png yiqi_screen/src/assets/images/OP35.png yiqi_screen/src/assets/images/bg.png yiqi_screen/src/assets/images/blue/OP05.png yiqi_screen/src/assets/images/blue/OP10.png yiqi_screen/src/assets/images/blue/OP20.png yiqi_screen/src/assets/images/blue/OP30.png yiqi_screen/src/assets/images/blue/OP35.png yiqi_screen/src/assets/images/blue/OP40.png yiqi_screen/src/assets/images/blue/OP50.png yiqi_screen/src/assets/images/blue/OP60.png yiqi_screen/src/assets/images/blue/OP70.png yiqi_screen/src/assets/images/blue/OP80.png yiqi_screen/src/assets/images/blue/unit.png yiqi_screen/src/assets/images/border_left1.png yiqi_screen/src/assets/images/border_left2.png yiqi_screen/src/assets/images/border_middle.png yiqi_screen/src/assets/images/border_prodline.png yiqi_screen/src/assets/images/border_right1.png yiqi_screen/src/assets/images/border_right2.png yiqi_screen/src/assets/images/edo.jpg yiqi_screen/src/assets/images/green/OP05.png yiqi_screen/src/assets/images/green/OP10.png yiqi_screen/src/assets/images/green/OP20.png yiqi_screen/src/assets/images/green/OP30.png yiqi_screen/src/assets/images/green/OP35.png yiqi_screen/src/assets/images/green/OP35产线 .png yiqi_screen/src/assets/images/green/OP40.png yiqi_screen/src/assets/images/green/OP50.png yiqi_screen/src/assets/images/green/OP60.png yiqi_screen/src/assets/images/green/OP70.png yiqi_screen/src/assets/images/green/OP80.png yiqi_screen/src/assets/images/green/unit.png yiqi_screen/src/assets/images/green/产线总.png yiqi_screen/src/assets/images/prodline_all.png yiqi_screen/src/assets/images/prodline_all1.png yiqi_screen/src/assets/images/red/OP05.png yiqi_screen/src/assets/images/red/OP10.png yiqi_screen/src/assets/images/red/OP20.png yiqi_screen/src/assets/images/red/OP30.png yiqi_screen/src/assets/images/red/OP35.png yiqi_screen/src/assets/images/red/OP40.png yiqi_screen/src/assets/images/red/OP50.png yiqi_screen/src/assets/images/red/OP60.png yiqi_screen/src/assets/images/red/OP70.png yiqi_screen/src/assets/images/red/OP80.png yiqi_screen/src/assets/images/red/unit.png yiqi_screen/src/assets/images/title.png yiqi_screen/src/assets/images/white/OP05.png yiqi_screen/src/assets/images/white/OP10.png yiqi_screen/src/assets/images/white/OP20.png yiqi_screen/src/assets/images/white/OP30.png yiqi_screen/src/assets/images/white/OP35.png yiqi_screen/src/assets/images/white/OP40.png yiqi_screen/src/assets/images/white/OP50.png yiqi_screen/src/assets/images/white/OP60.png yiqi_screen/src/assets/images/white/OP70.png yiqi_screen/src/assets/images/white/OP80.png yiqi_screen/src/assets/images/white/unit.png yiqi_screen/src/assets/images/yellow/OP05.png yiqi_screen/src/assets/images/yellow/OP10.png yiqi_screen/src/assets/images/yellow/OP20.png yiqi_screen/src/assets/images/yellow/OP30.png yiqi_screen/src/assets/images/yellow/OP35.png yiqi_screen/src/assets/images/yellow/OP40.png yiqi_screen/src/assets/images/yellow/OP50.png yiqi_screen/src/assets/images/yellow/OP60.png yiqi_screen/src/assets/images/yellow/OP70.png yiqi_screen/src/assets/images/yellow/OP80.png yiqi_screen/src/assets/images/yellow/unit.png yiqi_screen/src/assets/logo.png yiqi_screen/src/components/Content.vue yiqi_screen/src/components/EquipmentRunStatus.vue yiqi_screen/src/components/ProdlineHealthy.vue yiqi_screen/src/components/ProductionCompletionTrend.vue yiqi_screen/src/components/ProductionStatistics.vue yiqi_screen/src/components/QualityDataTrends.vue yiqi_screen/src/main.js yiqi_screen/vue.config.js