123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /*
- * @description: 标段相关数据操作相关
- * @Author: CP
- * @Date: 2020-09-28 10:31:31
- * @FilePath: \construction_management\services\bidsection_service.go
- */
- package services
- import (
- "errors"
- "fmt"
- "log"
- "strconv"
- "time"
- "github.com/kataras/iris/v12"
- "go.mod/dao"
- "go.mod/datasource"
- "go.mod/models"
- "go.mod/web/utils"
- "go.mod/web/viewmodels"
- )
- //定义标段Service接口
- type BidsectionService interface {
- ValidRule(iris.Context) (viewmodels.Bidsection, error)
- Create(viewmodels.Bidsection) error
- }
- //返回service操作类
- type bidsectionService struct {
- dao *dao.BidsectionDao
- treeDao *dao.TreeDao
- }
- //创建标段service
- func NewBidsectionService() BidsectionService {
- return &bidsectionService{
- dao: dao.NewBidsectionDao(datasource.InstanceDbMaster()),
- treeDao: dao.NewTreeDao(datasource.InstanceDbMaster()),
- }
- }
- // 文件夹规则验证
- func (s *bidsectionService) ValidRule(ctx iris.Context) (viewmodels.Bidsection, error) {
- bidsectionVaild := viewmodels.Bidsection{}
- err := ctx.ReadJSON(&bidsectionVaild)
- if err != nil {
- log.Println("folder-ValidRule-ReadForm转换异常, error=", err)
- return bidsectionVaild, err
- }
- err = bidsectionVaild.Validate()
- if err != nil {
- log.Println("标段验证, error=", err)
- return bidsectionVaild, err
- }
- return bidsectionVaild, nil
- }
- // 新增一个标段
- func (s *bidsectionService) Create(data viewmodels.Bidsection) error {
- // 类型校验
- folder := models.CmTree{}
- folder.Name = data.Name
- ProjectId, err := strconv.Atoi(data.ProjectId)
- if err != nil {
- return err
- }
- // 获得该目录ID
- Id, err := utils.GetDecryptId(data.FolderId)
- if err != nil {
- return err
- }
- // 该目录中是否有目录 -判断是否是叶子节点--TODO
- folderList := s.treeDao.GetChildFolder(Id)
- if len(folderList) > 0 {
- return errors.New("该目录中存在其他目录,不能新增标段")
- }
- // 创建在树中的标段
- // 获得该深度的文件夹最大序号
- serial := 0
- treeNode := s.treeDao.Get(Id, ProjectId)
- if treeNode.Id == 0 {
- return errors.New("上级目录不正确")
- }
- depth := treeNode.Depth + 1
- attribution := fmt.Sprintf("%s%d-", treeNode.Attribution, treeNode.Serial)
- datalist := s.treeDao.GetALLDepthByAttribution(depth, ProjectId, attribution)
- maxIndex := len(datalist)
- if maxIndex != 0 {
- serial = datalist[maxIndex-1].Serial + 1
- }
- // 设置归属
- folder.Attribution = attribution //treeNode.Attribution + strconv.Itoa(treeNode.Serial) + "-"
- folder.ParentId = Id
- folder.ProjectId = ProjectId
- folder.Serial = serial
- folder.Depth = depth
- folder.Isfolder = 0
- folder.CreateTime = time.Now()
- folder.UpdateTime = time.Now()
- // 创建标段和标段在树中的联系
- err = s.dao.Create(&folder)
- if err != nil {
- return err
- }
- return nil
- }
|