/// <summary>
        /// 查询部门列表
        /// </summary>
        /// <returns></returns>
        public List<SDepartment> QuerySDepartment()
        {
            //return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.QUERY_SDEPARTMENT_REQUEST);
                    //string request = JsonConvert.SerializeObject(Request.QUERY_DEPARTMENT_REQUEST.ToString());
                    //scoket发送请求信息
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    //scoket接收请求信息
                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                    if (Msg[0] == Response.QUERY_SDEPARTMENT_SUCCESS.ToString())
                    {
                        List<SDepartment> list = new List<SDepartment>();

                        list = JsonConvert.DeserializeObject<List<SDepartment>>(Msg[2]);

                        return list;
                    }
                    else
                    {
                        Logging.AddLog("查询部门列表失败!" + recMsg);
                        return null;
                    }
                }
                catch
                {
                    Logging.AddLog("查询部门列表失败(服务器连接中断)!");
                    return null;
                }
                //});
            }
        }
        /// <summary>
        /// 查询部门员工
        /// </summary>
        /// <param name="departmentID"></param>
        /// <returns></returns>
        public List<Employee> QueryEmployeeByDepartmentID(int departmentID)
        {
            //return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.QUERY_EMPLOYEE_REQUEST, departmentID);

                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                    if (Msg[0] == Response.QUERY_EMPLOYEE_SUCCESS.ToString())
                    {
                        List<Employee> emp = new List<Employee>();
                        emp = JsonConvert.DeserializeObject<List<Employee>>(Msg[2]);

                        return emp;
                    }
                    else
                    {
                        Logging.AddLog("查询部门员工失败!");
                        return null;
                    }
                }
                catch
                {
                    Logging.AddLog("查询员工列表失败(服务器连接中断)!");
                    return null;
                }
            //});
            }
        }
        /// <summary>
        /// 添加人员
        /// </summary>
        /// <param name="emp"></param>
        /// <returns></returns>
        public int InsertEmployee(Employee emp)
        {
            //return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.INSERT_EMPLOYEE_REQUEST, emp);
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);
                    
                    if (Msg[0] == Response.INSERT_EMPLOYEE_SUCCESS.ToString())
                    {
                        Logging.AddLog("添加人员成功!");
                        return Convert.ToInt32(Msg[2]);
                    }
                    else if (Msg[0] == Response.INSERT_EMPLOYEE_EXIST.ToString())
                    {
                        Logging.AddLog("员工已经存在,无法继续插入");
                        return -2;
                    }
                    else
                    {
                        Logging.AddLog("添加人员失败!");
                        return -1;
                    }
                }
                catch
                {
                    Logging.AddLog("添加人员失败(服务器连接中断)!");
                    return 0;
                }
            //});
            }
        }
        public List<ContractItem> QueryContractItemByName(Search search)
        {
            List<ContractItem> items = new List<ContractItem>();
            try
            {
                SocketMessage sm = new SocketMessage(Request.QUERY_PROJECT_ITEM_BY_NAME_REQUEST, search);
                ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                recLength = ClientSocket.Receive(recivebuffer);
                string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                if (Msg[0] == Response.QUERY_PROJECT_ITEM_BY_NAME_SUCCESS.ToString())
                {

                    items = JsonConvert.DeserializeObject<List<ContractItem>>(Msg[2]);

                    return items;
                }
                else
                {
                    Logging.AddLog("子项目名称查询失败!");
                    return null;
                }
            }
            catch
            {
                Logging.AddLog("子项目名称查询失败(服务器连接中断)!");
                return null;
            }
        }
        /// <summary>
        /// 查询已经签字通过的签单列表
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public List<SHDJContract> QuerySignedContract(int Id)
        {
            //return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.QUERY_SIGNED_CONTRACT_REQUEST, Id);
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                    if (Msg[0] == Response.QUERY_SIGNED_CONTRACT_SUCCESS.ToString())
                    {
                        List<SHDJContract> list = new List<SHDJContract>();
                        list = JsonConvert.DeserializeObject<List<SHDJContract>>(Msg[2]);

                        return list;
                    }
                    else
                    {
                        Logging.AddLog("查询已办列表失败!");
                        return null;
                    }
                }
                catch
                {
                    Logging.AddLog("查询已办列表失败(服务器连接中断)!");
                    return null;
                }
            //});
            }
        }
        /// <summary>
        /// 登陆验证
        /// </summary>
        /// <param name="UserName"></param>
        /// <param name="PassWord"></param>
        /// <returns></returns>
        public Task<Employee> Login(string UserName, string PassWord)
        {
            return Task.Factory.StartNew(() =>
            {
                    User user = new User { Username = UserName, Password = PassWord };
                    SocketMessage sm = new SocketMessage(Request.LOGIN_REQUEST, user);
                    try
                    {
                        //  scoket发送请求信息
                        ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                        //socket接收信息
                        recLength = ClientSocket.Receive(recivebuffer);
                        string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                        string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);
                        
                        if (Msg[0] == Response.LOGIN_SUCCESS.ToString().Trim())
                        {
                            //将接收的信息(json格式)转化为类
                            Employee emp = new Employee();
                            emp = JsonConvert.DeserializeObject<Employee>(Msg[2]);

                            return emp;
                        }
                        else
                        {
                            Logging.AddLog("登录失败!");
                            return null;
                        }
                    }
                    catch
                    {
                        if (ClientSocket.Connected)
                        {
                            return null;
                        }
                        else
                        {
                            Logging.AddLog("连接服务器失败!");
                            return null;
                        }
                    }
                });
        }
        /// <summary>
        /// 查询模板信息
        /// </summary>
        /// <returns></returns>
        public async Task<List<Templete>> QueryContractTemplate()
        {
            return await Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.QUERY_CONTRACT_TEMPLATE_REQUEST);
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                    if (Msg[0] == Response.QUERY_CONTRACT_TEMPLATE_SUCCESS.ToString())
                    {
                        List<Templete> list = new List<Templete>();
                        list = JsonConvert.DeserializeObject<List<Templete>>(Msg[2]);

                        return list;
                    }
                    else
                    {
                        Logging.AddLog("查询部模板列表失败!");
                        return null;
                    }
                }
                catch
                {
                    Logging.AddLog("查询模板列表失败(服务器连接中断)!");
                    return null;
                }
            
                
            });
           
        }
        /// <summary>
        /// 删除部门
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public string DeleteDepartment(int Id)
        {
            //return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.DELETE_DEPARTMENT_REQUEST, Id);
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                    if (Msg[0] == Response.DELETE_DEPARTMENT_SUCCESS.ToString())
                    {
                        Logging.AddLog("删除部门成功!");
                    }
                    else
                    {
                        Logging.AddLog("删除部门失败!");
                    }
                    return Msg[0];
                }
                catch
                {
                    Logging.AddLog("删除部门失败(服务器连接中断)!");
                    return "服务器连接中断";
                }
            //});
            }
        }
        public double StatisticDepartmentYearCategoryExpense(Search search)
        {
            ContractWorkload workload = null;

            try
            {
                SocketMessage sm = new SocketMessage(Request.STATISTIC_DEP_YEAR_CATEGORY_REQUEST, search);
                //scoket发送请求信息
                ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                //scoket接收请求信息
                recLength = ClientSocket.Receive(recivebuffer);
                string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);


                if (Msg[0] == Response.STATISTIC_DEP_YEAR_CATEGORY_SUCCESS.ToString())
                {
                    workload = JsonConvert.DeserializeObject<ContractWorkload>(Msg[2]);

                    Logging.AddLog("获取当前部门" + search.SDepartmentShortlCall.ToString() + search.Year.ToString() + search.CategoryId.ToString() + "成功!");
                }
                else
                {
                    Logging.AddLog("获取当前部门" + search.SDepartmentShortlCall.ToString() + search.Year.ToString() + search.CategoryId.ToString() + "失败!");
                }
            }
            catch
            {
                Logging.AddLog("获取总计申请额度(服务器连接中断)!");
                return 0;
            }

            return workload.Expense;

        }
        public bool ReCreateHDJContract(string contractId)
        {
            ContractWorkload workload = null;

            try
            {
                SocketMessage sm = new SocketMessage(Request.RECREATE_HDJCONTRACT_REQUEST, contractId);
                //scoket发送请求信息
                ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                //scoket接收请求信息
                recLength = ClientSocket.Receive(recivebuffer);
                string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);


                if (Msg[0] == Response.RECREATE_HDJCONTRACT_SUCCESS.ToString())
                {
                    return true;
                    Logging.AddLog("重新生成会签单" + contractId.ToString( ) + "成功!");
                }
                else
                {
                    return false;
                    Logging.AddLog("重新生成会签单" + contractId.ToString() + "失败!");
                }
            }
            catch
            {
                Logging.AddLog("获取总计申请额度(服务器连接中断)!");
                return false;
            }


        }
        public string ModifyProject(ContractProject project)
        {
            try
            {
                SocketMessage sm = new SocketMessage(Request.MODIFY_PROJECT_REQUEST, project);
                //scoket发送请求信息
                ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                //scoket接收请求信息
                recLength = ClientSocket.Receive(recivebuffer);
                string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                if (Msg[0] == Response.MODIFY_PROJECT_SUCCESS.ToString())
                {
                    Logging.AddLog("修改项目" + project.Project + "成功!");
                }
                else
                {
                    Logging.AddLog("修改项目" + project.Project + "失败!");
                }
                return Msg[0];
            }
            catch
            {
                Logging.AddLog("添加工作量失败(服务器连接中断)!");
                return "添加失败";
            }

        }
        public string DeleteItem(int itemId)
        {
            try
            {
                SocketMessage sm = new SocketMessage(Request.DELETE_ITEM_REQUEST, itemId);
                //scoket发送请求信息
                ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                //scoket接收请求信息
                recLength = ClientSocket.Receive(recivebuffer);
                string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                if (Msg[0] == Response.INSERT_ITEM_SUCCESS.ToString())
                {
                    Logging.AddLog("添加工作量成功!");
                }
                else
                {
                    Logging.AddLog("添加工作量失败!");
                }
                return Msg[0];
            }
            catch
            {
                Logging.AddLog("添加工作量失败(服务器连接中断)!");
                return "添加失败";
            }

        }
        //GET_DEP_CATE_YEAR_CON_COUNT_REQUEST
        public int GetDepartmentCategoryYearContractCount(Search search)
        {
            int count = -1;
            try
            {
                SocketMessage sm = new SocketMessage(Request.GET_DEP_CATE_YEAR_CON_COUNT_REQUEST, search);
                ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                recLength = ClientSocket.Receive(recivebuffer);
                string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                if (Msg[0] == Response.GET_DEP_CATE_YEAR_CON_COUNT_SUCCESS.ToString())
                {

                    count = JsonConvert.DeserializeObject<int>(Msg[2]);

                    return count;
                }
                else
                {
                    Logging.AddLog("获取当年已经签署的CATEGORY的会签单数目失败");
                    return -1;
                }
            }
            catch
            {
                Logging.AddLog("项目名称查询失败(服务器连接中断)!");
                return -1;
            }
        }
        /// <summary>
        /// 查询特定模板信息
        /// </summary>
        /// <param name="tempId"></param>
        /// <returns></returns>
        public Templete GetContractTemplate(int tempId)
        {
            //return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.GET_CONTRACT_TEMPLATE_REQUEST, tempId);
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                    if (Msg[0] == Response.GET_CONTRACT_TEMPLATE_SUCCESS.ToString())
                    {
                        Templete list = new Templete();
                        list = JsonConvert.DeserializeObject<Templete>(Msg[2]);

                        return list;
                    }
                    else
                    {
                        Logging.AddLog("查询特定模板列表失败!");
                        return null;
                    }
                }
                catch
                {
                    Logging.AddLog("查询特定模板列表失败(服务器连接中断)!");
                    return null;
                }
            }//);
        }
        /// <summary>
        /// 下载会签单信息
        /// </summary>
        /// <param name="Id"></param>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public async Task DownloadHDJContract(string Id, string filepath)
        {
            await Task.Run(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.DOWNLOAD_HDJCONTRACT_REQUEST, Id);
                    Socket download = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    download.Connect(new IPEndPoint(IP, 6060));
                    download.Send(Encoding.UTF8.GetBytes(sm.Package + "~"));
                    FileStream fs = new FileStream(filepath, FileMode.Create);

                    int len = 0;
                    int size = 0;
                    byte[] buffer = new byte[1024*1024];
                    //从终端不停的接受数据,然后写入文件里面,只到接受到的数据为0为止,则中断连接
                    while ((size = download.Receive(buffer, 0, buffer.Length, SocketFlags.None)) > 0)
                    {
                        fs.Write(buffer, 0, size);
                        len += size;
                    }


                    fs.Flush();
                    fs.Close();
                    download.Close();
                }
                catch
                {
                    
                }
            });
        }
        /// <summary>
        /// 修改模板信息
        /// </summary>
        /// <param name="temp"></param>
        /// <returns></returns>
        public string ModifyContractTemplate(Templete temp)
        {
            //return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.MODIFY_CONTRACT_TEMPLATE_REQUEST, temp);
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                    if (Msg[0] == Response.DELETE_CONTRACT_TEMPLATE_SUCCESS.ToString())
                    {
                        Logging.AddLog("修改模板成功!");
                    }
                    else
                    {
                        Logging.AddLog("修改模板失败!");
                    }
                    return Msg[0];
                }
                catch
                {
                    Logging.AddLog("修改模板失败(服务器连接中断)!");
                    return "服务器连接中断";
                }
            //});
            }
        }
 /// <summary>
 /// 退出验证
 /// </summary>
 /// <returns></returns>
 public async Task Quit( )
 {
     //return Task.Factory.StartNew(() =>
     await Task.Run(() =>
     {
         SocketMessage sm = new SocketMessage(Request.QUIT_REQUEST);
         try
         {
             //  scoket发送请求信息
             ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));
         }
         catch( Exception ex )
         {
             Logging.AddLog("退出时异常" + ex.ToString());
         }
     });
 }  
         /// <summary>
         /// 提交签单
         /// </summary>
         /// <param name="hdj"></param>
         /// <returns></returns>
        public string InsertHDJContract(HDJContract hdj)
        {
            //return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.INSERT_HDJCONTRACT_REQUEST, hdj);
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                    if (Msg[0] == Response.INSERT_HDJCONTRACT_SUCCESS.ToString())
                    {
                        Logging.AddLog("提交签单成功!");
                    }
                    else
                    {
                        Logging.AddLog("提交签单失败!");
                    }
                    return Msg[0];
                }
                catch
                {
                    Logging.AddLog("提交签单失败(服务器连接中断)!");
                    return "服务器连接中断";
                }
            //});
            }
        }
         public String ModifySDepartment(SDepartment department)
         {
             //return Task.Factory.StartNew(() =>
             {
                 try
                 {
                     SocketMessage sm = new SocketMessage(Request.MODIFY_SDEPARTMENT_REQUEST, department);
                     ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                     recLength = ClientSocket.Receive(recivebuffer);
                     string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);

                     string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                     if (Msg[0] == Response.MODIFY_SDEPARTMENT_SUCCESS.ToString())
                     {

                         Logging.AddLog("修改部门成功");
                     }
                     else
                     {
                         Logging.AddLog("修改部门失败!");
                     }
                     return Msg[0];
                 }
                 catch
                 {
                     Logging.AddLog("重置用户密码失败(服务器连接中断)!");
                     return "服务器连接中断";
                 }
                 //});
             }
         }
        /// <summary>
        /// 查询会签单信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public Task<HDJContract> GetHDJContract(string Id)
        {
            return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.GET_HDJCONTRACT_REQUEST, Id);
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));
                    string recMsg = null;
                    lock (recivebuffer)
                    {
                        recLength = ClientSocket.Receive(recivebuffer);
                        recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    }
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);
                    
                    if (Msg[0] == Response.GET_HDJCONTRACT_SUCCESS.ToString())
                    {
                        HDJContract list = new HDJContract();
                        list = JsonConvert.DeserializeObject<HDJContract>(Msg[2]);

                        return list;
                    }
                    else
                    {
                        Logging.AddLog("查询会签单信息失败!");
                        return null;
                    }
                }
                catch
                {
                    Logging.AddLog("查询会签单信息失败(服务器连接中断)!");
                    return null;
                }
            });
        }
         /// <summary>
         /// 根据项目简称ID获取项目名称
         /// </summary>
         /// <param name="categoryId"></param>
         /// <returns></returns>
         public List<ContractProject> QueryContractProject(int categoryId)
         {
             try
             {
                 SocketMessage sm = new SocketMessage(Request.QUERY_CATEGORY_PROJECT_REQUEST, categoryId);
                 ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                 recLength = ClientSocket.Receive(recivebuffer);
                 string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                 string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                 if (Msg[0] == Response.QUERY_CATEGORY_PROJECT_SUCCESS.ToString())
                 {
                     List<ContractProject> list = new List<ContractProject>();
                     list = JsonConvert.DeserializeObject<List<ContractProject>>(Msg[2]);

                     return list;
                 }
                 else
                 {
                     Logging.AddLog("项目名称查询失败!");
                     return null;
                 }
             }
             catch
             {
                 Logging.AddLog("项目名称查询失败(服务器连接中断)!");
                 return null;
             }
         }
        ///// <summary>
        ///// 查询会签单信息
        ///// </summary>
        ///// <param name="Id"></param>
        ///// <returns></returns>
        //public HDJContract GetHDJContract(string Id)
        //{
        //        try
        //        {
        //            SocketMessage sm = new SocketMessage(Request.GET_HDJCONTRACT_REQUEST, Id);
        //            ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

        //            recLength = ClientSocket.Receive(recivebuffer);
        //            string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
        //            string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

        //            if (Msg[0] == Response.GET_HDJCONTRACT_SUCCESS.ToString())
        //            {
        //                HDJContract list = new HDJContract();
        //                list = JsonConvert.DeserializeObject<HDJContract>(Msg[2]);

        //                return list;
        //            }
        //            else
        //            {
        //                Logging.AddLog("查询会签单信息失败!");
        //                return null;
        //            }
        //        }
        //        catch
        //        {
        //            Logging.AddLog("查询会签单信息失败(服务器连接中断)!");
        //            return null;
        //        }
        //}
        
        /// <summary>
        /// 签单签字情况
        /// </summary>
        /// <param name="sd"></param>
        /// <returns></returns>
        public string SignDetail(SignatureDetail sd)
        {
            //return Task.Factory.StartNew(() =>
            {
                try
                {
                    SocketMessage sm = new SocketMessage(Request.INSERT_SIGN_DETAIL_REQUEST, sd);
                    ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                    recLength = ClientSocket.Receive(recivebuffer);
                    string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                    string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                    if (Msg[0] == Response.INSERT_SIGN_DETAIL_SUCCESS.ToString())
                    {
                        Logging.AddLog("签单签字成功!");
                    }
                    else
                    {
                        Logging.AddLog("签单签字失败!");
                    }
                    return Msg[0];
                }
                catch
                {
                    Logging.AddLog("签单签字失败(服务器连接中断)!");
                    return "服务器连接中断";
                }
            //});
            }
        }
        /// <summary>
        /// 添加部门权限
        /// </summary>
        /// <param name="sdepartment"></param>
        /// <returns></returns>
        public string InsertSDepartment(SDepartment sdepartment)
        {
            try
            {
                SocketMessage sm = new SocketMessage(Request.INSERT_SDEPARTMENT_REQUEST, sdepartment);
                //scoket发送请求信息
                ClientSocket.Send(Encoding.UTF8.GetBytes(sm.Package));

                //scoket接收请求信息
                recLength = ClientSocket.Receive(recivebuffer);
                string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                if (Msg[0] == Response.INSERT_SDEPARTMENT_SUCCESS.ToString())
                {
                    Logging.AddLog("添加部门权限成功!");
                }
                else
                {
                    Logging.AddLog("添加部门权限失败!");
                }
                return Msg[0];
            }
            catch
            {
                Logging.AddLog("添加部门权限失败(服务器连接中断)!");
                return "添加失败";
            }
        }
        /// <summary>
        /// 上传签字图片
        /// </summary>
        /// <param name="id"></param>
        /// <param name="p"></param>
        /// <returns></returns>
        public async Task UploadPicture(int id, string p)
        {
            await Task.Run(() =>
            {
                SocketMessage sm = new SocketMessage(Request.UPLOAD_PICTURE_REQUEST, id);

                //recLength = ClientSocket.Receive(recivebuffer);
                //string recMsg = Encoding.UTF8.GetString(recivebuffer, 0, recLength);
                //string[] Msg = recMsg.Split(SocketMessage.DEFAULT_SEPARATOR);

                //if (Msg[0] == Response.UPLOAD_PICTURE_SUCCESS.ToString())
                //{
                    Socket sendpicture = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    sendpicture.Connect(new IPEndPoint(IP, 6060));
                    FileStream fs = new FileStream(p, FileMode.OpenOrCreate, FileAccess.Read);
                    byte[] fssize = new byte[fs.Length];
                    BinaryReader reader = new BinaryReader(fs);
                    reader.Read(fssize, 0, fssize.Length - 1);
                    sendpicture.Send(Encoding.UTF8.GetBytes((sm.Package+"~").PadRight(50,'0')));
                    sendpicture.Send(fssize);
                    fs.Close();
                    sendpicture.Shutdown(System.Net.Sockets.SocketShutdown.Send);
                    sendpicture.Close();
                //}
            });
        }
        /// <summary>
        /// 上传计划配额表
        /// </summary>
        /// <param name="search"></param>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public async Task<bool> UploadRegularload(Search search, string filepath)
        {
            return await Task.Factory.StartNew(() =>
            {
                try
                {
                    /*FileInfo fileinfo = new FileInfo(filepath);
                    FileStream filestream = fileinfo.OpenRead();
                    //包的大小
                    int packetSize = 100000;
                    //包的数量
                    int packetCount = (int)(filestream.Length / ((long)packetSize));
                    //最后一个包的大小
                    int LastDataPacket = (int)(filestream.Length - ((long)(packetSize * packetCount)));
                    
                    SocketMessage sm = new SocketMessage(Request.UPLOAD_REGULARLOAD_REQUEST, search);
                    Socket upload = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    upload.Connect(new IPEndPoint(IP, 6060));
                    upload.Send(Encoding.UTF8.GetBytes((sm.Package + "~").PadRight(300, '0')));
                    byte[] data = new byte[packetSize];
                    for (int i = 0; i < packetCount; i++)
                    {
                        filestream.Read(data, 0, data.Length);
                        SendVarData(upload, data);
                    }
                    if (LastDataPacket != 0)
                    {
                        data = new byte[LastDataPacket];
                        filestream.Read(data, 0, data.Length);
                        SendVarData(upload, data);
                    }*/
                    SocketMessage sm = new SocketMessage(Request.UPLOAD_REGULARLOAD_REQUEST, search);
                    Socket upload = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    upload.Connect(new IPEndPoint(IP, 6060));

                    FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Read);
                    byte[] fssize = new byte[fs.Length];
                    BinaryReader reader = new BinaryReader(fs);
                    reader.Read(fssize, 0, fssize.Length - 1);
                    upload.Send(Encoding.UTF8.GetBytes((sm.Package + "~").PadRight(300, '0')));
                    upload.Send(fssize);
                    fs.Close();
                    upload.Shutdown(System.Net.Sockets.SocketShutdown.Send);
                    upload.Close();

                    return true;
                }
                catch
                {
                    return false;
                }
            });
        }