123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- package contract
- import (
- "errors"
- "fmt"
- "hongze/hongze_mobile_admin/models/custom"
- contractCustom "hongze/hongze_mobile_admin/models/custom/contract"
- contractResp "hongze/hongze_mobile_admin/models/response/contract"
- "hongze/hongze_mobile_admin/models/tables/contract"
- "hongze/hongze_mobile_admin/models/tables/contract_approval"
- "hongze/hongze_mobile_admin/models/tables/contract_approval_record"
- "hongze/hongze_mobile_admin/models/tables/contract_operation_record"
- "hongze/hongze_mobile_admin/models/tables/contract_service_detail"
- "hongze/hongze_mobile_admin/utils"
- "strings"
- "time"
- )
- //作废合同
- func InvalidContract(contractId int, opUser *custom.AdminWx) (err error) {
- //查询当前合同信息
- nowContract, err := contract.GetContractById(contractId)
- if err != nil {
- if err.Error() == utils.ErrNoRow() {
- err = errors.New(fmt.Sprint("根据合同编号:", contractId, " 找不到初始合同"))
- }
- return
- }
- if nowContract.SellerId != opUser.AdminId && opUser.RoleTypeCode != utils.ROLE_TYPE_CODE_COMPLIANCE {
- err = errors.New("当前账号无操作权限")
- return
- }
- if nowContract.Status != "已审批" {
- err = errors.New("合同状态异常,不允许作废,当前合同状态:" + nowContract.Status)
- return
- }
- //如果删除状态 >0,那么代表已经被删除了
- if nowContract.IsDelete > 0 {
- err = errors.New("该合同已删除")
- return
- }
- //合同作废
- err = contract.InvalidContract(nowContract)
- if err != nil {
- return
- }
- //添加操作日志
- remark := "作废合同模板"
- _ = contract_operation_record.AddContractOperationRecord(nowContract.ContractId, opUser.AdminId, 0, "invalid", opUser.RealName, remark)
- return
- }
- //根据id获取合同详情(包含服务)
- func GetContractDetail(contractId int) (contractDetail *contract.ContractDetail, err error) {
- contractDetail, err = contract.GetContractDetailById(contractId)
- if err != nil {
- if err.Error() == utils.ErrNoRow() {
- err = errors.New("找不到该合同")
- }
- return
- }
- serviceList, err := contractCustom.GetContractServiceAndDetailList(contractId)
- if err != nil {
- err = errors.New(fmt.Sprint("查找合同服务异常", err))
- return
- }
- for i := 0; len(serviceList) > i; i++ {
- if serviceList[i].HasDetail == "是" {
- list, detailErr := contract_service_detail.GetContractServiceDetailListByServiceId(serviceList[i].ContractServiceId)
- if detailErr != nil {
- err = errors.New(fmt.Sprint("查找合同服务详情异常", detailErr))
- return
- }
- serviceList[i].DetailList = list
- }
- }
- contractDetail.Service = serviceList
- return
- }
- //上传签回合同附件
- func UploadCheckBackFile(contractId int, fileUrl string, opUser *custom.AdminWx) (err error) {
- //获取合同信息
- contractInfo, err := contract.GetContractById(contractId)
- if err != nil {
- return
- }
- //合同状态判断
- if contractInfo.Status != "已审批" && contractInfo.Status != "已签回" {
- err = errors.New("合同状态异常,不允许上传签回合同附件,当前合同状态:" + contractInfo.Status)
- return
- }
- contractInfo.CheckBackFileUrl = fileUrl
- contractInfo.Status = "已签回"
- contractInfo.ModifyTime = time.Now()
- contractInfo.CheckBackFileTime = time.Now()
- err = contractInfo.Update([]string{"CheckBackFileUrl", "Status", "ModifyTime", "CheckBackFileTime"})
- if err != nil {
- return
- }
- //添加操作日志
- remark := "上传签回合同附件"
- _ = contract_operation_record.AddContractOperationRecord(contractInfo.ContractId, opUser.AdminId, 0, "upload", opUser.RealName, remark)
- return
- }
- //获取审批流和权限
- func GetOpButton(contractInfo *contract.ContractDetail, contractApprovalInfo *contract_approval.ContractApproval, opUser *custom.AdminWx) (contractOpButton contractResp.OpButton, flowNodeListResp [][]contract_approval_record.ContractApprovalRecord, err error) {
- //审批流
- approvalRecordList, err := contract_approval_record.GetContractApprovalRecordListByContractApprovalId(contractApprovalInfo.ContractApprovalId)
- if err != nil {
- err = errors.New("获取审批失败,Err:" + err.Error())
- return
- }
- flowNodeMap := make(map[int][]contract_approval_record.ContractApprovalRecord, 0)
- keySort := make([]int, 0)
- for _, approvalRecord := range approvalRecordList {
- //如果当前节点正好是该节点,同时审批单状态是待审批状态,然后当前账号又有权限,该账号也正是审批人,那么允许审批操作
- if contractApprovalInfo.CurrNodeId == approvalRecord.NodeId && contractApprovalInfo.Status == "待审批" {
- if opUser.AdminId == approvalRecord.ApproveUserId && approvalRecord.NodeType == "check" {
- contractOpButton.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])
- }
- //是否具有签回合同权限
- uploadStatus := []string{"已审批", "已签回"}
- if opUser.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE && strings.Contains(strings.Join(uploadStatus, ","), contractInfo.Status) {
- contractOpButton.UploadFile = true
- }
- //作废权限
- if (opUser.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE || opUser.AdminId == contractInfo.SellerId) && contractInfo.Status == "已审批" {
- contractOpButton.Invalid = true
- }
- return
- }
- //根据合同获取合同详情
- func GetContractDetailByContractId(contractId int, opUser *custom.AdminWx) (contractInfo *contract.ContractDetail, flowNodeListResp [][]contract_approval_record.ContractApprovalRecord, opButton contractResp.OpButton, err error) {
- contractInfo, err = GetContractDetail(contractId)
- if err != nil {
- err = errors.New("获取合同详情失败,ERR:" + err.Error())
- return
- }
- contractInfo.StartDateStr = contractInfo.StartDate.Format(utils.FormatDate)
- contractInfo.EndDateStr = contractInfo.EndDate.Format(utils.FormatDate)
- contractInfo.ModifyTimeStr = contractInfo.ModifyTime.Format(utils.FormatDateTime)
- contractInfo.CreateTimeStr = contractInfo.CreateTime.Format(utils.FormatDateTime)
- //查询最近一次审批单信息
- lastApprovalInfo, err := contract_approval.GetLastContractApprovalByContractId(contractInfo.ContractId, "contract")
- if err != nil {
- if err.Error() != utils.ErrNoRow() {
- err = errors.New("获取最近一次审批单信息失败,ERR:" + err.Error())
- }
- err = nil
- return
- }
- if lastApprovalInfo != nil {
- //审批操作权限,上传签回文件权限
- tmpContractOpButton, tmpFlowNodeListResp, tmpErr := GetOpButton(contractInfo, lastApprovalInfo, opUser)
- if tmpErr != nil {
- err = errors.New("获取合同按钮权限、审批流程失败,ERR:" + tmpErr.Error())
- return
- }
- opButton = tmpContractOpButton
- flowNodeListResp = tmpFlowNodeListResp
- }
- return
- }
|