浏览代码

Merge branch 'crm1.0' of hongze/hongze_mobile_admin into master

hongze 3 年之前
父节点
当前提交
0ec9076c6f

+ 36 - 13
controllers/approval.go

@@ -119,20 +119,31 @@ func (c *ApprovalCommon) ListOld() {
 			}
 			}
 		}
 		}
 
 
-		approvalCount, err := company_approval.GetCompanyApprovalCount(item.CompanyId, item.ProductId)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			c.FailWithMessage("获取失败", "获取延期审批次数失败,Err:"+err.Error())
-			return
-		}
-		list[i].ApprovalCount = approvalCount
-
-		if item.ApplyMethod == 3 {
+		switch item.ApplyMethod {
+		case 2:
+			//客户冻结转试用次数
+			approvalCount, err := company_approval.GetFreezeToTryCompanyApprovalCount(item.CompanyId, item.ProductId, item.ApplyUserId)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				c.FailWithMessage("获取失败", "获取冻结转试用审批次数失败,Err:"+err.Error())
+				return
+			}
+			list[i].ApprovalCount = approvalCount
+		case 3:
+			//延迟试用权限列表
 			delayPermission, err := company_delay_permission.GetApplyDelayPermission(item.CompanyApprovalId)
 			delayPermission, err := company_delay_permission.GetApplyDelayPermission(item.CompanyApprovalId)
 			if err != nil && err.Error() != utils.ErrNoRow() {
 			if err != nil && err.Error() != utils.ErrNoRow() {
 				c.FailWithMessage("获取失败", "获取延期审批权限失败,Err:"+err.Error())
 				c.FailWithMessage("获取失败", "获取延期审批权限失败,Err:"+err.Error())
 				return
 				return
 			}
 			}
 			list[i].DelayPermission = delayPermission
 			list[i].DelayPermission = delayPermission
+
+			//客户审批试用延期次数
+			approvalCount, err := company_approval.GetCompanyTryDelayApprovalCount(item.CompanyId, item.ProductId)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				c.FailWithMessage("获取失败", "获取延期审批次数失败,Err:"+err.Error())
+				return
+			}
+			list[i].ApprovalCount = approvalCount
 		}
 		}
 		if item.ApproveRoleTypeCode == roleTypeCode {
 		if item.ApproveRoleTypeCode == roleTypeCode {
 			list[i].OpButton = true
 			list[i].OpButton = true
@@ -188,12 +199,24 @@ func (c *ApprovalCommon) DetailOld() {
 		}
 		}
 	}
 	}
 
 
-	approvalCount, err := company_approval.GetCompanyApprovalCount(item.CompanyId, item.ProductId)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		c.FailWithMessage("获取失败", "获取延期审批次数失败,Err:"+err.Error())
-		return
+	switch item.ApplyMethod {
+	case 2:
+		//客户冻结转试用次数
+		approvalCount, err := company_approval.GetFreezeToTryCompanyApprovalCount(item.CompanyId, item.ProductId, item.ApplyUserId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			c.FailWithMessage("获取失败", "获取冻结转试用审批次数失败,Err:"+err.Error())
+			return
+		}
+		item.ApprovalCount = approvalCount
+	case 3:
+		//客户审批试用延期次数
+		approvalCount, err := company_approval.GetCompanyTryDelayApprovalCount(item.CompanyId, item.ProductId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			c.FailWithMessage("获取失败", "获取延期审批次数失败,Err:"+err.Error())
+			return
+		}
+		item.ApprovalCount = approvalCount
 	}
 	}
-	item.ApprovalCount = approvalCount
 
 
 	//if item.ApplyMethod == 3 {
 	//if item.ApplyMethod == 3 {
 	//	delayPermission, err := company_delay_permission.GetApplyDelayPermission(item.CompanyApprovalId)
 	//	delayPermission, err := company_delay_permission.GetApplyDelayPermission(item.CompanyApprovalId)

+ 20 - 9
controllers/approval_new.go

@@ -202,6 +202,7 @@ func (c *ApprovalCommon) ListV2() {
 				CompanyContractId: item.CompanyContractId,
 				CompanyContractId: item.CompanyContractId,
 				//DelayPermission   :
 				//DelayPermission   :
 				ApplyRealName: item.ApplyRealName,
 				ApplyRealName: item.ApplyRealName,
+				ApplyUserId:   item.ApplyUserId,
 				OpButton:      ApprovalButton,
 				OpButton:      ApprovalButton,
 			}
 			}
 
 
