case-admin-api/api/controller/ProjectPlatformDynamic.go
2025-03-07 17:23:50 +08:00

375 lines
9.3 KiB
Go

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)
}