caipin 4 jaren geleden
bovenliggende
commit
97105343b6

+ 11 - 0
dao/contract_dao.go

@@ -42,6 +42,17 @@ func (d *ContractDao) Get(id int) *models.CmContracts {
 }
 
 // 获得本项目的合同项目节
+func (d *ContractDao) GetByCode(projectId int, bidsectionId int, code string, contractsType int) []models.CmContracts {
+
+	datalist := make([]models.CmContracts, 0)
+	_ = d.engine.
+		Where("project_id=? and bidsection_id=? and code=? and contracts_type=? ",
+			projectId, bidsectionId, code, contractsType).
+		Find(&datalist)
+	return datalist
+}
+
+// 获得本项目的合同项目节
 func (d *ContractDao) GetType(bidsectionId int, projectId int, contractsType int) []models.CmContracts {
 
 	datalist := make([]models.CmContracts, 0)

+ 8 - 2
dao/tree_contract_dao.go

@@ -186,11 +186,17 @@ func (d *TreeContractDao) GetAttribution(attribution string, projectId int, bids
 }
 
 // 获得谋归属下的项目节-合同
-func (d *TreeContractDao) GetAttributionContract(attribution string, projectId int, bidsectionId int, treeType int) []models.CmTreeContracts {
+func (d *TreeContractDao) GetAttributionContract(section *models.CmTreeContracts, treeType int) []models.CmTreeContracts {
+
+	// attribution := section.Attribution
+	attribution := fmt.Sprintf("%s-", section.Code)
+	projectId := section.ProjectId
+	bidsectionId := section.BidsectionId
+
 	datalist := make([]models.CmTreeContracts, 0)
 	err := d.engine.
 		Asc("serial").
-		Where("attribution like ? and project_id=? and bidsection_id=? and tree_type=? and contract_id!=0", attribution+"%", projectId, bidsectionId, treeType).
+		Where("(attribution like ? or id =? ) and project_id=? and bidsection_id=? and tree_type=? and contract_id!=0", attribution+"%", section.Id, projectId, bidsectionId, treeType).
 		Find(&datalist)
 	if err != nil {
 		return datalist

+ 18 - 0
services/backstage_service.go

@@ -23,6 +23,7 @@ import (
 type BackstageService interface {
 	ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error)
 	ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error)
+	ValidRuleProject(ctx iris.Context) (viewmodels.Project, error)
 	Out(ctx iris.Context) error
 }
 
@@ -57,6 +58,23 @@ func (s *backstageService) ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld
 	return loginVaild, nil
 }
 
+// 验证项目
+func (s *backstageService) ValidRuleProject(ctx iris.Context) (viewmodels.Project, error) {
+	projectVaild := viewmodels.Project{}
+	err := ctx.ReadForm(&projectVaild)
+	if err != nil {
+		log.Println("ReadForm转换异常, error=", err)
+		return projectVaild, err
+	}
+
+	err = projectVaild.ValidateId()
+	if err != nil {
+		log.Println("登录验证, error=", err)
+		return projectVaild, err
+	}
+	return projectVaild, nil
+}
+
 // 验证项目用户登陆相关
 func (s *backstageService) ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error) {
 

+ 6 - 0
services/contract_expenditure_service.go

@@ -29,6 +29,12 @@ func (s *contractService) AddExpenditure(contractData *viewmodels.Contracts, pro
 		return errors.New("该项目节上已经存在合同")
 	}
 
+	// 2-1.查找合同编号是否存在
+	codeData := s.contractDao.GetByCode(projectId, bidsectionId, contractData.Code, 2)
+	if len(codeData) != 0 {
+		return errors.New("该合同编号已经存在")
+	}
+
 	// 3.新增合同 --合计标段上的金额
 	contractsCm := &models.CmContracts{}
 	contractsCm.Code = contractData.Code

+ 1 - 1
services/contract_section_tree_service.go

@@ -216,7 +216,7 @@ func (s *contractService) SectionDelete(treeId int, bidsectionId int, projectId
 	// 	return errors.New("请在项目节第三层开始编辑")
 	// }
 	// 1-2 有合同的不能编辑(包含孩子节点)
-	contractList := s.treeContractDao.GetAttributionContract(section.Attribution, section.ProjectId, section.BidsectionId, treeType)
+	contractList := s.treeContractDao.GetAttributionContract(section, treeType)
 	if len(contractList) != 0 {
 		return errors.New("该项目节存在合同")
 	}

+ 6 - 0
services/contract_service.go

@@ -340,6 +340,12 @@ func (s *contractService) Add(contractData *viewmodels.Contracts, projectId int,
 		return errors.New("该项目节上已经存在合同")
 	}
 
+	// 2-1.查找合同编号是否存在
+	codeData := s.contractDao.GetByCode(projectId, bidsectionId, contractData.Code, 1)
+	if len(codeData) != 0 {
+		return errors.New("该合同编号已经存在")
+	}
+
 	// 3.新增合同 --合计标段上的金额
 	contractsCm := &models.CmContracts{}
 	contractsCm.Code = contractData.Code

+ 4 - 1
web/api/contract_api.go

@@ -236,6 +236,8 @@ func (c *ContractApi) PostIncomeCreate() {
 		return
 	}
 
+	// 可优化-事务问题
+	// 先添加项目节
 	sectionData := &viewmodels.TreeSectionContract{}
 	sectionData.Id = contractData.TreeId
 	sectionData.Name = " "
@@ -245,9 +247,10 @@ func (c *ContractApi) PostIncomeCreate() {
 		return
 	}
 
+	// 在添加合同
 	err = c.ServiceContract.Add(contractData, projectIdInt, bidsectionId, sectionResult.Id)
 	if err != nil {
-		// 需要删除项目节
+		// 需要删除项目节-有问题
 		c.ServiceContract.SectionDelete(sectionResult.Id, bidsectionId, projectIdInt, 0)
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
 		return

+ 1 - 1
web/api/contract_expenditure_api.go

@@ -199,7 +199,7 @@ func (c *ContractApi) PostExpenditureCreate() {
 	err = c.ServiceContract.AddExpenditure(contractData, projectIdInt, bidsectionId, sectionResult.Id)
 	if err != nil {
 		// 需要删除项目节
-		c.ServiceContract.SectionDelete(sectionResult.Id, bidsectionId, projectIdInt, 0)
+		c.ServiceContract.SectionDelete(sectionResult.Id, bidsectionId, projectIdInt, 1)
 		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
 		return
 	}

+ 40 - 1
web/backstage/project_bs.go

@@ -7,6 +7,8 @@
 package backstage
 
 import (
+	"fmt"
+
 	"github.com/kataras/iris/v12"
 	"go.mod/services"
 	"go.mod/web/utils"
@@ -16,7 +18,8 @@ type ProjectBs struct {
 	//框架-web应用上下文环境
 	Ctx iris.Context
 	// 需要用的service
-	ServiceProject services.ProjectService
+	ServiceProject   services.ProjectService
+	ServiceBackstage services.BackstageService
 }
 
 // // 保存项目管理员信息
@@ -69,3 +72,39 @@ func (c *ProjectBs) GetList() {
 	})
 
 }
+
+// @Summary 后台-项目列表相关
+// @Tags 后台 - 项目
+// @Accept  json
+// @Produce  json
+// @Param   id     body    int     true        "项目ID"
+// @Success 200 {object} viewmodels.ProjectAccount "{code:0成功,data:viewmodels.ProjectAccount,msg:}"
+// @Failure 400 {string} string	"{code:-1参数类错误,msg:错误信息}"
+// @Router /backstage/project [get]
+func (c *ProjectBs) Get() {
+
+	AccountData, err := c.ServiceBackstage.ValidRuleProject(c.Ctx)
+	if err != nil {
+		ErrMsg := utils.FormValidError(err)
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": ErrMsg})
+		return
+	}
+
+	// 获得项目ID
+	projectIdInt, err := utils.GetDecryptId(AccountData.Id)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	// 获得项目信息
+	ProjectData, err := c.ServiceProject.Get(projectIdInt)
+	if err != nil {
+		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
+		return
+	}
+	c.Ctx.JSON(iris.Map{
+		"code": 0,
+		"data": ProjectData,
+		"msg":  "",
+	})
+}

+ 1 - 0
web/routes/routes.go

@@ -202,5 +202,6 @@ func Configure(b *bootstrap.Bootstrapper) {
 
 	backstageProjectCM := mvc.New(b.Party("/backstage/project"))
 	backstageProjectCM.Register(ProjectService)
+	backstageCM.Register(backstageService)
 	backstageProjectCM.Handle(new(backstage.ProjectBs))
 }

+ 7 - 0
web/viewmodels/project.go

@@ -42,6 +42,13 @@ func (l ProjectPage) ValidatePage() error {
 	)
 }
 
+func (l Project) ValidateId() error {
+	return validation.ValidateStruct(&l,
+		// 字符的4倍
+		validation.Field(&l.Id, validation.Required.Error("项目ID不能为空")),
+	)
+}
+
 func (l Project) Validate() error {
 	return validation.ValidateStruct(&l,
 		// 字符的4倍