package service import ( "errors" "hospital-admin-api/api/dao" "hospital-admin-api/api/model" "hospital-admin-api/api/requests" "hospital-admin-api/api/responses/deptResponse" "hospital-admin-api/global" "strconv" ) type DeptService struct { } // GetDeptList 获取部门列表 func (r *DeptService) GetDeptList() ([]*deptResponse.GetDeptList, error) { // 获取全部部门 adminDeptDao := dao.AdminDeptDao{} maps := make(map[string]interface{}) maps["dept_status"] = 1 adminDept, _ := adminDeptDao.GetAdminDeptList(maps) if adminDept == nil { return nil, nil } deptMap := make(map[int64]*deptResponse.GetDeptList) var deptTree []*deptResponse.GetDeptList for _, dept := range adminDept { node := &deptResponse.GetDeptList{ DeptId: strconv.FormatInt(dept.DeptId, 10), ParentId: strconv.FormatInt(dept.ParentId, 10), DeptName: dept.DeptName, DeptStatus: dept.DeptStatus, CreatedAt: dept.CreatedAt, UpdatedAt: dept.UpdatedAt, Children: nil, } deptMap[dept.DeptId] = node } // 构建菜单树 for _, dept := range adminDept { if dept.ParentId == 0 { if deptMap[dept.DeptId] == nil { continue } deptTree = append(deptTree, deptMap[dept.DeptId]) } else if parent, ok := deptMap[dept.ParentId]; ok { parent.Children = append(parent.Children, deptMap[dept.DeptId]) } } return deptTree, nil } // AddDept 新增部门 func (r *DeptService) AddDept(addDeptRequest requests.AddDept) (bool, error) { adminDeptDao := dao.AdminDeptDao{} parentId, err := strconv.ParseInt(addDeptRequest.ParentId, 10, 64) if err != nil { return false, errors.New("新增失败") } // 判断父级id if parentId != 0 { adminDept, _ := adminDeptDao.GetAdminDeptById(parentId) if adminDept == nil { return false, errors.New("上级部门错误") } } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() // 新增菜单 adminDeptModel := &model.AdminDept{ ParentId: parentId, DeptName: addDeptRequest.DeptName, DeptStatus: 1, } adminMenu, _ := adminDeptDao.AddAdminDept(tx, adminDeptModel) if adminMenu == nil { tx.Rollback() return false, errors.New("新增失败") } tx.Commit() return true, nil } // DeleteDept 删除部门-批量 func (r *DeptService) DeleteDept(deleteDeptRequest requests.DeleteDept) (bool, error) { adminDeptDao := dao.AdminDeptDao{} // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() for _, v := range deleteDeptRequest.DeptIds { // 将字符串转换为int64类型 v, err := strconv.ParseInt(v, 10, 64) if err != nil { tx.Rollback() return false, errors.New("菜单错误") } // 检测删除部门 adminDept, err := adminDeptDao.GetAdminDeptById(v) if err != nil || adminDept == nil { tx.Rollback() return false, errors.New("删除失败") } // 检测部门是否存在子集 childrenAdminDepts, err := adminDeptDao.GetAdminDeptListByParentId(v) if err != nil || len(childrenAdminDepts) > 0 { tx.Rollback() return false, errors.New("存在下级部门,删除失败") } // 修改部门为删除 data := make(map[string]interface{}) data["dept_status"] = 2 err = adminDeptDao.EditAdminDeptById(tx, v, data) if err != nil { tx.Rollback() return false, errors.New("删除失败") } } tx.Commit() return true, nil } // PutDept 修改部门 func (r *DeptService) PutDept(requestDeptId int64, putDeptRequest requests.PutDept) (bool, error) { adminDeptDao := dao.AdminDeptDao{} // 获取需修改部门数据 adminDept, err := adminDeptDao.GetAdminDeptById(requestDeptId) if err != nil || adminDept == nil { return false, errors.New("部门数据错误") } // 判断父级id parentId, err := strconv.ParseInt(putDeptRequest.ParentId, 10, 64) if err != nil { return false, errors.New("新增失败") } if parentId != 0 { adminDept, _ := adminDeptDao.GetAdminDeptById(parentId) if adminDept == nil { return false, errors.New("上级部门错误") } } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() // 修改部门 data := make(map[string]interface{}) data["parent_id"] = parentId data["dept_name"] = putDeptRequest.DeptName data["dept_status"] = putDeptRequest.DeptStatus err = adminDeptDao.EditAdminDeptById(tx, requestDeptId, data) if err != nil { tx.Rollback() return false, errors.New("修改失败") } tx.Commit() return true, nil }