|
@@ -3,6 +3,7 @@ package seal
|
|
|
import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
+ "github.com/beego/beego/v2/client/orm"
|
|
|
"hongze/hongze_mobile_admin/models/custom"
|
|
|
sealResp "hongze/hongze_mobile_admin/models/response/seal"
|
|
|
"hongze/hongze_mobile_admin/models/tables/admin"
|
|
@@ -14,12 +15,25 @@ import (
|
|
|
contractService "hongze/hongze_mobile_admin/services/contract"
|
|
|
"hongze/hongze_mobile_admin/utils"
|
|
|
"mime/multipart"
|
|
|
+ "reflect"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
// AddSeal 添加用印
|
|
|
-func AddSeal(userId, contractId, fileNum int, userName, use, useCompanyName, companyName, creditCode, serviceType, sealType, remark, fileUrl string) (sealInfo *seal.Seal, err error) {
|
|
|
+func AddSeal(userId, contractId, fileNum int, userName, use, useCompanyName, companyName, creditCode, serviceType, sealType, remark string, fileUrls []string) (sealInfo *seal.Seal, err error) {
|
|
|
+ o := orm.NewOrm()
|
|
|
+ to, err := o.Begin()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ _ = to.Rollback()
|
|
|
+ } else {
|
|
|
+ _ = to.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
|
|
|
err = errors.New("用印用途异常")
|
|
|
return
|
|
@@ -33,6 +47,12 @@ func AddSeal(userId, contractId, fileNum int, userName, use, useCompanyName, com
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
+ fileUrl := ""
|
|
|
+ now := time.Now()
|
|
|
+ attachments := make([]*seal.Attachment,0)
|
|
|
+ if len(fileUrls) == 1 {
|
|
|
+ fileUrl = fileUrls[0]
|
|
|
+ }
|
|
|
sealInfo = &seal.Seal{
|
|
|
Code: sealCode,
|
|
|
UserId: userId,
|
|
@@ -48,14 +68,30 @@ func AddSeal(userId, contractId, fileNum int, userName, use, useCompanyName, com
|
|
|
FileUrl: fileUrl,
|
|
|
FileNum: fileNum,
|
|
|
ContractId: contractId,
|
|
|
- ModifyTime: time.Now(),
|
|
|
- CreateTime: time.Now(),
|
|
|
+ ModifyTime: now,
|
|
|
+ CreateTime: now,
|
|
|
}
|
|
|
err = seal.AddSeal(sealInfo)
|
|
|
if err != nil {
|
|
|
err = errors.New("新增用印失败")
|
|
|
return
|
|
|
}
|
|
|
+ if len(fileUrls) > 1 {
|
|
|
+ for _, v := range fileUrls {
|
|
|
+ tmp := &seal.Attachment{
|
|
|
+ SealId: sealInfo.SealId,
|
|
|
+ FileUrl: v,
|
|
|
+ ModifyTime: now,
|
|
|
+ CreateTime: now,
|
|
|
+ }
|
|
|
+ attachments = append(attachments, tmp)
|
|
|
+ }
|
|
|
+ err = seal.AddAttachments(attachments)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("添加用印附件失败")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// 操作日志
|
|
|
err = seal.AddSealOperationRecord(sealInfo.SealId, userId, 0, "apply", userName, "提交审批", "")
|
|
@@ -68,7 +104,19 @@ func AddSeal(userId, contractId, fileNum int, userName, use, useCompanyName, com
|
|
|
}
|
|
|
|
|
|
// Edit 修改用印
|
|
|
-func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompanyName, creditCode, serviceType, sealType, remark, fileUrl, userName string) (sealInfo *seal.Seal, err error) {
|
|
|
+func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompanyName, creditCode, serviceType, sealType, remark string, fileUrls []string, userName string) (sealInfo *seal.Seal, err error) {
|
|
|
+ o := orm.NewOrm()
|
|
|
+ to, err := o.Begin()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ _ = to.Rollback()
|
|
|
+ } else {
|
|
|
+ _ = to.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
|
|
|
err = errors.New("用印用途异常")
|
|
|
return
|
|
@@ -96,6 +144,12 @@ func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompany
|
|
|
return
|
|
|
}
|
|
|
//sealId,userId int, userName, use, companyName, creditCode, serviceType, sealType, remark, fileUrl string
|
|
|
+ fileUrl := ""
|
|
|
+ now := time.Now()
|
|
|
+ attachments := make([]*seal.Attachment,0)
|
|
|
+ if len(fileUrls) == 1 {
|
|
|
+ fileUrl = fileUrls[0]
|
|
|
+ }
|
|
|
sealInfo.Use = use
|
|
|
sealInfo.CompanyName = companyName
|
|
|
sealInfo.UseCompanyName = userCompanyName
|
|
@@ -106,8 +160,8 @@ func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompany
|
|
|
sealInfo.FileUrl = fileUrl
|
|
|
sealInfo.FileNum = fileNum
|
|
|
sealInfo.ContractId = contractId
|
|
|
- sealInfo.CreateTime = time.Now() // 重提更新提交时间
|
|
|
- sealInfo.ModifyTime = time.Now()
|
|
|
+ sealInfo.CreateTime = now // 重提更新提交时间
|
|
|
+ sealInfo.ModifyTime = now
|
|
|
sealInfo.Status = "待提交" //用印状态
|
|
|
|
|
|
err = sealInfo.Update([]string{"Use", "CompanyName", "UseCompanyName", "CreditCode", "ServiceType", "SealType", "Remark", "FileUrl", "FileNum", "ContractId", "CreateTime", "ModifyTime", "Status"})
|
|
@@ -115,7 +169,22 @@ func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompany
|
|
|
err = errors.New("新增用印日志失败")
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
+ if len(fileUrls) > 1 {
|
|
|
+ for _, v := range fileUrls {
|
|
|
+ tmp := &seal.Attachment{
|
|
|
+ SealId: sealInfo.SealId,
|
|
|
+ FileUrl: v,
|
|
|
+ ModifyTime: now,
|
|
|
+ CreateTime: now,
|
|
|
+ }
|
|
|
+ attachments = append(attachments, tmp)
|
|
|
+ }
|
|
|
+ err = seal.AddAttachments(attachments)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("添加用印附件失败")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
// 操作日志
|
|
|
err = seal.AddSealOperationRecord(sealInfo.SealId, userId, 0, "edit", userName, "重提审批", "")
|
|
|
if err != nil {
|
|
@@ -127,7 +196,7 @@ func Edit(sealId, userId, contractId, fileNum int, use, companyName, userCompany
|
|
|
}
|
|
|
|
|
|
// 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) {
|
|
|
+func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractApproval, approvalRecord *contract_approval_record.ContractApprovalRecord, fileNum int, fileUrls []string, use, sealType, remark string, opUser *custom.AdminWx) (err error) {
|
|
|
if !strings.Contains(strings.Join(seal.EnumUse, ","), use) {
|
|
|
err = errors.New("用印用途异常")
|
|
|
return
|
|
@@ -164,9 +233,26 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
|
|
|
updateCol = append(updateCol, "FileNum")
|
|
|
updateContent = append(updateContent, "文件份数")
|
|
|
}
|
|
|
- if sealInfo.FileUrl != fileUrl {
|
|
|
+ //判断附件地址是否相等:
|
|
|
+ sealAttachements, err := seal.GetAttachmentBySealId(sealInfo.SealId)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New(fmt.Sprint("获取用印附件失败,Err:"+err.Error(), err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ oldFileUrls := make([]string, 0)
|
|
|
+ if sealInfo.FileUrl != "" {
|
|
|
+ oldFileUrls = append(oldFileUrls, sealInfo.FileUrl)
|
|
|
+ }
|
|
|
+ if len(sealAttachements) > 0 {
|
|
|
+ for _, v := range sealAttachements{
|
|
|
+ oldFileUrls = append(oldFileUrls, v.FileUrl)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ attachmentFlag := false
|
|
|
+ if !reflect.DeepEqual(oldFileUrls, fileUrls) {
|
|
|
updateCol = append(updateCol, "FileUrl")
|
|
|
updateContent = append(updateContent, "文件附件")
|
|
|
+ attachmentFlag = true
|
|
|
}
|
|
|
fmt.Println(updateCol)
|
|
|
|
|
@@ -180,6 +266,10 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
|
|
|
originFlowType := GetFlowTypeBySealType(sealInfo.SealType)
|
|
|
reqFlowType := GetFlowTypeBySealType(sealType)
|
|
|
|
|
|
+ newFileUrl := ""
|
|
|
+ if len(fileUrls) == 1 {
|
|
|
+ newFileUrl = fileUrls[0]
|
|
|
+ }
|
|
|
//如果变更了盖章类型(涉及到审批流程变更),那么需要变更审批流
|
|
|
//变更审批流:先驳回用印申请,再修改用印,再发消息给申请人,再替申请人重新发起申请,
|
|
|
//然后遍历审批流程,当前操作人节点之前的全部审核通过,最后通过当前操作人的节点(改成如果一级审批人如果是自己,那么直接通过这一级审批,否则不通过,让审批单重走流程)
|
|
@@ -194,9 +284,9 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
|
|
|
sealInfo.SealType = sealType
|
|
|
sealInfo.Remark = remark
|
|
|
sealInfo.FileNum = fileNum
|
|
|
- sealInfo.FileUrl = fileUrl
|
|
|
+ sealInfo.FileUrl = newFileUrl
|
|
|
sealInfo.ModifyTime = time.Now()
|
|
|
- checkEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, opUser)
|
|
|
+ checkEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, opUser, attachmentFlag, fileUrls)
|
|
|
|
|
|
//重新获取最新的用印单
|
|
|
sealInfo, tmpErr := seal.GetSealInfoById(sealInfo.SealId)
|
|
@@ -217,9 +307,9 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
|
|
|
sealInfo.SealType = sealType
|
|
|
sealInfo.Remark = remark
|
|
|
sealInfo.FileNum = fileNum
|
|
|
- sealInfo.FileUrl = fileUrl
|
|
|
+ sealInfo.FileUrl = newFileUrl
|
|
|
sealInfo.ModifyTime = time.Now()
|
|
|
- checkEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, opUser)
|
|
|
+ checkEdit(sealInfo, updateCol, approvalRecord.ContractApprovalRecordId, content, opUser, attachmentFlag, fileUrls)
|
|
|
|
|
|
//审核通过
|
|
|
err = Approved(sealInfo, approvalInfo, approvalRecord, opUser, "")
|
|
@@ -230,8 +320,13 @@ func CheckEdit(sealInfo *seal.Seal, approvalInfo *contract_approval.ContractAppr
|
|
|
}
|
|
|
|
|
|
// checkEdit 审批人修改
|
|
|
-func checkEdit(sealInfo *seal.Seal, updateCol []string, approvalRecordId int, content string, opUser *custom.AdminWx) {
|
|
|
- _ = sealInfo.Update(updateCol)
|
|
|
+func checkEdit(sealInfo *seal.Seal, updateCol []string, approvalRecordId int, content string, opUser *custom.AdminWx, attachmentFlag bool, fileUrls []string) {
|
|
|
+ if attachmentFlag {
|
|
|
+ // 同时更新用印申请和附件
|
|
|
+ _ = updateSealAndAttachment(sealInfo, updateCol, fileUrls)
|
|
|
+ }else{
|
|
|
+ _ = sealInfo.Update(updateCol)
|
|
|
+ }
|
|
|
|
|
|
// 操作日志
|
|
|
_ = seal.AddSealOperationRecord(sealInfo.SealId, opUser.AdminId, approvalRecordId, "edit", opUser.RealName, "审批人修改信息", "")
|
|
@@ -364,7 +459,7 @@ func UploadCheckBackFileByFile(sealId int, ext string, fileMulti multipart.File,
|
|
|
err = errors.New("文件保存失败,Err:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
+ oldStatus := sealInfo.Status
|
|
|
sealInfo.CheckBackFileUrl = resourceUrl
|
|
|
sealInfo.Status = "已签回"
|
|
|
sealInfo.ModifyTime = time.Now()
|
|
@@ -373,6 +468,16 @@ func UploadCheckBackFileByFile(sealId int, ext string, fileMulti multipart.File,
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+ // TODO 发送模版消息
|
|
|
+ if oldStatus == "已审批" {
|
|
|
+ sellerInfo, tErr := admin.GetAdminById(sealInfo.UserId)
|
|
|
+ if tErr == nil {
|
|
|
+ if sellerInfo.Mobile != "" {
|
|
|
+ go services.SendSealFinishedWxTemplateMsg(sellerInfo.Mobile, sealInfo.CompanyName, sealInfo.SealId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -389,6 +494,7 @@ func UploadCheckBackFile(sealId int, fileUrl string, opUser *custom.AdminWx) (se
|
|
|
err = errors.New("用印状态异常,不允许上传签回用印附件,当前用印状态:" + sealInfo.Status)
|
|
|
return
|
|
|
}
|
|
|
+ oldStatus := sealInfo.Status
|
|
|
sealInfo.CheckBackFileUrl = fileUrl
|
|
|
sealInfo.Status = "已签回"
|
|
|
sealInfo.ModifyTime = time.Now()
|
|
@@ -397,6 +503,15 @@ func UploadCheckBackFile(sealId int, fileUrl string, opUser *custom.AdminWx) (se
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
+ // TODO 发送模版消息
|
|
|
+ if oldStatus == "已审批" {
|
|
|
+ sellerInfo, tErr := admin.GetAdminById(sealInfo.UserId)
|
|
|
+ if tErr == nil {
|
|
|
+ if sellerInfo.Mobile != "" {
|
|
|
+ go services.SendSealFinishedWxTemplateMsg(sellerInfo.Mobile, sealInfo.CompanyName, sealInfo.SealId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -479,13 +594,28 @@ func GetOpButton(sealInfo *seal.Seal, contractApprovalInfo *contract_approval.Co
|
|
|
}
|
|
|
|
|
|
//根据用印id获取用印详情
|
|
|
-func GetSealDetailBySealId(sealId int, opUser *custom.AdminWx) (sealInfo *seal.Seal, flowNodeListResp [][]contract_approval_record.ContractApprovalRecord, opButton sealResp.OpButton, err error) {
|
|
|
- sealInfo, err = seal.GetSealInfoById(sealId)
|
|
|
+func GetSealDetailBySealId(sealId int, opUser *custom.AdminWx) (sealMore *sealResp.SealMoreResp, flowNodeListResp [][]contract_approval_record.ContractApprovalRecord, opButton sealResp.OpButton, err error) {
|
|
|
+ sealInfo, err := seal.GetSealInfoById(sealId)
|
|
|
if err != nil {
|
|
|
err = errors.New("获取合同详情失败,ERR:" + err.Error())
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
+ sealAttachements, err := seal.GetAttachmentBySealId(sealId)
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New(fmt.Sprint("获取用印附件失败,Err:"+err.Error(), err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fileUrls := make([]string, 0)
|
|
|
+ if sealInfo.FileUrl != "" {
|
|
|
+ fileUrls = append(fileUrls, sealInfo.FileUrl)
|
|
|
+ }
|
|
|
+ for _, v := range sealAttachements{
|
|
|
+ fileUrls = append(fileUrls, v.FileUrl)
|
|
|
+ }
|
|
|
+ sealMore = &sealResp.SealMoreResp{
|
|
|
+ Seal: sealInfo,
|
|
|
+ FileUrls: fileUrls,
|
|
|
+ }
|
|
|
//查询最近一次审批单信息
|
|
|
lastApprovalInfo, err := contract_approval.GetLastContractApprovalByContractId(sealInfo.SealId, "seal")
|
|
|
if err != nil {
|
|
@@ -507,3 +637,43 @@ func GetSealDetailBySealId(sealId int, opUser *custom.AdminWx) (sealInfo *seal.S
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// updateSealAndAttachment 更新用印申请,并更新附件
|
|
|
+func updateSealAndAttachment(sealInfo *seal.Seal, updateCol []string, fileUrls []string) (err error){
|
|
|
+ o := orm.NewOrm()
|
|
|
+ to, err := o.Begin()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ _ = to.Rollback()
|
|
|
+ } else {
|
|
|
+ _ = to.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ err = sealInfo.Update(updateCol)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ now := time.Now()
|
|
|
+ //删除原有的附件,新增最新的附件
|
|
|
+ err = seal.DelAttachmentBySealId(sealInfo.SealId)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ attachments := make([]*seal.Attachment, 0)
|
|
|
+ if len(fileUrls) > 1 {
|
|
|
+ for _, v := range fileUrls {
|
|
|
+ tmp := &seal.Attachment{
|
|
|
+ SealId: sealInfo.SealId,
|
|
|
+ FileUrl: v,
|
|
|
+ ModifyTime: now,
|
|
|
+ CreateTime: now,
|
|
|
+ }
|
|
|
+ attachments = append(attachments, tmp)
|
|
|
+ }
|
|
|
+ err = seal.AddAttachments(attachments)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|