Ejemplo n.º 1
0
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(ddlCanTransferEmp.SelectedValue))
            {
                ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('请选择需要转移到的员工!');", true);
                return;
            }
            try
            {
                if (Convert.ToDecimal(txtProportion.Text.Trim()) > 100)
                {
                    ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('比例不能超过100%!');", true);
                    return;
                }
                if (Convert.ToDecimal(txtAmount.Text.Trim()) > Convert.ToDecimal(hidAmount.Value))
                {
                    ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('不能超过原始金额!');", true);
                    return;
                }
            }
            catch (Exception ex0)
            {
                ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('数值不正确!');", true);
                return;
            }
            // 声明变量
            EmployeeAccountBLL eaBll = new EmployeeAccountBLL();
            // 任务ID
            string prjID = Request.QueryString["prjID"].ToString();
            // 当前分部领导 empId
            string parentEmployeeID = Convert.ToString(Request.QueryString["parentEmployeeID"]);
            // 需要转移对象的 empId
            string employeeID = ddlCanTransferEmp.SelectedValue;

            // 移动目录
            Employee empParent       = empBll.GetModel(parentEmployeeID);
            string   parentEmpNo     = empParent.EMPLOYEENO;
            Employee empToTransfer   = empBll.GetModel(employeeID);
            string   transferToEmpNo = empToTransfer.EMPLOYEENO;

            FileCategoryBLL fcBll                  = new FileCategoryBLL();
            int             errCode                = 0;
            string          returnFolderName       = string.Empty;
            string          taskRootFolder         = string.Empty;
            string          taskFolderWithoutEmpNo = string.Empty;

            fcBll.GetFilePathByProjectId(prjID, string.Empty, string.Empty, false, out returnFolderName, out taskRootFolder, out taskFolderWithoutEmpNo, out errCode);
            string sourceDirectory   = string.Format(taskFolderWithoutEmpNo, parentEmpNo);
            string destinctDirectory = string.Format(taskFolderWithoutEmpNo, transferToEmpNo);

            try
            {
                Directory.Move(sourceDirectory, destinctDirectory);
            }
            catch (Exception ex)
            {
                LogHelper.WriteLine("|" + sourceDirectory + "|" + destinctDirectory);
                LogHelper.WriteLine(ex.Message + ex.StackTrace);
                ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('目录移动失败!');", true);
                return;
            }

            // 更新部门领导账户,按照配置比例计算出金额后累加到分部领导账户
            decimal           proportion        = 0;
            ProjectProportion projectProportion = new ProjectProportionBLL().GetModelList(" projectId = '" + prjID + "'").FirstOrDefault();

            if (projectProportion != null)
            {
                proportion = projectProportion.PROPORTION ?? 0m;
            }
            else
            {
                EmployeeProportion empProportion = new EmployeeProportionBLL().GetModelList(" AND employeeId = '" + parentEmployeeID + "'").FirstOrDefault();
                proportion = empProportion.PROPORTION ?? 0m;
            }
            decimal         amountToLeader = Convert.ToDecimal(Request.QueryString["amount"]);
            EmployeeAccount empAcctParent  = new EmployeeAccount();

            empAcctParent                = eaBll.GetModelList(" employeeId = '" + parentEmployeeID + "'").FirstOrDefault();
            empAcctParent.AMOUNT        += (amountToLeader * proportion);
            empAcctParent.LASTUPDATEDATE = DateTime.Now;
            eaBll.Update(empAcctParent);

            // 添加一条交易记录
            TransactionDetails transactionDetails = new TransactionDetails();

            transactionDetails.ID = Guid.NewGuid().ToString();
            transactionDetails.TRANSACTIONAMOUNT      = amountToLeader * proportion;
            transactionDetails.TRANSACTIONDESCRIPTION = "分部领导提成";
            transactionDetails.TRANSACTIONPROPORTION  = proportion;
            transactionDetails.TRANSACTIONTYPE        = 6;
            transactionDetails.TRANSACTIONDATE        = DateTime.Now;
            transactionDetails.PLANDATE   = DateTimeHelper.GetFirstDateOfCurrentMonth();
            transactionDetails.EMPLOYEEID = parentEmployeeID;
            transactionDetails.PROJECTID  = prjID;
            transactionDetails.ISDELETED  = false;
            tdBll.Add(transactionDetails);

            //// 转移到的员工  先计入一条状态为已删除的数据,后续待任务完成时再调整:需要待任务完成后,再计入账户
            transactionDetails    = new TransactionDetails();
            transactionDetails.ID = Guid.NewGuid().ToString();
            transactionDetails.TRANSACTIONAMOUNT      = Convert.ToDecimal(txtAmount.Text.Trim());
            transactionDetails.TRANSACTIONDESCRIPTION = "项目提成(暂存)";
            transactionDetails.TRANSACTIONTYPE        = 7;
            transactionDetails.TRANSACTIONDATE        = DateTime.Now;
            transactionDetails.PLANDATE   = DateTimeHelper.GetFirstDateOfCurrentMonth();
            transactionDetails.EMPLOYEEID = employeeID;
            transactionDetails.PROJECTID  = prjID;
            transactionDetails.ISDELETED  = true;
            tdBll.Add(transactionDetails);

            //EmployeeAccount empAcctTransferTo = new EmployeeAccount();
            //empAcctTransferTo = eaBll.GetModelList(" employeeID = '" + employeeID + "'").FirstOrDefault();
            //empAcctTransferTo.AMOUNT += Convert.ToDecimal(txtAmount.Text.Trim());
            //empAcctTransferTo.LASTUPDATEDATE = DateTime.Now;
            //eaBll.Update(empAcctTransferTo);

            // 更新任务完成人
            ProjectSharing ps = new ProjectSharing();

            ps = psBll.GetModelList(" projectId = '" + prjID + "' AND FInishedperson = '" + parentEmployeeID + "'").FirstOrDefault();
            ps.FINISHEDPERSON = employeeID;
            if (psBll.Update(ps))
            {
                ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('转移成功!');window.top.location.href='/employeeHome.aspx';", true);
                return;
            }

            ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('更新完成人失败!');window.top.location.href='/employeeHome.aspx';", true);
            return;
        }
        /// <summary>
        /// 添加员工
        /// </summary>
        private void AddEmployee()
        {
            string employeeNO = txtEmployeeNo.Text.Trim();  //员工编号

            try
            {
                //判断编号是否已经使用
                bool isExist = eBll.IsExist(employeeNO);
                if (isExist)
                {
                    ExecuteScript("AlertDialog('员工编号已存在!', null);");
                    return;
                }
                string name   = txtName.Text.Trim();            //员工姓名
                int    gender = 0;                              //员工性别
                if (rdbFemale.Checked)
                {
                    gender = 1;
                }
                //出生日期
                string birthdate = txtBirthDate.Text.Trim();

                Employee emp = new Employee();
                emp.ID         = Guid.NewGuid().ToString();
                emp.EMPLOYEENO = employeeNO;
                //密码加密
                emp.PASSWORD = AES.Encrypt("666666", "0512000000000512");
                //姓名
                emp.NAME = name == null ? null : name;
                //性别
                emp.SEX = gender == 0;
                if (!string.IsNullOrEmpty(birthdate))
                {
                    emp.BIRTHDATE = Convert.ToDateTime(birthdate);
                }
                //手机号码
                emp.MOBILEPHONE = txtMobilePhone.Text.Trim();
                //转正日期
                emp.TOREGULARDATE = Convert.ToDateTime(txtToRegularDate.Text.Trim());
                //员工类型,0:总经办,1:客服,2:造价员
                decimal userType = 0;
                //总经办
                if (rdbGMO.Checked)
                {
                    userType = 0;
                }
                //客服
                else if (rdbCustomerService.Checked)
                {
                    userType = 1;
                }
                //造价员
                else if (rdbEmployee.Checked)
                {
                    userType = 2;
                }
                // 其他用户类型
                else if (rdbOtherUserType.Checked)
                {
                    if (!string.IsNullOrEmpty(txtUserType.Text.Trim()))
                    {
                        userType = Convert.ToDecimal(txtUserType.Text.Trim());
                    }
                }
                emp.TYPE           = userType;
                emp.ISBRANCHLEADER = rblIsBranchLeader.SelectedValue == "1";
                emp.ISEXTERNAL     = rblIsExternal.SelectedValue == "1";
                //启用状态
                emp.AVAILABLE = 1;
                bool flag = eBll.Add(emp);
                //本系统添加成功
                if (flag)
                {
                    if (rblAddRole.SelectedValue == "1")
                    {
                        // 添加角色
                        EmployeeRole empRole = new EmployeeRole();
                        empRole.ID         = Guid.NewGuid().ToString();
                        empRole.EMPLOYEEID = emp.ID;
                        // 1 客服
                        if (emp.TYPE == 1)
                        {
                            empRole.ROLEID = "fea3a06f-6d97-45d3-93f7-b145c158eb27";
                        }
                        // 2 工程师
                        else if (emp.TYPE == 2)
                        {
                            empRole.ROLEID = "2B43010866666af2b73d78c35288d565";
                        }
                        if (!string.IsNullOrEmpty(empRole.ROLEID))
                        {
                            new EmployeeRoleBLL().Add(empRole);
                        }
                    }

                    // 创建员工编号同名目录
                    string rootPath       = Convert.ToString(ConfigurationManager.AppSettings["employeePath"]);
                    string employeeFolder = Path.Combine(rootPath, emp.EMPLOYEENO);
                    if (!Directory.Exists(employeeFolder))
                    {
                        Directory.CreateDirectory(employeeFolder);
                    }

                    // 2018-05-19 添加
                    // 添加员工的任务分成配置
                    EmployeeProportionBLL epBll         = new EmployeeProportionBLL();
                    EmployeeProportion    empProportion = new EmployeeProportion();
                    empProportion.ID               = Guid.NewGuid().ToString();
                    empProportion.EMPLOYEEID       = emp.ID;
                    empProportion.PROPORTION       = 0.3m;
                    empProportion.PARENTEMPLOYEEID = null;
                    empProportion.ISBRANCHLEADER   = emp.ISBRANCHLEADER;
                    epBll.Add(empProportion);
                    // 任务分成配置结束

                    // 2018-05-20 添加
                    // 添加员工的默认账户
                    EmployeeAccount empAcct = new EmployeeAccount();
                    empAcct.ID             = Guid.NewGuid().ToString();
                    empAcct.EMPLOYEEID     = emp.ID;
                    empAcct.AMOUNT         = 0m;
                    empAcct.PAIDAMOUNT     = 0m;
                    empAcct.SURPLUSAMOUNT  = 0m;
                    empAcct.OTHERSAMOUNT   = 0m;
                    empAcct.CREATEDATE     = DateTime.Now;
                    empAcct.LASTUPDATEDATE = DateTime.Now;
                    EmployeeAccountBLL empAcctBll = new EmployeeAccountBLL();
                    empAcctBll.Add(empAcct);

                    // 员工账户结束
                    #region 调用钉钉接口,添加员工到钉钉
                    //如果选择了钉钉同步创建
                    if (Request.Form["sync"] == "rdbSync")
                    {
                        string  accessTokenResult = DingTalkHelper.GetAccessToken();
                        JObject jObj        = JObject.Parse(accessTokenResult);
                        string  errcode     = jObj["errcode"].ToString();
                        string  accessToken = string.Empty;
                        if (errcode == "0")
                        {
                            accessToken = jObj["access_token"].ToString();
                            string postUrl = string.Format("https://oapi.dingtalk.com/user/create?access_token={0}", accessToken);
                            //岗位
                            string position = string.Empty;
                            //钉钉系统中对应的部门ID
                            string departmentid = string.Empty;
                            ////总经办
                            //if (rdbGMO.Checked)
                            //{
                            //    position = rdbGMO.Text;
                            //    departmentid = "37037510";
                            //}
                            ////客服
                            //else if (rdbCustomerService.Checked)
                            //{
                            //    position = rdbCustomerService.Text;
                            //    departmentid = "36958636";
                            //}
                            ////造价员
                            //else if (rdbEmployee.Checked)
                            //{
                            //    position = rdbEmployee.Text;
                            //    departmentid = "36961466";
                            //}
                            departmentid = "110817907";

                            //\"orderInDepts\":\"{1:10}\",  \"remark\":\"\",    \"tel\":\"010-12333\",  \"workPlace\":\"\",  \"isHide\":false,  \"isSenior\":false
                            string param = "{\"name\":\"" + emp.NAME + "\",    \"department\":[" + departmentid + "],  \"position\":\"" + position + "\",  \"mobile\":\"" + emp.MOBILEPHONE +
                                           "\",  \"email\":\"" + emp.EMAIL + "\",  \"jobnumber\":\"" + emp.EMPLOYEENO + "\",}";
                            object  userCreateResult = WebServiceHelper.Post(postUrl, param);
                            JObject jCreateResult    = JObject.Parse(userCreateResult.ToString());
                            //返回码
                            errcode = jCreateResult["errcode"].ToString();
                            //返回消息
                            string errmsg = jCreateResult["errmsg"].ToString();
                            //返回码为0,成功
                            if (errcode == "0")
                            {
                                string dingTalkUserId = jCreateResult["userid"].ToString();
                                emp.DINGTALKUSERID = dingTalkUserId;
                                try
                                {
                                    //关联钉钉UserId
                                    bool uptFlag = eBll.Update(emp);
                                    //关联成功
                                    if (uptFlag)
                                    {
                                        //弹出提示并刷新当前页面
                                        ExecuteScript("alert('添加成功!');window.location.href='/Pages/Admin/EmployeeAdd?UserId=" + emp.ID + "'");
                                    }
                                    else
                                    {
                                        ExecuteScript("AlertDialog('关联钉钉UserId失败!', null);");
                                    }
                                }
                                //本地OA更新钉钉UserId失败
                                catch (Exception ex)
                                {
                                    LogHelper.WriteLine("自动关联钉钉UserId失败。" + ex.Message + ex.StackTrace);
                                    ExecuteScript("AlertDialog('操作失败!', null)");
                                }
                            }
                            else
                            {
                                LogHelper.WriteLine("用户在OA系统创建成功,但在钉钉系统创建失败,原因:" + errmsg);
                                //ExecuteScript("AlertDialog('OA系统已成功创建用户,但该用户在钉钉系统中创建失败,请人工在钉钉系统中添加。<br />钉钉系统中添加成功后,需要将其系统中的UserId填写并关联到本系统中。', null)");
                                ExecuteScript("alert('OA系统已成功创建用户,但该用户在钉钉系统中创建失败,请人工在钉钉系统中添加。钉钉系统中添加成功后,需要将其系统中的UserId填写并关联到本系统中。');window.location.href='EmployeeAdd?UserId=" + emp.ID + "';");
                            }
                        }
                        else
                        {
                            ExecuteScript("AlertDialog('用户已在本系统中成功创建,但获取钉钉token失败,并未在钉钉系统中成功添加用户,请人工添加!', null)");
                        }
                    }
                    else
                    {
                        ExecuteScript("alert('本系统添加成功但尚未关联钉钉UserId,请尽快关联!');window.location.href='/Pages/Admin/EmployeeAdd?UserId=" + emp.ID + "';");
                    }
                    #endregion
                }
                //添加失败
                else
                {
                    ExecuteScript("AlertDialog('添加失败!', null)");
                }
            }
            catch (Exception ex)
            {
                string exMsg = ex.Message;
                LogHelper.WriteLine(string.Format("员工添加出错。" + exMsg + ex.StackTrace));  //写入文本日志
                string script = string.Format("AlertDialog('服务器错误,请联系管理员!<p>{0}</p>'), null", exMsg);
                ExecuteScript(script);
            }
        }