private void button1_Click(object sender, EventArgs e)
        {
            this.lbState.Text = "";

            if (checkBox1.Checked)
            {
                if (MessageBox.Show("确定减少水电量?",
                                    "减少确认", MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != DialogResult.Yes)
                {
                    return;
                }
            }
            else
            {
                if (MessageBox.Show("确定充值水电量?",
                                    "充值确认", MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != DialogResult.Yes)
                {
                    return;
                }
            }

            pfu.getNew();

            getNew();

            if (this.lbCardType.Text.Trim() != InfoSys.CardTypeUser)
            {
                MessageBox.Show("非用户卡不可充值");
                return;
            }

            if (!CheckValue())
            {
                return;
            }

            double d_UnitPriceWater    = Tools.StringToDouble(UnitPriceWater, 0);
            double d_UnitPriceElectric = Tools.StringToDouble(UnitPriceElectric, 0);
            double d_NumberWater       = Tools.StringToDouble(WaterNum, 0);
            double d_NumberElectric    = Tools.StringToDouble(ElectricNum, 0);
            double d_WaterPrice        = Tools.StringToDouble(WaterPrice, 0);
            double d_ElectricPrice     = Tools.StringToDouble(ElectricPrice, 0);

            if (checkBox1.Checked)
            {
                d_NumberWater    = -d_NumberWater;
                d_NumberElectric = -d_NumberElectric;
                d_WaterPrice     = -d_WaterPrice;
                d_ElectricPrice  = -d_ElectricPrice;
            }

            double d_ResidualWater    = Tools.StringToDouble(this.txtResidualWater.Text, 0);
            double d_ResidualElectric = Tools.StringToDouble(this.txtResidualElectric.Text, 0);

            int i_ResidualWater_new = (int)((d_ResidualWater + d_NumberWater) * 10);

            if (i_ResidualWater_new < 0)
            {
                i_ResidualWater_new = 0;
            }
            if (i_ResidualWater_new > 99999999)
            {
                i_ResidualWater_new = 99999999;
            }
            int i_ResidualElectric_new = (int)((d_ResidualElectric + d_NumberElectric) * 10);

            if (i_ResidualElectric_new < 0)
            {
                i_ResidualElectric_new = 0;
            }
            if (i_ResidualElectric_new > 99999999)
            {
                i_ResidualElectric_new = 99999999;
            }


            //MessageBox.Show("可以充值");
            //保存远程服务器数据库
            string str = DataTransfer.RechargeCardUser(this.lbSerialNumber.Text.Trim(), this.txtUserNo.Text.Trim(),
                                                       this.txtUserName.Text.Trim(), this.txtIdentityNumber.Text.Trim(), this.txtTelephone.Text.Trim(),
                                                       d_WaterPrice.ToString(), d_NumberWater.ToString(), d_ElectricPrice.ToString(), d_NumberElectric.ToString(),
                                                       this.txtWaterUsed.Text, this.txtElectricUsed.Text, this.txtRemark.Text.Trim());
            JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);

            if (!bool.Parse(result["Result"].ToString()))
            {
                string txt = result["Message"].ToString();
                MessageBox.Show(txt);
                pf.Log(txt);
                this.lbState.Text = txt;
                pf.Log(pf.getDateStr() + this.lbState.Text);
                return;
            }

            int    mode           = 4;            //以B密码认证
            int    sec            = 1;            //扇区
            int    block          = 0;
            string key            = pf.getKeyB(); //读卡密码
            string result_WriteIC = "";
            string result_AuthIC  = "";

            //设置扇区2内容
            sec = 2;
            //认证卡密码B
            result_AuthIC = CardCommon.AuthIC(icdev, mode, sec, key);
            pf.AuthLog(InfoSys.CardTypeStrUser, InfoSys.MethodModifyCard, sec, result_AuthIC);
            if (result_AuthIC == InfoSys.StrAuthSuccess)
            {
                //写数据块0,剩余可用水量(4字节)剩余可用电量(4字节)累计用水量(4字节)累计用电量(4字节)
                block = 0;
                double d3 = Tools.StringToDouble(this.txtTotalWater.Text, 0);
                double d4 = Tools.StringToDouble(this.txtTotalElectric.Text, 0);
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block,
                                                    i_ResidualWater_new.ToString().PadLeft(8, '0') +
                                                    i_ResidualElectric_new.ToString().PadLeft(8, '0') +
                                                    d3.ToString().PadLeft(8, '0') +
                                                    d4.ToString().PadLeft(8, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = "写卡出错,充值失败!";
                    pf.Log(pf.getDateStr() + this.lbState.Text);
                    return;
                }
            }
            else
            {
                this.lbState.Text = "认证出错,充值失败!";
                pf.Log(pf.getDateStr() + this.lbState.Text);
                return;
            }

            this.lbState.Text = "充值成功!";
            getInfo();
            this.txtNumberWater.Text        = "0";
            this.txtTotalPriceWater.Text    = "0";
            this.txtNumberElectric.Text     = "0";
            this.txtTotalPriceElectric.Text = "0";
            pf.Log(pf.getDateStr() + this.lbState.Text + "充值后剩余水量:" + i_ResidualWater_new + ",充值后剩余电量:" + i_ResidualElectric_new);
            return;
        }
        private void button3_Click(object sender, EventArgs e)
        {
            if (SerialNumber_old == "")
            {
                MessageBox.Show("请先读卡再修改卡!");
                return;
            }

            if (MessageBox.Show("确定" + InfoSys.CardTypeStrDevice + InfoSys.MethodModifyCard + "?",
                                InfoSys.CardTypeStrDevice + InfoSys.MethodModifyCard, MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != DialogResult.Yes)
            {
                return;
            }

            pf.BeginLog(InfoSys.CardTypeStrDevice, InfoSys.MethodModifyCard);

            if (!CheckValue())
            {
                pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodModifyCard);
                return;
            }

            if (!pf.SeedIC())
            {
                this.lbCardType.Text = InfoSys.StrSeekFailure;
                pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodModifyCard);
                return;
            }

            this.lbSerialNumber.Text = pf.getSnr().ToString("X");

            if (SerialNumber_old != this.lbSerialNumber.Text)
            {
                MessageBox.Show("请重新读卡再修改卡!");
                pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodModifyCard);
                return;
            }

            //保存远程服务器数据库
            string str = DataTransfer.ModifyCardDevice(this.lbSerialNumber.Text, AddressCode1, AddressCode2, AddressCode3,
                                                       YearExploitation, AlertAvailableWater, AlertAvailableElectric, TypeCode, MeterPulse, AlertWaterLevel, StationType, StationCode, Frequency);
            JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);

            if (!bool.Parse(result["Result"].ToString()))
            {
                string txt = result["Message"].ToString();
                MessageBox.Show(txt);
                pf.Log(txt);
                pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodModifyCard);
                return;
            }

            int    mode           = 4;            //以B密码认证
            int    sec            = 1;            //扇区
            int    block          = 0;
            string key            = pf.getKeyB(); //读卡密码
            string result_WriteIC = "";
            string result_AuthIC  = "";

            //设置扇区1内容
            sec = 1;
            //认证卡密码B
            result_AuthIC = CardCommon.AuthIC(icdev, mode, sec, key);
            pf.AuthLog(InfoSys.CardTypeStrDevice, InfoSys.MethodModifyCard, sec, result_AuthIC);
            if (result_AuthIC == InfoSys.StrAuthSuccess)
            {
                //写数据块0,数据块0为卡类型(1字节)、行政区划码(3字节)、镇(乡)村编码(3字节)、测站编码(1字节)、年度可开采水量(4字节)、可用水量提醒值(2字节)、可用水量提醒值(2字节)
                block = 0;
                string hex_AddressCode3           = int.Parse(AddressCode3).ToString("X").PadLeft(2, '0');
                double d_YearExploitation         = Tools.StringToDoubleMultiply10(YearExploitation, 0);
                string hex_AlertAvailableWater    = int.Parse(AlertAvailableWater).ToString("X").PadLeft(4, '0');
                string hex_AlertAvailableElectric = int.Parse(AlertAvailableElectric).ToString("X").PadLeft(4, '0');
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, InfoSys.CardTypeDevice + AddressCode1 + AddressCode2 +
                                                    hex_AddressCode3 + d_YearExploitation.ToString().PadLeft(8, '0') + hex_AlertAvailableWater + hex_AlertAvailableElectric);
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrDevice, InfoSys.StrModifyFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodModifyCard);
                    return;
                }

                //写数据块1,数据块1为流量计类型(1字节)、电表脉冲数(2字节bcd码)、水位报警值(4字节)
                block = 1;
                string hex_TypeCode      = int.Parse(TypeCode).ToString("X").PadLeft(2, '0');
                double d_AlertWaterLevel = Tools.StringToDoubleMultiply10(AlertWaterLevel, 0);
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, (hex_TypeCode +
                                                                        MeterPulse.ToString().PadLeft(4, '0') +
                                                                        d_AlertWaterLevel.ToString().PadLeft(8, '0')).PadRight(32, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrDevice, InfoSys.StrModifyFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodModifyCard);
                    return;
                }

                //写数据块2,数据块2为站类型(1字节)、地址码(2字节)
                block = 2;
                string hex_StationType = int.Parse(StationType).ToString("X").PadLeft(2, '0');
                string hex_StationCode = int.Parse(StationCode).ToString("X").PadLeft(4, '0');
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, (hex_StationType + hex_StationCode).PadRight(32, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrDevice, InfoSys.StrOpenFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodOpenCard);
                    return;
                }
            }

            SerialNumber_old     = "";
            this.lbCardType.Text = InfoSys.CardTypeDevice;
            this.lbState.Text    = InfoSys.StrModifySuccess;
            pf.Log(this.lbState.Text);
            pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodModifyCard);
        }
        private void btnCancel_Click(object sender, EventArgs e)
        {
            if (SerialNumber_old == "")
            {
                MessageBox.Show("请先读卡再注销卡!");
                return;
            }

            if (this.lbCardType.Text != InfoSys.CardTypeDevice)
            {
                MessageBox.Show("非" + InfoSys.CardTypeStrDevice + "无法注销!");
                return;
            }

            if (MessageBox.Show("确定" + InfoSys.CardTypeStrDevice + InfoSys.MethodCancelCard + "?",
                                InfoSys.CardTypeStrDevice + InfoSys.MethodCancelCard, MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != DialogResult.Yes)
            {
                return;
            }

            pf.BeginLog(InfoSys.CardTypeStrDevice, InfoSys.MethodCancelCard);

            if (!pf.SeedIC())
            {
                this.lbCardType.Text = InfoSys.StrSeekFailure;
                pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodCancelCard);
                return;
            }

            this.lbSerialNumber.Text = pf.getSnr().ToString("X");

            if (SerialNumber_old != this.lbSerialNumber.Text)
            {
                MessageBox.Show("请重新读卡再注销卡!");
                pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodCancelCard);
                return;
            }

            //保存远程服务器数据库
            string           str    = DataTransfer.CancelCardDevice(this.lbSerialNumber.Text);
            JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);

            if (!bool.Parse(result["Result"].ToString()))
            {
                string txt = result["Message"].ToString();
                MessageBox.Show(txt);
                pf.Log(txt);
                pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodCancelCard);
                return;
            }

            int    mode           = 0;            //以A密码认证
            string key            = pf.getKeyB(); //读卡密码
            string keyOld         = pf.getKeyA(); //读卡密码
            string result_WriteIC = "";
            string result_AuthIC  = "";

            for (int i = 0; i < pf.getSize(); i++)
            {
                result_AuthIC = CardCommon.AuthIC(icdev, mode, i, key);
                pf.AuthLog(InfoSys.CardTypeStrDevice, InfoSys.MethodCancelCard, i, result_AuthIC);
                if (result_AuthIC != InfoSys.StrAuthSuccess)
                {
                    continue;
                }
                else
                {
                    int begin = 0;
                    if (i == 0)
                    {
                        begin = 1;
                    }

                    for (int j = begin; j < 3; j++)
                    {
                        result_WriteIC = CardCommon.WriteIC(icdev, i, j, "".PadRight(32, '0'));
                        pf.Log("注销卡扇区:" + i + " 数据块:" + j + " 结果:" + (result_WriteIC == "" ? "成功" : result_WriteIC));
                    }

                    {
                        int block = 3;
                        result_WriteIC = CardCommon.WriteIC(icdev, i, block, keyOld + InfoSys.KeyControl + keyOld);
                        pf.Log("注销卡写密码扇区:" + i + " 数据块:" + block + " 结果:" + (result_WriteIC == "" ? "成功" : result_WriteIC));
                    }
                }
            }

            SerialNumber_old  = "";
            this.lbState.Text = InfoSys.MethodCancelCard + "结束";
            pf.EndLog(InfoSys.CardTypeStrDevice, InfoSys.MethodCancelCard);
        }
        private void button2_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("确定" + InfoSys.CardTypeStrRead + InfoSys.MethodOpenCard + "?",
                                InfoSys.CardTypeStrRead + InfoSys.MethodOpenCard, MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != DialogResult.Yes)
            {
                return;
            }

            pf.BeginLog(InfoSys.CardTypeStrRead, InfoSys.MethodOpenCard);

            if (!CheckValue())
            {
                pf.EndLog(InfoSys.CardTypeStrRead, InfoSys.MethodOpenCard);
                return;
            }

            if (!pf.SeedIC())
            {
                this.lbCardType.Text = InfoSys.StrSeekFailure;
                pf.EndLog(InfoSys.CardTypeStrRead, InfoSys.MethodOpenCard);
                return;
            }

            this.lbSerialNumber.Text = pf.getSnr().ToString("X");

            //保存远程服务器数据库
            string           str    = DataTransfer.OpenCardRead(this.lbSerialNumber.Text, "", "", "0");
            JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);

            if (!bool.Parse(result["Result"].ToString()))
            {
                string txt = result["Message"].ToString();
                MessageBox.Show(txt);
                pf.Log(txt);
                pf.EndLog(InfoSys.CardTypeStrRead, InfoSys.MethodOpenCard);
                return;
            }

            int    mode           = 4;            //以B密码认证
            int    sec            = 1;            //扇区
            int    block          = 0;
            string key            = pf.getKeyA(); //读卡密码
            string keyNew         = pf.getKeyB(); //读卡密码
            string result_WriteIC = "";
            string result_AuthIC  = "";

            //设置扇区1内容
            sec = 1;
            //认证卡密码B
            result_AuthIC = CardCommon.AuthIC(icdev, mode, sec, key);
            pf.AuthLog(InfoSys.CardTypeStrRead, InfoSys.MethodOpenCard, sec, result_AuthIC);
            if (result_AuthIC == InfoSys.StrAuthSuccess)
            {
                //写数据块0,数据块0为卡类型(1字节)
                block          = 0;
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, (InfoSys.CardTypeRead).PadRight(32, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrRead, InfoSys.StrOpenFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrRead, InfoSys.MethodOpenCard);
                    return;
                }
            }
            else
            {
                this.lbState.Text = InfoSys.StrCannotOpen + InfoSys.StrOpenFailure;
                pf.Log(this.lbState.Text);
                pf.EndLog(InfoSys.CardTypeStrRead, InfoSys.MethodOpenCard);
                return;
            }

            for (int i = 0; i < pf.getSize(); i++)
            {
                result_AuthIC = CardCommon.AuthIC(icdev, mode, i, key);
                if (result_AuthIC == InfoSys.StrAuthSuccess)
                {
                    //写数据块3,密码eeeeeeeeeeee
                    block = 3;
                    CardCommon.WritePWD(icdev, i, block, keyNew, InfoSys.KeyControl, keyNew);
                }
            }

            SerialNumber_old     = "";
            this.lbCardType.Text = InfoSys.CardTypeRead;
            this.lbState.Text    = InfoSys.StrOpenSuccess;
            pf.Log(this.lbState.Text);
            pf.EndLog(InfoSys.CardTypeStrRead, InfoSys.MethodOpenCard);
        }
