فهرست منبع

fix
用印列表,搜索出处理中结果也需要正常展示状态
处理中状态详情页处理中状态修复

Roc 3 سال پیش
والد
کامیت
f4c83329e1

+ 24 - 34
controllers/seal_approval.go

@@ -211,7 +211,7 @@ func (c *SealApprovalCommon) List() {
 		}
 		contractApprovalIdStr := strings.Join(contractApprovalIdSlice, ",")
 
-		//获取审批流列表数据
+		//获取当前审批流列表数据
 		contractApprovalRecordList, err := contract_approval_record.GetContractApprovalRecordList(contractApprovalIdStr, sysUser.AdminId)
 		if err != nil {
 			c.FailWithMessage("获取审批列表失败!", "获取审批列表失败,Err:"+err.Error())
@@ -222,6 +222,17 @@ func (c *SealApprovalCommon) List() {
 			contractApprovalRecordMap[contractApprovalRecordList[i].ContractApprovalId] = contractApprovalRecordList[i]
 		}
 
+		//获取自己的审批流列表数据
+		selfContractApprovalRecordList, err := contract_approval_record.GetSelfContractApprovalRecordList(contractApprovalIdStr, sysUser.AdminId)
+		if err != nil {
+			c.FailWithMessage("获取审批列表失败!", "获取审批列表失败,Err:"+err.Error())
+			return
+		}
+		selfContractApprovalRecordMap := make(map[int]*contract_approval_record.ContractApprovalRecord)
+		for i := 0; i < len(selfContractApprovalRecordList); i++ {
+			selfContractApprovalRecordMap[contractApprovalRecordList[i].ContractApprovalId] = contractApprovalRecordList[i]
+		}
+
 		for i := 0; i < len(list); i++ {
 			item := list[i]
 			list[i].CreateTimeStr = item.CreateTime.Format(utils.FormatDateTime)
@@ -233,39 +244,18 @@ func (c *SealApprovalCommon) List() {
 			}
 
 			//list[i].ContractInfo = contractDetail
-			//校验最新审批流数据
-			//if contractApprovalRecord, has := contractApprovalRecordMap[item.ContractApprovalId]; has {
-			//	//审批流id
-			//	list[i].ContractApprovalRecordId = contractApprovalRecord.ContractApprovalRecordId
-			//	//审批时间
-			//	list[i].ApproveTime = contractApprovalRecord.ApproveTime
-			//	list[i].ApproveTimeStr = contractApprovalRecord.ApproveTime.Format(utils.FormatDateTime)
-			//	//判断是否有操作权限
-			//	list[i].Status = contractApprovalRecord.Status
-			//
-			//	//判断是否处于待审批状态
-			//	//if contractApprovalRecord.Status == "待审批" {
-			//	//	//如果不是审批者,那么不能审批操作
-			//	//	if contractApprovalRecord.NodeType != "check" {
-			//	//		continue
-			//	//	}
-			//	//	//如果没有指定审批人的话
-			//	//	if contractApprovalRecord.ApproveUserId <= 0 {
-			//	//		//判断是否与审批角色一致,如果一致,那么允许操作审批
-			//	//		if contractApprovalRecord.ApproveRoleTypeCode == sysUser.RoleTypeCode {
-			//	//			list[i].CanApprovalButton = true
-			//	//		}
-			//	//	} else if contractApprovalRecord.ApproveUserId == sysUser.AdminId {
-			//	//		//如果指定审批人就是自己的话,那么操作审批
-			//	//		list[i].CanApprovalButton = true
-			//	//	}
-			//	//}
-			//}
-
-			//合同状态(突然说要改成展示合同状态,那就根据业务需求,改成返回:合同状态咯)
-			//list[i].Status = item.SealStatus
-			if item.Status == "待审批" && status == "处理中" {
-				list[i].Status = "处理中"
+			//如果当前状态是待审批的话,那么校验自己的审批流数据,然后去返回对应的状态
+			if item.Status == "待审批" {
+				//如果是自己发起的审批单,同时已经经过了一轮审批,那么标记为处理中
+				if item.ApplyUserId == c.AdminWx.AdminId && item.CurrNodeId > item.StartNodeId {
+					list[i].Status = "处理中"
+				} else {
+					if contractApprovalRecord, has := selfContractApprovalRecordMap[item.ContractApprovalId]; has {
+						if contractApprovalRecord.NodeId < item.CurrNodeId && contractApprovalRecord.NodeType != "cc" {
+							list[i].Status = "处理中"
+						}
+					}
+				}
 			}
 		}
 	}

+ 6 - 2
models/tables/contract_approval/contract_approval.go

@@ -595,6 +595,8 @@ type SealApprovalList struct {
 	Status                   string                  `description:"合同状态,枚举值:待审批','已审批','已驳回','已撤回',默认待审批"`
 	ApproveStatus            string                  `json:"-" description:"审批单状态,枚举值:待审批','已审批','已驳回','已撤回',默认待审批"`
 	ApplyContent             string                  `description:"待审内容"`
+	ApplyUserId              int                     `description:"待审内容"`
+	ApplyUserName            string                  `description:"待审内容"`
 	ContractDetail           string                  `json:"-" description:"提交审批时的合同信息;用印快照"`
 	ContractInfo             contract.ContractDetail `json:"-" description:"提交审批时的合同信息;用印快照"`
 	ApproveRemark            string                  `description:"审核备注"`
@@ -602,6 +604,8 @@ type SealApprovalList struct {
 	CompanyName              string                  `description:"客户名称"`
 	FileUrl                  string                  `description:"合同下载地址"`
 	UserId                   int                     `description:"申请人id"`
+	CurrNodeId               int                     `description:"当前审批节点id"`
+	StartNodeId              int                     `description:"开始审批节点id"`
 	UserName                 string                  `description:"申请人名称"`
 	CreateTime               time.Time               `description:"发起审批的时间"`
 	ModifyTime               time.Time               `description:"最后一次修改的时间"`
@@ -618,7 +622,7 @@ type SealApprovalList struct {
 //获取合同审批列表数据
 func GetSealApprovalList(childCondition, condition, joinCondition string, childPars, pars []interface{}, startSize, pageSize int) (list []*SealApprovalList, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT a.contract_approval_id,a.contract_id,a.apply_content,a.approve_remark,a.create_time,a.modify_time,a.status approval_status,c.status,c.seal_type,c.company_name,c.user_id,c.user_name,c.file_url,c.approve_time,c.invalid_time,c.code from contract_approval a
+	sql := `SELECT a.contract_approval_id,a.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,a.create_time,a.modify_time,a.status approval_status,c.status,c.seal_type,c.company_name,c.user_id,c.user_name,c.file_url,c.approve_time,c.invalid_time,c.code from contract_approval a
 	join 
 	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
 	sql += childCondition
@@ -653,7 +657,7 @@ WHERE c.is_delete = 0  AND a.approval_type="seal" `
 }
 func GetSealApprovalListV2(childCondition, condition, orderBy string, childPars, pars []interface{}, startSize, pageSize int) (list []*SealApprovalList, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT a.contract_approval_id,a.contract_id,a.apply_content,a.approve_remark,a.create_time,a.modify_time,a.status approval_status,c.status,c.seal_type,c.company_name,c.user_id,c.user_name,c.file_url,c.approve_time,c.invalid_time,c.code from contract_approval a
+	sql := `SELECT a.contract_approval_id,a.contract_id,a.apply_content,a.approve_remark,a.apply_user_id,a.apply_user_name,a.curr_node_id,a.start_node_id,a.create_time,a.modify_time,a.status approval_status,c.status,c.seal_type,c.company_name,c.user_id,c.user_name,c.file_url,c.approve_time,c.invalid_time,c.code from contract_approval a
 	join 
 	( SELECT max( contract_approval_id ) max_id,contract_id FROM contract_approval where 1=1 `
 	sql += childCondition

+ 16 - 0
models/tables/contract_approval_record/contract_approval_record.go

@@ -114,6 +114,8 @@ WHERE a.contract_approval_id in (` + contractApprovalIds + `) `
 	_, err = o.Raw(sql).QueryRows(&list)
 	return
 }
+
+// GetContractApprovalRecordList  根据审批单id批量获取当前的审批流列表数据
 func GetContractApprovalRecordList(contractApprovalIds string, approveUserId int) (list []*ContractApprovalRecord, err error) {
 	o := orm.NewOrm()
 	sql := `
@@ -126,6 +128,20 @@ WHERE a.contract_approval_id in (` + contractApprovalIds + `) AND (approve_user_
 	return
 }
 
+// GetSelfContractApprovalRecordList  根据审批单id批量获取自己的审批流列表数据
+func GetSelfContractApprovalRecordList(contractApprovalIds string, approveUserId int) (list []*ContractApprovalRecord, err error) {
+	o := orm.NewOrm()
+	sql := `
+SELECT
+a.* from contract_approval_record a
+	join contract_approval b on a.contract_approval_id = b.contract_approval_id 
+WHERE a.contract_approval_id in (` + contractApprovalIds + `) AND (approve_user_id = ? or approve_user_id=0) 
+and a.node_id<=b.curr_node_id`
+	sql += ` order by contract_approval_record_id desc  `
+	_, err = o.Raw(sql, approveUserId).QueryRows(&list)
+	return
+}
+
 //根据合同审批单id集合获取合同审批流程单信息列表
 func GetContractApprovalRecordByIds(contractApprovalRecordIds string) (contractApprovalRecordList []*ContractApprovalRecord, err error) {
 	o := orm.NewOrm()

+ 15 - 0
services/seal/seal.go

@@ -286,6 +286,14 @@ func GetOpButton(sealInfo *seal.Seal, contractApprovalInfo *contract_approval.Co
 		err = errors.New("获取审批失败,Err:" + err.Error())
 		return
 	}
+
+	//待审批状态下,如果是自己发起的审批单,同时已经经过了一轮审批,那么标记为处理中
+	if contractApprovalInfo.Status == "待审批" {
+		if contractApprovalInfo.ApplyUserId == opUser.AdminId && contractApprovalInfo.CurrNodeId > contractApprovalInfo.StartNodeId {
+			sealInfo.Status = "处理中"
+		}
+	}
+
 	flowNodeMap := make(map[int][]contract_approval_record.ContractApprovalRecord, 0)
 	keySort := make([]int, 0)
 	for _, approvalRecord := range approvalRecordList {
@@ -316,6 +324,13 @@ func GetOpButton(sealInfo *seal.Seal, contractApprovalInfo *contract_approval.Co
 
 			keySort = append(keySort, approvalRecord.NodeId)
 		}
+
+		//待审批状态下,如果当前审批节点就是操作人,审批节点超过当前审批节点,且节点类型是抄送人,,那么标记为处理中
+		if contractApprovalInfo.Status == "待审批" {
+			if approvalRecord.ApproveUserId == opUser.AdminId && approvalRecord.NodeId < contractApprovalInfo.CurrNodeId && approvalRecord.NodeType != "cc" {
+				sealInfo.Status = "处理中"
+			}
+		}
 	}
 	for _, key := range keySort {
 		flowNodeListResp = append(flowNodeListResp, flowNodeMap[key])