375 lines
9.3 KiB
Go
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)
|
|
}
|