瀏覽代碼

fix: 根据后台调整功能

hsun 3 年之前
父節點
當前提交
bc2294bcc6

+ 1 - 1
controllers/seal.go

@@ -94,7 +94,7 @@ func (c *SealCommon) Edit() {
 		c.FailWithMessage("合同编号必传!", "合同编号必传!")
 		return
 	}
-	sealInfo, err := sealService.Edit(req.SealId, c.AdminWx.AdminId, req.ContractId, req.FileNum, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrl)
+	sealInfo, err := sealService.Edit(req.SealId, c.AdminWx.AdminId, req.ContractId, req.FileNum, req.Use, req.CompanyName, req.UseCompanyName, req.CreditCode, req.ServiceType, req.SealType, req.Remark, req.FileUrl, c.AdminWx.RealName)
 	if err != nil {
 		c.FailWithMessage("修改合同失败!", "修改合同失败,Err:"+err.Error())
 		return

+ 1 - 1
controllers/seal_approval.go

@@ -436,7 +436,7 @@ func (c *SealApprovalCommon) CancelApply() {
 		c.FailWithMessage("获取审批流信息失败", "获取审批流信息失败,err:"+err.Error())
 		return
 	}
-	err = sealService.CancelApply(sealInfo, c.AdminWx.AdminId)
+	err = sealService.CancelApply(sealInfo, c.AdminWx.AdminId, c.AdminWx.RealName)
 	if err != nil {
 		c.FailWithMessage("撤回申请失败!", "撤回申请失败,Err:"+err.Error())
 		return

+ 1 - 0
models/db_init.go

@@ -81,6 +81,7 @@ func init() {
 		new(wx_token.WxToken),
 		new(wx_user.WxUser),
 		new(seal.Seal), //用印表
+		new(seal.SealOperationRecord),	// 用印操作记录表
 	)
 
 }

+ 3 - 0
models/tables/seal/seal.go

@@ -34,6 +34,9 @@ type Seal struct {
 	CheckBackFileTime time.Time `description:"签回用印附件时间"`
 }
 
+var EnumUse = []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议", "代付合同", "总对总协议"}
+var EnumServiceType = []string{"新签合同", "续约合同", "补充协议", "代付合同"}
+
 //GetSealInfoById 根据用印id获取合同信息
 func GetSealInfoById(sealId int) (sealInfo *Seal, err error) {
 	o := orm.NewOrm()

+ 48 - 0
models/tables/seal/seal_operation_record.go

@@ -0,0 +1,48 @@
+package seal
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+type SealOperationRecord struct {
+	Id               	int       `orm:"column(id);pk"`
+	SealId				int       `orm:"column(seal_id)";description:"用印ID"`
+	Operation        	string    `description:"操作类型,add:新增,edit:编辑,apply:发起审批,cancel:撤回审批,reject:拒绝审批,approval:审批操作,invalid:作废;长度36位"`
+	OpUserId         	int       `description:"操作人id"`
+	OpUserName       	string    `description:"操作人名称"`
+	Remark           	string    `description:"备注,长度255位"`
+	ApprovalRecordId	int       `orm:"column(approval_record_id)";description:"审批流id"`
+	ApprovalRemark		string	  `description:"审批备注"`
+	CreateTime       	time.Time `description:"日志添加时间"`
+}
+
+type SealOperationRecordList struct {
+	SealOperationRecord
+	CreateTimeStr		string	`description:"日志添加时间标准格式"`
+}
+
+// GetSealOperationListBySealId 根据用印ID获取所有操作日志
+func GetSealOperationListBySealId(sealId int) (list []*SealOperationRecordList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM seal_operation_record WHERE seal_id = ? ORDER BY id DESC`
+	_, err = o.Raw(sql, sealId).QueryRows(&list)
+	return
+}
+
+// AddContractOperationRecord 添加用印操作日志
+func AddSealOperationRecord(sealId, opUserId, approvalRecordId int, operation, opUserName, remark, approvalRemark string) (err error) {
+	o := orm.NewOrm()
+	item := &SealOperationRecord{
+		SealId: sealId,
+		Operation: operation,
+		OpUserId: opUserId,
+		OpUserName: opUserName,
+		Remark: remark,
+		ApprovalRecordId: approvalRecordId,
+		ApprovalRemark: approvalRemark,
+		CreateTime: time.Now(),
+	}
+	_, err = o.Insert(item)
+	return
+}

+ 36 - 7
services/seal/approval.go

@@ -40,6 +40,20 @@ func Apply(sealInfo *seal.Seal) (err error) {
 	return
 }
 
+// GetFlowTypeBySealType 根据盖章类型(多选,逗号拼接)获取审批流的类型
+func GetFlowTypeBySealType(sealType string) (flowType int) {
+	flowType = 5	// 合同章
+	longFlow := "公章,法人章"	// 盖章类型包含其中之一则审批流变成6
+	sealTypeArr := strings.Split(sealType, ",")
+	for _, itemType := range sealTypeArr {
+		if strings.Contains(longFlow, itemType) {
+			flowType = 6
+		}
+	}
+
+	return
+}
+
 //审批人修改后重新提交审批单
 func CheckApply(sealInfo *seal.Seal, opUser *custom.AdminWx) (err error) {
 	//发起审批
@@ -95,12 +109,8 @@ func apply(sealInfo *seal.Seal) (approval *contract_approval.ContractApproval, c
 		return
 	}
 
-	//获取基础审批流
-	flowId := 5
-	//如果是法人章或者是公章
-	if sealInfo.SealType == "法人章" || sealInfo.SealType == "公章" {
-		flowId = 6
-	}
+	//获取审批流
+	flowId := GetFlowTypeBySealType(sealInfo.SealType)
 	flowItemInfo, err := flow.GetApprovalFlow(flowId)
 	if err != nil {
 		return
@@ -170,7 +180,7 @@ func apply(sealInfo *seal.Seal) (approval *contract_approval.ContractApproval, c
 }
 
 //撤销合同
-func CancelApply(sealInfo *seal.Seal, opUserId int) (err error) {
+func CancelApply(sealInfo *seal.Seal, opUserId int, opUserName string) (err error) {
 	if sealInfo == nil {
 		err = errors.New("审批流异常,没有审批流信息")
 		return
@@ -226,6 +236,12 @@ func CancelApply(sealInfo *seal.Seal, opUserId int) (err error) {
 	if err != nil {
 		return
 	}
+	// 操作日志
+	err = seal.AddSealOperationRecord(sealInfo.SealId, opUserId, 0, "cancel", opUserName, "撤回用印申请", "")
+	if err != nil {
+		err = errors.New("新增用印日志失败")
+		return
+	}
 
 	////添加操作日志
 	//remark := "撤回申请"
@@ -362,6 +378,13 @@ func reject(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractApprova
 	if err != nil {
 		return
 	}
+	// 操作日志
+	err = seal.AddSealOperationRecord(sealInfo.SealId, opUser.AdminId, approvalRecord.ContractApprovalRecordId, "reject", opUser.RealName, "驳回审批", rejectRemark)
+	if err != nil {
+		err = errors.New("新增用印日志失败")
+		return
+	}
+
 	return
 }
 
@@ -413,6 +436,12 @@ func Approved(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppro
 	if err != nil {
 		return
 	}
+	// 操作日志
+	err = seal.AddSealOperationRecord(sealInfo.SealId, opUser.AdminId, approvalRecord.ContractApprovalRecordId, "approved", opUser.RealName, "通过审批", "")
+	if err != nil {
+		err = errors.New("新增用印日志失败")
+		return
+	}
 
 	//添加操作日志
 	//remark := "审批通过"

+ 45 - 28
services/seal/seal.go

@@ -20,21 +20,14 @@ import (
 
 // AddSeal 添加用印
 func AddSeal(userId, contractId, fileNum int, userName, use, useCompanyName, companyName, creditCode, serviceType, sealType, remark, fileUrl string) (sealInfo *seal.Seal, err error) {
-	useList := []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议"}
-	serviceTypeList := []string{"新签合同", "续约合同", "补充协议"}
-	sealTypeList := []string{"合同章", "公章", "法人章"}
-	if !strings.Contains(strings.Join(useList, ","), use) {
+	if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
 		err = errors.New("用印用途异常")
 		return
 	}
-	if !strings.Contains(strings.Join(serviceTypeList, ","), serviceType) {
+	if !strings.Contains(strings.Join(seal.EnumServiceType, ","), serviceType) {
 		err = errors.New("业务类型异常")
 		return
 	}
-	if !strings.Contains(strings.Join(sealTypeList, ","), sealType) {
-		err = errors.New("加盖印章类型异常")
-		return
-	}
 
 	sealCode, err := seal.GetSealCode()
 	if err != nil {
@@ -59,26 +52,31 @@ func AddSeal(userId, contractId, fileNum int, userName, use, useCompanyName, com
 		CreateTime:     time.Now(),
 	}
 	err = seal.AddSeal(sealInfo)
+	if err != nil {
+		err = errors.New("新增用印失败")
+		return
+	}
+
+	// 操作日志
+	err = seal.AddSealOperationRecord(sealInfo.SealId, userId, 0, "apply", userName, "提交审批", "")
+	if err != nil {
+		err = errors.New("新增用印日志失败")
+		return
+	}
+
 	return
 }
 
 // Edit 修改用印
-func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompanyName, creditCode, serviceType, sealType, remark, fileUrl string) (sealInfo *seal.Seal, err error) {
-	useList := []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议"}
-	serviceTypeList := []string{"新签合同", "续约合同", "补充协议"}
-	sealTypeList := []string{"合同章", "公章", "法人章"}
-	if !strings.Contains(strings.Join(useList, ","), use) {
+func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompanyName, creditCode, serviceType, sealType, remark, fileUrl, userName string) (sealInfo *seal.Seal, err error) {
+	if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
 		err = errors.New("用印用途异常")
 		return
 	}
-	if !strings.Contains(strings.Join(serviceTypeList, ","), serviceType) {
+	if !strings.Contains(strings.Join(seal.EnumServiceType, ","), serviceType) {
 		err = errors.New("业务类型异常")
 		return
 	}
-	if !strings.Contains(strings.Join(sealTypeList, ","), sealType) {
-		err = errors.New("加盖印章类型异常")
-		return
-	}
 
 	//查询当前合同信息
 	sealInfo, err = seal.GetSealInfoById(sealId)
@@ -112,22 +110,27 @@ func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompany
 	sealInfo.Status = "待提交" //用印状态
 
 	err = sealInfo.Update([]string{"Use", "CompanyName", "UseCompanyName", "CreditCode", "ServiceType", "SealType", "Remark", "FileUrl", "ModifyTime", "Status"})
+	if err != nil {
+		err = errors.New("新增用印日志失败")
+		return
+	}
+
+	// 操作日志
+	err = seal.AddSealOperationRecord(sealInfo.SealId, userId, 0, "edit", userName, "重提审批", "")
+	if err != nil {
+		err = errors.New("编辑用印日志失败")
+		return
+	}
 
 	return
 }
 
 // CheckEdit 审批者修改用印
 func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractApproval, approvalRecord *contract_approval_record.ContractApprovalRecord, fileNum int, fileUrl, use, sealType, remark string, opUser *custom.AdminWx) (err error) {
-	useList := []string{"销售合同", "渠道合同", "付款通知函", "招投标", "战略合作协议"}
-	sealTypeList := []string{"合同章", "公章", "法人章"}
-	if !strings.Contains(strings.Join(useList, ","), use) {
+	if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
 		err = errors.New("用印用途异常")
 		return
 	}
-	if !strings.Contains(strings.Join(sealTypeList, ","), sealType) {
-		err = errors.New("加盖印章类型异常")
-		return
-	}
 
 	//判断是否是合规账号
 	if opUser.RoleTypeCode != utils.ROLE_TYPE_CODE_COMPLIANCE {
@@ -172,10 +175,14 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
 	}
 	content := "用印修改:" + opUser.RealName + "修改了" + strings.Join(updateContent, "、")
 
+	// 通过盖章类型判断是否需要变更审批流程
+	originFlowType := GetFlowTypeBySealType(sealInfo.SealType)
+	reqFlowType := GetFlowTypeBySealType(sealType)
+
 	//如果变更了盖章类型(涉及到审批流程变更),那么需要变更审批流
 	//变更审批流:先驳回用印申请,再修改用印,再发消息给申请人,再替申请人重新发起申请,
 	//然后遍历审批流程,当前操作人节点之前的全部审核通过,最后通过当前操作人的节点(改成如果一级审批人如果是自己,那么直接通过这一级审批,否则不通过,让审批单重走流程)
-	if (sealInfo.SealType == "合同章" && strings.Contains("公章,法人章", sealType)) || (strings.Contains("公章,法人章", sealInfo.SealType) && sealType == "合同章") {
+	if originFlowType != reqFlowType {
 		//先驳回
 		err = CheckReject(sealInfo, approvalInfo, approvalRecord, opUser, "")
 		if err != nil {
@@ -225,6 +232,9 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
 func checkEdit(sealInfo *seal.Seal, updateCol []string, approvalRecordId int, content string, opUser *custom.AdminWx) {
 	_ = sealInfo.Update(updateCol)
 
+	// 操作日志
+	_ = seal.AddSealOperationRecord(sealInfo.SealId, opUser.AdminId, approvalRecordId, "edit", opUser.RealName, "审批人修改信息", "")
+
 	//给用印人,发送修改消息
 	sysUserMobile := ""
 	sysUser, _ := admin.GetAdminById(opUser.AdminId)
@@ -266,6 +276,13 @@ func Invalid(sealId int, opUser *custom.AdminWx, isInvalidContract bool) (err er
 		return
 	}
 
+	// 操作日志
+	err = seal.AddSealOperationRecord(sealInfo.SealId, opUser.AdminId, 0, "invalid", opUser.RealName, "作废审批", "")
+	if err != nil {
+		err = errors.New("新增用印日志失败")
+		return
+	}
+
 	//如果是系统合同,同时需要同步作废合同时,那么逻辑处理
 	if sealInfo.ContractId > 0 && isInvalidContract {
 		err = contractService.InvalidContract(sealInfo.ContractId, opUser)
@@ -431,7 +448,7 @@ func GetOpButton(sealInfo *seal.Seal, contractApprovalInfo *contract_approval.Co
 
 		//待审批状态下,如果当前审批节点就是操作人,审批节点超过当前审批节点,且节点类型是抄送人,,那么标记为处理中
 		if contractApprovalInfo.Status == "待审批" {
-			if approvalRecord.ApproveUserId == opUser.AdminId && approvalRecord.NodeId < contractApprovalInfo.CurrNodeId && approvalRecord.NodeType != "cc" {
+			if approvalRecord.ApproveUserId == opUser.AdminId && approvalRecord.NodeId < contractApprovalInfo.CurrNodeId && approvalRecord.NodeType == "cc" {
 				sealInfo.Status = "处理中"
 			}
 		}