package controllers import ( "encoding/json" sealReq "hongze/hongze_mobile_admin/models/request/seal" sealResp "hongze/hongze_mobile_admin/models/response/seal" "hongze/hongze_mobile_admin/models/tables/contract_approval" "hongze/hongze_mobile_admin/models/tables/contract_approval_record" "hongze/hongze_mobile_admin/models/tables/seal" sealService "hongze/hongze_mobile_admin/services/seal" "hongze/hongze_mobile_admin/utils" ) //用印模块 type SealCommon struct { BaseAuth } // @Title 新增用印 // @Description 新增用印接口 // @Param request body seal.AddReq true "type json string" // @Success Ret=200 新增用印成功 // @router /add [post] func (this *SealCommon) Add() { var req sealReq.AddReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { this.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error()) return } //参数校验 paramVerify := utils.Rules{ "Use": {utils.NotEmpty()}, "CompanyName": {utils.NotEmpty()}, "CreditCode": {utils.NotEmpty()}, "ServiceType": {utils.NotEmpty()}, "SealType": {utils.NotEmpty()}, "FileUrl": {utils.NotEmpty()}, } err = utils.Verify(req, paramVerify, utils.LANG_CN) if err != nil { this.FailWithMessage("缺少参数", err.Error()) return } sealInfo, err := sealService.AddSeal(this.AdminWx.AdminId, req.ContractId, req.FileNum, this.AdminWx.RealName, req.Use, req.UseCompanyName, req.CompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrl) if err != nil { this.FailWithMessage("用印添加失败", err.Error()) return } err = sealService.Apply(sealInfo) if err != nil { this.FailWithMessage("发起用印审批失败", "发起用印审批失败,Err:"+err.Error()) return } this.OkDetailed(sealResp.AddSealResp{ SealId: sealInfo.SealId, }, "发起用印审批成功") } // @Title 编辑用印 // @Description 编辑用印接口 // @Param request body seal.EditReq true "type json string" // @Success 200 {object} seal.AddSealResp // @router /edit [post] func (this *SealCommon) Edit() { var req sealReq.EditReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { this.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error()) return } //参数校验 paramVerify := utils.Rules{ "SealId": {utils.NotEmpty()}, "Use": {utils.NotEmpty()}, "CompanyName": {utils.NotEmpty()}, "CreditCode": {utils.NotEmpty()}, "ServiceType": {utils.NotEmpty()}, "SealType": {utils.NotEmpty()}, "FileUrl": {utils.NotEmpty()}, } err = utils.Verify(req, paramVerify, utils.LANG_CN) if req.SealId <= 0 { this.FailWithMessage("合同编号必传!", "合同编号必传!") return } sealInfo, err := sealService.Edit(req.SealId, this.AdminWx.AdminId, req.ContractId, req.FileNum, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrl) if err != nil { this.FailWithMessage("修改合同失败!", "修改合同失败,Err:"+err.Error()) return } tmpErr := sealService.Apply(sealInfo) if tmpErr != nil { this.FailWithMessage("发起重申失败!", "发起重申失败,Err:"+tmpErr.Error()) return } this.OkDetailed(sealResp.AddSealResp{ SealId: sealInfo.SealId, }, "发起重申成功") } // @Title 获取用印详情 // @Description 获取用印详情接口 // @Param SealId query int true "用印id" // @Success 200 {object} seal.SealDetailResp // @router /detail [get] func (this *SealCommon) Detail() { //合同类型、产品类型、合同状态、更新时间、所选销售 //关键字:合同编号、客户名称,社会信用码 sealId, _ := this.GetInt("SealId") //用印id if sealId <= 0 { this.FailWithMessage("用印id必传!", "用印id必传!") return } sealInfo, err := seal.GetSealInfoById(sealId) if err != nil { this.FailWithMessage("获取合同详情失败!", "获取合同详情失败,ERR:"+err.Error()) return } //审批流 flowNodeListResp := make([][]contract_approval_record.ContractApprovalRecord, 0) //审批操作权限,上传签回文件权限 var opButton sealResp.OpButton //查询最近一次审批单信息 lastApprovalInfo, err := contract_approval.GetLastContractApprovalByContractId(sealInfo.SealId, "seal") if err != nil { if err.Error() != utils.NotEmpty() { this.FailWithMessage("获取最近一次审批单信息失败!", "获取最近一次审批单信息失败,ERR:"+err.Error()) return } } if lastApprovalInfo != nil { flowNodeMap := make(map[int][]contract_approval_record.ContractApprovalRecord, 0) //审批流 approvalRecordList, err := contract_approval_record.GetContractApprovalRecordListByContractApprovalId(lastApprovalInfo.ContractApprovalId) if err != nil { this.FailWithMessage("获取审批失败!", "获取审批失败,Err:"+err.Error()) return } keySort := make([]int, 0) for _, approvalRecord := range approvalRecordList { //如果当前节点正好是该节点,同时审批单状态是待审批状态,然后当前账号又有权限,该账号也正是审批人,那么允许审批操作 if lastApprovalInfo.CurrNodeId == approvalRecord.NodeId && lastApprovalInfo.Status == "待审批" { if this.AdminWx.AdminId == approvalRecord.ApproveUserId && approvalRecord.NodeType == "check" { opButton.Approval = true } } if tmpFlowNodeList, ok := flowNodeMap[approvalRecord.NodeId]; ok { flowNodeMap[approvalRecord.NodeId] = append(tmpFlowNodeList, *approvalRecord) } else { tmpFlowNodeList := make([]contract_approval_record.ContractApprovalRecord, 1) tmpFlowNodeList[0] = *approvalRecord flowNodeMap[approvalRecord.NodeId] = tmpFlowNodeList keySort = append(keySort, approvalRecord.NodeId) } } for _, key := range keySort { flowNodeListResp = append(flowNodeListResp, flowNodeMap[key]) } //作废权限 if (this.AdminWx.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE || this.AdminWx.AdminId == sealInfo.UserId) && sealInfo.Status == "已审批" { opButton.Invalid = true } } resp := sealResp.SealDetailResp{ SealDetail: sealInfo, FlowNodeList: flowNodeListResp, OpButton: opButton, } this.OkDetailed(resp, "获取成功") } // @Title 作废合同 // @Description 作废合同接口 // @Param SealId query int true "用印id" // @Success Ret=200 作废成功 // @router /invalid [get] func (this *SealCommon) Invalid() { var req sealReq.InvalidReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { this.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error()) return } //用印id if req.SealId <= 0 { this.FailWithMessage("用印id必传!", "用印id必传!") return } err = sealService.Invalid(req.SealId, this.AdminWx, req.IsInvalidContract) if err != nil { this.FailWithMessage("作废用印失败!", "作废用印失败,Err:"+err.Error()) return } this.OkWithMessage("作废成功") return } // @Title 根据客户名称获取已存在系统中客户名称列表 // @Description 获取合同详情接口 // @Param CompanyName query string true "客户名称" // @Success 200 {object} []string // @router /company_list [get] func (this *SealCommon) CompanyList() { companyName := this.GetString("CompanyName") //合同id if companyName == "" { this.FailWithMessage("客户名称必传!", "客户名称必传!") return } companyNameList := make([]string, 0) list, err := seal.GetCompanyNameList(companyName) if err != nil { this.FailWithMessage("获取客户名称列表失败!", "获取客户名称列表失败,ERR:"+err.Error()) return } for _, v := range list { companyNameList = append(companyNameList, v.CompanyName) } this.OkDetailed(companyNameList, "获取成功") }