using System;
using System.Linq;
using System.Drawing;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using System.Text;
using System.IO;
using BLL;
namespace FineUIPro.Web.HJGL.PersonManage
{
    public partial class WelderManageEdit : PageBase
    {
        #region 定义变量
        /// 
        /// 照片附件路径
        /// 
        public string PhotoAttachUrl
        {
            get
            {
                return (string)ViewState["PhotoAttachUrl"];
            }
            set
            {
                ViewState["PhotoAttachUrl"] = value;
            }
        }
        /// 
        /// 二维码路径id
        /// 
        public string QRCodeAttachUrl
        {
            get
            {
                return (string)ViewState["QRCodeAttachUrl"];
            }
            set
            {
                ViewState["QRCodeAttachUrl"] = value;
            }
        }
        #endregion
        #region 加载
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.btnClose.OnClientClick = ActiveWindow.GetHideReference();
                //BLL.Base_ProjectTypeService.InitProjectTypeDropDownList(this.drpPojectType, true, "请选择");//项目类型
                BLL.UnitService.InitUnitByProjectIdUnitTypeDropDownList(drpUnitId, this.CurrUser.LoginProjectId, Const.ProjectUnitType_2, true);
                string PersonId = Request.Params["PersonId"];
                if (!string.IsNullOrEmpty(PersonId))
                {
                    Model.SitePerson_Person welder = BLL.WelderService.GetWelderById(PersonId);
                    if (welder != null)
                    {
                        this.txtWelderCode.Text = welder.WelderCode;
                        this.txtWelderName.Text = welder.PersonName;
                        if (!string.IsNullOrEmpty(welder.UnitId))
                        {
                            this.drpUnitId.SelectedValue = welder.UnitId;
                        }
                        this.rblSex.SelectedValue = welder.Sex;
                        if (welder.Birthday.HasValue)
                        {
                            this.txtBirthday.Text = string.Format("{0:yyyy-MM-dd}", welder.Birthday);
                        }
                        this.txtIdentityCard.Text = welder.IdentityCard;
                        this.txtCertificateCode.Text = welder.CertificateCode;
                        if (string.IsNullOrEmpty(welder.CertificateCode))
                        {
                            this.txtCertificateCode.Text = welder.IdentityCard;
                        }
                        if (welder.CertificateLimitTime.HasValue)
                        {
                            this.txtCertificateLimitTime.Text = string.Format("{0:yyyy-MM-dd}", welder.CertificateLimitTime);
                        }
                        this.txtWelderLevel.Text = welder.WelderLevel;
                        if (welder.IsUsed == true)
                        {
                            cbIsOnDuty.Checked = true;
                        }
                        else
                        {
                            cbIsOnDuty.Checked = false;
                        }
                        this.txtRemark.Text = welder.Remark;
                        if (!string.IsNullOrEmpty(welder.PhotoUrl))
                        {
                            this.PhotoAttachUrl = welder.PhotoUrl;
                            this.Image1.ImageUrl = "~/" + this.PhotoAttachUrl;
                        }
                        if (!string.IsNullOrEmpty(welder.QRCodeAttachUrl))
                        {
                            this.QRCodeAttachUrl = welder.QRCodeAttachUrl;
                            this.btnSee.Hidden = false;
                            this.btnQR.Hidden = false;
                            this.btnQR.Text = "二维码重新生成";
                        }
                    }
                }
                else
                {
                    this.cbIsOnDuty.Checked = true;
                }
            }
        }
        #endregion
        #region 保存
        /// 
        /// 保存按钮
        /// 
        /// 
        /// 
        protected void btnSave_Click(object sender, EventArgs e)
        {
            string PersonId = Request.Params["PersonId"];
            var q = Funs.DB.SitePerson_Person.FirstOrDefault(x => x.WelderCode == this.txtWelderCode.Text.Trim()
           && (x.PersonId != PersonId || (PersonId == null && PersonId != null)));
            if (q != null)
            {
                Alert.ShowInTop("焊工号已经存在!", MessageBoxIcon.Warning);
                return;
            }
            if (this.drpUnitId.SelectedValue == BLL.Const._Null)
            {
                Alert.ShowInTop("选择单位", MessageBoxIcon.Warning);
                return;
            }
            PersonId = SaveData(PersonId);
            ShowNotify("保存成功!", MessageBoxIcon.Success);
            PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
        }
        private string SaveData(string PersonId)
        {
            Model.SitePerson_Person newWelder = new Model.SitePerson_Person();
            newWelder.ProjectId = this.CurrUser.LoginProjectId;
            newWelder.WelderCode = this.txtWelderCode.Text.Trim();
            newWelder.PersonName = this.txtWelderName.Text.Trim();
            newWelder.WorkPostId = Const.WorkPost_Welder;
            if (this.drpUnitId.SelectedValue != BLL.Const._Null)
            {
                newWelder.UnitId = this.drpUnitId.SelectedValue;
            }
            newWelder.Sex = this.rblSex.SelectedValue;
            newWelder.Birthday = Funs.GetNewDateTime(this.txtBirthday.Text.Trim());
            newWelder.IdentityCard = this.txtIdentityCard.Text.Trim();
            newWelder.CertificateCode = this.txtCertificateCode.Text.Trim();
            newWelder.CertificateLimitTime = Funs.GetNewDateTime(this.txtCertificateLimitTime.Text.Trim());
            newWelder.WelderLevel = this.txtWelderLevel.Text.Trim();
            if (this.cbIsOnDuty.Checked)
            {
                newWelder.IsUsed = true;
            }
            else
            {
                newWelder.IsUsed = false;
            }
            newWelder.Remark = this.txtRemark.Text.Trim();
            newWelder.PhotoUrl = this.PhotoAttachUrl;
            newWelder.Isprint = "0";
            if (!string.IsNullOrEmpty(PersonId))
            {
                if (!BLL.WelderService.IsExisWelderCode(PersonId, this.txtWelderCode.Text))
                {
                    newWelder.PersonId = PersonId;
                    BLL.WelderService.UpdateWelder(newWelder);
                    //BLL.Sys_LogService.AddLog(Const.System_1, this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.WelderManageMenuId, Const.BtnModify, PersonId);
                }
                else
                {
                    Alert.ShowInParent("焊工号已经存在!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                PersonId = SQLHelper.GetNewID(typeof(Model.SitePerson_Person));
                if (!BLL.WelderService.IsExisWelderCode(PersonId, this.txtWelderCode.Text))
                {
                    newWelder.PersonId = PersonId;
                //    BLL.WelderService.AddWelder(newWelder);
                    //BLL.Sys_LogService.AddLog(Const.System_1, this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.WelderManageMenuId, Const.BtnAdd, PersonId);
                }
                else
                {
                    Alert.ShowInParent("焊工号已经存在!", MessageBoxIcon.Warning);
                }
            }
            return PersonId;
        }
        #endregion
        protected void drpUnitId_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.drpUnitId.SelectedValue != Const._Null)
            {
                var u = BLL.UnitService.GetUnitByUnitId(drpUnitId.SelectedValue);
                string prefix = u.UnitCode + "-HG-";
                txtWelderCode.Text = BLL.SQLHelper.RunProcNewId("SpGetThreeNumber", "SitePerson_Person", "WelderCode", prefix);
            }
        }
        #region 附件上传
        /// 
        /// 上传附件资源
        /// 
        /// 
        /// 
        protected void btnAttachUrl_Click(object sender, EventArgs e)
        {
            string edit = "0";
            string PersonId = Request.Params["PersonId"];
            if (string.IsNullOrEmpty(PersonId))
            {
                SaveData(PersonId);
            }
            else
            {
                edit = "1";
            }
            PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("../../AttachFile/webuploader.aspx?toKeyId={0}&path=FileUpload/WelderManage&menuId={1}&edit={2}", PersonId, BLL.Const.WelderManageMenuId, edit)));
        }
        #endregion
        #region 照片上传
        /// 
        /// 上传照片
        /// 
        /// 
        /// 
        protected void btnPhoto_Click(object sender, EventArgs e)
        {
            if (filePhoto.HasFile)
            {
                string fileName = filePhoto.ShortFileName;
                if (!ValidateFileType(fileName))
                {
                    ShowNotify("无效的文件类型", MessageBoxIcon.Warning);
                    return;
                }
                this.PhotoAttachUrl = BLL.UploadFileService.UploadAttachment(BLL.Funs.RootPath, this.filePhoto, this.PhotoAttachUrl, Const.WelderFilePath);
                this.Image1.ImageUrl = "~/" + this.PhotoAttachUrl;
            }
        }
        #endregion
        protected void btnQR_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(this.txtWelderCode.Text.Trim()))
            {
                Alert.ShowInTop("焊工证不能为空!", MessageBoxIcon.Warning);
                return;
            }
            this.CreateCode_Simple(this.txtWelderCode.Text.Trim());
        }
        /// 
        /// 
        /// 
        /// 
        /// 
        protected void btnSee_Click(object sender, EventArgs e)
        {
            string url = string.Empty;
            string PersonId = Request.Params["PersonId"];
            Model.SitePerson_Person welder = BLL.WelderService.GetWelderById(PersonId);
            if (welder != null && !string.IsNullOrEmpty(welder.QRCodeAttachUrl))
            {
                url = welder.QRCodeAttachUrl;
                PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("SeeQRImage.aspx?PersonId={0}", PersonId), "二维码查看", 400, 400));
            }
            else
            {
                Alert.ShowInTop("二维码不存在!", MessageBoxIcon.Warning);
                return;
            }
        }
        //生成二维码方法一
        private void CreateCode_Simple(string nr)
        {
            string PersonId = Request.Params["PersonId"];
            Model.SitePerson_Person welder = BLL.WelderService.GetWelderById(PersonId);
            if (welder != null)
            {
                BLL.UploadFileService.DeleteFile(Funs.RootPath, welder.QRCodeAttachUrl);//删除二维码
                string imageUrl = string.Empty;
                QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                qrCodeEncoder.QRCodeScale = nr.Length;
                qrCodeEncoder.QRCodeVersion = 0;
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
                System.Drawing.Image image = qrCodeEncoder.Encode(nr, Encoding.UTF8);
                string filepath = Server.MapPath("~/") + BLL.UploadFileService.QRCodeImageFilePath;
                //如果文件夹不存在,则创建
                if (!Directory.Exists(filepath))
                {
                    Directory.CreateDirectory(filepath);
                }
                string filename = DateTime.Now.ToString("yyyymmddhhmmssfff").ToString() + ".jpg";
                imageUrl = filepath + filename;
                System.IO.FileStream fs = new System.IO.FileStream(imageUrl, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
                image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
                fs.Close();
                image.Dispose();
                this.QRCodeAttachUrl = BLL.UploadFileService.QRCodeImageFilePath + filename;
                BLL.WelderService.UpdateQRCode(PersonId, QRCodeAttachUrl);
                this.btnSee.Hidden = false;
                this.btnQR.Hidden = false;
                this.btnQR.Text = "二维码重新生成";
                PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("SeeQRImage.aspx?PersonId={0}", PersonId), "二维码查看", 400, 400));
            }
            else
            {
                Alert.ShowInTop("操作有误,重新生成!", MessageBoxIcon.Warning);
            }
            //二维码解码
            //var codeDecoder = CodeDecoder(filepath);
            //this.Image1.ImageUrl = "~/image/" + filename + ".jpg";
        }
        /// 
        /// 二维码解码
        /// 
        /// 图片路径
        /// 
        public string CodeDecoder(string filePath)
        {
            //if (!System.IO.File.Exists(filePath))
            //    return null;
            //Bitmap myBitmap = new Bitmap(Image.FromFile(filePath));
            //QRCodeDecoder decoder = new QRCodeDecoder();
            //string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap));
            //return decodedString;
            return "";
        }
    }
}