/* * @description: 合同管理 相关API * @Author: CP * @Date: 2020-10-26 15:27:04 * @FilePath: \construction_management\web\api\contract_api.go */ package api import ( "fmt" "github.com/kataras/iris/v12" "go.mod/lib" "go.mod/models" "go.mod/services" "go.mod/web/utils" "go.mod/web/viewmodels" ) type ContractApi struct { //框架-web应用上下文环境 Ctx iris.Context // // 需要用的service ServiceTree services.TreeService ServiceContract services.ContractService // ServiceLogin services.LoginService // ServiceProject services.ProjectService } // @Summary 获得合同目录和标段 // @Tags 合同管理 // @Description 获得合同目录和标段 // @Accept json // @Produce json // @Param bidsectionType path string true "标段类型0合同1安全2质量" // @Success 200 {object} viewmodels.FolderContract "{code:0成功,-1参数类错误,data:viewmodels.ProjectAccount,msg:错误信息}" // @Router /api/contract/folder [get] func (c *ContractApi) GetFolder() { bidTypeData, err := c.ServiceTree.ValidRuleBidsectionType(c.Ctx) if err != nil { ErrMsg := utils.FormValidError(err) c.Ctx.JSON(iris.Map{"code": -1, "msg": ErrMsg}) return } // 获得项目ID projectId, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } // 获得项目账号ID // projectAccountId, err := utils.GetProjectAccountId(c.Ctx) // if err != nil { // c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) // return // } account := c.Ctx.Values().Get("account").(*models.CmProjectAccount) // 获得层级文件夹 FolderData := c.ServiceTree.GetAllContract(projectId, account, bidTypeData.BidsectionType) c.Ctx.JSON(iris.Map{ "code": 0, "msg": "", "data": FolderData, }) } // @Summary 获得标段收入-项目节信息 // @Tags 合同管理-收入合同 // @Description 未设置合同项目节 返回项目节模板信息 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param bidsectionId path string true "标段ID" // @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,data:viewmodels.TreeSectionContract,msg:错误信息}" // @Router /api/contract/income/section/all [get] func (c *ContractApi) GetIncomeSectionAll() { sectionData := viewmodels.TreeSectionContract{} err := c.Ctx.ReadForm(§ionData) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"}) return } if sectionData.BidsectionId == "" { c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"}) return } bidsectionId, err := utils.GetDecryptId(sectionData.BidsectionId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"}) return } // 项目ID projectIdInt, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } //获得合同项目节 sectionTree := c.ServiceContract.GetSecionTree(bidsectionId, projectIdInt, 0) // 1.未设置了项目节 if len(sectionTree.Children) == 0 { // 返回项目节2个基础模板 templateTree1 := lib.NewItemSection().TemplateTree1 templateTree2 := lib.NewItemSection().TemplateTree2 c.Ctx.JSON(iris.Map{ "code": 0, "msg": "", "isTemplate": 1, "sectionTemplate1": templateTree1, "sectionTemplate2": templateTree2, }) return //2.项目节已设置 } else { // 2.已设置项目节 c.Ctx.JSON(iris.Map{ "code": 0, "msg": "", "isTemplate": 0, "sectionTree": sectionTree, }) return // 返回项目相关所有信息 } } // @Summary 单个合同和项目节 // @Tags 合同管理-收入合同 // @Description 获得合同详情和项目节详情 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param id path string true "项目节ID" // @Param bidsectionId path string true "标段ID" // @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,isContract:是否有合同(包含孩子们),section:viewmodels.TreeSectionContract,msg:错误信息}" // @Router /api/contract/income [get] func (c *ContractApi) GetIncome() { // 1.规则验证 sectionData, err := c.ServiceContract.ValidRuleGet(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } // 2.项目ID projectId, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } // 3.标段ID bidsectionId, err := utils.GetDecryptId(sectionData.BidsectionId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } // 4.树ID treeId, err := utils.GetDecryptId(sectionData.Id) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } // 获得项目节详情 section := c.ServiceContract.Get(treeId, bidsectionId, projectId, 0) // 该项目节 子树下是否有合同 isContract := true contractList := c.ServiceContract.GetSectionTreeContract(section.Attribution, bidsectionId, projectId, 0) if len(contractList) == 0 { isContract = false } // 获得合同详情 contractId, _ := utils.GetDecryptId(section.ContractId) contract := &viewmodels.Contracts{} if contractId != 0 { contract = c.ServiceContract.GetContract(contractId) } c.Ctx.JSON(iris.Map{ "code": 0, "msg": "", "section": section, "isContract": isContract, //该项目节(包含子孙)下是否有合同 "contract": contract, }) } // @Summary 新增合同 // @Tags 合同管理-收入合同 // @Description 新增合同 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param treeId path string true "项目节ID" // @Param bidsectionId path string true "标段ID" // @Param code path string true "合同编号" // @Param name path string true "合同名称" // @Param contractsType path int true "合同类型(1)" // @Param price path string true "合同金额" // @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}" // @Router /api/contract/income/create [post] func (c *ContractApi) PostIncomeCreate() { // 验证参数 contractData, err := c.ServiceContract.ValidRuleContractAdd(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目ID projectIdInt, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 标段ID bidsectionId, err := utils.GetDecryptId(contractData.BidsectionId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目节ID treeId, err := utils.GetDecryptId(contractData.TreeId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 可优化-事务问题 // 先添加项目节 // 1.新建合同,项目层级必须在第二层以下,当第一层没有孩子可以添加合同 sectionData := &viewmodels.TreeSectionContract{} sectionData.Id = contractData.TreeId sectionData.Name = " " sectionResult, err := c.ServiceContract.ContractSectionAdd(sectionData, bidsectionId, projectIdInt, 0) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) 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 } // 获得项目节 sectionDetail := c.ServiceContract.Get(treeId, bidsectionId, projectIdInt, 0) // 合同ID contractId, _ := utils.GetDecryptId(sectionDetail.ContractId) contractDetail := c.ServiceContract.GetContract(contractId) c.Ctx.JSON(iris.Map{ "code": 0, "msg": "新增成功", "contract": contractDetail, }) } // @Summary 编辑合同 // @Tags 合同管理-收入合同 // @Description 编辑合同 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param id path string true "合同ID" // @Param treeId path string true "项目节ID" // @Param bidsectionId path string true "标段ID" // @Param content path string true "合同内容" // @Param name path string true "合同名称" // @Param price path string true "合同金额" // @Param partyA path string true "甲方" // @Param partyASigner path string true "甲方签约人" // @Param partyB path string true "已方" // @Param partyBSigner path string true "已方签约人" // @Param signerTime path string true "签约时间" // @Param remarks path string true "备注" // @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}" // @Router /api/contract/income/update [post] func (c *ContractApi) PostIncomeUpdate() { // 验证参数 contractData, err := c.ServiceContract.ValidRuleContractEdi(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目ID projectIdInt, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 标段ID bidsectionId, err := utils.GetDecryptId(contractData.BidsectionId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目节ID treeId, err := utils.GetDecryptId(contractData.TreeId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } err = c.ServiceContract.Update(contractData, projectIdInt, bidsectionId, treeId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } //2.请求当前项目信息 // 1.验证项目节ID sectionDetail := c.ServiceContract.Get(treeId, bidsectionId, projectIdInt, 0) // 合同ID contractId, _ := utils.GetDecryptId(sectionDetail.ContractId) contractDetail := c.ServiceContract.GetContract(contractId) c.Ctx.JSON(iris.Map{ "code": 0, "msg": "编辑成功", "section": sectionDetail, "contract": contractDetail, }) } // @Summary 删除合同 // @Tags 合同管理-收入合同 // @Description 删除合同 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param id path string true "合同ID" // @Param treeId path string true "项目节ID" // @Param bidsectionId path string true "标段ID" // @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}" // @Router /api/contract [delete] func (c *ContractApi) Delete() { // 验证参数 contractData, err := c.ServiceContract.ValidRuleContractDel(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目ID projectIdInt, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 标段ID bidsectionId, err := utils.GetDecryptId(contractData.BidsectionId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目节ID treeId, err := utils.GetDecryptId(contractData.TreeId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 合同ID id, err := utils.GetDecryptId(contractData.Id) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 删除合同 err = c.ServiceContract.Delete(projectIdInt, bidsectionId, treeId, id) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } //2.请求当前项目信息--需求变更 删除合同要删除项目节,不需要返回项目节信息 // 1.验证项目节ID // sectionDetail := c.ServiceContract.Get(treeId, bidsectionId, projectIdInt, 0) c.Ctx.JSON(iris.Map{"code": 0, "msg": "删除成功", "section": ""}) } // @Summary 关闭合同 // @Tags 合同管理 // @Description 关闭合同 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param id path string true "合同ID" // @Param treeId path string true "项目节ID" // @Param bidsectionId path string true "标段ID" // @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}" // @Router /api/contract/close [post] func (c *ContractApi) PostClose() { // 验证参数 contractData, err := c.ServiceContract.ValidRuleContractClose(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目ID projectIdInt, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 标段ID bidsectionId, err := utils.GetDecryptId(contractData.BidsectionId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目节ID treeId, err := utils.GetDecryptId(contractData.TreeId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 合同ID id, err := utils.GetDecryptId(contractData.Id) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } err = c.ServiceContract.Close(projectIdInt, bidsectionId, treeId, id, contractData.TreeType, contractData.SettlementCode) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 1.项目节信息 sectionDetail := c.ServiceContract.Get(treeId, bidsectionId, projectIdInt, 0) contractDetail := c.ServiceContract.GetContract(id) c.Ctx.JSON(iris.Map{"code": 0, "msg": "关闭成功", "section": sectionDetail, "contract": contractDetail}) } // @Summary 解锁合同 // @Tags 合同管理 // @Description 解锁合同 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param id path string true "合同ID" // @Param treeId path string true "项目节ID" // @Param bidsectionId path string true "标段ID" // @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}" // @Router /api/contract/unlock [post] func (c *ContractApi) PostUnlock() { // 验证参数 contractData, err := c.ServiceContract.ValidRuleContractClose(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目ID projectIdInt, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 标段ID bidsectionId, err := utils.GetDecryptId(contractData.BidsectionId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 项目节ID treeId, err := utils.GetDecryptId(contractData.TreeId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 合同ID id, err := utils.GetDecryptId(contractData.Id) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } err = c.ServiceContract.Unlock(projectIdInt, bidsectionId, treeId, id, contractData.TreeType) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 1.项目节信息 sectionDetail := c.ServiceContract.Get(treeId, bidsectionId, projectIdInt, 0) contractDetail := c.ServiceContract.GetContract(id) c.Ctx.JSON(iris.Map{"code": 0, "msg": "解锁成功", "section": sectionDetail, "contract": contractDetail}) } // @Summary 合同概述 // @Tags 合同管理 // @Description 合同概述 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param bidsectionId path string true "标段ID" // @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}" // @Router /api/contract/survey [get] func (c *ContractApi) GetSurvey() { sectionData := viewmodels.Contracts{} err := c.Ctx.ReadForm(§ionData) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"}) return } err = sectionData.ValidateBidsectionId() if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } // 标段ID bidsectionId, err := utils.GetDecryptId(sectionData.BidsectionId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"}) return } // 项目ID projectId, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } // 账号ID // accountId, err := utils.GetProjectAccountId(c.Ctx) // if err != nil { // c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) // return // } // 缓存标段ID-用于权限 // key := fmt.Sprintf("pm_%d_%d", projectId, accountId) // lib.NewRedis().SetBidsectionIdByCache(key, bidsectionId) incomeData := c.ServiceContract.GetSurvey(bidsectionId, projectId, 1) expenditureData := c.ServiceContract.GetSurvey(bidsectionId, projectId, 2) data := map[string]interface{}{ "incomeData": incomeData, "expenditureData": expenditureData, } c.Ctx.JSON(iris.Map{ "code": 0, "msg": "", "data": data, }) }