@@ -220,20 +221,30 @@ func (c *ApprovalCommon) ListV2() {
 				}
 				}
 			}
 			}
 
 
-			approvalCount, err := company_approval.GetCompanyApprovalCount(item.CompanyId, item.ProductId)
-			if err != nil && err.Error() != utils.ErrNoRow() {
-				c.FailWithMessage("获取失败", "获取延期审批次数失败,Err:"+err.Error())
-				return
-			}
-			respTmp.ApprovalCount = approvalCount
-
-			if respTmp.ApplyMethod == 3 {
-				delayPermission, err := company_delay_permission.GetApplyDelayPermission(item.CompanyApprovalId)
+			switch item.ApplyMethod {
+			case 2:
+				//客户冻结转试用次数
+				approvalCount, err := company_approval.GetFreezeToTryCompanyApprovalCount(respTmp.CompanyId, respTmp.ProductId, respTmp.ApplyUserId)
+				if err != nil && err.Error() != utils.ErrNoRow() {
+					c.FailWithMessage("获取失败", "获取冻结转试用审批次数失败,Err:"+err.Error())
+					return
+				}
+				respTmp.ApprovalCount = approvalCount
+			case 3:
+				delayPermission, err := company_delay_permission.GetApplyDelayPermission(respTmp.CompanyApprovalId)
 				if err != nil && err.Error() != utils.ErrNoRow() {
 				if err != nil && err.Error() != utils.ErrNoRow() {
 					c.FailWithMessage("获取失败", "获取延期审批权限失败,Err:"+err.Error())
 					c.FailWithMessage("获取失败", "获取延期审批权限失败,Err:"+err.Error())
 					return
 					return
 				}
 				}
 				respTmp.DelayPermission = delayPermission
 				respTmp.DelayPermission = delayPermission
+
+				//客户审批试用延期次数
+				approvalCount, err := company_approval.GetCompanyTryDelayApprovalCount(respTmp.CompanyId, respTmp.ProductId)
+				if err != nil && err.Error() != utils.ErrNoRow() {
+					c.FailWithMessage("获取失败", "获取延期审批次数失败,Err:"+err.Error())
+					return
+				}
+				respTmp.ApprovalCount = approvalCount
 			}
 			}
 			respList = append(respList, respTmp)
 			respList = append(respList, respTmp)
 		}
 		}

+ 14 - 3
models/tables/company_approval/company_approval.go

@@ -118,6 +118,8 @@ type CompanyApprovalList struct {
 	ApproveRoleTypeCode string `description:"审批人角色类型" json:"-"`
 	ApproveRoleTypeCode string `description:"审批人角色类型" json:"-"`
 	OpButton            bool   `description:"是否审批操作权限"`
 	OpButton            bool   `description:"是否审批操作权限"`
 	CurrNodeId          int    `description:"当前审批操作节点"`
 	CurrNodeId          int    `description:"当前审批操作节点"`
+	ApplyContractType   int    `description:"申请合同类型  0 非标  1 标准"`
+	ApplyUserId         int    `description:"申请人编号id" json:"-"`
 }
 }
 
 
 // GetApprovalList 获取客户单列表
 // GetApprovalList 获取客户单列表
