ziwen 1 year ago
parent
commit
a7ec60d54f

+ 328 - 181
controllers/sandbox/sandbox.go

@@ -7,7 +7,6 @@ import (
 	"eta/eta_api/models/sandbox"
 	"eta/eta_api/models/sandbox/request"
 	"eta/eta_api/models/sandbox/response"
-	"eta/eta_api/models/system"
 	sandboxService "eta/eta_api/services/sandbox"
 	"eta/eta_api/utils"
 	"fmt"
@@ -300,82 +299,82 @@ func (this *SandboxController) VersionList() {
 	br.Data = resp
 }
 
-// Save
-// @Title 新增/编辑保存沙盘
-// @Description 新增/编辑保存沙盘接口
-// @Param	request	body request.AddAndEditSandbox true "type json string"
-// @Success 200 {object} sandbox.Sandbox
-// @router /save [post]
-func (this *SandboxController) Save() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	sysUser := this.SysUser
-	if sysUser == nil {
-		br.Msg = "请登录"
-		br.ErrMsg = "请登录,SysUser Is Empty"
-		br.Ret = 408
-		return
-	}
-	var req request.AddAndEditSandbox
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-
-	var sandboxResp *sandbox.SandboxSaveResp
-	// 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
-	menus, e := system.GetSysMenuItemsByCondition(` AND hidden = 0`, make([]interface{}, 0), []string{}, ``)
-	if e != nil {
-		br.Msg = "保存失败"
-		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
-		return
-	}
-	menuMap := make(map[string]bool)
-	for _, m := range menus {
-		if m.ButtonCode != "" {
-			menuMap[m.ButtonCode] = true
-		}
-	}
-	ignoreVariety := false
-	if !menuMap[system.MenuSpecialHandleSandboxVariety] {
-		ignoreVariety = true
-	}
-
-	var errMsg string
-	if req.SandboxVersionCode == `` {
-		//新增沙盘
-		sandboxResp, err = sandboxService.AddSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
-	} else {
-		////更新当前编辑中的状态缓存
-		//err = sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, 1)
-		//if err != nil {
-		//	br.Msg = err.Error()
-		//	return
-		//}
-
-		//编辑沙盘
-		sandboxResp, err, errMsg = sandboxService.UpdateSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
-	}
-	if err != nil {
-		br.Msg = "保存失败!"
-		if errMsg != `` {
-			br.Msg = errMsg
-		}
-		br.ErrMsg = "保存失败,Err:" + err.Error()
-		return
-	}
-
-	msg := "保存成功"
-	br.Ret = 200
-	br.Success = true
-	br.Msg = msg
-	br.Data = sandboxResp
-}
+//// Save
+//// @Title 新增/编辑保存沙盘
+//// @Description 新增/编辑保存沙盘接口
+//// @Param	request	body request.AddAndEditSandbox true "type json string"
+//// @Success 200 {object} sandbox.Sandbox
+//// @router /save [post]
+//func (this *SandboxController) Save() {
+//	br := new(models.BaseResponse).Init()
+//	defer func() {
+//		this.Data["json"] = br
+//		this.ServeJSON()
+//	}()
+//	sysUser := this.SysUser
+//	if sysUser == nil {
+//		br.Msg = "请登录"
+//		br.ErrMsg = "请登录,SysUser Is Empty"
+//		br.Ret = 408
+//		return
+//	}
+//	var req request.AddAndEditSandbox
+//	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+//	if err != nil {
+//		br.Msg = "参数解析异常!"
+//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+//		return
+//	}
+//
+//	var sandboxResp *sandbox.SandboxSaveResp
+//	// 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
+//	menus, e := system.GetSysMenuItemsByCondition(` AND hidden = 0`, make([]interface{}, 0), []string{}, ``)
+//	if e != nil {
+//		br.Msg = "保存失败"
+//		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+//		return
+//	}
+//	menuMap := make(map[string]bool)
+//	for _, m := range menus {
+//		if m.ButtonCode != "" {
+//			menuMap[m.ButtonCode] = true
+//		}
+//	}
+//	ignoreVariety := false
+//	if !menuMap[system.MenuSpecialHandleSandboxVariety] {
+//		ignoreVariety = true
+//	}
+//
+//	var errMsg string
+//	if req.SandboxVersionCode == `` {
+//		//新增沙盘
+//		sandboxResp, err = sandboxService.AddSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
+//	} else {
+//		////更新当前编辑中的状态缓存
+//		//err = sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, 1)
+//		//if err != nil {
+//		//	br.Msg = err.Error()
+//		//	return
+//		//}
+//
+//		//编辑沙盘
+//		sandboxResp, err, errMsg = sandboxService.UpdateSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
+//	}
+//	if err != nil {
+//		br.Msg = "保存失败!"
+//		if errMsg != `` {
+//			br.Msg = errMsg
+//		}
+//		br.ErrMsg = "保存失败,Err:" + err.Error()
+//		return
+//	}
+//
+//	msg := "保存成功"
+//	br.Ret = 200
+//	br.Success = true
+//	br.Msg = msg
+//	br.Data = sandboxResp
+//}
 
 // AddSandboxDraft
 // @Title 添加沙盘草稿
@@ -641,111 +640,111 @@ func (this *SandboxController) Delete() {
 	br.Msg = msg
 }
 
