浏览代码

fix:用印新增签回附件功能,如果是系统合同,那么需要更新系统合同中的附件;
合同在签回附件的时候,可以同步去更新对应的用印申请里面的附件信息(用印申请得是已审批或者已签回状态)

Roc 3 年之前
父节点
当前提交
e405c4eab5

+ 29 - 1
controllers/seal.go

@@ -155,7 +155,7 @@ func (c *SealCommon) CheckEdit() {
 // List
 // @Title 用印列表
 // @Description 用印列表接口
-// @Param   Status   query   string  false       "合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废'"
+// @Param   Status   query   string  false       "合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废','已签回'"
 // @Param   ProductId   query   int  false       "客户类型:传0或者不传为当前账号权限,1 代表是:ficc;2 代表是:权益"
 // @Param   ModifyStartTime   query   string  false       "服务更新时间的选择开始时间,格式:2021-05-23 00:00:00"
 // @Param   ModifyEndTime   query   string  false       "服务更新时间的选择结束时间,格式:2021-05-26 23:59:59"
@@ -309,6 +309,34 @@ func (c *SealCommon) Invalid() {
 	return
 }
 
+// UploadCheckBackFile
+// @Title 上传签回附件
+// @Description 上传签回附件接口
+// @Param	request	body seal.UploadCheckBackFileReq true "type json string"
+// @Success Ret=200 上传成功
+// @router /upload_check_back_file [post]
+func (c *SealCommon) UploadCheckBackFile() {
+	var req sealReq.UploadCheckBackFileReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
+		return
+	}
+	//用印编号
+	if req.SealId <= 0 {
+		c.FailWithMessage("请传入用印编号!", "请传入用印编号")
+		return
+	}
+
+	if req.FileUrl == "" {
+		c.FailWithMessage("请先上传附件!", "请先上传附件")
+		return
+	}
+	err = sealService.UploadCheckBackFile(req.SealId, req.FileUrl, c.AdminWx)
+
+	c.OkWithMessage("上传成功")
+}
+
 //CompanyList
 // @Title 根据客户名称获取已存在系统中客户名称列表
 // @Description 获取合同详情接口

+ 1 - 1
controllers/seal_approval.go