@@ -126,7 +128,7 @@ func GetApprovalList(condition string, pars []interface{}, startSize, pageSize i
 	sql := `SELECT a.company_id,b.product_id,a.company_name,a.credit_code,a.address,b.company_type,b.industry_name,
 	sql := `SELECT a.company_id,b.product_id,a.company_name,a.credit_code,a.address,b.company_type,b.industry_name,
 			b.seller_name,b.create_time,b.freeze_start_date,b.freeze_end_date,b.source,c.create_time AS approval_time,c.approve_time,b.status,
 			b.seller_name,b.create_time,b.freeze_start_date,b.freeze_end_date,b.source,c.create_time AS approval_time,c.approve_time,b.status,
             c.approve_content,c.approve_status,c.apply_method,c.apply_reasons,c.approve_remark,b.start_date,b.end_date,c.company_approval_id,c.company_contract_id,
             c.approve_content,c.approve_status,c.apply_method,c.apply_reasons,c.approve_remark,b.start_date,b.end_date,c.company_approval_id,c.company_contract_id,
-            c.apply_real_name,c.approve_role_type_code
+            c.apply_real_name,c.approve_role_type_code,c.apply_user_id
 			FROM company AS a
 			FROM company AS a
 			INNER JOIN company_product AS b ON a.company_id=b.company_id
 			INNER JOIN company_product AS b ON a.company_id=b.company_id
 			INNER JOIN company_approval AS c ON b.company_id=c.company_id AND b.product_id=c.product_id
 			INNER JOIN company_approval AS c ON b.company_id=c.company_id AND b.product_id=c.product_id
@@ -145,7 +147,7 @@ func GetApprovalInfoByApprovalId(condition string, pars []interface{}, companyAp
 	sql := `SELECT a.company_id,b.product_id,a.company_name,a.credit_code,a.address,b.company_type,b.industry_name,
 	sql := `SELECT a.company_id,b.product_id,a.company_name,a.credit_code,a.address,b.company_type,b.industry_name,
 			b.seller_name,b.create_time,b.freeze_start_date,b.freeze_end_date,b.source,c.create_time AS approval_time,c.approve_time,b.status,
 			b.seller_name,b.create_time,b.freeze_start_date,b.freeze_end_date,b.source,c.create_time AS approval_time,c.approve_time,b.status,
             c.approve_content,c.approve_status,c.apply_method,c.apply_reasons,c.approve_remark,b.start_date,b.end_date,c.company_approval_id,c.company_contract_id,
             c.approve_content,c.approve_status,c.apply_method,c.apply_reasons,c.approve_remark,b.start_date,b.end_date,c.company_approval_id,c.company_contract_id,
-            c.apply_real_name,c.approve_role_type_code
+            c.apply_real_name,c.approve_role_type_code,c.apply_user_id
 			FROM company AS a
 			FROM company AS a
 			INNER JOIN company_product AS b ON a.company_id=b.company_id
 			INNER JOIN company_product AS b ON a.company_id=b.company_id
 			INNER JOIN company_approval AS c ON b.company_id=c.company_id AND b.product_id=c.product_id
 			INNER JOIN company_approval AS c ON b.company_id=c.company_id AND b.product_id=c.product_id
@@ -893,13 +895,22 @@ func ModifyCompanyApproval(companyId, productId, companyApprovalId int, approveC
 //	return
 //	return
 //}
 //}
 
 
-func GetCompanyApprovalCount(companyId, productId int) (count int, err error) {
+// GetCompanyTryDelayApprovalCount 获取客户延期申请次数
+func GetCompanyTryDelayApprovalCount(companyId, productId int) (count int, err error) {
 	sql := `SELECT COUNT(1) AS count FROM company_approval WHERE company_id=? AND product_id=? AND  approve_content='试用延期' `
 	sql := `SELECT COUNT(1) AS count FROM company_approval WHERE company_id=? AND product_id=? AND  approve_content='试用延期' `
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	err = o.Raw(sql, companyId, productId).QueryRow(&count)
 	err = o.Raw(sql, companyId, productId).QueryRow(&count)
 	return
 	return
 }
 }
 
 
+// GetFreezeToTryCompanyApprovalCount 客户冻结转试用次数(某个销售下)
+func GetFreezeToTryCompanyApprovalCount(companyId, productId, applyUserId int) (count int, err error) {
+	sql := `SELECT COUNT(1) AS count FROM company_approval WHERE company_id=? AND product_id=? AND  approve_content='冻结转试用' and apply_user_id = ? `
+	o := orm.NewOrm()
+	err = o.Raw(sql, companyId, productId, applyUserId).QueryRow(&count)
+	return
+}
+
 // GetApprovalListByApprovalIds 根据申请id字符串来获取申请单列表
 // GetApprovalListByApprovalIds 根据申请id字符串来获取申请单列表
 func GetApprovalListByApprovalIds(companyApprovalIds string) (list []*CompanyApproval, err error) {
 func GetApprovalListByApprovalIds(companyApprovalIds string) (list []*CompanyApproval, err error) {
 	o := orm.NewOrm()
 	o := orm.NewOrm()

+ 25 - 5
services/company_approval/company_approval.go

@@ -12,6 +12,7 @@ import (
 	"hongze/hongze_mobile_admin/models/tables/company_approval"
 	"hongze/hongze_mobile_admin/models/tables/company_approval"
 	"hongze/hongze_mobile_admin/models/tables/company_approval_message"
 	"hongze/hongze_mobile_admin/models/tables/company_approval_message"
 	"hongze/hongze_mobile_admin/models/tables/company_contract"
 	"hongze/hongze_mobile_admin/models/tables/company_contract"
+	"hongze/hongze_mobile_admin/models/tables/company_delay_permission"
 	"hongze/hongze_mobile_admin/models/tables/company_product"
 	"hongze/hongze_mobile_admin/models/tables/company_product"
 	"hongze/hongze_mobile_admin/models/tables/company_product_log"
 	"hongze/hongze_mobile_admin/models/tables/company_product_log"
 	"hongze/hongze_mobile_admin/models/tables/contract_approval"
 	"hongze/hongze_mobile_admin/models/tables/contract_approval"
@@ -977,12 +978,31 @@ func GetApprovalDetailByCompanyApprovalId(companyApprovalId int, opUser *custom.
 		}
 		}
 	}
 	}
 
 
-	approvalCount, err := company_approval.GetCompanyApprovalCount(approvalItem.CompanyId, approvalItem.ProductId)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		err = errors.New("获取延期审批次数失败,Err:" + err.Error())
-		return
+	switch approvalItem.ApplyMethod {
+	case 2:
+		//客户冻结转试用次数
+		approvalCount, tmpErr := company_approval.GetFreezeToTryCompanyApprovalCount(approvalItem.CompanyId, approvalItem.ProductId, approvalItem.ApplyUserId)
+		if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
+			err = tmpErr
+			return
+		}
+		approvalItem.ApprovalCount = approvalCount
+	case 3:
+		delayPermission, tmpErr := company_delay_permission.GetApplyDelayPermission(approvalItem.CompanyApprovalId)
+		if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
+			err = tmpErr
+			return
+		}
+		approvalItem.DelayPermission = delayPermission
+
+		//客户审批试用延期次数
+		approvalCount, tmpErr := company_approval.GetCompanyTryDelayApprovalCount(approvalItem.CompanyId, approvalItem.ProductId)
+		if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
+			err = tmpErr
+			return
+		}
+		approvalItem.ApprovalCount = approvalCount
 	}
 	}