-// DeleteVersion
-// @Title 删除沙盘版本
-// @Description 删除沙盘版本接口
-// @Param	request	body request.DeleteSandbox true "type json string"
-// @Success 200 标记成功
-// @router /version/delete [post]
-func (this *SandboxController) DeleteVersion() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	sysUser := this.SysUser
-	if sysUser == nil {
-		br.Msg = "请登录"
-		br.ErrMsg = "请登录,SysUser Is Empty"
-		br.Ret = 408
-		return
-	}
-	var req request.DeleteSandboxVersion
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-
-	if req.SandboxVersionCode == `` {
-		br.Msg = "缺少沙盘版本号"
-		return
-	}
-	//删除沙盘
-	err, errMsg := sandboxService.DeleteSandboxVersion(req.SandboxVersionCode, this.SysUser.AdminId)
-	if err != nil {
-		br.Msg = "删除版本失败"
-		if errMsg != `` {
-			br.Msg = errMsg
-		}
-		br.ErrMsg = err.Error()
-		return
-	}
-
-	msg := "删除成功"
-	br.Ret = 200
-	br.Success = true
-	br.Msg = msg
-}
-
-// ResetDraftToLastVersion
-// @Title 重置沙盘草稿至最新版本
-// @Description 重置沙盘草稿至最新版本接口
-// @Param	request	body request.DeleteSandbox true "type json string"
-// @Success 200 {object} sandbox.SandboxDraft
-// @Fail 202 另外的人在操作,不要重复添加草稿;204 错误了,当时不是必要性的错误,不用将错误信息暴露给用户
-// @router /draft/reset [post]
-func (this *SandboxController) ResetDraftToLastVersion() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	sysUser := this.SysUser
-	if sysUser == nil {
-		br.Msg = "请登录"
-		br.ErrMsg = "请登录,SysUser Is Empty"
-		br.Ret = 408
-		return
-	}
-	var req request.DeleteSandbox
-	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-
-	if req.SandboxId <= 0 {
-		br.Msg = "缺少沙盘编号"
-		return
-	}
-
-	//更新标记key
-	markStatus, err := sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, 0, sysUser.RealName)
-	if err != nil {
-		br.Msg = err.Error()
-		return
-	}
-	if markStatus.Status == 1 {
-		br.Msg = markStatus.Msg
-		return
-	}
+//// DeleteVersion
+//// @Title 删除沙盘版本
+//// @Description 删除沙盘版本接口
+//// @Param	request	body request.DeleteSandbox true "type json string"
+//// @Success 200 标记成功
+//// @router /version/delete [post]
+//func (this *SandboxController) DeleteVersion() {
+//	br := new(models.BaseResponse).Init()
+//	defer func() {
+//		this.Data["json"] = br
+//		this.ServeJSON()
+//	}()
+//	sysUser := this.SysUser
+//	if sysUser == nil {
+//		br.Msg = "请登录"
+//		br.ErrMsg = "请登录,SysUser Is Empty"
+//		br.Ret = 408
+//		return
+//	}
+//	var req request.DeleteSandboxVersion
+//	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+//	if err != nil {
+//		br.Msg = "参数解析异常!"
+//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+//		return
+//	}
+//
+//	if req.SandboxVersionCode == `` {
+//		br.Msg = "缺少沙盘版本号"
+//		return
+//	}
+//	//删除沙盘
+//	err, errMsg := sandboxService.DeleteSandboxVersion(req.SandboxVersionCode, this.SysUser.AdminId)
+//	if err != nil {
+//		br.Msg = "删除版本失败"
+//		if errMsg != `` {
+//			br.Msg = errMsg
+//		}
+//		br.ErrMsg = err.Error()
+//		return
+//	}
+//
+//	msg := "删除成功"
+//	br.Ret = 200
+//	br.Success = true
+//	br.Msg = msg
+//}
 
-	//重置沙盘草稿至最新版本
-	sandboxDraftInfo, err := sandboxService.ResetDraftToLastVersion(req.SandboxId, sysUser.AdminId, sysUser.RealName)
-	if err != nil {
-		br.Msg = "保存失败!"
-		br.ErrMsg = "保存失败,Err:" + err.Error()
-		return
-	}
-	msg := "保存成功"
-	br.Ret = 200
-	br.Success = true
-	br.Msg = msg
-	br.Data = sandboxDraftInfo
-}
+//// ResetDraftToLastVersion
+//// @Title 重置沙盘草稿至最新版本
+//// @Description 重置沙盘草稿至最新版本接口
+//// @Param	request	body request.DeleteSandbox true "type json string"
+//// @Success 200 {object} sandbox.SandboxDraft
+//// @Fail 202 另外的人在操作,不要重复添加草稿;204 错误了,当时不是必要性的错误,不用将错误信息暴露给用户
+//// @router /draft/reset [post]
+//func (this *SandboxController) ResetDraftToLastVersion() {
+//	br := new(models.BaseResponse).Init()
+//	defer func() {
+//		this.Data["json"] = br
+//		this.ServeJSON()
+//	}()
+//	sysUser := this.SysUser
+//	if sysUser == nil {
+//		br.Msg = "请登录"
+//		br.ErrMsg = "请登录,SysUser Is Empty"
+//		br.Ret = 408
+//		return
+//	}
+//	var req request.DeleteSandbox
+//	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+//	if err != nil {
+//		br.Msg = "参数解析异常!"
+//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+//		return
+//	}
+//
+//	if req.SandboxId <= 0 {
+//		br.Msg = "缺少沙盘编号"
+//		return
+//	}
+//
+//	//更新标记key
+//	markStatus, err := sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, 0, sysUser.RealName)
+//	if err != nil {
+//		br.Msg = err.Error()
+//		return
+//	}
+//	if markStatus.Status == 1 {
+//		br.Msg = markStatus.Msg
+//		return
+//	}
+//
+//	//重置沙盘草稿至最新版本
+//	sandboxDraftInfo, err := sandboxService.ResetDraftToLastVersion(req.SandboxId, sysUser.AdminId, sysUser.RealName)
+//	if err != nil {
+//		br.Msg = "保存失败!"
+//		br.ErrMsg = "保存失败,Err:" + err.Error()
+//		return
+//	}
+//	msg := "保存成功"
+//	br.Ret = 200
+//	br.Success = true
+//	br.Msg = msg
+//	br.Data = sandboxDraftInfo
+//}
 
 // ListByQuote
 // @Title 逻辑导图列表(其他地方引用到的,莫名其妙要根据输入的关键字匹配品种)
