瀏覽代碼

Merge branch 'fix_master_2021-07-22' of hongze/hongze_mobile_admin into master

hongze 3 年之前
父節點
當前提交
6ba81c732f

+ 81 - 5
controllers/approval.go

@@ -387,11 +387,47 @@ func (this *ApprovalCommon) ApplyApprove() {
 				this.FailWithMessage("待审批信息不存在", "待审批信息不存在,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+strconv.Itoa(productId))
 				return
 			}
-			err = company_approval.TryOutToFormal(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, contract.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName)
+
+			//格式化合同开始时间
+			contractStartDate, err := time.Parse(utils.FormatDate, contract.StartDate)
 			if err != nil {
-				this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
+				this.FailWithMessage("审批失败", "合同开始时间转换失败,Err:"+err.Error())
+				return
+			}
+			//格式化合同结束日期
+			contractEndDate, err := time.Parse(utils.FormatDate, contract.EndDate)
+			if err != nil {
+				this.FailWithMessage("审批失败", "合同结束时间转换失败,Err:"+err.Error())
 				return
 			}
+			//格式化 产品中 合同结束日期
+			//productContractEndDate, err := time.Parse(utils.FormatDate, companyProduct.ContractEndDate)
+			//if err != nil {
+			//	br.Msg = "审批失败"
+			//	br.ErrMsg = "产品中合同结束时间转换失败,Err:" + err.Error()
+			//	return
+			//}
+			//如果合同时间小于等于今天,那么立马执行合同内容
+			if time.Now().After(contractStartDate) {
+				err = company_approval.TryOutToFormal(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, contract.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName)
+				if err != nil {
+					this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
+					return
+				}
+			} else {
+				err = company_approval.ApplyApproveContract(req.CompanyId, productId, approvalItem.CompanyApprovalId, contract.CompanyContractId)
+				if err != nil {
+					this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
+					return
+				}
+			}
+			//如果合同中的结束日期大于产品中的合同结束日期,那么就去修改产品中的合同结束日期
+			if contractEndDate.After(companyProduct.ContractEndDate) {
+				companyProduct.ContractEndDate = contractEndDate
+				cols := make([]string, 0)
+				cols = append(cols, "ContractEndDate")
+				_ = companyProduct.Update(cols)
+			}
 		} else if approvalItem.ApplyMethod == 2 { //冻结->试用
 			err = company_approval.FreezeToTryOut(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, approvalItem.ApplyUserId, sysUser.RealName, companyProduct.ProductName)
 			if err != nil {
@@ -418,14 +454,54 @@ func (this *ApprovalCommon) ApplyApprove() {
 				return
 			}
 			if contract == nil {
-				this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
+				this.FailWithMessage("审批失败", "审批失败")
 				return
 			}
-			err = company_approval.ApplyServiceUpdate(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, companyProduct.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName)
+
+			//格式化合同开始时间
+			contractStartDate, err := time.Parse(utils.FormatDate, contract.StartDate)
 			if err != nil {
-				this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
+				this.FailWithMessage("审批失败", "合同开始时间转换失败,Err:"+err.Error())
+				return
+			}
+
+			//格式化合同结束日期
+			contractEndDate, err := time.Parse(utils.FormatDate, contract.EndDate)
+			if err != nil {
+				this.FailWithMessage("审批失败", "合同结束时间转换失败,Err:"+err.Error())
 				return
 			}
+			//格式化 产品中 合同结束日期
+			//productContractEndDate, err := time.Parse(utils.FormatDate, companyProduct.ContractEndDate)
+			//if err != nil {
+			//	br.Msg = "审批失败"
+			//	br.ErrMsg = "产品中合同结束时间转换失败,Err:" + err.Error()
+			//	return
+			//}
+
+			//如果合同时间小于等于今天,那么立马执行合同内容
+			if time.Now().After(contractStartDate) {
+				err = company_approval.ApplyServiceUpdate(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, companyProduct.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName)
+				if err != nil {
+					this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
+					return
+				}
+
+			} else {
+				err = company_approval.ApplyApproveContract(req.CompanyId, productId, approvalItem.CompanyApprovalId, contract.CompanyContractId)
+				if err != nil {
+					this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
+					return
+				}
+			}
+
+			//如果合同中的结束日期大于产品中的合同结束日期,那么就去修改产品中的合同结束日期
+			if contractEndDate.After(companyProduct.ContractEndDate) {
+				companyProduct.ContractEndDate = contractEndDate
+				cols := make([]string, 0)
+				cols = append(cols, "ContractEndDate")
+				_ = companyProduct.Update(cols)
+			}
 		} else {
 			this.FailWithMessage("审批失败", "无效的审批状态,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+
 				strconv.Itoa(productId)+";ApplyMethod:"+strconv.Itoa(approvalItem.ApplyMethod)+" ApproveStatus;"+approvalItem.ApproveStatus)

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

@@ -509,22 +509,28 @@ func ApplyServiceUpdate(companyId, productId, sellerId, companyApprovalId, compa
 		}
 	}()
 
-	sql := `UPDATE company_product SET status='正式',approve_status='已审批',start_date=?,end_date=?,modify_time=NOW() WHERE company_id=? AND product_id=? `
-	_, err = o.Raw(sql, startDate, endDate, companyId, productId).Exec()
+	items := make([]*company_report_permission.CompanyReportPermission, 0)
+
+	sql := `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
+	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
 	if err != nil {
 		return
 	}
-	sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
-	_, err = o.Raw(sql, companyApprovalId, companyId, productId).Exec()
+
+	//已存在的权限map
+	nowCompanyReportPermissionMap := make(map[int]*company_report_permission.CompanyReportPermission)
+	//产品服务的开始、结束日期(非产品权限)
+	updateStartDate := startDate
+	updateStartDateTime, err := time.Parse(utils.FormatDate, updateStartDate)
 	if err != nil {
 		return
 	}
-	items := make([]*company_report_permission.CompanyReportPermission, 0)
-	sql = `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
-	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
+	updateEndDate := endDate
+	updateEndDateTime, err := time.Parse(utils.FormatDate, updateEndDate)
 	if err != nil {
 		return
 	}
+
 	for _, pv := range items {
 		cpLog := new(company_permission_log.CompanyPermissionLog)
 		cpLog.CompanyId = companyId
@@ -537,9 +543,46 @@ func ApplyServiceUpdate(companyId, productId, sellerId, companyApprovalId, compa
 		cpLog.ProductId = productId
 		cpLog.ProductName = pv.ProductName
 		go company_permission_log.AddCompanyPermissionLog(cpLog)
+
+		//将权限插入到已存在的权限map中
+		nowCompanyReportPermissionMap[pv.ChartPermissionId] = pv
+
+		//校验原始数据中的开始日期是否小于合同内的开始日期,如果小于,那么变更为原先的合同开始日期
+		tmpStartDate, tmpErr := time.Parse(utils.FormatDate, pv.StartDate)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		if tmpStartDate.Before(updateStartDateTime) {
+			updateStartDateTime = tmpStartDate
+		}
+
+		//校验原始数据中的结束日期是否大于合同内的结束日期,如果大于,那么变更为原先的合同结束日期
+		tmpEndDate, tmpErr := time.Parse(utils.FormatDate, pv.EndDate)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		if tmpEndDate.After(updateEndDateTime) {
+			updateEndDateTime = tmpEndDate
+		}
 	}
-	sql = `DELETE FROM company_report_permission WHERE company_id=? AND product_id=? `
-	_, err = o.Raw(sql, companyId, productId).Exec()
+
+	//删除所有权限
+	//sql = `DELETE FROM company_report_permission WHERE company_id=? AND product_id=? `
+	//_, err = o.Raw(sql, companyId, productId).Exec()
+	//if err != nil {
+	//	return
+	//}
+
+	//更新客户产品信息
+	sql = `UPDATE company_product SET status='正式',approve_status='已审批',start_date=?,end_date=?,modify_time=NOW() WHERE company_id=? AND product_id=? `
+	_, err = o.Raw(sql, updateStartDateTime, updateEndDateTime, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+	sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
+	_, err = o.Raw(sql, companyApprovalId, companyId, productId).Exec()
 	if err != nil {
 		return
 	}
@@ -551,20 +594,60 @@ func ApplyServiceUpdate(companyId, productId, sellerId, companyApprovalId, compa
 		return
 	}
 	for _, pv := range contractPermission {
-		sql = `INSERT INTO company_report_permission(company_id, report_permission_id,created_time, last_updated_time,
+		nowPermission, ok := nowCompanyReportPermissionMap[pv.ChartPermissionId]
+		//判断是否已经存在该权限,如果存在的话,那么是修改,否则是新增
+		if ok {
+			needUpdate := false
+			if nowPermission.Status != "正式" && nowPermission.Status != "永续" {
+				needUpdate = true
+			}
+
+			//如果 需要更新 字段 为false,那么再去校验时间
+			if needUpdate == false {
+				//如果当前存该权限,那么去校验是否需要修改
+				nowPermissionEndDateTime, tmpErr := time.Parse(utils.FormatDate, nowPermission.EndDate)
+				if tmpErr != nil {
+					err = tmpErr
+					return
+				}
+				contractPermissionEndDateTime, tmpErr := time.Parse(utils.FormatDate, pv.EndDate)
+				if tmpErr != nil {
+					err = tmpErr
+					return
+				}
+				if contractPermissionEndDateTime.After(nowPermissionEndDateTime) {
+					needUpdate = true
+				}
+			}
+
+			//如果 需要更新 字段 为 true,那么就去更新
+			if needUpdate {
+				sql = `update company_report_permission set end_date=?,last_updated_time=now(),modify_time=now(),company_contract_id=?,status=? where company_report_permission_id=? `
+				_, tmpErr := o.Raw(sql, pv.EndDate, pv.CompanyContractId, pv.Status, nowPermission.CompanyReportPermissionId).Exec()
+				err = tmpErr
+				if err != nil {
+					return
+				}
+			}
+
+		} else {
+			sql = `INSERT INTO company_report_permission(company_id, report_permission_id,created_time, last_updated_time,
              chart_permission_id, start_date,end_date,product_id,product_name, modify_time,company_contract_id,status) 
 			VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?,?) `
-		_, err = o.Raw(sql, companyId, pv.ChartPermissionId, pv.ChartPermissionId, pv.StartDate, pv.EndDate, productId, productName, companyContractId, "正式").Exec()
-		if err != nil {
-			return
+			_, tmpErr := o.Raw(sql, companyId, pv.ChartPermissionId, pv.ChartPermissionId, pv.StartDate, pv.EndDate, productId, productName, companyContractId, "正式").Exec()
+			err = tmpErr
+			if err != nil {
+				return
+			}
 		}
 	}
-	sql = `UPDATE company_contract SET status=1 WHERE company_contract_id=? AND company_id=? AND product_id=? `
+	sql = `UPDATE company_contract SET status=1,modify_time=NOW() WHERE company_contract_id=? AND company_id=? AND product_id=? `
 	_, err = o.Raw(sql, companyContractId, companyId, productId).Exec()
 	if err != nil {
 		return
 	}
 	return
+
 }
 
 //审批拒绝
@@ -598,6 +681,39 @@ func ApproveRefuse(companyId, productId int, approveStatus, approveRemark string
 	return
 }
 
+//更新审批单、合同状态
+func ApplyApproveContract(companyId, productId, companyApprovalId, companyContractId int) (err error) {
+	o := orm.NewOrm()
+	o.Begin()
+	defer func() {
+		if err != nil {
+			o.Rollback()
+		} else {
+			o.Commit()
+		}
+	}()
+	sql := `UPDATE company_product SET approve_status='已审批',modify_time=NOW() WHERE company_id=? AND product_id=? `
+	_, err = o.Raw(sql, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+
+	//更新审批单
+	sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
+	_, err = o.Raw(sql, companyApprovalId, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+
+	//更新合同
+	sql = `UPDATE company_contract SET status=1,modify_time=NOW() WHERE company_contract_id=? AND company_id=? AND product_id=? `
+	_, err = o.Raw(sql, companyContractId, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+	return
+}
+
 func GetCompanyApprovalDetailById(companyId, productId int) (item *CompanyApproval, err error) {
 	sql := `SELECT * FROM company_approval WHERE company_id=? AND product_id=? AND approve_status IN('驳回','已撤回') ORDER BY modify_time DESC LIMIT 1 `
 	o := orm.NewOrm()

+ 8 - 0
models/tables/company_product/company_product.go

@@ -29,6 +29,7 @@ type CompanyProduct struct {
 	ModifyTime       time.Time `description:"修改时间"`
 	StartDate        string    `description:"开始日期"`
 	EndDate          string    `description:"结束日期"`
+	ContractEndDate  time.Time `description:"合同结束日期"`
 	LoseReason       string    `description:"流失原因"`
 	LossTime         time.Time `description:"流失时间"`
 	CompanyType      string    `description:"客户类型"`
@@ -42,3 +43,10 @@ func GetCompanyProductByCompanyIdAndProductId(companyId, productId int) (item *C
 	err = o.Raw(sql, companyId, productId).QueryRow(&item)
 	return
 }
+
+//更新客户产品信息
+func (companyProduct *CompanyProduct) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(companyProduct, cols...)
+	return
+}