Esempio n. 5
0
        public static void GetBaseInfo()
        {
            if (LoginUserName == "" || LoginPassword == "" || !LoginIsLogin)
            {
                myLogger.Error("无法获取基本信息");
                return;
            }

            try
            {
                string str = DataTransfer.GetDistrictList();

                JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);
                if (bool.Parse(result["Result"].ToString()))
                {
                    ListDistricts = JavaScriptConvert.DeserializeObject <List <District> >(result["Message"].ToString());
                }
                else
                {
                    myLogger.Error("获取ListDistricts失败");
                }
            }
            catch
            {
                myLogger.Error("无法获取ListDistricts");
            }

            lock (_DistrictCollection)
            {
                _DistrictCollection.Clear();
                foreach (District district in ListDistricts)
                {
                    _DistrictCollection.Add(district.Id, district);
                }
            }

            try
            {
                string str = DataTransfer.GetDeviceList();

                JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);
                if (bool.Parse(result["Result"].ToString()))
                {
                    ListDevices = JavaScriptConvert.DeserializeObject <List <Device> >(result["Message"].ToString());
                }
                else
                {
                    myLogger.Error("获取ListDevices失败");
                }
            }
            catch
            {
                myLogger.Error("无法获取ListDevices");
            }

            try
            {
                string str = DataTransfer.GetTypeCodeList();

                JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);
                if (bool.Parse(result["Result"].ToString()))
                {
                    ListDeviceTypeCodes = JavaScriptConvert.DeserializeObject <List <DeviceTypeCode> >(result["Message"].ToString());
                }
                else
                {
                    myLogger.Error("获取ListDeviceTypeCodes失败");
                }
            }
            catch
            {
                myLogger.Error("无法获取ListDeviceTypeCodes");
            }
        }
        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() + "结束重新开卡");
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            if (SerialNumber_old == "")
            {
                MessageBox.Show("请先读卡再修改卡!");
                return;
            }

            if (MessageBox.Show("确定" + InfoSys.CardTypeStrNetSet + InfoSys.MethodModifyCard + "?",
                                InfoSys.CardTypeStrNetSet + InfoSys.MethodModifyCard, MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != DialogResult.Yes)
            {
                return;
            }

            pf.BeginLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);

            if (!CheckValue())
            {
                pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
                return;
            }

            if (!pf.SeedIC())
            {
                this.lbCardType.Text = InfoSys.StrSeekFailure;
                pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
                return;
            }

            this.lbSerialNumber.Text = pf.getSnr().ToString("X");

            if (SerialNumber_old != this.lbSerialNumber.Text)
            {
                MessageBox.Show("请重新读卡再修改卡!");
                pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
                return;
            }

            //保存远程服务器数据库
            string           str    = DataTransfer.ModifyCardNetSet(this.lbSerialNumber.Text, IP, Port, IsDomain, APN, UserName, Password);
            JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);

            if (!bool.Parse(result["Result"].ToString()))
            {
                string txt = result["Message"].ToString();
                MessageBox.Show(txt);
                pf.Log(txt);
                pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodOpenCard);
                return;
            }

            int    mode           = 4;            //以B密码认证
            int    sec            = 1;            //扇区
            int    block          = 0;
            string key            = pf.getKeyB(); //读卡密码
            string result_WriteIC = "";
            string result_AuthIC  = "";

            string hex_IP       = HexStringUtility.StrToHexString(IP);
            string hex_Port     = HexStringUtility.StrToHexString(Port);
            string hex_APN      = HexStringUtility.StrToHexString(APN);
            string hex_UserName = HexStringUtility.StrToHexString(UserName);
            string hex_Password = HexStringUtility.StrToHexString(Password);

            string len_IP       = (hex_IP.Length / 2).ToString("X").PadLeft(2, '0');
            string len_Port     = (hex_Port.Length / 2).ToString("X").PadLeft(2, '0');
            string len_APN      = (hex_APN.Length / 2).ToString("X").PadLeft(2, '0');
            string len_UserName = (hex_UserName.Length / 2).ToString("X").PadLeft(2, '0');
            string len_Password = (hex_Password.Length / 2).ToString("X").PadLeft(2, '0');

            //设置扇区1内容
            sec = 1;
            //认证卡密码B
            result_AuthIC = CardCommon.AuthIC(icdev, mode, sec, key);
            pf.AuthLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard, sec, result_AuthIC);
            if (result_AuthIC == InfoSys.StrAuthSuccess)
            {
                //写数据块0,数据块0为卡类型(1字节)、是否域名访问(1字节)、有效IP地址长度(1字节)、有效端口号长度(1字节)
                //APN名称长度(1字节)、APN用户名长度(1字节)、APN密码长度(1字节)
                block          = 0;
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, (InfoSys.CardTypeNetSet + IsDomain +
                                                                        len_IP + len_Port + len_APN + len_UserName + len_Password).PadRight(32, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrNetSet, InfoSys.StrModifyFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
                    return;
                }

                //写数据块1,IP地址或域名地址
                block          = 1;
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, hex_IP.PadRight(32, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrNetSet, InfoSys.StrModifyFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
                    return;
                }

                //写数据块2,端口号(5字节)
                block          = 2;
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, hex_Port.PadRight(32, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrNetSet, InfoSys.StrModifyFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
                    return;
                }
            }

            //设置扇区2内容
            sec = 2;
            //认证卡密码B
            result_AuthIC = CardCommon.AuthIC(icdev, mode, sec, key);
            pf.AuthLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodOpenCard, sec, result_AuthIC);
            if (result_AuthIC == InfoSys.StrAuthSuccess)
            {
                //写数据块0,APN名称
                block          = 0;
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, hex_APN.PadRight(32, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrNetSet, InfoSys.StrModifyFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
                    return;
                }

                //写数据块1,用户名
                block          = 1;
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, hex_UserName.PadRight(32, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrNetSet, InfoSys.StrModifyFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
                    return;
                }

                //写数据块2,密码
                block          = 2;
                result_WriteIC = CardCommon.WriteIC(icdev, sec, block, hex_Password.PadRight(32, '0'));
                if (result_WriteIC != "")
                {
                    this.lbState.Text = InfoSys.InfoWriteFailure(sec, block, InfoSys.CardTypeStrNetSet, InfoSys.StrModifyFailure);
                    pf.Log(this.lbState.Text);
                    pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
                    return;
                }
            }

            SerialNumber_old     = "";
            this.lbCardType.Text = InfoSys.CardTypeNetSet;
            this.lbState.Text    = InfoSys.StrModifySuccess;
            pf.Log(this.lbState.Text);
            pf.EndLog(InfoSys.CardTypeStrNetSet, InfoSys.MethodModifyCard);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.groupBox2.Text           = "充值记录";
            this.groupBox3.Text           = "用水记录";
            this.dataGridView1.DataSource = null;
            this.dataGridView2.DataSource = null;

            string UserNo         = this.txtUserNo.Text.Trim();
            string UserName       = this.txtUserName.Text.Trim();
            string IdentityNumber = this.txtIdentityNumber.Text.Trim();
            string Telephone      = this.txtTelephone.Text.Trim();

            string           str1    = DataTransfer.GetCardUserRechargeLogList(UserNo, UserName, IdentityNumber, Telephone);
            JavaScriptObject result1 = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str1);

            if (bool.Parse(result1["Result"].ToString()))
            {
                List <JsonCardUserRechargeLog> list = JavaScriptConvert.DeserializeObject <List <JsonCardUserRechargeLog> >(result1["Message"].ToString());
                if (list.Count > 0)
                {
                    ModelHandler <JsonCardUserRechargeLog> mh = new ModelHandler <JsonCardUserRechargeLog>();
                    DataTable dt = mh.FillDataTable(list);
                    this.dataGridView1.DataSource = dt.DefaultView;
                    this.dataGridView1.ClearSelection();
                }
                else
                {
                    this.dataGridView1.DataSource = null;
                    //MessageBox.Show("未查询到记录");
                }
                this.groupBox2.Text = "充值记录" + "  记录数量:" + list.Count;
            }
            else
            {
                this.groupBox2.Text = "充值记录" + "  查询出错";
                MessageBox.Show("充值记录查询出错!" + result1["Message"].ToString());
            }

            string           str2    = DataTransfer.GetCardUserWaterLogList(UserNo, UserName, IdentityNumber, Telephone);
            JavaScriptObject result2 = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str2);

            if (bool.Parse(result2["Result"].ToString()))
            {
                List <JsonCardUserWaterLog> list = JavaScriptConvert.DeserializeObject <List <JsonCardUserWaterLog> >(result2["Message"].ToString());
                if (list.Count > 0)
                {
                    ModelHandler <JsonCardUserWaterLog> mh = new ModelHandler <JsonCardUserWaterLog>();
                    DataTable dt = mh.FillDataTable(list);
                    this.dataGridView2.DataSource = dt.DefaultView;
                    this.dataGridView2.ClearSelection();
                }
                else
                {
                    this.dataGridView1.DataSource = null;
                    //MessageBox.Show("未查询到记录");
                }
                this.groupBox3.Text = "用水记录" + "  记录数量:" + list.Count;
            }
            else
            {
                this.groupBox3.Text = "用水记录" + "  查询出错";
                MessageBox.Show("用水记录查询出错!" + result2["Message"].ToString());
            }
        }