using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MesAdaptor { public class SajetConnectShinewave : ISajetConnect { private enum CMD { Signin = 1, Log = 4, ValueReport = 5, StringValueReport = 6, HeaderRegister = 8, WoCheck = 14, SnCheck = 15, Report = 16, } public bool SajetTransStart() => SajetConnectAdapter.SajetTransStart(); public bool SajetTransClose() => SajetConnectAdapter.SajetTransClose(); private string userId = ""; public bool SajetTransSignIn(ref string data) { var attemptId = data; if (SajetTransData(CMD.Signin, ref data)) { if (string.IsNullOrEmpty(data) || data.StartsWith("NG")) { userId = ""; return false; } else { userId = attemptId; return true; } } userId = ""; return false; } private string WorkOrder = ""; public bool SajetTransWoCheck(ref string workOrder) { if (string.IsNullOrEmpty(userId)) return false; if (workOrder == null) workOrder = ""; var msg = userId + "," + workOrder + ","; if (SajetTransData(CMD.WoCheck, ref msg)) { if (string.IsNullOrEmpty(msg) || msg.StartsWith("NG")) { WorkOrder = ""; return false; } else { WorkOrder = workOrder; return true; } } WorkOrder = ""; return false; } private string SN; public bool SajetTransSnCheck(ref string serialNumber) { var attemptSN = serialNumber; if (string.IsNullOrEmpty(userId)) return false; if (WorkOrder == null) WorkOrder = ""; var msg = userId + "," + WorkOrder + "," + serialNumber + ","; if (SajetTransData(CMD.SnCheck, ref msg)) { if (string.IsNullOrEmpty(msg) || msg.StartsWith("NG")) { SN = ""; return false; } else { SN = attemptSN; return true; } } SN = ""; return false; } public bool SajetTransSnCheck(ref string sn, string model) { throw new NotImplementedException(); } public bool SajetTranFinishSuccess() { if (string.IsNullOrEmpty(userId)) return false; //if (string.IsNullOrEmpty(WorkOrder)) // return false; if (string.IsNullOrEmpty(SN)) return false; string msg = userId + "," + WorkOrder + "," + SN + ","; if (string.IsNullOrEmpty(msg)) return false; msg += "OK,"; #if DEBUG return true; #endif return SajetTransData(CMD.Report, ref msg); } public bool SajetTranFinishFail(MesErrorCode errorCode) { if (string.IsNullOrEmpty(userId)) return false; //if (string.IsNullOrEmpty(WorkOrder)) // return false; if (string.IsNullOrEmpty(SN)) return false; string msg = userId + "," + WorkOrder + "," + SN + ","; if (string.IsNullOrEmpty(msg)) return false; msg += "NG," + GetMesCodeString(errorCode) + ","; #if DEBUG return true; #endif return SajetTransData(CMD.Report, ref msg); } public string SajetTransRegisterHeader(string model, string header) { if (string.IsNullOrEmpty(userId)) return ""; var msg = userId + ","; msg += model + "," + header; if (SajetTransData(CMD.HeaderRegister, ref msg)) { if (msg.StartsWith("OK")) { //get codename msg = msg.Substring(3); var spaceIndex = msg.IndexOf(","); if (spaceIndex > 0) { msg = msg.Substring(0, spaceIndex); } return msg; } return null; } return null; } public bool SajetTransReport(ValueReportDatas reportPairs) { if (string.IsNullOrEmpty(userId)) return false; if (string.IsNullOrEmpty(SN)) return false; string msgHeader = userId + "," + SN; string msg; bool result = true; foreach (var report in reportPairs) { msg = string.Format("{0},{1}:{2},", msgHeader, report.Key, report.Val); var cmdResult = SajetTransData(CMD.StringValueReport, ref msg); if (!cmdResult) result = false; } return result; } public bool SajetTransReport(Dictionary resultPair, Dictionary codePair) { if (string.IsNullOrEmpty(userId)) return false; if (string.IsNullOrEmpty(SN)) return false; string msg = userId + "," + SN + ","; foreach (var result in resultPair) { if (codePair.Keys.Contains(result.Key)) { msg += string.Format("{0}:{1},", codePair[result.Key], string.Format("{0}.00", result.Value)); } } return SajetTransData(CMD.ValueReport, ref msg); } public bool SajetTransLog(string data) { return true; if (string.IsNullOrEmpty(userId)) return false; if (string.IsNullOrEmpty(SN)) return false; string prefix = userId + "," + SN + ","; while (data.Length > 0) { var msg = prefix; int sendLength = Math.Min(250 - msg.Length, data.Length); var sendString = data.Substring(0, sendLength); msg += sendString; if (!SajetTransData(CMD.Log, ref msg)) { break; } data = data.Substring(sendLength); } return data.Length == 0; } private bool SajetTransData(CMD command, ref string data) { //return true; if (!data.EndsWith(",")) { data = data + ","; } return SajetConnectAdapter.SajetTransData((int)command, ref data); } private string GetSendPrefix() { string msg = ""; if (string.IsNullOrEmpty(userId)) { return null; } msg = userId + ","; if (string.IsNullOrEmpty(WorkOrder)) { return null; } msg += WorkOrder + ","; return msg; } private string GetMesCodeString(MesErrorCode mesError) { switch (mesError) { case MesErrorCode.ChargerConnectFail: return "EC001"; case MesErrorCode.ModelNameUpadateFail: return "EC002"; case MesErrorCode.SerilaNumberUpadateFail: return "EC003"; case MesErrorCode.UtcDatetimeUpdateFail: return "EC004"; case MesErrorCode.FourthGenModelVersionMismatch: return "EC005"; case MesErrorCode.FourthGenSimInstartionMismatch: return "EC006"; case MesErrorCode.FourthGenSimInfoMismatch: return "EC007"; case MesErrorCode.WifiModeNotClient: return "EC008"; case MesErrorCode.WifiRssiLow: return "EC009"; case MesErrorCode.FirmwareUploadFail: return "EC010"; case MesErrorCode.FirmwareUpdateTimeout: return "EC011"; case MesErrorCode.FirmwareVersionCheckFail: return "EC012"; case MesErrorCode.EmergencyButtonTestFail: return "EC013"; case MesErrorCode.GreenButtonTestFail: return "EC014"; case MesErrorCode.BlueButtonTestFail: return "EC015"; case MesErrorCode.FactoryResetFail: return "EC016"; case MesErrorCode.SetOptionsFail: return "ST001"; case MesErrorCode.ProgramFail: return "ST002"; case MesErrorCode.RestFail: return "ST003"; case MesErrorCode.ProgramCheckFail: return "ST004"; case MesErrorCode.GetCheckSumFail: return "ST005"; } return "EC001"; } } }