package services import ( "fmt" "hongze/hz_crm_api/models/company" "hongze/hz_crm_api/models/company_todo" "hongze/hz_crm_api/models/system" "hongze/hz_crm_api/utils" "time" ) // AddCompanyTodo 添加任务待办 func AddCompanyTodo(companyId, productId int, content string, endTime time.Time, createUserInfo *system.Admin) (errMsg string, err error) { defer func() { if err != nil { if errMsg == `` { errMsg = "添加任务失败" } } }() // 获取客户信息 companyProductInfo, err := company.GetCompanyProductByCompanyIdAndProductId(companyId, productId) if err != nil { errMsg = `获取客户信息异常` return } sellerId := companyProductInfo.SellerId sellerName := companyProductInfo.SellerName //是否在允许创建任务的角色里面 if createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_ADMIN && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_GROUP && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_TEAM && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_SELLER && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_GROUP && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_SELLER { errMsg = `操作人角色异常,不允许新增任务:` + createUserInfo.RoleName err = fmt.Errorf(errMsg) return } //超管和部门管理员所有客户都能操作,那就不判断了 //如果是普通销售,那么只能操作自己的客户 if createUserInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER || createUserInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER { if sellerId != createUserInfo.AdminId { errMsg = `该客户不是当前账号所属,不允许新增任务` err = fmt.Errorf(errMsg) return } } //获取客户所属销售信息 sellerInfo, err := system.GetSysUserById(companyProductInfo.SellerId) if err != nil { errMsg = `获取客户所属销售信息异常` return } // 销售主管、组长权限判断 switch createUserInfo.RoleTypeCode { case utils.ROLE_TYPE_CODE_FICC_GROUP: //ficc主管 isSame, tmpErr := CheckAdminIsSameBigGroup(createUserInfo, sellerInfo) if tmpErr != nil { errMsg = `获取客户所属销售信息异常` err = fmt.Errorf("判断主管与该客户所属销售是否属于同一大组失败,err:" + tmpErr.Error()) return } if !isSame { errMsg = `该客户不是当前账号所属组员,不允许新增任务` err = fmt.Errorf(errMsg) return } case utils.ROLE_TYPE_CODE_FICC_TEAM, utils.ROLE_TYPE_CODE_RAI_GROUP: //ficc组长、权益组长 if sellerInfo.GroupId != createUserInfo.GroupId { errMsg = `该客户不是当前账号所属组员,不允许新增任务` err = fmt.Errorf(errMsg) return } } // 获取正在处理中的任务数量 total, err := company_todo.GetCountDoingCompanyTodo(companyId, productId) if err != nil { return } if total > 0 { errMsg = "当前存在待处理的任务,不允许添加新的任务待办" err = fmt.Errorf(errMsg) return } companyTodoInfo := &company_todo.CompanyTodo{ //Id: 0, CompanyId: companyId, ProductId: productId, Content: content, SellerId: sellerId, SellerName: sellerName, CreatedCompanyStatus: companyProductInfo.Status, CreateUserId: createUserInfo.AdminId, CreateUserName: createUserInfo.RealName, //ApproveUserId: 0, //ApproveUserName: "", Status: "进行中", ModifyTime: time.Now(), CreateTime: time.Now(), EndTime: endTime, } _, err = company_todo.AddCompanyTodo(companyTodoInfo) return } // EditCompanyTodo 修改任务待办 func EditCompanyTodo(id int, content string, endTime time.Time, createUserInfo *system.Admin) (errMsg string, err error) { defer func() { if err != nil { if errMsg == `` { errMsg = "编辑任务失败" } } }() // 获取正在处理中的任务数量 companyTodoInfo, err := company_todo.GetCompanyTodoById(id) if err != nil { return } if companyTodoInfo.Status != "进行中" { errMsg = `任务状态异常:` + companyTodoInfo.Status + `,不允许编辑该任务待办` err = fmt.Errorf(errMsg) return } // 获取客户信息 companyProductInfo, err := company.GetCompanyProductByCompanyIdAndProductId(companyTodoInfo.CompanyId, companyTodoInfo.ProductId) if err != nil { errMsg = "获取客户信息异常,err:" + err.Error() return } sellerId := companyProductInfo.SellerId sellerName := companyProductInfo.SellerName //是否在允许创建任务的角色里面 if createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_ADMIN && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_GROUP && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_TEAM && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_SELLER && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_GROUP && createUserInfo.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_SELLER { errMsg = `操作人角色异常,不允许新增任务:` + createUserInfo.RoleName err = fmt.Errorf(errMsg) return } //超管和部门管理员所有客户都能操作,那就不判断了 //如果是普通销售,那么只能操作自己的客户 if createUserInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER || createUserInfo.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER { if sellerId != createUserInfo.AdminId { errMsg = `该客户不是当前账号所属,不允许编辑任务` err = fmt.Errorf(errMsg) return } } //获取客户所属销售信息 sellerInfo, err := system.GetSysUserById(companyProductInfo.SellerId) if err != nil { errMsg = `获取客户所属销售信息异常` return } // 销售主管、组长权限判断 switch createUserInfo.RoleTypeCode { case utils.ROLE_TYPE_CODE_FICC_GROUP: //ficc主管 isSame, tmpErr := CheckAdminIsSameBigGroup(createUserInfo, sellerInfo) if tmpErr != nil { errMsg = `获取客户所属销售信息异常` err = fmt.Errorf("判断主管与该客户所属销售是否属于同一大组失败,err:" + tmpErr.Error()) return } if !isSame { errMsg = `该客户不是当前账号所属组员,不允许新增任务` err = fmt.Errorf(errMsg) return } case utils.ROLE_TYPE_CODE_FICC_TEAM, utils.ROLE_TYPE_CODE_RAI_GROUP: //ficc组长、权益组长 if sellerInfo.GroupId != createUserInfo.GroupId { errMsg = `该客户不是当前账号所属组员,不允许新增任务` err = fmt.Errorf(errMsg) return } } companyTodoInfo.Content = content companyTodoInfo.SellerId = sellerId companyTodoInfo.SellerName = sellerName companyTodoInfo.CreatedCompanyStatus = companyProductInfo.Status companyTodoInfo.ModifyTime = time.Now() companyTodoInfo.EndTime = endTime err = companyTodoInfo.EditCompanyTodo([]string{"Content", "SellerId", "SellerName", "CreatedCompanyStatus", "ModifyTime", "EndTime"}) return } // ApproveCompanyTodo 审批任务待办 func ApproveCompanyTodo(id int, remark string, approveUserInfo *system.Admin) (errMsg string, err error) { defer func() { if err != nil { if errMsg == `` { errMsg = "编辑任务失败" } } }() // 获取正在处理中的任务数量 companyTodoInfo, err := company_todo.GetCompanyTodoById(id) if err != nil { return } if companyTodoInfo.Status != "进行中" { errMsg = `任务状态异常:` + companyTodoInfo.Status + `,不允许编辑该任务待办` err = fmt.Errorf(errMsg) return } // 获取客户信息 companyProductInfo, err := company.GetCompanyProductByCompanyIdAndProductId(companyTodoInfo.CompanyId, companyTodoInfo.ProductId) if err != nil { errMsg = "获取客户信息异常,err:" + err.Error() return } //sellerId := companyProductInfo.SellerId //sellerName := companyProductInfo.SellerName //获取客户所属销售信息 sellerInfo, err := system.GetSysUserById(companyProductInfo.SellerId) if err != nil { errMsg = `获取客户所属销售信息异常` return } // 销售主管、组长权限判断 switch approveUserInfo.RoleTypeCode { case utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_RAI_ADMIN: // ficc管理员可以全部审批通过 case utils.ROLE_TYPE_CODE_FICC_GROUP, utils.ROLE_TYPE_CODE_RAI_GROUP: //ficc主管、权益组长 isSame, tmpErr := CheckAdminIsSameBigGroup(approveUserInfo, sellerInfo) if tmpErr != nil { errMsg = `获取客户所属销售信息异常` err = fmt.Errorf("判断主管与该客户所属销售是否属于同一大组失败,err:" + tmpErr.Error()) return } if !isSame { errMsg = `该客户不是当前账号所属组员,不允许审批任务` err = fmt.Errorf(errMsg) return } case utils.ROLE_TYPE_CODE_FICC_TEAM: //ficc组长 if sellerInfo.GroupId != approveUserInfo.GroupId { errMsg = `该客户不是当前账号所属组员,不允许审批任务` err = fmt.Errorf(errMsg) return } case utils.ROLE_TYPE_CODE_RAI_SELLER: //权益销售 if sellerInfo.AdminId != approveUserInfo.AdminId { //approveUserInfo. errMsg = `没有审批权限,不允许审批任务` err = fmt.Errorf(errMsg) return } has := CheckRaiApprovePermission(approveUserInfo.AdminId) if !has { errMsg = `当前账号没有审批权限,不允许审批任务` err = fmt.Errorf(errMsg) return } default: errMsg = `操作人角色异常,不允许审批任务:` + approveUserInfo.RoleName err = fmt.Errorf(errMsg) return } //companyTodoInfo.SellerId = sellerId //companyTodoInfo.SellerName = sellerName companyTodoInfo.Status = "已完成" companyTodoInfo.ApproveUserId = approveUserInfo.AdminId companyTodoInfo.ApproveUserName = approveUserInfo.RealName companyTodoInfo.ModifyTime = time.Now() companyTodoInfo.ApproveTime = time.Now() companyTodoInfo.Remark = remark companyTodoInfo.ApprovedCompanyStatus = companyProductInfo.Status companyTodoInfo.ApprovedSellerId = companyProductInfo.SellerId companyTodoInfo.ApprovedSellerName = companyProductInfo.SellerName err = companyTodoInfo.ApproveCompanyTodo([]string{"Status", "ApproveUserId", "ApproveUserName", "ModifyTime", "ApproveTime", "ApprovedCompanyStatus", "ApprovedSellerId", "ApprovedSellerName", "Remark"}) return } // CheckRaiApprovePermission 检测权益销售的审批权限 func CheckRaiApprovePermission(id int) (has bool) { adminIdArr := []int{238, 115, 392, 198, 286, 185, 285, 186, 378, 503, 489} has = utils.InArrayByInt(adminIdArr, id) return }