public string WriteMsg() { UserDataAll += SerialNumber.ToString("X").PadLeft(4, '0'); UserDataAll += SendTime.ToString("yyMMddHHmmss").PadLeft(12, '0'); UserDataAll += Iden_F1.GetHexStr(); VersionL = (byte)HexStringUtility.StrToByteArray(VersionC).Length; UserDataAll += VersionL.ToString("X").PadLeft(2, '0'); UserDataAll += HexStringUtility.StrToHexString(VersionC); byte[] UserDataBytesAllTmp; WaterBaseMessage[] MsgListTmp; string msg = WaterBaseMessageService.GetMsgList_WriteMsg(this, UserDataAll, out UserDataBytesAllTmp, out MsgListTmp); if (msg == "") { UserDataBytesAll = UserDataBytesAllTmp; MsgList = MsgListTmp; } else { if (ShowLog) { logHelper.Error(msg); } } return(msg); }
private void btnReOpen_Click(object sender, EventArgs e) { if (this.dataGridView1.SelectedRows.Count < 1) { MessageBox.Show("请选择一行记录!"); return; } string SerialNumber = this.dataGridView1.SelectedRows[0].Cells["SerialNumber"].Value.ToString(); string UserNo = this.dataGridView1.SelectedRows[0].Cells["UserNo"].Value.ToString(); string UserName = this.dataGridView1.SelectedRows[0].Cells["UserName"].Value.ToString(); string IdentityNumber = this.dataGridView1.SelectedRows[0].Cells["IdentityNumber"].Value.ToString(); byte[] newUserName = null; newUserName = HexStringUtility.StrToByteArray("".PadRight(16, ' ')); string DeviceList = this.dataGridView1.SelectedRows[0].Cells["DeviceList"].Value.ToString(); string ResidualWater = this.dataGridView1.SelectedRows[0].Cells["ResidualWater"].Value.ToString(); string ResidualElectric = this.dataGridView1.SelectedRows[0].Cells["ResidualElectric"].Value.ToString(); string TotalWater = this.dataGridView1.SelectedRows[0].Cells["TotalWater"].Value.ToString(); string TotalElectric = this.dataGridView1.SelectedRows[0].Cells["TotalElectric"].Value.ToString(); string showInfo = "确定重新开卡当前选择用户卡?" + Environment.NewLine + "卡号:" + UserNo + ",用户名:" + UserName + Environment.NewLine + "身份证号:" + IdentityNumber; if ((MessageBox.Show(showInfo, "重新开卡", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)) == DialogResult.Yes) { Log(getDateStr() + "开始重新开卡"); if (!SeedIC()) { Log("寻卡失败"); Log(getDateStr() + "结束重新开卡"); return; } string SerialNumberNew = getSnr().ToString("X"); //保存远程服务器数据库 string str = DataTransfer.ReOpenCardUser(SerialNumber, SerialNumberNew); JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str); if (bool.Parse(result["Result"].ToString())) { MessageBox.Show("取消挂失成功!"); SearchCardUser(); } else { string txt = result["Message"].ToString(); MessageBox.Show(txt); myLogger.Error(txt); Log(txt); Log(getDateStr() + "结束重新开卡"); return; } int mode = 4; //以B密码认证 int sec = 1; //扇区 int block = 0; string key = getKeyA(); //读卡密码 string result_WriteIC = ""; string result_AuthIC = ""; //设置扇区1内容 sec = 1; //认证卡密码B result_AuthIC = CardCommon.AuthIC(icdev, mode, sec, key); if (result_AuthIC == InfoSys.StrAuthSuccess) { //写数据块0,数据块0为卡类型(1字节)、用户卡号(4字节) block = 0; result_WriteIC = CardCommon.WriteIC(icdev, sec, block, (InfoSys.CardTypeUser + UserNo.PadLeft(8, '0')).PadRight(32, '0')); if (result_WriteIC != "") { Log("重新写卡扇区" + sec + "数据块" + block + "写入失败"); Log(getDateStr() + "结束重新开卡"); return; } //写数据块1,数据块1为用户名(16字节) block = 1; result_WriteIC = CardCommon.WriteIC(icdev, sec, block, HexStringUtility.ByteArrayToHexString(newUserName)); if (result_WriteIC != "") { Log("重新写卡扇区" + sec + "数据块" + block + "写入失败"); Log(getDateStr() + "结束重新开卡"); return; } //写数据块2,数据块2为身份证号(9字节)、联系电话(6字节) block = 2; result_WriteIC = CardCommon.WriteIC(icdev, sec, block, (IdentityNumber + "0" + Telephone).PadRight(32, '0')); if (result_WriteIC != "") { Log("重新写卡扇区" + sec + "数据块" + block + "写入失败"); Log(getDateStr() + "结束重新开卡"); return; } //写数据块3,密码eeeeeeeeeeee block = 3; CardCommon.WritePWD(icdev, sec, block, getKeyA(), InfoSys.KeyControl, getKeyB()); } else { Log("重新写卡扇区" + sec + "数据块" + block + "写入失败"); Log(getDateStr() + "结束重新开卡"); return; } //设置扇区2内容 sec = 2; //认证卡密码B result_AuthIC = CardCommon.AuthIC(icdev, mode, sec, key); AuthLog(InfoSys.CardTypeStrUser, InfoSys.MethodOpenCard, sec, result_AuthIC); if (result_AuthIC == InfoSys.StrAuthSuccess) { //写数据块0,剩余可用水量(4字节)剩余可用电量(4字节)累计用水量(4字节)累计用电量(4字节) block = 0; double d1 = Tools.StringToDouble(ResidualWater, 0); double d2 = Tools.StringToDouble(ResidualElectric, 0); double d3 = Tools.StringToDouble(TotalWater, 0); double d4 = Tools.StringToDouble(TotalElectric, 0); result_WriteIC = CardCommon.WriteIC(icdev, sec, block, d1.ToString().PadLeft(8, '0') + d2.ToString().PadLeft(8, '0') + d3.ToString().PadLeft(8, '0') + d4.ToString().PadLeft(8, '0')); if (result_WriteIC != "") { Log("重新写卡扇区" + sec + "数据块" + block + "写入失败"); Log(getDateStr() + "结束重新开卡"); return; } string[] s = { "", "", "", "" }; string[] DeviceLists = DeviceList.Split(','); for (int i = 0; i < DeviceLists.Length; i++) { s[i] = DeviceLists[i]; } string data = ""; //写数据块1,地址码1(7字节)地址码2(7字节) block = 1; data = (s[0] + s[1]).PadRight(32, '0'); result_WriteIC = CardCommon.WriteIC(icdev, sec, block, data); if (result_WriteIC != "") { Log("重新写卡扇区" + sec + "数据块" + block + "写入失败"); Log(getDateStr() + "结束重新开卡"); return; } //写数据块2,地址码1(7字节)地址码2(7字节) block = 2; data = (s[2] + s[3]).PadRight(32, '0'); result_WriteIC = CardCommon.WriteIC(icdev, sec, block, data); if (result_WriteIC != "") { Log("重新写卡扇区" + sec + "数据块" + block + "写入失败"); Log(getDateStr() + "结束重新开卡"); return; } //写数据块3,密码eeeeeeeeeeee block = 3; CardCommon.WritePWD(icdev, sec, block, getKeyA(), InfoSys.KeyControl, getKeyB()); } Log("重新开卡完成"); Log(getDateStr() + "结束重新开卡"); } }
public bool processPacket(byte[] buffer, int offset, int length) { int pos = 0; while (pos < length) { try { if (buffer[pos] == HexStringUtility.StrToByteArray(ProtocolKey.ReceiveHeartThrob)[0] || length - pos < 14) { if (userToken.DeviceInfo != null && userToken.DeviceList != null) { userToken.DeviceList.Online = 1; userToken.DeviceList.LastUpdate = DateTime.Now; userToken.DeviceList.Remark = FormatHelper.ByteArrayToHexString(buffer, offset + pos, length - pos); userToken.DeviceList.TerminalState = "心跳"; updateDeviceList(userToken.DeviceList); string FullDeviceNo = DeviceModule.GetFullDeviceNoByID(userToken.DeviceList.Id); OnlineDeviceService.AddOnline(FullDeviceNo, userToken.DeviceList); DeviceEvent deviceEvent = new DeviceEvent(); deviceEvent.DeviceNo = userToken.DeviceInfo.DeviceNo; deviceEvent.EventTime = userToken.DeviceList.LastUpdate; deviceEvent.EventType = userToken.DeviceList.TerminalState; deviceEvent.Remark = ""; deviceEvent.RawData = FormatHelper.ByteArrayToHexString(buffer, offset + pos, length - pos); proxySendDeviceList(userToken.DeviceList, deviceEvent); } byte[] data = HexStringUtility.StrToByteArray("%"); send(data, 0, data.Length); if (SysCache.ShowInfoLog) { string info1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + userToken.ConnectedSocket.RemoteEndPoint.ToString() + "]响应(信息不对):" + "长度不到14"; LogHelper.Info(info1); ShowLogData.add(info1); } if (length - pos < 14) { break; } else { pos += 1; } } else if (buffer[pos] == BaseProtocol.BeginChar) { int bodyLength = buffer[pos + 1]; //长度 byte[] bs = new byte[5 + bodyLength]; Array.Copy(buffer, pos, bs, 0, bs.Length); processCommandBase(bs); pos += 5 + bodyLength; } else if (buffer[pos] == WaterBaseProtocol.BeginChar[0] && buffer[pos + 1] == WaterBaseProtocol.BeginChar[1]) { byte[] bs_UpOrDown_Length = new byte[2]; Array.Copy(buffer, pos + 11, bs_UpOrDown_Length, 0, 2); string str_UpOrDown_Length = HexStringUtility.ByteArrayToHexString(bs_UpOrDown_Length).ToUpper(); string str_Length = str_UpOrDown_Length.Substring(1, 3); int bodyLength = Convert.ToInt32(str_Length, 16); //正文长度 int baseLength = 0; //其它长度 baseLength += 2; //帧起始符 baseLength += 6; //中心站及遥测站 baseLength += 2; //密码 baseLength += 1; //功能码 baseLength += 2; //报文上下行表示及长度 baseLength += 1; //报文起始符 baseLength += 1; //报文结束符 baseLength += 2; //校验码 byte[] bs = new byte[baseLength + bodyLength]; Array.Copy(buffer, pos, bs, 0, bs.Length); processCommandWater(bs); pos += baseLength + bodyLength; } else { pos += 1; } } catch (Exception ex) { if (userToken.DeviceInfo != null && userToken.DeviceList != null) { userToken.DeviceList.Online = 1; userToken.DeviceList.LastUpdate = DateTime.Now; userToken.DeviceList.Remark = FormatHelper.ByteArrayToHexString(buffer, offset, length); userToken.DeviceList.TerminalState = "心跳"; updateDeviceList(userToken.DeviceList); string FullDeviceNo = DeviceModule.GetFullDeviceNoByID(userToken.DeviceList.Id); OnlineDeviceService.AddOnline(FullDeviceNo, userToken.DeviceList); DeviceEvent deviceEvent = new DeviceEvent(); deviceEvent.DeviceNo = userToken.DeviceInfo.DeviceNo; deviceEvent.EventTime = userToken.DeviceList.LastUpdate; deviceEvent.EventType = userToken.DeviceList.TerminalState; deviceEvent.Remark = ""; deviceEvent.RawData = FormatHelper.ByteArrayToHexString(buffer, offset + pos, length - pos); proxySendDeviceList(userToken.DeviceList, deviceEvent); } byte[] data = HexStringUtility.StrToByteArray("%"); send(data, 0, data.Length); if (SysCache.ShowInfoLog) { string info1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + userToken.ConnectedSocket.RemoteEndPoint.ToString() + "]响应(信息不对):" + "【错误】【pos:" + pos + "】:" + ex.Message; LogHelper.Info(info1); ShowLogData.add(info1); } break; } } return(true); }