-	approvalItem.ApprovalCount = approvalCount
 
 
 	//查询最近一次审批单信息
 	//查询最近一次审批单信息
 	lastApprovalInfo, err := contract_approval.GetLastContractApprovalByContractId(approvalItem.CompanyApprovalId, "company")
 	lastApprovalInfo, err := contract_approval.GetLastContractApprovalByContractId(approvalItem.CompanyApprovalId, "company")

+ 75 - 0
services/contract/contract_approval.go

@@ -799,3 +799,78 @@ func AfterApproved(contractId int) (err error) {
 	}
 	}
 	return
 	return
 }
 }
+
+//审批完成后操作
+func FixPdf(contractId int) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("异常提醒:"+utils.RunMode, "合同审批通过后,生成pdf失败,ERR:"+err.Error()+"", utils.EmailSendToUsers)
+		}
+
+	}()
+	contractDetail, err := GetContractDetail(contractId)
+	if err != nil {
+		return
+	}
+	//fmt.Println("contractDetail:", contractDetail)
+
+	//pdf生成并保存
+	{
+		////获取合同的html模板信息
+		//contractHtml, tmpErr := services.GetHtmlByContractDetail(contractDetail, "pdf")
+		//if tmpErr != nil {
+		//	err = tmpErr
+		//	return
+		//}
+		//
+		////生成pdf
+		//pdfPath := fmt.Sprint("./static/系统生成合同_", contractId, ".pdf")
+		//tmpErr = services.Html2Pdf(contractHtml, pdfPath)
+		//if tmpErr != nil {
+		//	err = tmpErr
+		//	return
+		//}
+		//
+		//defer os.Remove(pdfPath)
+
+		//生成word
+		wordPath := fmt.Sprint("./static/系统生成合同_", contractDetail.ContractId, ".docx")
+		tmpErr := services.GenerateWordV2(contractDetail, wordPath)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		defer os.Remove(wordPath)
+
+		//word转pdf
+		converterType := "pdf"
+		pdfPath, tmpErr := services.FuncDocs2Pdf(utils.LibreOfficePath, wordPath, "./static", converterType)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		defer os.Remove(pdfPath)
+
+		//randStr := utils.GetRandStringNoSpecialChar(28)
+		//fileName := contractDetail.ContractCode + ".pdf"
+		fileName := contractDetail.CompanyName + "_" + contractDetail.ContractCode + ".pdf"
+		//非正式环境下,文件名上面还是加上随机数
+		if utils.RunMode != "release" {
+			//fileName = contractDetail.ContractCode + "_" + utils.GetRandStringNoSpecialChar(10) + ".pdf"
+			fileName = contractDetail.CompanyName + "_" + contractDetail.ContractCode + "_" + utils.GetRandStringNoSpecialChar(10) + ".pdf"
+		}
+		//上传到阿里云
+		resourceUrl, tmpErr := services.UploadAliyun(fileName, pdfPath)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		tmpErr = contract.AddContractPdf(contractId, resourceUrl)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		fmt.Println(resourceUrl)
+	}
+	return
+}

