فهرست منبع

fix:
1、调整合同签回文件以及用印签回文件的文件名
2、合同详情,只展示小套餐的权限,大套餐以及权益的权限就不一一列出了

Roc 3 سال پیش
والد
کامیت
d86d11c1cf
5فایلهای تغییر یافته به همراه243 افزوده شده و 24 حذف شده
  1. 34 10
      controllers/contract.go
  2. 37 12
      controllers/seal.go
  3. 59 2
      services/contract/contract.go
  4. 62 0
      services/file.go
  5. 51 0
      services/seal/seal.go

+ 34 - 10
controllers/contract.go

@@ -9,7 +9,9 @@ import (
 	contractService "hongze/hongze_mobile_admin/services/contract"
 	"hongze/hongze_mobile_admin/services/seal"
 	"hongze/hongze_mobile_admin/utils"
+	"path"
 	"rdluck_tools/paging"
+	"strconv"
 	"strings"
 )
 
@@ -24,26 +26,48 @@ type ContractCommon struct {
 // @Success Ret=200 上传成功
 // @router /upload_check_back_file [post]
 func (c *ContractCommon) UploadCheckBackFile() {
-	var req contractReq.UploadCheckBackFileReq
-	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	//var req contractReq.UploadCheckBackFileReq
+	//err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	//if err != nil {
+	//	c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
+	//	return
+	//}
+	////合同编号
+	//if req.ContractId <= 0 {
+	//	c.FailWithMessage("请传入合同编号!", "请传入合同编号")
+	//	return
+	//}
+	//
+	//if req.FileUrl == "" {
+	//	c.FailWithMessage("请先上传附件!", "请先上传附件")
+	//	return
+	//}
+	contractIdStr := c.Ctx.Request.Form.Get("ContractId")
+	if contractIdStr == "" {
+		c.FailWithMessage("合同ID必传!", "合同ID必传")
+		return
+	}
+	contractId, err := strconv.Atoi(contractIdStr)
 	if err != nil {
-		c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
+		c.FailWithMessage("合同ID异常!", "合同ID必传")
 		return
 	}
 	//合同编号
-	if req.ContractId <= 0 {
-		c.FailWithMessage("请传入合同编号!", "请传入合同编号")
+	if contractId <= 0 {
+		c.FailWithMessage("请传入合同编号", "请传入合同编号")
 		return
 	}
-
-	if req.FileUrl == "" {
-		c.FailWithMessage("请先上传附件!", "请先上传附件")
+	fileMulti, h, err := c.GetFile("file")
+	if err != nil {
+		c.FailWithMessage("获取资源信息失败", "获取资源信息失败,Err:"+err.Error())
 		return
 	}
-	err = contractService.UploadCheckBackFile(req.ContractId, req.FileUrl, c.AdminWx)
+	ext := path.Ext(h.Filename)
+	//err = contractService.UploadCheckBackFile(contractId, req.FileUrl, c.AdminWx)
+	resourceUrl, err := contractService.UploadCheckBackFileByFile(contractId, ext, fileMulti, c.AdminWx)
 
 	//更新用印中的签回合同
-	_, _ = seal.UploadCheckBackFile(req.ContractId, req.FileUrl, c.AdminWx)
+	_, _ = seal.UploadCheckBackFile(contractId, resourceUrl, c.AdminWx)
 
 	c.OkWithMessage("上传成功")
 }

+ 37 - 12
controllers/seal.go

@@ -8,7 +8,9 @@ import (
 	contractService "hongze/hongze_mobile_admin/services/contract"
 	sealService "hongze/hongze_mobile_admin/services/seal"
 	"hongze/hongze_mobile_admin/utils"
+	"path"
 	"rdluck_tools/paging"
+	"strconv"
 )
 
 //SealCommon
@@ -317,30 +319,53 @@ func (c *SealCommon) Invalid() {
 // @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)
+	//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
+	//}
+	sealIdStr := c.Ctx.Request.Form.Get("SealId")
+	if sealIdStr == "" {
+		c.FailWithMessage("用印ID必传!", "用印ID必传")
+		return
+	}
+	sealId, err := strconv.Atoi(sealIdStr)
 	if err != nil {
-		c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
+		c.FailWithMessage("用印ID异常!", "用印ID必传")
 		return
 	}
-	//用印编号
-	if req.SealId <= 0 {
-		c.FailWithMessage("请传入用印编号!", "请传入用印编号")
+	//合同编号
+	if sealId <= 0 {
+		c.FailWithMessage("请传入用印编号", "请传入用印编号")
 		return
 	}
-
-	if req.FileUrl == "" {
-		c.FailWithMessage("请先上传附件!", "请先上传附件")
+	fileMulti, h, err := c.GetFile("file")
+	if err != nil {
+		c.FailWithMessage("获取资源信息失败", "获取资源信息失败,Err:"+err.Error())
 		return
 	}
-	sealInfo, err := sealService.UploadCheckBackFile(req.SealId, req.FileUrl, c.AdminWx)
+	ext := path.Ext(h.Filename)
+
+	//sealInfo, err := sealService.UploadCheckBackFile(req.SealId, req.FileUrl, c.AdminWx)
+	sealInfo, err := sealService.UploadCheckBackFileByFile(sealId, ext, fileMulti, c.AdminWx)
 	if err != nil {
-		c.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
+		c.FailWithMessage("更新签回附件失败!", "更新签回附件失败,Err:"+err.Error())
 		return
 	}
 	//如果是系统合同,那么需要去更新系统的签回附件
 	if sealInfo.ContractId > 0 {
-		_ = contractService.UploadCheckBackFile(sealInfo.ContractId, req.FileUrl, c.AdminWx)
+		_ = contractService.UploadCheckBackFile(sealInfo.ContractId, sealInfo.CheckBackFileUrl, c.AdminWx)
 	}
 	c.OkWithMessage("上传成功")
 }

+ 59 - 2
services/contract/contract.go

@@ -15,7 +15,9 @@ import (
 	"hongze/hongze_mobile_admin/models/tables/contract_operation_record"
 	"hongze/hongze_mobile_admin/models/tables/contract_relation"
 	"hongze/hongze_mobile_admin/models/tables/contract_service_detail"
+	"hongze/hongze_mobile_admin/services"
 	"hongze/hongze_mobile_admin/utils"
+	"mime/multipart"
 	"rdluck_tools/orm"
 	"reflect"
 	"strings"
@@ -135,6 +137,53 @@ func getContractDetail(contractId int) (contractDetail *contract.ContractDetail,
 	return
 }
 
+// UploadCheckBackFileByFile 上传签回合同附件
+func UploadCheckBackFileByFile(contractId int, ext string, fileMulti multipart.File, opUser *custom.AdminWx) (resourceUrl string, err error) {
+	//获取合同信息
+	contractInfo, err := contract.GetContractById(contractId)
+	if err != nil {
+		return
+	}
+	//合同状态判断
+	if contractInfo.Status != "已审批" && contractInfo.Status != "已签回" {
+		err = errors.New("合同状态异常,不允许上传签回合同附件,当前合同状态:" + contractInfo.Status)
+		return
+	}
+
+	//保存的文件名
+	fileName := contractInfo.CompanyName + "_" + contractInfo.ContractCode + "(签回)"
+	//非正式环境下,文件名上面还是加上随机数
+	if utils.RunMode != "release" {
+		fileName += "_" + utils.GetRandStringNoSpecialChar(10)
+	}
+	fileName += ext
+	//上传到阿里云
+	resourceUrl, err = services.UploadToOssAndFileName(fileMulti, fileName)
+	if err != nil {
+		err = errors.New("文件保存失败,Err:" + err.Error())
+		return
+	}
+
+	contractInfo.CheckBackFileUrl = resourceUrl
+	contractInfo.Status = "已签回"
+	contractInfo.ModifyTime = time.Now()
+	contractInfo.CheckBackFileTime = time.Now()
+	err = contractInfo.Update([]string{"CheckBackFileUrl", "Status", "ModifyTime", "CheckBackFileTime"})
+	if err != nil {
+		return
+	}
+
+	//同步更新客户那边提交审批的合同
+	o := orm.NewOrm()
+	sql := `update company_contract set img_url = ?  where contract_code=? and source="系统合同" `
+	_, err = o.Raw(sql, contractInfo.CheckBackFileUrl, contractInfo.ContractCode).Exec()
+
+	//添加操作日志
+	remark := "上传签回合同附件"
+	_ = contract_operation_record.AddContractOperationRecord(contractInfo.ContractId, opUser.AdminId, 0, "upload", opUser.RealName, remark)
+	return
+}
+
 // UploadCheckBackFile 更新上传签回合同附件
 func UploadCheckBackFile(contractId int, fileUrl string, opUser *custom.AdminWx) (err error) {
 	//获取合同信息
@@ -225,8 +274,16 @@ func GetContractDetailByContractId(contractId int, opUser *custom.AdminWx) (cont
 	contractInfo.CreateTimeStr = contractInfo.CreateTime.Format(utils.FormatDateTime)
 
 	//合同中包含的产品权限
-	permissionLookList, _ := GetPermissionByContractService(contractInfo.ProductId, contractInfo.Service)
-	contractInfo.PermissionLookList = permissionLookList
+	isNeedPermission := false //是否需要列出来套餐中的详细权限
+	for _, service := range contractInfo.Service {
+		if service.ServiceTemplateId == 2 { //小套餐才需要列出来详细的权限
+			isNeedPermission = true
+		}
+	}
+	if isNeedPermission {
+		permissionLookList, _ := GetPermissionByContractService(contractInfo.ProductId, contractInfo.Service)
+		contractInfo.PermissionLookList = permissionLookList
+	}
 
 	//查询最近一次审批单信息
 	lastApprovalInfo, err := contract_approval.GetLastContractApprovalByContractId(contractInfo.ContractId, "contract")

+ 62 - 0
services/file.go

@@ -0,0 +1,62 @@
+package services
+
+import (
+	"errors"
+	"hongze/hongze_mobile_admin/models/tables/resource"
+	"hongze/hongze_mobile_admin/utils"
+	"io"
+	"mime/multipart"
+	"os"
+	"time"
+)
+
+// UploadToOssAndFileName 上传到oss并使用这个名称
+func UploadToOssAndFileName(fileMulti multipart.File, newFileName string) (resourceUrl string, err error) {
+	dateDir := time.Now().Format("20060102")
+	uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
+	err = os.MkdirAll(uploadDir, 766)
+	if err != nil {
+		err = errors.New("存储目录创建失败,Err:" + err.Error())
+		return
+	}
+
+	//本地地址
+	fpath := uploadDir + "/" + newFileName
+	err = saveToFile(fileMulti, fpath)
+	if err != nil {
+		err = errors.New("文件上传失败,Err:" + err.Error())
+		return
+	}
+	//上传到阿里云
+	resourceUrl, err = UploadAliyun(newFileName, fpath)
+	if err != nil {
+		err = errors.New("文件上传失败,Err:" + err.Error())
+		return
+	}
+
+	defer func() {
+		os.Remove(fpath)
+	}()
+
+	item := new(resource.Resource)
+	item.ResourceUrl = resourceUrl
+	item.ResourceType = 1
+	item.CreateTime = time.Now()
+	_, err = resource.AddResource(item)
+	if err != nil {
+		err = errors.New("资源上传失败,Err:" + err.Error())
+		return
+	}
+	return
+}
+
+// saveToFile 保存到本地文件
+func saveToFile(fileMulti multipart.File, tofile string) error {
+	f, err := os.OpenFile(tofile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
+	if err != nil {
+		return err
+	}
+	defer f.Close()
+	io.Copy(f, fileMulti)
+	return nil
+}

+ 51 - 0
services/seal/seal.go

@@ -6,12 +6,14 @@ import (
 	"hongze/hongze_mobile_admin/models/custom"
 	sealResp "hongze/hongze_mobile_admin/models/response/seal"
 	"hongze/hongze_mobile_admin/models/tables/admin"
+	"hongze/hongze_mobile_admin/models/tables/contract"
 	"hongze/hongze_mobile_admin/models/tables/contract_approval"
 	"hongze/hongze_mobile_admin/models/tables/contract_approval_record"
 	"hongze/hongze_mobile_admin/models/tables/seal"
 	"hongze/hongze_mobile_admin/services"
 	contractService "hongze/hongze_mobile_admin/services/contract"
 	"hongze/hongze_mobile_admin/utils"
+	"mime/multipart"
 	"strings"
 	"time"
 )
@@ -306,6 +308,55 @@ func Invalid(sealId int, opUser *custom.AdminWx, isInvalidContract bool) (err er
 	return
 }
 
+// UploadCheckBackFileByFile 上传签回用印附件(实际操作)
+func UploadCheckBackFileByFile(sealId int, ext string, fileMulti multipart.File, opUser *custom.AdminWx) (sealInfo *seal.Seal, err error) {
+	//查询当前用印信息
+	sealInfo, err = seal.GetSealInfoById(sealId)
+	if err != nil {
+		return
+	}
+
+	//用印状态判断
+	if sealInfo.Status != "已审批" && sealInfo.Status != "已签回" {
+		err = errors.New("用印状态异常,不允许上传签回用印附件,当前用印状态:" + sealInfo.Status)
+		return
+	}
+
+	fileName := ``
+	//保存的文件名
+	fileName = sealInfo.CompanyName + "_" + sealInfo.Code + "(签回)"
+	if sealInfo.ContractId > 0 {
+		//获取合同信息
+		contractInfo, err := contract.GetContractById(sealInfo.ContractId)
+		if err != nil {
+			return
+		}
+		//保存的文件名
+		fileName = contractInfo.CompanyName + "_" + contractInfo.ContractCode + "(签回)"
+	}
+	//非正式环境下,文件名上面还是加上随机数
+	if utils.RunMode != "release" {
+		fileName += "_" + utils.GetRandStringNoSpecialChar(10)
+	}
+	fileName += ext
+	//上传到阿里云
+	resourceUrl, err := services.UploadToOssAndFileName(fileMulti, fileName)
+	if err != nil {
+		err = errors.New("文件保存失败,Err:" + err.Error())
+		return
+	}
+
+	sealInfo.CheckBackFileUrl = resourceUrl
+	sealInfo.Status = "已签回"
+	sealInfo.ModifyTime = time.Now()
+	sealInfo.CheckBackFileTime = time.Now()
+	err = sealInfo.Update([]string{"CheckBackFileUrl", "Status", "ModifyTime", "CheckBackFileTime"})
+	if err != nil {
+		return
+	}
+	return
+}
+
 // UploadCheckBackFile 上传签回用印附件(实际操作)
 func UploadCheckBackFile(sealId int, fileUrl string, opUser *custom.AdminWx) (sealInfo *seal.Seal, err error) {
 	//查询当前用印信息