package controller import ( "case-admin-api/api/dao" "case-admin-api/api/dto" "case-admin-api/api/model" "case-admin-api/api/requests" "case-admin-api/api/responses" "case-admin-api/consts" "case-admin-api/global" "case-admin-api/utils" "github.com/gin-gonic/gin" "strconv" ) type ProjectPlatformDynamic struct{} // GetProjectPlatformDynamic 获取 func (b *ProjectPlatformDynamic) GetProjectPlatformDynamic(c *gin.Context) { projectPlatformDynamicRequest := requests.ProjectPlatformDynamicRequest{} req := projectPlatformDynamicRequest.GetProjectPlatformDynamic if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } projectPlatformDynamicDao := dao.ProjectPlatformDynamicDao{} projectPlatformDynamicItemDao := dao.ProjectPlatformDynamicItemDao{} maps := make(map[string]interface{}) maps["project_platform_id"] = req.ProjectPlatformId projectPlatformDynamics, _ := projectPlatformDynamicDao.GetProjectPlatformDynamicList(maps) // 处理返回值 g := dto.GetProjectPlatformDynamicListDto(projectPlatformDynamics) for _, dynamic := range g { // 将 id 转换为 int64 类型 whiteDynamicId, err := strconv.ParseInt(dynamic.WhiteDynamicId, 10, 64) if err != nil { responses.Fail(c) return } // 获取明细 projectPlatformDynamicItems, err := projectPlatformDynamicItemDao.GetProjectPlatformDynamicItemListByWhiteDynamicId(whiteDynamicId) if err != nil { responses.FailWithMessage(err.Error(), c) return } dynamic = dynamic.LoadItem(projectPlatformDynamicItems) } responses.OkWithData(g, c) } // AddProjectPlatformDynamic 新增 func (b *ProjectPlatformDynamic) AddProjectPlatformDynamic(c *gin.Context) { projectPlatformDynamicRequest := requests.ProjectPlatformDynamicRequest{} req := projectPlatformDynamicRequest.AddProjectPlatformDynamic if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 检测关联平台 // 将 id 转换为 int64 类型 projectPlatformId, err := strconv.ParseInt(req.ProjectPlatformId, 10, 64) if err != nil { responses.Fail(c) return } projectPlatformDao := dao.ProjectPlatformDao{} _, err = projectPlatformDao.GetProjectPlatformById(projectPlatformId) if err != nil { responses.FailWithMessage("项目未绑定该平台", c) return } // 检测是否重复 projectPlatformDynamicDao := dao.ProjectPlatformDynamicDao{} maps := make(map[string]interface{}) maps["project_platform_id"] = projectPlatformId maps["dynamic_type"] = req.DynamicType projectPlatformDynamics, _ := projectPlatformDynamicDao.GetProjectPlatformDynamicList(maps) if len(projectPlatformDynamics) > 0 { responses.FailWithMessage("重复添加", c) return } // 验证参数 if req.DynamicType == "area" { // 省份 for _, item := range req.ProjectPlatformDynamicItem { isTrue := 0 for _, province := range consts.Provinces { if item.ItemValue == province { isTrue = 1 } } if isTrue == 0 { responses.FailWithMessage("存在非法省份", c) return } } } else if req.DynamicType == "level" { // 医院等级 for _, item := range req.ProjectPlatformDynamicItem { isTrue := 0 for _, v := range consts.HospitalLevel { if item.ItemValue == v { isTrue = 1 } } if isTrue == 0 { responses.FailWithMessage("存在非法医院等级", c) return } } } else if req.DynamicType == "title" { // 职称 for _, item := range req.ProjectPlatformDynamicItem { isTrue := 0 for _, v := range consts.DoctorTitle { if item.ItemValue == v { isTrue = 1 } } if isTrue == 0 { responses.FailWithMessage("存在非法职称", c) return } } } else if req.DynamicType == "department" { // 科室 for _, item := range req.ProjectPlatformDynamicItem { _, exists := consts.HospitalDepartmentMap[item.ItemValue] if exists { responses.FailWithMessage("存在非法科室", c) return } } } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() // 新增白名单动态表 projectPlatformDynamic := &model.ProjectPlatformDynamic{ ProjectPlatformId: projectPlatformId, DynamicType: req.DynamicType, Status: *req.Status, } projectPlatformDynamic, err = projectPlatformDynamicDao.AddProjectPlatformDynamic(tx, projectPlatformDynamic) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } // 新增白名单动态表-明细 projectPlatformDynamicItemDao := dao.ProjectPlatformDynamicItemDao{} for _, item := range req.ProjectPlatformDynamicItem { projectPlatformDynamicItem := &model.ProjectPlatformDynamicItem{ WhiteDynamicId: projectPlatformDynamic.WhiteDynamicId, ItemValue: item.ItemValue, } projectPlatformDynamicItem, err = projectPlatformDynamicItemDao.AddProjectPlatformDynamicItem(tx, projectPlatformDynamicItem) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } } tx.Commit() responses.Ok(c) } // PutProjectPlatformDynamic 修改 func (b *ProjectPlatformDynamic) PutProjectPlatformDynamic(c *gin.Context) { projectPlatformDynamicRequest := requests.ProjectPlatformDynamicRequest{} req := projectPlatformDynamicRequest.PutProjectPlatformDynamic if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 检测关联平台 // 将 id 转换为 int64 类型 projectPlatformId, err := strconv.ParseInt(req.ProjectPlatformId, 10, 64) if err != nil { responses.Fail(c) return } projectPlatformDao := dao.ProjectPlatformDao{} _, err = projectPlatformDao.GetProjectPlatformById(projectPlatformId) if err != nil { responses.FailWithMessage("项目未绑定该平台", c) return } id := c.Param("white_dynamic_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 whiteDynamicId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 检测白名单 projectPlatformDynamicDao := dao.ProjectPlatformDynamicDao{} projectPlatformDynamic, err := projectPlatformDynamicDao.GetProjectPlatformDynamicById(whiteDynamicId) if err != nil { responses.Fail(c) return } if projectPlatformDynamic.DynamicType != req.DynamicType { responses.FailWithMessage("白名单类型错误", c) return } // 验证参数 // 省份 if req.DynamicType == "area" { for _, item := range req.ProjectPlatformDynamicItem { isTrue := 0 for _, province := range consts.Provinces { if item.ItemValue == province { isTrue = 1 } } if isTrue == 0 { responses.FailWithMessage("存在非法省份", c) return } } } // 医院等级 if req.DynamicType == "level" { for _, item := range req.ProjectPlatformDynamicItem { isTrue := 0 for _, v := range consts.HospitalLevel { if item.ItemValue == v { isTrue = 1 } } if isTrue == 0 { responses.FailWithMessage("存在非法医院等级", c) return } } } // 职称 if req.DynamicType == "title" { for _, item := range req.ProjectPlatformDynamicItem { isTrue := 0 for _, v := range consts.DoctorTitle { if item.ItemValue == v { isTrue = 1 } } if isTrue == 0 { responses.FailWithMessage("存在非法职称", c) return } } } // 科室 if req.DynamicType == "department" { for _, item := range req.ProjectPlatformDynamicItem { _, exists := consts.HospitalDepartmentMap[item.ItemValue] if exists { responses.FailWithMessage("存在非法科室", c) return } } } // 开始事务 tx := global.Db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() // 删除白名单动态表-明细 projectPlatformDynamicItemDao := dao.ProjectPlatformDynamicItemDao{} err = projectPlatformDynamicItemDao.DeleteProjectPlatformDynamicItemByWhiteDynamicId(tx, whiteDynamicId) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } // 新增白名单动态表-明细 for _, item := range req.ProjectPlatformDynamicItem { projectPlatformDynamicItem := &model.ProjectPlatformDynamicItem{ WhiteDynamicId: projectPlatformDynamic.WhiteDynamicId, ItemValue: item.ItemValue, } projectPlatformDynamicItem, err = projectPlatformDynamicItemDao.AddProjectPlatformDynamicItem(tx, projectPlatformDynamicItem) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } } projectPlatformDynamicData := make(map[string]interface{}) if *req.Status != projectPlatformDynamic.Status { projectPlatformDynamicData["status"] = *req.Status } if len(projectPlatformDynamicData) > 0 { err = projectPlatformDynamicDao.EditProjectPlatformDynamicById(tx, whiteDynamicId, projectPlatformDynamicData) if err != nil { tx.Rollback() responses.FailWithMessage(err.Error(), c) return } } tx.Commit() responses.Ok(c) }