+ 3 - 18
services/word.go

@@ -1669,8 +1669,6 @@ func addTableV2(tableDataList TableData, doc *document.Document) (err error) {
 
 
 	//表格数据
 	//表格数据
 	rowList := tableDataList.List
 	rowList := tableDataList.List
-	//每一列合并单元格状态map
-	rowIsMeged := make(map[int]bool)
 
 
 	//table.Properties().W
 	//table.Properties().W
 	for i := 0; i < len(rowList); i++ {
 	for i := 0; i < len(rowList); i++ {
@@ -1683,14 +1681,6 @@ func addTableV2(tableDataList TableData, doc *document.Document) (err error) {
 		rowDataList := rowList[i].RowList
 		rowDataList := rowList[i].RowList
 		if rowDataList != nil {
 		if rowDataList != nil {
 			for j := 0; j < len(rowDataList); j++ {
 			for j := 0; j < len(rowDataList); j++ {
-				//当前列是否合并
-				var isMeged bool
-				isMeged, ok := rowIsMeged[j]
-				if !ok {
-					rowIsMeged[j] = false
-					isMeged = false
-				}
-
 				cell := row.AddCell()
 				cell := row.AddCell()
 				cellPara := cell.AddParagraph()
 				cellPara := cell.AddParagraph()
 				run := cellPara.AddRun()
 				run := cellPara.AddRun()
@@ -1706,20 +1696,15 @@ func addTableV2(tableDataList TableData, doc *document.Document) (err error) {
 
 
 				//如果指定了上下单元格合并,那么去合并上下单元格
 				//如果指定了上下单元格合并,那么去合并上下单元格
 				if cellData.IsMerged {
 				if cellData.IsMerged {
-					//将当前合并单元格状态调整为true
-					rowIsMeged[j] = true
 					//合并单元格类型
 					//合并单元格类型
 					var mergeVal wml.ST_Merge
 					var mergeVal wml.ST_Merge
 
 
-					if isMeged { //如果上一层已经是合并了,那么这一层是继续合并
-						mergeVal = wml.ST_MergeContinue
-					} else { //如果上一层不是合并,那么这一层是开始合并
+					if cellData.IsFirstMerged { //如果是第一个合并行,那么开始重新合并
 						mergeVal = wml.ST_MergeRestart
 						mergeVal = wml.ST_MergeRestart
+					} else { //如果不是第一个合并行,那么是继续合并
+						mergeVal = wml.ST_MergeContinue
 					}
 					}
 					cell.Properties().SetVerticalMerge(mergeVal)
 					cell.Properties().SetVerticalMerge(mergeVal)
-				} else {
-					//将当前合并单元格状态调整为false,这样后续如果再次碰到合并单元格操作,就是重新开始合并了
-					rowIsMeged[j] = false
 				}
 				}
 
 
 				//背景色
 				//背景色