@@ -25,7 +25,7 @@ type SealApprovalCommon struct {
 // @Param   Use   query   string  false       "用途,枚举值:销售合同, 渠道合同, 付款通知函, 招投标, 战略合作协议"
 // @Param   ServiceType   query   string  false       "业务类型,枚举值:"新签合同, 续约合同, 补充协议"
 // @Param   SealType   query   string  false       "公章类型,枚举值:合同章, 公章, 法人章"
-// @Param   Status   query   string  false       "合同状态,枚举值:'待审批','已审批','已驳回','已撤回'"
+// @Param   Status   query   string  false       "合同状态,枚举值:'待审批','已审批','已驳回','已撤回','已签回'"
 // @Param   UserId   query   string  false       "选择的申请人id"
 // @Param   Keyword   query   string  false       "搜索关键字"
 // @Param   KeywordEq   query   string  false       "搜索关键字(全等)"

+ 7 - 1
models/request/seal/sale.go

@@ -39,8 +39,14 @@ type CheckEditReq struct {
 	FileNum  int    `description:"文件份数"`
 }
 
-//作废用印请求
+// InvalidReq 作废用印请求
 type InvalidReq struct {
 	SealId            int  `description:"用印id"`
 	IsInvalidContract bool `description:"是否同步作废合同,默认:false"`
 }
+
+// UploadCheckBackFileReq 上传签回用印请求
+type UploadCheckBackFileReq struct {
+	FileUrl string `description:"签回用印url"`
+	SealId  int    `description:"用印id"`
+}

+ 6 - 5
models/response/seal/seal.go

@@ -27,11 +27,12 @@ type SealDetailResp struct {
 
 //OpButton 合同操作按钮
 type OpButton struct {
-	Approval  bool `description:"是否有审批权限"`
-	Invalid   bool `description:"是否有作废用印权限"`
-	Edit      bool `description:"是否有编辑用印权限"`
-	CheckEdit bool `description:"审核状态下是否有编辑用印权限"`
-	Cancel    bool `description:"是否有撤回用印权限"`
+	Approval   bool `description:"是否有审批权限"`
+	Invalid    bool `description:"是否有作废用印权限"`
+	Edit       bool `description:"是否有编辑用印权限"`
+	CheckEdit  bool `description:"审核状态下是否有编辑用印权限"`
+	Cancel     bool `description:"是否有撤回用印权限"`
+	UploadFile bool `description:"是否有上传签回文件权限"`
 }
 
 //RespSealList 列表数据

+ 32 - 22
models/tables/seal/seal.go

@@ -9,30 +9,32 @@ import (
 
 //Seal 用印结构体
 type Seal struct {
-	SealId         int       `orm:"column(seal_id);pk"`
-	Code           string    `description:"用印编号,长度32位"`
-	UserId         int       `description:"申请人id"`
-	UserName       string    `description:"申请人名称"`
-	Use            string    `description:"用印用途,枚举值:'销售合同', '渠道合同', '付款通知函', '招投标', '战略合作协议';默认:销售合同"`
-	CompanyName    string    `description:"客户名称,甲方名称,长度32位"`
-	UseCompanyName string    `description:"实际使用方客户名称,长度32位"`
-	CreditCode     string    `description:"社会统一信用代码,长度64位"`
-	ServiceType    string    `description:"业务类型,枚举值:'新签合同','续约合同','补充协议';默认:新签合同"`
-	SealType       string    `description:"加盖印章类型,枚举值:'合同章', '公章', '法人章';默认:合同章"`
-	Status         string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废'"`
-	Remark         string    `description:"补充内容,长度255位"`
-	ApprovalRemark string    `description:"审核备注"`
-	FileUrl        string    `description:"文件附件地址"`
-	FileNum        int       `description:"文件附件份数"`
-	ContractId     int       `description:"系统合同id"`
-	IsDelete       int       `json:"-" description:"是否已经删除,0:未删除,1:已删除"`
-	ApproveTime    time.Time `description:"审批时间"`
-	InvalidTime    time.Time `description:"作废时间"`
-	ModifyTime     time.Time `description:"最近一次修改时间"`
-	CreateTime     time.Time `description:"添加时间"`
+	SealId            int       `orm:"column(seal_id);pk"`
+	Code              string    `description:"用印编号,长度32位"`
+	UserId            int       `description:"申请人id"`
+	UserName          string    `description:"申请人名称"`
+	Use               string    `description:"用印用途,枚举值:'销售合同', '渠道合同', '付款通知函', '招投标', '战略合作协议';默认:销售合同"`
+	CompanyName       string    `description:"客户名称,甲方名称,长度32位"`
+	UseCompanyName    string    `description:"实际使用方客户名称,长度32位"`
+	CreditCode        string    `description:"社会统一信用代码,长度64位"`
+	ServiceType       string    `description:"业务类型,枚举值:'新签合同','续约合同','补充协议';默认:新签合同"`
+	SealType          string    `description:"加盖印章类型,枚举值:'合同章', '公章', '法人章';默认:合同章"`
+	Status            string    `description:"合同状态,枚举值:'待提交','待审批','已撤回','已审批','已驳回','已作废','已签回'"`
+	Remark            string    `description:"补充内容,长度255位"`
+	ApprovalRemark    string    `description:"审核备注"`
+	FileUrl           string    `description:"文件附件地址"`
+	CheckBackFileUrl  string    `description:"已签回的文件地址"`
+	FileNum           int       `description:"文件附件份数"`
+	ContractId        int       `description:"系统合同id"`
+	IsDelete          int       `json:"-" description:"是否已经删除,0:未删除,1:已删除"`
+	ApproveTime       time.Time `description:"审批时间"`
+	InvalidTime       time.Time `description:"作废时间"`
+	ModifyTime        time.Time `description:"最近一次修改时间"`
+	CreateTime        time.Time `description:"添加时间"`
+	CheckBackFileTime time.Time `description:"签回用印附件时间"`
 }
 
-//GetSealInfoById 根据合同id获取合同信息
+//GetSealInfoById 根据用印id获取合同信息
 func GetSealInfoById(sealId int) (sealInfo *Seal, err error) {
 	o := orm.NewOrm()
 	sql := `select * from seal where seal_id = ? `
@@ -40,6 +42,14 @@ func GetSealInfoById(sealId int) (sealInfo *Seal, err error) {
 	return
 }
 
+//GetSealInfoByContractId 根据合同id获取合同信息
+func GetSealInfoByContractId(sealId int) (sealInfo *Seal, err error) {
+	o := orm.NewOrm()
+	sql := `select * from seal where contract_id = ? and status in ("已审批","已签回") order by seal_id asc limit 1`
+	err = o.Raw(sql, sealId).QueryRow(&sealInfo)
+	return
+}
+
 //AddSeal 用印添加
 func AddSeal(sealInfo *Seal) (err error) {
 	o := orm.NewOrm()

+ 24 - 0
services/contract/contract.go

@@ -14,6 +14,7 @@ import (
 	"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/services/seal"
 	"hongze/hongze_mobile_admin/utils"
 	"rdluck_tools/orm"
 	"reflect"
@@ -89,6 +90,29 @@ func GetContractDetail(contractId int) (contractDetail *contract.ContractDetail,
 func UploadCheckBackFile(contractId int, fileUrl string, opUser *custom.AdminWx) (err error) {
 	//获取合同信息
 	contractInfo, err := contract.GetContractById(contractId)
+	if err != nil {
+		return
+	}
+	err = uploadCheckBackFile(contractInfo, fileUrl, opUser)
+
+	//更新用印中的签回合同
+	_ = seal.UploadCheckBackFileByContract(contractId, fileUrl, opUser)
+	return
+}
+
+// UploadCheckBackFileBySeal 通过更新用印签回附件来更新合同签回合同附件
+func UploadCheckBackFileBySeal(contractId int, fileUrl string, opUser *custom.AdminWx) (err error) {
+	//获取合同信息
+	contractInfo, err := contract.GetContractById(contractId)
+	if err != nil {
+		return
+	}
+	err = uploadCheckBackFile(contractInfo, fileUrl, opUser)
+	return
+}
+
+// uploadCheckBackFile 更新上传签回合同附件
+func uploadCheckBackFile(contractInfo *contract.Contract, fileUrl string, opUser *custom.AdminWx) (err error) {
 	if err != nil {
 		return
 	}

+ 54 - 4
services/seal/seal.go

@@ -3,7 +3,6 @@ package seal
 import (
 	"errors"
 	"fmt"
-	"github.com/astaxie/beego/logs"
 	"hongze/hongze_mobile_admin/models/custom"
 	sealResp "hongze/hongze_mobile_admin/models/response/seal"
 	"hongze/hongze_mobile_admin/models/tables/admin"
@@ -236,7 +235,7 @@ func checkEdit(sealInfo *seal.Seal, updateCol []string, approvalRecordId int, co
 
 //作废用印
 func Invalid(sealId int, opUser *custom.AdminWx, isInvalidContract bool) (err error) {
-	//查询当前合同信息
+	//查询当前用印信息
 	sealInfo, err := seal.GetSealInfoById(sealId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
@@ -269,7 +268,7 @@ func Invalid(sealId int, opUser *custom.AdminWx, isInvalidContract bool) (err er
 	if sealInfo.ContractId > 0 && isInvalidContract {
 		err = contractService.InvalidContract(sealInfo.ContractId, opUser)
 		if err != nil {
-			logs.Info("作废用印时,同步作废合同失败,Err:", err.Error())
+			utils.ApiLog.Println("作废用印时,同步作废合同失败,Err:", err.Error())
 		}
 	}
 	//添加操作日志
@@ -278,7 +277,52 @@ func Invalid(sealId int, opUser *custom.AdminWx, isInvalidContract bool) (err er
 	return
 }
 
-//获取审批流和权限
+// UploadCheckBackFile 上传签回用印附件
+func UploadCheckBackFile(sealId int, fileUrl string, opUser *custom.AdminWx) (err error) {
+	//查询当前用印信息
+	sealInfo, err := seal.GetSealInfoById(sealId)
+	if err != nil {
+		return
+	}
+	err = uploadCheckBackFile(sealInfo, fileUrl, opUser)
+
+	//如果是系统合同,那么需要去更新系统的签回附件
+	if sealInfo.ContractId > 0 {
+		_ = contractService.UploadCheckBackFileBySeal(sealInfo.ContractId, fileUrl, opUser)
+	}
+	return
+}
+
+// UploadCheckBackFile 上传签回用印附件
+func UploadCheckBackFileByContract(contractId int, fileUrl string, opUser *custom.AdminWx) (err error) {
+	//查询当前用印信息
+	sealInfo, err := seal.GetSealInfoByContractId(contractId)
+	if err != nil {
+		return
+	}
+	err = uploadCheckBackFile(sealInfo, fileUrl, opUser)
+	return
+}
+
+// uploadCheckBackFile 上传签回用印附件(实际操作)
+func uploadCheckBackFile(sealInfo *seal.Seal, fileUrl string, opUser *custom.AdminWx) (err error) {
+	//用印状态判断
+	if sealInfo.Status != "已审批" && sealInfo.Status != "已签回" {
+		err = errors.New("用印状态异常,不允许上传签回用印附件,当前用印状态:" + sealInfo.Status)
+		return
+	}
+	sealInfo.CheckBackFileUrl = fileUrl
+	sealInfo.Status = "已签回"
+	sealInfo.ModifyTime = time.Now()
+	sealInfo.CheckBackFileTime = time.Now()
+	err = sealInfo.Update([]string{"CheckBackFileUrl", "Status", "ModifyTime", "CheckBackFileTime"})
+	if err != nil {
+		return
+	}
+	return
+}
+
+// GetOpButton 获取审批流和权限
 func GetOpButton(sealInfo *seal.Seal, contractApprovalInfo *contract_approval.ContractApproval, opUser *custom.AdminWx) (sealOpButton sealResp.OpButton, flowNodeListResp [][]contract_approval_record.ContractApprovalRecord, err error) {
 	//审批流
 	approvalRecordList, err := contract_approval_record.GetContractApprovalRecordListByContractApprovalId(contractApprovalInfo.ContractApprovalId)
@@ -341,6 +385,12 @@ func GetOpButton(sealInfo *seal.Seal, contractApprovalInfo *contract_approval.Co
 		sealOpButton.Invalid = true
 	}
 
+	//是否具有签回合同用印权限
+	uploadStatus := []string{"已审批", "已签回"}
+	if opUser.RoleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE && strings.Contains(strings.Join(uploadStatus, ","), sealInfo.Status) {
+		sealOpButton.UploadFile = true
+	}
+
 	//编辑权限
 	editStatus := []string{"已驳回", "待提交", "已撤回"}
 	if opUser.AdminId == sealInfo.UserId && strings.Contains(strings.Join(editStatus, ","), sealInfo.Status) {