@@ -1387,4 +1386,152 @@ func (this *SandboxController) ChartClassifyMove() {
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "移动成功"
+}
+
+// @Title ETA图表列表接口
+// @Description ETA图表列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   ChartClassifyId   query   int  true       "分类id"
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Param   IsShowMe   query   bool  true       "是否只看我的,true、false"
+// @Success 200 {object} data_manage.ChartListResp
+// @router /listV2 [get]
+func (this *SandboxController) ListV2() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	sandboxClassifyId, _ := this.GetInt("SandboxClassifyId")
+
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	keyWord := this.GetString("KeyWord")
+
+	var total int
+	page := paging.GetPaging(currentIndex, pageSize, total)
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	var condition string
+	var pars []interface{}
+
+	if sandboxClassifyId > 0 {
+		chartClassifyId, err := sandbox.GetSandboxClassify(sandboxClassifyId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取图表信息失败"
+			br.ErrMsg = "获取信息失败,GetChartClassify,Err:" + err.Error()
+			return
+		}
+		condition += " AND chart_classify_id IN(" + chartClassifyId + ") "
+		//pars = append(pars, chartClassifyId)
+	}
+	if keyWord != "" {
+		condition += ` AND  ( name LIKE '%` + keyWord + `%' )`
+	}
+
+	//只看我的
+	isShowMe, _ := this.GetBool("IsShowMe")
+	if isShowMe {
+		condition += ` AND sys_user_id = ? `
+		pars = append(pars, sysUser.AdminId)
+	}
+
+	//获取图表信息
+	list, err := sandbox.GetSandboxListByCondition(condition, pars, startSize, pageSize)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Success = true
+		br.Msg = "获取沙盘信息失败"
+		br.ErrMsg = "获取沙盘信息失败,Err:" + err.Error()
+		return
+	}
+
+	resp := new(sandbox.SandboxListResp)
+	if list == nil || len(list) <= 0 || (err != nil && err.Error() == utils.ErrNoRow()) {
+		items := make([]*sandbox.Sandbox, 0)
+		resp.Paging = page
+		resp.List = items
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
+
+	dataCount, err := sandbox.GetSandboxListCountByCondition(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取指标信息失败"
+		br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
+		return
+	}
+	page = paging.GetPaging(currentIndex, pageSize, dataCount)
+	resp.Paging = page
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// Save
+// @Title 新增/编辑保存沙盘
+// @Description 新增/编辑保存沙盘接口
+// @Param	request	body request.AddAndEditSandbox true "type json string"
+// @Success 200 {object} sandbox.Sandbox
+// @router /saveV2 [post]
+func (this *SandboxController) SaveV2() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.AddAndEditSandboxV2
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	var sandboxResp *sandbox.SandboxSaveResp
+
+
+	var errMsg string
+	sandboxResp, err = sandboxService.AddSandboxV2(req, sysUser.AdminId, sysUser.RealName)
+	if err != nil {
+		br.Msg = "保存失败!"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
+	}
+
+	msg := "保存成功"
+	br.Ret = 200
+	br.Success = true
+	br.Msg = msg
+	br.Data = sandboxResp
 }

+ 9 - 0
models/sandbox/request/sandbox.go

