Browse Source

Merge branch 'update_bee' into crm1.0

# Conflicts:
#	routers/router.go
Roc 3 years ago
parent
commit
bc7c4a4fe7

+ 81 - 5
controllers/approval.go

@@ -445,11 +445,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 {
@@ -476,14 +512,54 @@ func (this *ApprovalCommon) ApplyApprove() {
 				return
 			}
 			if contract == nil {
-				this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
+				this.FailWithMessage("审批失败", "审批失败")
+				return
+			}
+
+			//格式化合同开始时间
+			contractStartDate, err := time.Parse(utils.FormatDate, contract.StartDate)
+			if err != nil {
+				this.FailWithMessage("审批失败", "合同开始时间转换失败,Err:"+err.Error())
 				return
 			}
-			err = company_approval.ApplyServiceUpdate(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, companyProduct.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName)
+
+			//格式化合同结束日期
+			contractEndDate, err := time.Parse(utils.FormatDate, contract.EndDate)
 			if err != nil {
-				this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
+				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)

+ 2 - 2
controllers/base_common.go

@@ -3,7 +3,7 @@ package controllers
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/astaxie/beego"
+	"github.com/beego/beego/v2/server/web"
 	"hongze/hongze_mobile_admin/utils"
 	"net/url"
 	"rdluck_tools/log"
@@ -22,7 +22,7 @@ func init() {
 
 //不需要授权的基类
 type BaseCommon struct {
-	beego.Controller
+	web.Controller
 	Response
 }
 

+ 11 - 11
main.go

@@ -2,36 +2,36 @@ package main
 
 import (
 	"fmt"
-	"github.com/astaxie/beego/context"
-	"github.com/astaxie/beego/logs"
+	"github.com/beego/beego/v2/adapter/logs"
+	"github.com/beego/beego/v2/server/web/context"
 	"hongze/hongze_mobile_admin/models"
 	_ "hongze/hongze_mobile_admin/routers"
 	"hongze/hongze_mobile_admin/utils"
 	"runtime"
 	"time"
 
-	"github.com/astaxie/beego"
+	"github.com/beego/beego/v2/server/web"
 )
 
 func main() {
-	if beego.BConfig.RunMode == "dev" {
-		beego.BConfig.WebConfig.DirectoryIndex = true
-		beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
+	if web.BConfig.RunMode == "dev" {
+		web.BConfig.WebConfig.DirectoryIndex = true
+		web.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
 	}
 
-	beego.BConfig.RecoverFunc = Recover
+	web.BConfig.RecoverFunc = Recover
 	//数据库初始化
 	models.InitDb()
-	beego.Run()
+	web.Run()
 }
 
 //异常处理
-func Recover(ctx *context.Context) {
+func Recover(ctx *context.Context, config *web.Config) {
 	if err := recover(); err != nil {
-		if err == beego.ErrAbort {
+		if err == web.ErrAbort {
 			return
 		}
-		if !beego.BConfig.RecoverPanic {
+		if !web.BConfig.RecoverPanic {
 			panic(err)
 		}
 		stack := ""

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

@@ -511,22 +511,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
@@ -539,9 +545,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
 	}
@@ -553,20 +596,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
+
 }
 
 //审批拒绝
@@ -600,6 +683,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
+}

+ 11 - 11
routers/router.go

@@ -9,34 +9,34 @@
 package routers
 
 import (
-	"github.com/astaxie/beego/plugins/cors"
+	"github.com/beego/beego/v2/server/web/filter/cors"
 	"hongze/hongze_mobile_admin/controllers"
 
-	"github.com/astaxie/beego"
+	"github.com/beego/beego/v2/server/web"
 )
 
 func init() {
 	//解决跨域问题
-	beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
+	web.InsertFilter("*", web.BeforeRouter, cors.Allow(&cors.Options{
 		AllowAllOrigins:  true,
 		AllowMethods:     []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
 		AllowHeaders:     []string{"Origin", "Authorization", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
 		ExposeHeaders:    []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
 		AllowCredentials: true,
 	}))
-	ns := beego.NewNamespace("/h5adminapi",
-		beego.NSNamespace("/wechat",
-			beego.NSInclude(
+	ns := web.NewNamespace("/h5adminapi",
+		web.NSNamespace("/wechat",
+			web.NSInclude(
 				&controllers.WeChatCommon{},
 			),
 		),
-		beego.NSNamespace("/admin",
-			beego.NSInclude(
+		web.NSNamespace("/admin",
+			web.NSInclude(
 				&controllers.AdminCommon{},
 			),
 		),
-		beego.NSNamespace("/approval",
-			beego.NSInclude(
+		web.NSNamespace("/approval",
+			web.NSInclude(
 				&controllers.ApprovalCommon{},
 			),
 		),
@@ -61,5 +61,5 @@ func init() {
 			),
 		),
 	)
-	beego.AddNamespace(ns)
+	web.AddNamespace(ns)
 }

+ 8 - 4
utils/config.go

@@ -2,8 +2,8 @@ package utils
 
 import (
 	"fmt"
-	"github.com/astaxie/beego"
-	"github.com/astaxie/beego/logs"
+	"github.com/beego/beego/v2/core/logs"
+	"github.com/beego/beego/v2/server/web"
 )
 
 var (
@@ -44,9 +44,13 @@ var (
 )
 
 func init() {
-	RunMode = beego.AppConfig.String("run_mode")
+	tmpRunMode, err := web.AppConfig.String("run_mode")
+	if err != nil {
+		panic("配置文件读取run_mode错误 " + err.Error())
+	}
+	RunMode = tmpRunMode
 	fmt.Println(RunMode, "模式")
-	config, err := beego.AppConfig.GetSection(RunMode)
+	config, err := web.AppConfig.GetSection(RunMode)
 	if err != nil {
 		panic("配置文件读取错误 " + err.Error())
 	}

+ 1 - 1
utils/logs.go

@@ -1,7 +1,7 @@
 package utils
 
 import (
-	"github.com/astaxie/beego/logs"
+	"github.com/beego/beego/v2/adapter/logs"
 )
 
 var FileLog *logs.BeeLogger