contract.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package contract
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_mobile_admin/models/custom"
  6. contractCustom "hongze/hongze_mobile_admin/models/custom/contract"
  7. contractResp "hongze/hongze_mobile_admin/models/response/contract"
  8. "hongze/hongze_mobile_admin/models/tables/contract"
  9. "hongze/hongze_mobile_admin/models/tables/contract_approval"
  10. "hongze/hongze_mobile_admin/models/tables/contract_approval_record"
  11. "hongze/hongze_mobile_admin/models/tables/contract_operation_record"
  12. "hongze/hongze_mobile_admin/models/tables/contract_service_detail"
  13. "hongze/hongze_mobile_admin/utils"
  14. "strings"
  15. )
  16. //作废合同
  17. func InvalidContract(contractId int, opUser *custom.AdminWx) (err error) {
  18. //查询当前合同信息
  19. nowContract, err := contract.GetContractById(contractId)
  20. if err != nil {
  21. if err.Error() == utils.ErrNoRow() {
  22. err = errors.New(fmt.Sprint("根据合同编号:", contractId, " 找不到初始合同"))
  23. }
  24. return
  25. }
  26. if nowContract.SellerId != opUser.AdminId && opUser.RoleTypeCode != utils.ROLE_TYPE_CODE_COMPLIANCE {
  27. err = errors.New("当前账号无操作权限")
  28. return
  29. }
  30. if nowContract.Status != "已审批" {
  31. err = errors.New("合同状态异常,不允许作废,当前合同状态:" + nowContract.Status)
  32. return
  33. }
  34. //如果删除状态 >0,那么代表已经被删除了
  35. if nowContract.IsDelete > 0 {
  36. err = errors.New("该合同已删除")
  37. return
  38. }
  39. //合同作废
  40. err = contract.InvalidContract(nowContract)
  41. if err != nil {
  42. return
  43. }
  44. //添加操作日志
  45. remark := "作废合同模板"
  46. _ = contract_operation_record.AddContractOperationRecord(nowContract.ContractId, opUser.AdminId, 0, "invalid", opUser.RealName, remark)
  47. return
  48. }
  49. //根据id获取合同详情(包含服务)
  50. func GetContractDetail(contractId int) (contractDetail *contract.ContractDetail, err error) {
  51. contractDetail, err = contract.GetContractDetailById(contractId)
  52. if err != nil {
  53. if err.Error() == utils.ErrNoRow() {
  54. err = errors.New("找不到该合同")
  55. }
  56. return
  57. }
  58. serviceList, err := contractCustom.GetContractServiceAndDetailList(contractId)
  59. if err != nil {
  60. err = errors.New(fmt.Sprint("查找合同服务异常", err))
  61. return
  62. }
  63. for i := 0; len(serviceList) > i; i++ {
  64. if serviceList[i].HasDetail == "是" {
  65. list, detailErr := contract_service_detail.GetContractServiceDetailListByServiceId(serviceList[i].ContractServiceId)
  66. if detailErr != nil {
  67. err = errors.New(fmt.Sprint("查找合同服务详情异常", detailErr))
  68. return
  69. }
  70. serviceList[i].DetailList = list
  71. }
  72. }
  73. contractDetail.Service = serviceList
  74. return
  75. }
  76. //上传签回合同附件
  77. func UploadCheckBackFile(contractId int, fileUrl string, opUser *custom.AdminWx) (err error) {
  78. //获取合同信息
  79. contractInfo, err := contract.GetContractById(contractId)
  80. if err != nil {
  81. return
  82. }
  83. //合同状态判断
  84. if contractInfo.Status != "已审批" && contractInfo.Status != "已签回" {
  85. err = errors.New("合同状态异常,不允许上传签回合同附件,当前合同状态:" + contractInfo.Status)
  86. return
  87. }
  88. contractInfo.CheckBackFileUrl = fileUrl
  89. contractInfo.Status = "已签回"
  90. var updateCol = []string{"CheckBackFileUrl", "Status"}
  91. contractInfo.Update(updateCol)
  92. //添加操作日志
  93. remark := "上传签回合同附件"
  94. _ = contract_operation_record.AddContractOperationRecord(contractInfo.ContractId, opUser.AdminId, 0, "upload", opUser.RealName, remark)
  95. return
  96. }
  97. //获取审批流和权限
  98. func GetOpButton(contractInfo *contract.ContractDetail, contractApprovalInfo *contract_approval.ContractApproval, opUser *custom.AdminWx) (contractOpButton contractResp.OpButton, flowNodeListResp [][]contract_approval_record.ContractApprovalRecord, err error) {
  99. //审批流
  100. approvalRecordList, err := contract_approval_record.GetContractApprovalRecordListByContractApprovalId(contractApprovalInfo.ContractApprovalId)
  101. if err != nil {
  102. err = errors.New("获取审批失败,Err:" + err.Error())
  103. return
  104. }
  105. flowNodeMap := make(map[int][]contract_approval_record.ContractApprovalRecord, 0)
  106. keySort := make([]int, 0)
  107. for _, approvalRecord := range approvalRecordList {
  108. //如果当前节点正好是该节点,同时审批单状态是待审批状态,然后当前账号又有权限,该账号也正是审批人,那么允许审批操作
  109. if contractApprovalInfo.CurrNodeId == approvalRecord.NodeId && contractApprovalInfo.Status == "待审批" {
  110. if opUser.AdminId == approvalRecord.ApproveUserId && approvalRecord.NodeType == "check" {
  111. contractOpButton.Approval = true
  112. }
  113. }
  114. if tmpFlowNodeList, ok := flowNodeMap[approvalRecord.NodeId]; ok {
  115. flowNodeMap[approvalRecord.NodeId] = append(tmpFlowNodeList, *approvalRecord)
  116. } else {
  117. tmpFlowNodeList := make([]contract_approval_record.ContractApprovalRecord, 1)
  118. tmpFlowNodeList[0] = *approvalRecord
  119. flowNodeMap[approvalRecord.NodeId] = tmpFlowNodeList
  120. keySort = append(keySort, approvalRecord.NodeId)
  121. }
  122. }
  123. for _, key := range keySort {
  124. flowNodeListResp = append(flowNodeListResp, flowNodeMap[key])
  125. }
  126. //是否具有签回合同权限
  127. uploadStatus := []string{"已审批", "已签回"}
  128. if opUser.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE && strings.Contains(strings.Join(uploadStatus, ","), contractInfo.Status) {
  129. contractOpButton.UploadFile = true
  130. }
  131. //作废权限
  132. if (opUser.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE || opUser.AdminId == contractInfo.SellerId) && contractInfo.Status == "已审批" {
  133. contractOpButton.Invalid = true
  134. }
  135. return
  136. }