@@ -26,3 +26,12 @@ type DeleteSandbox struct {
 type DeleteSandboxVersion struct {
 	SandboxVersionCode string `description:"沙盘版本code"`
 }
+
+// AddAndEditSandboxV2 添加/编辑沙盘的请求数据
+type AddAndEditSandboxV2 struct {
+	Name               string `description:"沙盘名称"`
+	Content            string `description:"沙盘内容"`
+	PicUrl             string `description:"沙盘图片地址"`
+	SvgData            string `description:"沙盘svg图片数据"`
+	SandboxClassifyId  int    `description:"分类id"`
+}

+ 72 - 5
models/sandbox/sandbox.go

@@ -4,21 +4,37 @@ import (
 	"eta/eta_api/models/system"
 	"eta/eta_api/utils"
 	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"time"
 )
 
 // Sandbox 沙盘推演主表
+//type Sandbox struct {
+//	SandboxId           int       `orm:"column(sandbox_id);pk" description:"沙盘id"`
+//	Name                string    `description:"沙盘名称"`
+//	ChartPermissionId   int       `description:"品种id"`
+//	ChartPermissionName string    `description:"品种名称"`
+//	CurrVersion         int       `description:"当前版本"`
+//	Code                string    `description:"沙盘code"`
+//	Content             string    `description:"沙盘数据"`
+//	PicUrl              string    `description:"沙盘图片地址"`
+//	OpUserId            int       `description:"最近一次编辑操作的用户id"`
+//	OpUserName          string    `description:"最近一次编辑的用户名称(冗余字段,避免查表)"`
+//	IsDelete            int8      `description:"是否删除,0:未删除,1:已删除"`
+//	ModifyTime          time.Time `description:"修改时间"`
+//	CreateTime          time.Time `description:"创建时间"`
+//	SandboxClassifyId   int       `description:"分类id"`
+//	Sort                int       `description:"排序"`
+//}
+
 type Sandbox struct {
 	SandboxId           int       `orm:"column(sandbox_id);pk" description:"沙盘id"`
 	Name                string    `description:"沙盘名称"`
-	ChartPermissionId   int       `description:"品种id"`
-	ChartPermissionName string    `description:"品种名称"`
-	CurrVersion         int       `description:"当前版本"`
 	Code                string    `description:"沙盘code"`
 	Content             string    `description:"沙盘数据"`
 	PicUrl              string    `description:"沙盘图片地址"`
-	OpUserId            int       `description:"最近一次编辑操作的用户id"`
-	OpUserName          string    `description:"最近一次编辑的用户名称(冗余字段,避免查表)"`
+	SysUserId            int       `description:"作者id"`
+	SysUserName          string    `description:"作者名称"`
 	IsDelete            int8      `description:"是否删除,0:未删除,1:已删除"`
 	ModifyTime          time.Time `description:"修改时间"`
 	CreateTime          time.Time `description:"创建时间"`
@@ -230,4 +246,55 @@ func GetSandboxInfoByAdminId(adminId int) (items []*SandboxClassifyItems, err er
             FROM sandbox where sys_user_id = ? ORDER BY sort asc,create_time ASC `
 	_, err = o.Raw(sql, adminId).QueryRows(&items)
 	return
+}
+
+func GetSandboxClassify(sandboxClassifyId int) (sandbox_classify_id string, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT GROUP_CONCAT(t.sandbox_classify_id) AS sandbox_classify_id FROM (
+			SELECT a.sandbox_classify_id FROM sandbox_classify AS a 
+			WHERE a.sandbox_classify_id=?
+			UNION ALL
+			SELECT a.sandbox_classify_id FROM sandbox_classify AS a 
+			WHERE a.parent_id=? UNION ALL
+	SELECT
+		sandbox_classify_id 
+	FROM
+		sandbox_classify 
+WHERE
+	parent_id IN ( SELECT sandbox_classify_id FROM sandbox_classify WHERE parent_id = ? )
+			)AS t`
+	err = o.Raw(sql, sandboxClassifyId, sandboxClassifyId, sandboxClassifyId).QueryRow(&sandbox_classify_id)
+	return
+}
+
+func GetSandboxListByCondition(condition string, pars []interface{}, startSize, pageSize int) (item []*Sandbox, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM sandbox WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += " ORDER BY create_time DESC LIMIT ?,? "
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&item)
+	return
+}
+
+func GetSandboxListCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT COUNT(1) AS count FROM sandbox WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+type SandboxListResp struct {
+	Paging *paging.PagingItem
+	List   []*Sandbox
+}
+
+func AddSandbox(item *Sandbox) (lastId int64, err error) {
+	o := orm.NewOrmUsingDB("data")
+	lastId, err = o.Insert(item)
+	return
 }

+ 9 - 18
routers/commentsRouter.go

@@ -4147,15 +4147,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"],
-        beego.ControllerComments{
-            Method: "ResetDraftToLastVersion",
-            Router: `/draft/reset`,
-            AllowHTTPMethods: []string{"post"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"],
         beego.ControllerComments{
             Method: "GetLastSandboxInfo",
@@ -4176,8 +4167,8 @@ func init() {
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"],
         beego.ControllerComments{
-            Method: "ListByQuote",
-            Router: `/list_by_quote`,
+            Method: "ListV2",
+            Router: `/listV2`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
@@ -4185,17 +4176,17 @@ func init() {
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"],
         beego.ControllerComments{
-            Method: "MarkEditStatus",
-            Router: `/mark`,
-            AllowHTTPMethods: []string{"post"},
+            Method: "ListByQuote",
+            Router: `/list_by_quote`,
+            AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"],
         beego.ControllerComments{
-            Method: "Save",
-            Router: `/save`,
+            Method: "MarkEditStatus",
+            Router: `/mark`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
@@ -4203,8 +4194,8 @@ func init() {
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/sandbox:SandboxController"],
         beego.ControllerComments{
-            Method: "DeleteVersion",
-            Router: `/version/delete`,
+            Method: "SaveV2",
+            Router: `/saveV2`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,

+ 325 - 301
services/sandbox/sandbox.go

@@ -2,7 +2,6 @@ package sandbox
 
 import (
 	"encoding/json"
-	"errors"
 	"eta/eta_api/models"
 	"eta/eta_api/models/company"
 	"eta/eta_api/models/sandbox"
@@ -15,215 +14,215 @@ import (
 )
 
 // AddSandbox 新增沙盘
-func AddSandbox(req request.AddAndEditSandbox, opUserId int, opUserName string, ignoreVariety bool) (resp *sandbox.SandboxSaveResp, err error) {
-	resp = new(sandbox.SandboxSaveResp)
-	// 获取产品权限详情
-	var permissionName string
-	if !ignoreVariety {
-		chartPermissionInfo, e := company.GetChartPermissionListById(req.ChartPermissionId)
-		if e != nil {
-			err = e
-			return
-		}
-		permissionName = chartPermissionInfo.PermissionName
-	}
-	//沙盘主表信息
-	sandboxInfo := &sandbox.Sandbox{
-		Name:                utils.TrimStr(req.Name),
-		ChartPermissionId:   req.ChartPermissionId,
-		ChartPermissionName: permissionName,
-		CurrVersion:         1,
-		Code:                GenerateCode(),
-		Content:             req.Content,
-		PicUrl:              utils.TrimStr(req.PicUrl),
-		OpUserId:            opUserId,
-		OpUserName:          opUserName,
-		IsDelete:            0,
-		ModifyTime:          time.Now(),
-		CreateTime:          time.Now(),
-	}
-	//沙盘版本表信息
-	sandboxVersionInfo := &sandbox.SandboxVersion{
-		Name:                sandboxInfo.Name,
-		ChartPermissionId:   sandboxInfo.ChartPermissionId,
-		ChartPermissionName: sandboxInfo.ChartPermissionName,
-		CurrVersion:         sandboxInfo.CurrVersion,
-		Content:             sandboxInfo.Content,
-		PicUrl:              sandboxInfo.PicUrl,
-		OpUserId:            sandboxInfo.OpUserId,
-		OpUserName:          sandboxInfo.OpUserName,
-		VersionCode:         GenerateVersionCode(sandboxInfo.SandboxId, sandboxInfo.CurrVersion),
-		IsDelete:            sandboxInfo.IsDelete,
-		CreateTime:          sandboxInfo.CreateTime,
-	}
-	//沙盘草稿表信息
-	sandboxDraftInfo := &sandbox.SandboxDraft{
-		Name:                sandboxInfo.Name,
-		ChartPermissionId:   sandboxInfo.ChartPermissionId,
-		ChartPermissionName: sandboxInfo.ChartPermissionName,
-		CurrVersion:         sandboxInfo.CurrVersion,
-		Content:             sandboxInfo.Content,
-		OpUserId:            sandboxInfo.OpUserId,
-		OpUserName:          sandboxInfo.OpUserName,
-		CreateTime:          sandboxInfo.CreateTime,
-	}
-
-	//新增沙盘
-	err = sandbox.AddNewSandbox(sandboxInfo, sandboxVersionInfo, sandboxDraftInfo)
-	if err != nil {
-		return
-	}
-	resp.Sandbox = sandboxInfo
-	resp.VersionCode = sandboxVersionInfo.VersionCode
-	return
-}
+//func AddSandbox(req request.AddAndEditSandbox, opUserId int, opUserName string, ignoreVariety bool) (resp *sandbox.SandboxSaveResp, err error) {
+//	resp = new(sandbox.SandboxSaveResp)
+//	// 获取产品权限详情
+//	var permissionName string
+//	if !ignoreVariety {
+//		chartPermissionInfo, e := company.GetChartPermissionListById(req.ChartPermissionId)
+//		if e != nil {
+//			err = e
+//			return
+//		}
+//		permissionName = chartPermissionInfo.PermissionName
+//	}
+//	//沙盘主表信息
+//	sandboxInfo := &sandbox.Sandbox{
+//		Name:                utils.TrimStr(req.Name),
+//		ChartPermissionId:   req.ChartPermissionId,
+//		ChartPermissionName: permissionName,
+//		CurrVersion:         1,
+//		Code:                GenerateCode(),
+//		Content:             req.Content,
+//		PicUrl:              utils.TrimStr(req.PicUrl),
+//		OpUserId:            opUserId,
+//		OpUserName:          opUserName,
+//		IsDelete:            0,
+//		ModifyTime:          time.Now(),
+//		CreateTime:          time.Now(),
+//	}
+//	//沙盘版本表信息
+//	sandboxVersionInfo := &sandbox.SandboxVersion{
+//		Name:                sandboxInfo.Name,
+//		ChartPermissionId:   sandboxInfo.ChartPermissionId,
+//		ChartPermissionName: sandboxInfo.ChartPermissionName,
+//		CurrVersion:         sandboxInfo.CurrVersion,
+//		Content:             sandboxInfo.Content,
+//		PicUrl:              sandboxInfo.PicUrl,
+//		OpUserId:            sandboxInfo.OpUserId,
+//		OpUserName:          sandboxInfo.OpUserName,
+//		VersionCode:         GenerateVersionCode(sandboxInfo.SandboxId, sandboxInfo.CurrVersion),
+//		IsDelete:            sandboxInfo.IsDelete,
+//		CreateTime:          sandboxInfo.CreateTime,
+//	}
+//	//沙盘草稿表信息
+//	sandboxDraftInfo := &sandbox.SandboxDraft{
+//		Name:                sandboxInfo.Name,
+//		ChartPermissionId:   sandboxInfo.ChartPermissionId,
+//		ChartPermissionName: sandboxInfo.ChartPermissionName,
+//		CurrVersion:         sandboxInfo.CurrVersion,
+//		Content:             sandboxInfo.Content,
+//		OpUserId:            sandboxInfo.OpUserId,
+//		OpUserName:          sandboxInfo.OpUserName,
+//		CreateTime:          sandboxInfo.CreateTime,
+//	}
+//
+//	//新增沙盘
+//	err = sandbox.AddNewSandbox(sandboxInfo, sandboxVersionInfo, sandboxDraftInfo)
+//	if err != nil {
+//		return
+//	}
+//	resp.Sandbox = sandboxInfo
+//	resp.VersionCode = sandboxVersionInfo.VersionCode
+//	return
+//}
 
 // UpdateSandbox 更新沙盘
-func UpdateSandbox(req request.AddAndEditSandbox, opUserId int, opUserName string, ignoreVariety bool) (resp *sandbox.SandboxSaveResp, err error, errMsg string) {
-	resp = new(sandbox.SandboxSaveResp)
-	// 获取沙盘版本信息
-	sandboxVersion, err := sandbox.GetSandboxVersionBySandboxVersionCode(req.SandboxVersionCode)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			errMsg = "找不到该版本"
-			err = errors.New(errMsg)
-		}
-		return
-	}
-	// 获取沙盘主表信息
-	sandboxInfo, err := sandbox.GetSandboxById(sandboxVersion.SandboxId)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			errMsg = "找不到该沙盘"
-			err = errors.New(errMsg)
-		}
-		return
-	}
-	//沙盘名称是否更改校验
-	var isUpdateName, isUpdateContent bool
-	if sandboxInfo.Name != utils.TrimStr(req.Name) {
-		isUpdateName = true
-	}
-
-	// 沙盘内容md5比对,不一致则代表有做更改
-	//if utils.MD5(sandboxInfo.Content) != utils.MD5(req.Content) {
-	//	isUpdateContent = true
-	//}
-	if checkoutContent(sandboxInfo.Content, req.Content) {
-		isUpdateContent = true
-	}
-
-	//如果沙盘名称和沙盘内容都没有做过修改,那么就不做保存
-	if isUpdateName == false && isUpdateContent == false {
-		return
-	}
-
-	// 获取产品权限详情
-	var permissionName string
-	if !ignoreVariety {
-		chartPermissionInfo, e := company.GetChartPermissionListById(req.ChartPermissionId)
-		if e != nil {
-			err = e
-			return
-		}
-		permissionName = chartPermissionInfo.PermissionName
-	}
-
-	//如果只更新了沙盘名称,那么只去修改最新版本的沙盘名称,而不去累计版本
-	if isUpdateName == true && isUpdateContent == false {
-		sandboxInfo.Name = utils.TrimStr(req.Name)
-		sandboxInfo.ChartPermissionId = req.ChartPermissionId
-		sandboxInfo.ChartPermissionName = permissionName
-		sandboxInfo.Content = req.Content
-		sandboxInfo.PicUrl = utils.TrimStr(req.PicUrl)
-		sandboxInfo.OpUserId = opUserId
-		sandboxInfo.OpUserName = opUserName
-		sandboxInfo.ModifyTime = time.Now()
-		var updateSandboxColumn = []string{"Name", "ChartPermissionId", "ChartPermissionName", "PicUrl", "OpUserId", "OpUserName", "ModifyTime"}
-
-		//沙盘版本表信息
-		sandboxVersionInfo, tmpErr := sandbox.GetSandboxVersionBySandbox2VersionId(sandboxInfo.SandboxId, sandboxInfo.CurrVersion)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		sandboxVersionInfo.Name = sandboxInfo.Name
-		sandboxVersionInfo.ChartPermissionId = sandboxInfo.ChartPermissionId
-		sandboxVersionInfo.ChartPermissionName = sandboxInfo.ChartPermissionName
-		sandboxVersionInfo.PicUrl = sandboxInfo.PicUrl
-		sandboxVersionInfo.OpUserId = sandboxInfo.OpUserId
-		sandboxVersionInfo.OpUserName = sandboxInfo.OpUserName
-		var updateSandboxVersionColumn = []string{"Name", "ChartPermissionId", "ChartPermissionName", "PicUrl", "OpUserId", "OpUserName"}
-
-		//沙盘草稿表信息
-		sandboxDraftInfo := &sandbox.SandboxDraft{
-			Name:                sandboxInfo.Name,
-			ChartPermissionId:   sandboxInfo.ChartPermissionId,
-			ChartPermissionName: sandboxInfo.ChartPermissionName,
-			CurrVersion:         sandboxInfo.CurrVersion,
-			Content:             sandboxInfo.Content,
-			OpUserId:            sandboxInfo.OpUserId,
-			OpUserName:          sandboxInfo.OpUserName,
-			CreateTime:          time.Now(),
-		}
-
-		//修改沙盘
-		err = sandbox.UpdateSandboxName(sandboxInfo, sandboxVersionInfo, sandboxDraftInfo, updateSandboxColumn, updateSandboxVersionColumn)
-		if err != nil {
-			return
-		}
-		resp.Sandbox = sandboxInfo
-		resp.VersionCode = sandboxVersionInfo.VersionCode
-	} else {
-		sandboxInfo.Name = utils.TrimStr(req.Name)
-		sandboxInfo.ChartPermissionId = req.ChartPermissionId
-		sandboxInfo.ChartPermissionName = permissionName
-		sandboxInfo.CurrVersion = sandboxInfo.CurrVersion + 1
-		sandboxInfo.Content = req.Content
-		sandboxInfo.PicUrl = utils.TrimStr(req.PicUrl)
-		sandboxInfo.OpUserId = opUserId
-		sandboxInfo.OpUserName = opUserName
-		sandboxInfo.ModifyTime = time.Now()
-
-		var updateSandbox = []string{"Name", "ChartPermissionId", "ChartPermissionName", "CurrVersion", "Content", "PicUrl", "OpUserId", "OpUserName", "ModifyTime"}
-
-		//沙盘版本表信息
-		sandboxVersionInfo := &sandbox.SandboxVersion{
-			Name:                sandboxInfo.Name,
-			ChartPermissionId:   sandboxInfo.ChartPermissionId,
-			ChartPermissionName: sandboxInfo.ChartPermissionName,
-			CurrVersion:         sandboxInfo.CurrVersion,
-			Content:             sandboxInfo.Content,
-			SvgData:             req.SvgData,
-			PicUrl:              sandboxInfo.PicUrl,
-			OpUserId:            sandboxInfo.OpUserId,
-			OpUserName:          sandboxInfo.OpUserName,
-			VersionCode:         GenerateVersionCode(sandboxInfo.SandboxId, sandboxInfo.CurrVersion),
-			IsDelete:            sandboxInfo.IsDelete,
-			CreateTime:          time.Now(),
-		}
-		//沙盘草稿表信息
-		sandboxDraftInfo := &sandbox.SandboxDraft{
-			Name:                sandboxInfo.Name,
-			ChartPermissionId:   sandboxInfo.ChartPermissionId,
-			ChartPermissionName: sandboxInfo.ChartPermissionName,
-			CurrVersion:         sandboxInfo.CurrVersion,
-			Content:             sandboxInfo.Content,
-			OpUserId:            sandboxInfo.OpUserId,
-			OpUserName:          sandboxInfo.OpUserName,
-			CreateTime:          time.Now(),
-		}
-
-		//修改沙盘
-		err = sandbox.UpdateSandbox(sandboxInfo, updateSandbox, sandboxVersionInfo, sandboxDraftInfo)
-		if err != nil {
-			return
-		}
-		resp.Sandbox = sandboxInfo
-		resp.VersionCode = sandboxVersionInfo.VersionCode
-	}
-	return
-}
+//func UpdateSandbox(req request.AddAndEditSandbox, opUserId int, opUserName string, ignoreVariety bool) (resp *sandbox.SandboxSaveResp, err error, errMsg string) {
+//	resp = new(sandbox.SandboxSaveResp)
+//	// 获取沙盘版本信息
+//	sandboxVersion, err := sandbox.GetSandboxVersionBySandboxVersionCode(req.SandboxVersionCode)
+//	if err != nil {
+//		if err.Error() == utils.ErrNoRow() {
+//			errMsg = "找不到该版本"
+//			err = errors.New(errMsg)
+//		}
+//		return
+//	}
+//	// 获取沙盘主表信息
+//	sandboxInfo, err := sandbox.GetSandboxById(sandboxVersion.SandboxId)
+//	if err != nil {
+//		if err.Error() == utils.ErrNoRow() {
+//			errMsg = "找不到该沙盘"
+//			err = errors.New(errMsg)
+//		}
+//		return
+//	}
+//	//沙盘名称是否更改校验
+//	var isUpdateName, isUpdateContent bool
+//	if sandboxInfo.Name != utils.TrimStr(req.Name) {
+//		isUpdateName = true
+//	}
+//
+//	// 沙盘内容md5比对,不一致则代表有做更改
+//	//if utils.MD5(sandboxInfo.Content) != utils.MD5(req.Content) {
+//	//	isUpdateContent = true
+//	//}
+//	if checkoutContent(sandboxInfo.Content, req.Content) {
+//		isUpdateContent = true
+//	}
+//
+//	//如果沙盘名称和沙盘内容都没有做过修改,那么就不做保存
+//	if isUpdateName == false && isUpdateContent == false {
+//		return
+//	}
+//
+//	// 获取产品权限详情
+//	var permissionName string
+//	if !ignoreVariety {
+//		chartPermissionInfo, e := company.GetChartPermissionListById(req.ChartPermissionId)
+//		if e != nil {
+//			err = e
+//			return
+//		}
+//		permissionName = chartPermissionInfo.PermissionName
+//	}
+//
+//	//如果只更新了沙盘名称,那么只去修改最新版本的沙盘名称,而不去累计版本
+//	if isUpdateName == true && isUpdateContent == false {
+//		sandboxInfo.Name = utils.TrimStr(req.Name)
+//		sandboxInfo.ChartPermissionId = req.ChartPermissionId
+//		sandboxInfo.ChartPermissionName = permissionName
+//		sandboxInfo.Content = req.Content
+//		sandboxInfo.PicUrl = utils.TrimStr(req.PicUrl)
+//		sandboxInfo.OpUserId = opUserId
+//		sandboxInfo.OpUserName = opUserName
+//		sandboxInfo.ModifyTime = time.Now()
+//		var updateSandboxColumn = []string{"Name", "ChartPermissionId", "ChartPermissionName", "PicUrl", "OpUserId", "OpUserName", "ModifyTime"}
+//
+//		//沙盘版本表信息
+//		sandboxVersionInfo, tmpErr := sandbox.GetSandboxVersionBySandbox2VersionId(sandboxInfo.SandboxId, sandboxInfo.CurrVersion)
+//		if tmpErr != nil {
+//			err = tmpErr
+//			return
+//		}
+//		sandboxVersionInfo.Name = sandboxInfo.Name
+//		sandboxVersionInfo.ChartPermissionId = sandboxInfo.ChartPermissionId
+//		sandboxVersionInfo.ChartPermissionName = sandboxInfo.ChartPermissionName
+//		sandboxVersionInfo.PicUrl = sandboxInfo.PicUrl
+//		sandboxVersionInfo.OpUserId = sandboxInfo.OpUserId
+//		sandboxVersionInfo.OpUserName = sandboxInfo.OpUserName
+//		var updateSandboxVersionColumn = []string{"Name", "ChartPermissionId", "ChartPermissionName", "PicUrl", "OpUserId", "OpUserName"}
+//
+//		//沙盘草稿表信息
+//		sandboxDraftInfo := &sandbox.SandboxDraft{
+//			Name:                sandboxInfo.Name,
+//			ChartPermissionId:   sandboxInfo.ChartPermissionId,
+//			ChartPermissionName: sandboxInfo.ChartPermissionName,
+//			CurrVersion:         sandboxInfo.CurrVersion,
+//			Content:             sandboxInfo.Content,
+//			OpUserId:            sandboxInfo.OpUserId,
+//			OpUserName:          sandboxInfo.OpUserName,
+//			CreateTime:          time.Now(),
+//		}
+//
+//		//修改沙盘
+//		err = sandbox.UpdateSandboxName(sandboxInfo, sandboxVersionInfo, sandboxDraftInfo, updateSandboxColumn, updateSandboxVersionColumn)
+//		if err != nil {
+//			return
+//		}
+//		resp.Sandbox = sandboxInfo
+//		resp.VersionCode = sandboxVersionInfo.VersionCode
+//	} else {
+//		sandboxInfo.Name = utils.TrimStr(req.Name)
+//		sandboxInfo.ChartPermissionId = req.ChartPermissionId
+//		sandboxInfo.ChartPermissionName = permissionName
+//		sandboxInfo.CurrVersion = sandboxInfo.CurrVersion + 1
+//		sandboxInfo.Content = req.Content
+//		sandboxInfo.PicUrl = utils.TrimStr(req.PicUrl)
+//		sandboxInfo.OpUserId = opUserId
+//		sandboxInfo.OpUserName = opUserName
+//		sandboxInfo.ModifyTime = time.Now()
+//
+//		var updateSandbox = []string{"Name", "ChartPermissionId", "ChartPermissionName", "CurrVersion", "Content", "PicUrl", "OpUserId", "OpUserName", "ModifyTime"}
+//
+//		//沙盘版本表信息
+//		sandboxVersionInfo := &sandbox.SandboxVersion{
+//			Name:                sandboxInfo.Name,
+//			ChartPermissionId:   sandboxInfo.ChartPermissionId,
+//			ChartPermissionName: sandboxInfo.ChartPermissionName,
+//			CurrVersion:         sandboxInfo.CurrVersion,
+//			Content:             sandboxInfo.Content,
+//			SvgData:             req.SvgData,
+//			PicUrl:              sandboxInfo.PicUrl,
+//			OpUserId:            sandboxInfo.OpUserId,
+//			OpUserName:          sandboxInfo.OpUserName,
+//			VersionCode:         GenerateVersionCode(sandboxInfo.SandboxId, sandboxInfo.CurrVersion),
+//			IsDelete:            sandboxInfo.IsDelete,
+//			CreateTime:          time.Now(),
+//		}
+//		//沙盘草稿表信息
+//		sandboxDraftInfo := &sandbox.SandboxDraft{
+//			Name:                sandboxInfo.Name,
+//			ChartPermissionId:   sandboxInfo.ChartPermissionId,
+//			ChartPermissionName: sandboxInfo.ChartPermissionName,
+//			CurrVersion:         sandboxInfo.CurrVersion,
+//			Content:             sandboxInfo.Content,
+//			OpUserId:            sandboxInfo.OpUserId,
+//			OpUserName:          sandboxInfo.OpUserName,
+//			CreateTime:          time.Now(),
+//		}
+//
+//		//修改沙盘
+//		err = sandbox.UpdateSandbox(sandboxInfo, updateSandbox, sandboxVersionInfo, sandboxDraftInfo)
+//		if err != nil {
+//			return
+//		}
+//		resp.Sandbox = sandboxInfo
+//		resp.VersionCode = sandboxVersionInfo.VersionCode
+//	}
+//	return
+//}
 
 // AddSandboxDraft 新增沙盘草稿
 func AddSandboxDraft(sandboxId int, req request.AddAndEditSandbox, opUserId int, opUserName string) (sandboxDraftInfo *sandbox.SandboxDraft, err error) {
@@ -328,29 +327,29 @@ func UpdateSandboxEditMark(sandboxId, nowUserId, status int, nowUserName string)
 }
 
 // ResetDraftToLastVersion  重置沙盘草稿至最新版本
-func ResetDraftToLastVersion(sandboxId, opUserId int, opUserName string) (sandboxDraftInfo *sandbox.SandboxDraft, err error) {
-	// 获取沙盘主表信息
-	sandboxInfo, err := sandbox.GetSandboxById(sandboxId)
-	if err != nil {
-		return
-	}
-
-	//沙盘草稿表信息
-	sandboxDraftInfo = &sandbox.SandboxDraft{
-		SandboxId:           sandboxInfo.SandboxId,
-		Name:                sandboxInfo.Name,
-		ChartPermissionId:   sandboxInfo.ChartPermissionId,
-		ChartPermissionName: sandboxInfo.ChartPermissionName,
-		Content:             sandboxInfo.Content,
-		OpUserId:            opUserId,
-		OpUserName:          opUserName,
-		CreateTime:          time.Now(),
-	}
-
-	//新增沙盘草稿
-	err = sandbox.AddSandboxDraft(sandboxDraftInfo)
-	return
-}
+//func ResetDraftToLastVersion(sandboxId, opUserId int, opUserName string) (sandboxDraftInfo *sandbox.SandboxDraft, err error) {
+//	// 获取沙盘主表信息
+//	sandboxInfo, err := sandbox.GetSandboxById(sandboxId)
+//	if err != nil {
+//		return
+//	}
+//
+//	//沙盘草稿表信息
+//	sandboxDraftInfo = &sandbox.SandboxDraft{
+//		SandboxId:           sandboxInfo.SandboxId,
+//		Name:                sandboxInfo.Name,
+//		ChartPermissionId:   sandboxInfo.ChartPermissionId,
+//		ChartPermissionName: sandboxInfo.ChartPermissionName,
+//		Content:             sandboxInfo.Content,
+//		OpUserId:            opUserId,
+//		OpUserName:          opUserName,
+//		CreateTime:          time.Now(),
+//	}
+//
+//	//新增沙盘草稿
+//	err = sandbox.AddSandboxDraft(sandboxDraftInfo)
+//	return
+//}
 
 // DeleteSandbox 删除沙盘
 func DeleteSandbox(sandboxId int) (err error) {
@@ -367,74 +366,74 @@ func DeleteSandbox(sandboxId int) (err error) {
 }
 
 // DeleteSandboxVersion 删除沙盘版本
-func DeleteSandboxVersion(sandboxVersionCode string, opUserId int) (err error, errMsg string) {
-	// 获取沙盘版本信息
-	sandboxVersion, err := sandbox.GetSandboxVersionBySandboxVersionCode(sandboxVersionCode)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			errMsg = "找不到该版本"
-			err = errors.New(errMsg)
-		}
-		return
-	}
-
-	/*key := fmt.Sprint(`crm:sandbox:edit:`, sandboxVersion.SandboxId)
-	nowOpUserId, _ := utils.Rc.RedisInt(key)
-	//如果当前有人操作,且获取当前操作人不是本人,那么不允许删除
-	if nowOpUserId > 0 && nowOpUserId != opUserId {
-		errMsg = "当前有其他人正在编辑,不允许删除该沙盘"
-		err = errors.New(errMsg)
-		return
-	}*/
-
-	markStatus, err := UpdateSandboxEditMark(sandboxVersion.SandboxId, opUserId, 2, "")
-	if err != nil {
-		errMsg = "查询标记状态失败"
-		err = errors.New("查询标记状态失败,Err:" + err.Error())
-		return
-	}
-	if markStatus.Status == 1 {
-		errMsg = fmt.Sprintf("当前%s正在编辑,不允许删除该沙盘", markStatus.Editor)
-		err = errors.New(errMsg)
-		return
-	}
-
-	// 获取沙盘主表信息
-	sandboxInfo, err := sandbox.GetSandboxById(sandboxVersion.SandboxId)
-	if err != nil {
-		return
-	}
-
-	// 删除最新版本,需要将上一个版本的给找出来覆盖
-	if sandboxVersion.CurrVersion == sandboxInfo.CurrVersion {
-		lastSandboxVersion, tmpErr := sandbox.GetLastSandboxVersionBySandbox2VersionId(sandboxInfo.SandboxId, sandboxVersion.CurrVersion)
-		if tmpErr != nil {
-			// 如果找不到,说明是删除整个沙盘,不仅仅是某个版本
-			if tmpErr.Error() == utils.ErrNoRow() {
-				sandboxInfo.IsDelete = 1
-				var updateSandboxColumn = []string{"IsDelete"}
-				err = sandboxInfo.Update(updateSandboxColumn)
-				return
-			}
-			err = tmpErr
-			return
-		} else {
-			//将当前沙盘信息修复到上一个版本
-			sandboxInfo.Content = lastSandboxVersion.Content
-			sandboxInfo.CurrVersion = lastSandboxVersion.CurrVersion
-			sandboxInfo.PicUrl = lastSandboxVersion.PicUrl
-			err = sandboxInfo.Update([]string{"Content", "CurrVersion", "PicUrl"})
-			if err != nil {
-				return
-			}
-		}
-	}
-	//将原来的版本标记删除
-	sandboxVersion.IsDelete = 1
-	err = sandboxVersion.Update([]string{"IsDelete"})
-
-	return
-}
+//func DeleteSandboxVersion(sandboxVersionCode string, opUserId int) (err error, errMsg string) {
+//	// 获取沙盘版本信息
+//	sandboxVersion, err := sandbox.GetSandboxVersionBySandboxVersionCode(sandboxVersionCode)
+//	if err != nil {
+//		if err.Error() == utils.ErrNoRow() {
+//			errMsg = "找不到该版本"
+//			err = errors.New(errMsg)
+//		}
+//		return
+//	}
+//
+//	/*key := fmt.Sprint(`crm:sandbox:edit:`, sandboxVersion.SandboxId)
+//	nowOpUserId, _ := utils.Rc.RedisInt(key)
+//	//如果当前有人操作,且获取当前操作人不是本人,那么不允许删除
+//	if nowOpUserId > 0 && nowOpUserId != opUserId {
+//		errMsg = "当前有其他人正在编辑,不允许删除该沙盘"
+//		err = errors.New(errMsg)
+//		return
+//	}*/
+//
+//	markStatus, err := UpdateSandboxEditMark(sandboxVersion.SandboxId, opUserId, 2, "")
+//	if err != nil {
+//		errMsg = "查询标记状态失败"
+//		err = errors.New("查询标记状态失败,Err:" + err.Error())
+//		return
+//	}
+//	if markStatus.Status == 1 {
+//		errMsg = fmt.Sprintf("当前%s正在编辑,不允许删除该沙盘", markStatus.Editor)
+//		err = errors.New(errMsg)
+//		return
+//	}
+//
+//	// 获取沙盘主表信息
+//	sandboxInfo, err := sandbox.GetSandboxById(sandboxVersion.SandboxId)
+//	if err != nil {
+//		return
+//	}
+//
+//	// 删除最新版本,需要将上一个版本的给找出来覆盖
+//	if sandboxVersion.CurrVersion == sandboxInfo.CurrVersion {
+//		lastSandboxVersion, tmpErr := sandbox.GetLastSandboxVersionBySandbox2VersionId(sandboxInfo.SandboxId, sandboxVersion.CurrVersion)
+//		if tmpErr != nil {
+//			// 如果找不到,说明是删除整个沙盘,不仅仅是某个版本
+//			if tmpErr.Error() == utils.ErrNoRow() {
+//				sandboxInfo.IsDelete = 1
+//				var updateSandboxColumn = []string{"IsDelete"}
+//				err = sandboxInfo.Update(updateSandboxColumn)
+//				return
+//			}
+//			err = tmpErr
+//			return
+//		} else {
+//			//将当前沙盘信息修复到上一个版本
+//			sandboxInfo.Content = lastSandboxVersion.Content
+//			sandboxInfo.CurrVersion = lastSandboxVersion.CurrVersion
+//			sandboxInfo.PicUrl = lastSandboxVersion.PicUrl
+//			err = sandboxInfo.Update([]string{"Content", "CurrVersion", "PicUrl"})
+//			if err != nil {
+//				return
+//			}
+//		}
+//	}
+//	//将原来的版本标记删除
+//	sandboxVersion.IsDelete = 1
+//	err = sandboxVersion.Update([]string{"IsDelete"})
+//
+//	return
+//}
 
 // GetSandboxVersionDetailByCode 获取沙盘的版本数据
 func GetSandboxVersionDetailByCode(sandboxVersionCode string) (sandboxVersionInfo *sandbox.SandboxVersion, err error) {
@@ -636,7 +635,6 @@ func checkoutContent(oldContent, reqContent string) (isUpdate bool) {
 	return
 }
 
-
 func sandboxClassifyHaveChild(allNode []*sandbox.SandboxClassifyItems, node *sandbox.SandboxClassifyItems) (childs []*sandbox.SandboxClassifyItems, yes bool) {
 	for _, v := range allNode {
 		if v.ParentId == node.SandboxClassifyId {
@@ -764,4 +762,30 @@ func HandleNoPermissionSandbox(allNodes []*sandbox.SandboxClassifyItems, noPermi
 	}
 
 	return
-}
+}
+
+// AddSandboxV2 新增沙盘
+func AddSandboxV2(req request.AddAndEditSandboxV2, opUserId int, opUserName string) (resp *sandbox.SandboxSaveResp, err error) {
+	resp = new(sandbox.SandboxSaveResp)
+	//沙盘主表信息
+	sandboxInfo := &sandbox.Sandbox{
+		Name:                utils.TrimStr(req.Name),
+		Code:                GenerateCode(),
+		Content:             req.Content,
+		PicUrl:              utils.TrimStr(req.PicUrl),
+		SysUserId:           opUserId,
+		SysUserName:         opUserName,
+		IsDelete:            0,
+		ModifyTime:          time.Now(),
+		CreateTime:          time.Now(),
+	}
+
+	//新增沙盘
+	id,err := sandbox.AddSandbox(sandboxInfo)
+	if err != nil {
+		return
+	}
+	sandboxInfo.SandboxId = int(id)
+	resp.Sandbox = sandboxInfo
+	return
+}