Browse Source

Merge branch 'yb_admin/4.6' into debug

Roc 2 years ago
parent
commit
75bef33e2f

+ 5 - 5
controllers/approval.go

@@ -509,7 +509,7 @@ func (c *ApprovalCommon) ApplyApproveOld() {
 			//}
 			//如果合同时间小于等于今天,那么立马执行合同内容
 			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, contract.PackageType)
+				_, err = company_approval.TryOutToFormal(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, contract.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName, contract.PackageType)
 				if err != nil {
 					c.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
 					return
@@ -529,19 +529,19 @@ func (c *ApprovalCommon) ApplyApproveOld() {
 				_ = 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)
+			_, _, _, err = company_approval.FreezeToTryOut(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, approvalItem.ApplyUserId, sysUser.RealName, companyProduct.ProductName)
 			if err != nil {
 				c.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
 				return
 			}
 		} else if approvalItem.ApplyMethod == 3 { //试用延期
-			err = company_approval.TryOutDelay(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, sysUser.RealName, companyProduct.EndDate, companyProduct.ProductName)
+			_, _, err = company_approval.TryOutDelay(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, sysUser.RealName, companyProduct.EndDate, companyProduct.ProductName)
 			if err != nil {
 				c.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
 				return
 			}
 		} else if approvalItem.ApplyMethod == 4 { //原销售申请领取流失客户
-			err = company_approval.ApplyReceive(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, approvalItem.ApplyUserId, sysUser.RealName, companyProduct.ProductName)
+			_, _, _, err = company_approval.ApplyReceive(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, approvalItem.ApplyUserId, sysUser.RealName, companyProduct.ProductName)
 			if err != nil {
 				c.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
 				return
@@ -581,7 +581,7 @@ func (c *ApprovalCommon) ApplyApproveOld() {
 
 			//如果合同时间小于等于今天,那么立马执行合同内容
 			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, contract.PackageType)
+				_, err = company_approval.ApplyServiceUpdate(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, companyProduct.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName, contract.PackageType)
 				if err != nil {
 					c.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
 					return

+ 7 - 3
models/db_init.go

@@ -19,6 +19,8 @@ import (
 	"hongze/hongze_mobile_admin/models/tables/company_permission_log"
 	"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_try_out_update_log"
+	"hongze/hongze_mobile_admin/models/tables/company_product_try_out_update_permission_log"
 	"hongze/hongze_mobile_admin/models/tables/company_product_update_log"
 	"hongze/hongze_mobile_admin/models/tables/company_report_permission"
 	"hongze/hongze_mobile_admin/models/tables/contract"
@@ -104,9 +106,11 @@ func init() {
 		new(roadshow.RsCalendarResearcher),
 		new(roadshow.RsMatters),
 		new(roadshow.RsCalendarRelation),
-		new(company_product_update_log.CompanyProductUpdateLog), //客户产品状态变更记录表
-		new(user_template_record.UserTemplateRecord),            //模版消息记录表
-		new(chart_permission.ChartPermission),                   // 品种权限表
+		new(company_product_update_log.CompanyProductUpdateLog),               //客户产品状态变更记录表
+		new(user_template_record.UserTemplateRecord),                          //模版消息记录表
+		new(chart_permission.ChartPermission),                                 // 品种权限表
+		new(company_product_try_out_update_log.CompanyProductTryOutUpdateLog), //客户产品试用变更状态表
+		new(company_product_try_out_update_permission_log.CompanyProductTryOutUpdatePermissionLog), //客户产品试用变更品种详情表
 	)
 
 	// 社区问答相关

+ 199 - 54
models/tables/company_approval/company_approval.go

@@ -179,7 +179,7 @@ func GetApprovalCount(condition string, pars []interface{}) (count int, err erro
 }
 
 // TryOutToFormal 试用转正式
-func TryOutToFormal(companyId, productId, sellerId, companyApprovalId, companyContractId int, startDate, endDate, sellerName, productName string, packageType int) (err error) {
+func TryOutToFormal(companyId, productId, sellerId, companyApprovalId, companyContractId int, startDate, endDate, sellerName, productName string, packageType int) (newCompanyReportPermissionList []*company_report_permission.CompanyReportPermission, err error) {
 	o := orm.NewOrm()
 	tx, err := o.Begin()
 	if err != nil {
@@ -237,13 +237,36 @@ func TryOutToFormal(companyId, productId, sellerId, companyApprovalId, companyCo
 		return
 	}
 	for _, pv := range contractPermission {
-		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,is_upgrade) 
-			VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?,?,?) `
-		_, err = tx.Raw(sql, companyId, pv.ChartPermissionId, pv.ChartPermissionId, pv.StartDate, pv.EndDate, productId, productName, companyContractId, "正式",pv.IsUpgrade).Exec()
-		if err != nil {
+		tmpCompanyReportPermission := &company_report_permission.CompanyReportPermission{
+			//CompanyReportPermissionId: 0,
+			CompanyId:          companyId,
+			ReportPermissionId: pv.ChartPermissionId,
+			CreatedTime:        time.Now(),
+			LastUpdatedTime:    time.Now(),
+			ChartPermissionId:  pv.ChartPermissionId,
+			StartDate:          pv.StartDate,
+			EndDate:            pv.EndDate,
+			ProductId:          productId,
+			ProductName:        productName,
+			CompanyContractId:  companyContractId,
+			Status:             "正式",
+			ModifyTime:         time.Now(),
+			IsUpgrade:          pv.IsUpgrade,
+		}
+		newId, tmpErr := tx.Insert(tmpCompanyReportPermission)
+		if tmpErr != nil {
+			err = tmpErr
 			return
 		}
+		tmpCompanyReportPermission.CompanyReportPermissionId = newId
+		newCompanyReportPermissionList = append(newCompanyReportPermissionList, tmpCompanyReportPermission)
+		//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,is_upgrade)
+		//	VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?,?,?) `
+		//_, err = tx.Raw(sql, companyId, pv.ChartPermissionId, pv.ChartPermissionId, pv.StartDate, pv.EndDate, productId, productName, companyContractId, "正式", pv.IsUpgrade).Exec()
+		//if err != nil {
+		//	return
+		//}
 	}
 	sql = `UPDATE company_contract SET status=1 WHERE company_contract_id=? AND company_id=? AND product_id=? `
 	_, err = tx.Raw(sql, companyContractId, companyId, productId).Exec()
@@ -254,7 +277,7 @@ func TryOutToFormal(companyId, productId, sellerId, companyApprovalId, companyCo
 }
 
 // FreezeToTryOut 冻结转试用
-func FreezeToTryOut(companyId, productId, sellerId, companyApprovalId, applyUserId int, sellerName, productName string) (err error) {
+func FreezeToTryOut(companyId, productId, sellerId, companyApprovalId, applyUserId int, sellerName, productName string) (newCompanyReportPermissionList []*company_report_permission.CompanyReportPermission, startDate, endDate string, err error) {
 	o := orm.NewOrm()
 	tx, err := o.Begin()
 	if err != nil {
@@ -267,8 +290,8 @@ func FreezeToTryOut(companyId, productId, sellerId, companyApprovalId, applyUser
 			_ = tx.Commit()
 		}
 	}()
-	startDate := time.Now().Format(utils.FormatDate)
-	endDate := time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
+	startDate = time.Now().Format(utils.FormatDate)
+	endDate = time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
 
 	sellerItem, err := admin.GetAdminById(applyUserId)
 
@@ -334,23 +357,46 @@ func FreezeToTryOut(companyId, productId, sellerId, companyApprovalId, applyUser
 	//获取需要试用的权限
 	delayPermissionItems, err := company_delay_permission.GetDelayPermissionItems(companyId, companyApprovalId)
 	if err != nil {
-		return err
+		return
 	}
 	status := `试用`
 	for _, v := range delayPermissionItems {
-		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,status) 
-			VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?) `
-		_, err = tx.Raw(sql, companyId, v.ChartPermissionId, v.ChartPermissionId, v.StartDate, v.EndDate, productId, productName, status).Exec()
-		if err != nil {
-			return err
+		tmpCompanyReportPermission := &company_report_permission.CompanyReportPermission{
+			//CompanyReportPermissionId: 0,
+			CompanyId:          companyId,
+			ReportPermissionId: v.ChartPermissionId,
+			CreatedTime:        time.Now(),
+			LastUpdatedTime:    time.Now(),
+			ChartPermissionId:  v.ChartPermissionId,
+			StartDate:          v.StartDate,
+			EndDate:            v.EndDate,
+			ProductId:          productId,
+			ProductName:        productName,
+			//CompanyContractId:         companyContractId,
+			Status:     status,
+			ModifyTime: time.Now(),
+			//IsUpgrade:                 pv.IsUpgrade,
+		}
+		newId, tmpErr := tx.Insert(tmpCompanyReportPermission)
+		if tmpErr != nil {
+			err = tmpErr
+			return
 		}
+		tmpCompanyReportPermission.CompanyReportPermissionId = newId
+		newCompanyReportPermissionList = append(newCompanyReportPermissionList, tmpCompanyReportPermission)
+		//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,status)
+		//	VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?) `
+		//_, err = tx.Raw(sql, companyId, v.ChartPermissionId, v.ChartPermissionId, v.StartDate, v.EndDate, productId, productName, status).Exec()
+		//if err != nil {
+		//	return err
+		//}
 	}
 	return
 }
 
 // TryOutDelay 试用延期
-func TryOutDelay(companyId, productId, sellerId, companyApprovalId int, sellerName, endDate, productName string) (err error) {
+func TryOutDelay(companyId, productId, sellerId, companyApprovalId int, sellerName, endDate, productName string) (newCompanyReportPermissionList []*company_report_permission.CompanyReportPermission, newEndDate string, err error) {
 	o := orm.NewOrm()
 	tx, err := o.Begin()
 	if err != nil {
@@ -367,7 +413,7 @@ func TryOutDelay(companyId, productId, sellerId, companyApprovalId int, sellerNa
 	if err != nil {
 		return
 	}
-	newEndDate := endDateTime.AddDate(0, 2, 0).Format(utils.FormatDate)
+	newEndDate = endDateTime.AddDate(0, 2, 0).Format(utils.FormatDate)
 	//更新用户产品状态
 	sql := `UPDATE company_product SET approve_status='已审批',end_date=?,modify_time=NOW() WHERE company_id=? AND product_id=? `
 	_, err = tx.Raw(sql, newEndDate, companyId, productId).Exec()
@@ -401,35 +447,78 @@ func TryOutDelay(companyId, productId, sellerId, companyApprovalId int, sellerNa
 	//获取需要延期的权限
 	delayPermissionItems, err := company_delay_permission.GetDelayPermissionItems(companyId, companyApprovalId)
 	if err != nil {
-		return err
+		return
 	}
 	status := `试用`
 	for _, v := range delayPermissionItems {
-		isExist, err := company_report_permission.GetCompanyPermissionCheck(companyId, v.ChartPermissionId)
-		if err != nil {
-			return err
-		}
-		if isExist > 0 {
-			sql = `UPDATE company_report_permission SET end_date=?,status=?,modify_time=NOW() WHERE company_id=? AND product_id=? AND chart_permission_id=?`
-			_, err = tx.Raw(sql, newEndDate, status, companyId, productId, v.ChartPermissionId).Exec()
-			if err != nil {
-				return err
+		tmpCompanyReportPermission, tmpErr := company_report_permission.GetCompanyPermission(companyId, v.ChartPermissionId)
+		if tmpErr != nil {
+			//没有数据的话
+			if tmpErr.Error() == utils.ErrNoRow() {
+				tmpCompanyReportPermission = &company_report_permission.CompanyReportPermission{
+					//CompanyReportPermissionId: 0,
+					CompanyId:          companyId,
+					ReportPermissionId: v.ChartPermissionId,
+					CreatedTime:        time.Now(),
+					LastUpdatedTime:    time.Now(),
+					ChartPermissionId:  v.ChartPermissionId,
+					StartDate:          v.StartDate,
+					EndDate:            newEndDate,
+					ProductId:          productId,
+					ProductName:        productName,
+					//CompanyContractId:         companyContractId,
+					Status:     status,
+					ModifyTime: time.Now(),
+					//IsUpgrade:                 pv.IsUpgrade,
+				}
+				newId, tmpErr := tx.Insert(tmpCompanyReportPermission)
+				if tmpErr != nil {
+					err = tmpErr
+					return
+				}
+				tmpCompanyReportPermission.CompanyReportPermissionId = newId
+			} else {
+				// 其他异常的话,那么就返回报错
+				err = tmpErr
+				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,status) 
-			VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?) `
-			_, err = tx.Raw(sql, companyId, v.ChartPermissionId, v.ChartPermissionId, v.StartDate, newEndDate, productId, productName, status).Exec()
+			// 修改原数据
+			tmpCompanyReportPermission.EndDate = newEndDate
+			tmpCompanyReportPermission.Status = status
+			tmpCompanyReportPermission.ModifyTime = time.Now()
+			_, err = tx.Update(tmpCompanyReportPermission, "EndDate", "Status", "ModifyTime")
 			if err != nil {
-				return err
+				return
 			}
 		}
+		newCompanyReportPermissionList = append(newCompanyReportPermissionList, tmpCompanyReportPermission)
+
+		//isExist, err := company_report_permission.GetCompanyPermissionCheck(companyId, v.ChartPermissionId)
+		//if err != nil {
+		//	return err
+		//}
+		//if isExist > 0 {
+		//	sql = `UPDATE company_report_permission SET end_date=?,status=?,modify_time=NOW() WHERE company_id=? AND product_id=? AND chart_permission_id=?`
+		//	_, err = tx.Raw(sql, newEndDate, status, companyId, productId, v.ChartPermissionId).Exec()
+		//	if err != nil {
+		//		return err
+		//	}
+		//} 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,status)
+		//	VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?) `
+		//	_, err = tx.Raw(sql, companyId, v.ChartPermissionId, v.ChartPermissionId, v.StartDate, newEndDate, productId, productName, status).Exec()
+		//	if err != nil {
+		//		return err
+		//	}
+		//}
 	}
 	return
 }
 
 // ApplyReceive 原销售申请领取
-func ApplyReceive(companyId, productId, sysUserId, companyApprovalId, applyUserId int, sysUserName, productName string) (err error) {
+func ApplyReceive(companyId, productId, sysUserId, companyApprovalId, applyUserId int, sysUserName, productName string) (newCompanyReportPermissionList []*company_report_permission.CompanyReportPermission, startDate, endDate string, err error) {
 	o := orm.NewOrm()
 	tx, err := o.Begin()
 	if err != nil {
@@ -447,8 +536,8 @@ func ApplyReceive(companyId, productId, sysUserId, companyApprovalId, applyUserI
 	if err != nil {
 		return
 	}
-	startDate := time.Now().Format(utils.FormatDate)
-	endDate := time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
+	startDate = time.Now().Format(utils.FormatDate)
+	endDate = time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
 
 	//更新用户产品状态
 	sql := `UPDATE company_product SET status='试用',approve_status='已审批',try_out_time=NULL,last_description_time=NULL, start_date=?,end_date=?,seller_id=?,seller_name=?,group_id=?,department_id=?,modify_time=NOW(),try_stage=1,todo_status="无任务",todo_create_time=null,todo_approve_time=null,todo_modify_time=null,todo_end_time=null WHERE company_id=? AND product_id=? `
@@ -498,7 +587,7 @@ func ApplyReceive(companyId, productId, sysUserId, companyApprovalId, applyUserI
 	//修改 该联系人 与 当前销售的关系
 	sql = `UPDATE user_seller_relation SET seller_id=?,seller = ? ,modify_time=NOW() WHERE company_id = ? AND product_id=?`
 	_, err = tx.Raw(sql, sellerItem.AdminId, sellerItem.RealName, companyId, productId).Exec()
-	
+
 	//查询原先是否已经存在权限,如果有权限了,那么需要先删除原有的权限
 	count, _ := company_report_permission.GetCompanyReportPermissionCount(companyId, productId)
 	if count > 0 {
@@ -511,23 +600,46 @@ func ApplyReceive(companyId, productId, sysUserId, companyApprovalId, applyUserI
 	//获取需要试用的权限
 	delayPermissionItems, err := company_delay_permission.GetDelayPermissionItems(companyId, companyApprovalId)
 	if err != nil {
-		return err
+		return
 	}
 	status := `试用`
 	for _, v := range delayPermissionItems {
-		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,status) 
-			VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?) `
-		_, err = tx.Raw(sql, companyId, v.ChartPermissionId, v.ChartPermissionId, v.StartDate, v.EndDate, productId, productName, status).Exec()
-		if err != nil {
-			return err
+		tmpCompanyReportPermission := &company_report_permission.CompanyReportPermission{
+			//CompanyReportPermissionId: 0,
+			CompanyId:          companyId,
+			ReportPermissionId: v.ChartPermissionId,
+			CreatedTime:        time.Now(),
+			LastUpdatedTime:    time.Now(),
+			ChartPermissionId:  v.ChartPermissionId,
+			StartDate:          v.StartDate,
+			EndDate:            v.EndDate,
+			ProductId:          productId,
+			ProductName:        productName,
+			//CompanyContractId:         companyContractId,
+			Status:     status,
+			ModifyTime: time.Now(),
+			//IsUpgrade:                 pv.IsUpgrade,
+		}
+		newId, tmpErr := tx.Insert(tmpCompanyReportPermission)
+		if tmpErr != nil {
+			err = tmpErr
+			return
 		}
+		tmpCompanyReportPermission.CompanyReportPermissionId = newId
+		newCompanyReportPermissionList = append(newCompanyReportPermissionList, tmpCompanyReportPermission)
+		//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,status)
+		//	VALUES(?,?,NOW(),NOW(),?,?,?,?,?,NOW(),?) `
+		//_, err = tx.Raw(sql, companyId, v.ChartPermissionId, v.ChartPermissionId, v.StartDate, v.EndDate, productId, productName, status).Exec()
+		//if err != nil {
+		//	return err
+		//}
 	}
 	return
 }
 
 // ApplyServiceUpdate 申请服务更新
-func ApplyServiceUpdate(companyId, productId, sellerId, companyApprovalId, companyContractId int, startDate, endDate, sellerName, productName string, packageType int) (err error) {
+func ApplyServiceUpdate(companyId, productId, sellerId, companyApprovalId, companyContractId int, startDate, endDate, sellerName, productName string, packageType int) (newCompanyReportPermissionList []*company_report_permission.CompanyReportPermission, err error) {
 	o := orm.NewOrm()
 	tx, err := o.Begin()
 	if err != nil {
@@ -654,24 +766,57 @@ func ApplyServiceUpdate(companyId, productId, sellerId, companyApprovalId, compa
 
 			//如果 需要更新 字段 为 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 := tx.Raw(sql, pv.EndDate, pv.CompanyContractId, "正式", nowPermission.CompanyReportPermissionId).Exec()
-				err = tmpErr
+				nowPermission.EndDate = pv.EndDate
+				nowPermission.LastUpdatedTime = time.Now()
+				nowPermission.ModifyTime = time.Now()
+				nowPermission.CompanyContractId = pv.CompanyContractId
+				nowPermission.Status = "正式"
+				_, err = tx.Update(nowPermission, "EndDate", "LastUpdatedTime", "ModifyTime", "CompanyContractId", "Status")
 				if err != nil {
 					return
 				}
+
+				//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 := tx.Raw(sql, pv.EndDate, pv.CompanyContractId, "正式", 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(),?,?) `
-			_, tmpErr := tx.Raw(sql, companyId, pv.ChartPermissionId, pv.ChartPermissionId, pv.StartDate, pv.EndDate, productId, productName, companyContractId, "正式").Exec()
-			err = tmpErr
-			if err != nil {
+			nowPermission = &company_report_permission.CompanyReportPermission{
+				//CompanyReportPermissionId: 0,
+				CompanyId:          companyId,
+				ReportPermissionId: pv.ChartPermissionId,
+				CreatedTime:        time.Now(),
+				LastUpdatedTime:    time.Now(),
+				ChartPermissionId:  pv.ChartPermissionId,
+				StartDate:          pv.StartDate,
+				EndDate:            pv.EndDate,
+				ProductId:          productId,
+				ProductName:        productName,
+				//CompanyContractId:         companyContractId,
+				Status:     "正式",
+				ModifyTime: time.Now(),
+				//IsUpgrade:                 pv.IsUpgrade,
+			}
+			newId, tmpErr := tx.Insert(nowPermission)
+			if tmpErr != nil {
+				err = tmpErr
 				return
 			}
+			nowPermission.CompanyReportPermissionId = newId
+			//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(),?,?) `
+			//_, tmpErr := tx.Raw(sql, companyId, pv.ChartPermissionId, pv.ChartPermissionId, pv.StartDate, pv.EndDate, productId, productName, companyContractId, "正式").Exec()
+			//err = tmpErr
+			//if err != nil {
+			//	return
+			//}
 		}
+		newCompanyReportPermissionList = append(newCompanyReportPermissionList, nowPermission)
 	}
 	sql = `UPDATE company_contract SET status=1,modify_time=NOW() WHERE company_contract_id=? AND company_id=? AND product_id=? `
 	_, err = tx.Raw(sql, companyContractId, companyId, productId).Exec()

+ 81 - 0
models/tables/company_product_try_out_update_log/company_product_try_out_update_log.go

@@ -0,0 +1,81 @@
+package company_product_try_out_update_log
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_mobile_admin/models/tables/company_product_try_out_update_permission_log"
+	"hongze/hongze_mobile_admin/models/tables/company_report_permission"
+	"time"
+)
+
+// CompanyProductTryOutUpdateLog 客户产品试用变更日志表
+type CompanyProductTryOutUpdateLog struct {
+	Id          int       `orm:"column(id);pk"`
+	CompanyId   int       `description:"客户id"`
+	ProductId   int       `description:"产品id"`
+	SellerId    int       `description:"销售id"`
+	SellerName  string    `description:"销售名称"`
+	Source      string    `description:"来源"`
+	StartDate   time.Time `description:"开始日期"`
+	EndDate     time.Time `description:"结束日期"`
+	RealEndDate time.Time `description:"实际结束日期"`
+	IsStop      int       `description:"是否已经终止了,0:进行中;1:已终止"`
+	CreateTime  time.Time `description:"创建时间"`
+}
+
+// Update 更新客户产品试用变更日志
+func (item *CompanyProductTryOutUpdateLog) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(item, cols...)
+	return
+}
+
+// AddCompanyProductTryOutUpdateLog 新增客户试用产品变更日志
+func AddCompanyProductTryOutUpdateLog(item *CompanyProductTryOutUpdateLog, companyReportPermissionList []*company_report_permission.CompanyReportPermission) (err error) {
+	o := orm.NewOrm()
+	lastId, err := o.Insert(item)
+	if err != nil {
+		return
+	}
+	item.Id = int(lastId)
+
+	companyProductUpdatePermissionLogList := make([]*company_product_try_out_update_permission_log.CompanyProductTryOutUpdatePermissionLog, 0)
+	for _, v := range companyReportPermissionList {
+		tmpCompanyProductUpdatePermissionLog := &company_product_try_out_update_permission_log.CompanyProductTryOutUpdatePermissionLog{
+			//Id:                        0,
+			CompanyProductUpdateLogId: item.Id,
+			ChartPermissionId:         v.ChartPermissionId,
+			StartDate:                 item.StartDate,
+			EndDate:                   item.EndDate,
+			RealEndDate:               item.StartDate,
+			IsStop:                    item.IsStop,
+			CreateTime:                item.CreateTime,
+		}
+		companyProductUpdatePermissionLogList = append(companyProductUpdatePermissionLogList, tmpCompanyProductUpdatePermissionLog)
+	}
+
+	if len(companyProductUpdatePermissionLogList) > 0 {
+		_, err = o.InsertMulti(len(companyProductUpdatePermissionLogList), companyProductUpdatePermissionLogList)
+	}
+
+	{
+		// 获取当前正在进行中的客户变更试用的数据
+		findProgress, _ := GetCompanyProductTryOutUpdateLogItem(item.CompanyId, item.ProductId)
+		// 如果没有的话,那么就将试用天数+1
+		if findProgress != nil {
+			sql := `UPDATE  company_product
+			SET
+			  try_out_day_total = try_out_day_total+1
+			WHERE company_id = ? AND product_id = ?`
+			_, err = o.Raw(sql, item.CompanyId, item.ProductId).Exec()
+		}
+	}
+	return
+}
+
+// GetCompanyProductTryOutUpdateLogItem 获取当前正在进行中的客户变更试用的数据
+func GetCompanyProductTryOutUpdateLogItem(companyId, productId int) (item *CompanyProductTryOutUpdateLog, err error) {
+	o := orm.NewOrm()
+	sql := ` select * from company_product_try_out_update_log where company_id=? and product_id=? and is_stop = 0`
+	err = o.Raw(sql, companyId, productId).QueryRow(&item)
+	return
+}

+ 25 - 0
models/tables/company_product_try_out_update_permission_log/company_product_try_out_update_permission_log.go

@@ -0,0 +1,25 @@
+package company_product_try_out_update_permission_log
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// CompanyProductTryOutUpdatePermissionLog 客户产品变更品种详情表
+type CompanyProductTryOutUpdatePermissionLog struct {
+	Id                        int       `orm:"column(id);pk"`
+	CompanyProductUpdateLogId int       `description:"产品变更id"`
+	ChartPermissionId         int       `description:"品种权限id"`
+	StartDate                 time.Time `description:"开始日期"`
+	EndDate                   time.Time `description:"结束日期"`
+	RealEndDate               time.Time `description:"实际结束日期"`
+	IsStop                    int       `description:"是否已经终止了,0:进行中;1:已终止"`
+	CreateTime                time.Time `description:"创建时间"`
+}
+
+// Update 更新客户产品变更品种详情
+func (item *CompanyProductTryOutUpdatePermissionLog) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(item, cols...)
+	return
+}

+ 12 - 9
models/tables/company_product_update_log/company_product_update_log.go

@@ -7,15 +7,18 @@ import (
 
 // CompanyProductUpdateLog 客户产品变更日志表
 type CompanyProductUpdateLog struct {
-	Id         int       `orm:"column(id);pk"`
-	CompanyId  int       `description:"客户id"`
-	ProductId  int       `description:"产品id"`
-	Status     string    `description:"变更后的状态"`
-	SellerId   int       `description:"销售id"`
-	SellerName string    `description:"销售名称"`
-	Source     string    `description:"来源"`
-	IsFormal   int       `description:"是否已经转正式,0是没有转正式,1是已经转过正式"`
-	CreateTime time.Time `description:"创建时间"`
+	Id          int       `orm:"column(id);pk"`
+	CompanyId   int       `description:"客户id"`
+	ProductId   int       `description:"产品id"`
+	Status      string    `description:"变更后的状态"`
+	SellerId    int       `description:"销售id"`
+	SellerName  string    `description:"销售名称"`
+	Source      string    `description:"来源"`
+	IsFormal    int       `description:"是否已经转正式,0是没有转正式,1是已经转过正式"`
+	StartDate   time.Time `description:"开始日期"`
+	EndDate     time.Time `description:"结束日期"`
+	RealEndDate time.Time `description:"实际结束日期"`
+	CreateTime  time.Time `description:"创建时间"`
 }
 
 // AddCompanyProductUpdateLog 新增客户产品变更日志

+ 10 - 3
models/tables/company_report_permission/company_report_permission.go

@@ -51,7 +51,7 @@ type PermissionLookItem struct {
 	ExpireDay         string `description:"到期天数"`
 	ClassifyName      string `description:"分类"`
 	Remark            string `description:"备注"`
-	IsUpgrade         int       `description:"是否升级,1是,0否"`
+	IsUpgrade         int    `description:"是否升级,1是,0否"`
 }
 
 func GetCompanyPermissionCheck(companyId, permissionId int) (count int, err error) {
@@ -75,11 +75,18 @@ func GetPermissionLookItems(productId int, classifyName string) (items []*Permis
 	return
 }
 
-
 //GetCompanyContractPermissionByCompanyContractId 根据合同ID获取开通的权限
 func GetCompanyContractPermissionByCompanyContractId(companyContractId int) (items []*PermissionLookItem, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM company_contract_permission WHERE company_contract_id =? ORDER BY modify_time DESC `
 	_, err = o.Raw(sql, companyContractId).QueryRows(&items)
 	return
-}
+}
+
+// GetCompanyPermission 根据客户id和品种id获取对应的数据
+func GetCompanyPermission(companyId, permissionId int) (item *CompanyReportPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company_report_permission AS a WHERE a.company_id=? AND a.chart_permission_id=? `
+	err = o.Raw(sql, companyId, permissionId).QueryRow(&item)
+	return
+}

+ 53 - 17
services/company_approval/company_approval.go

@@ -15,7 +15,9 @@ import (
 	"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_log"
+	"hongze/hongze_mobile_admin/models/tables/company_product_try_out_update_log"
 	"hongze/hongze_mobile_admin/models/tables/company_product_update_log"
+	"hongze/hongze_mobile_admin/models/tables/company_report_permission"
 	"hongze/hongze_mobile_admin/models/tables/contract_approval"
 	"hongze/hongze_mobile_admin/models/tables/contract_approval_record"
 	"hongze/hongze_mobile_admin/services"
@@ -605,7 +607,9 @@ func afterApproved(companyApprovalId int, opUserId int, opUserName string) (err
 
 	logSellerId := recodeInfo.ApplyUserId
 	logSellerName := recodeInfo.ApplyRealName
-	isAddCompanyProductUpdateLog := true //是否添加变更日志
+	isAddCompanyProductUpdateLog := true                                                         //是否添加变更日志
+	companyReportPermissionList := make([]*company_report_permission.CompanyReportPermission, 0) //需要变更的品种列表
+	var startDate, endDate string                                                                //变更到最新的日期
 
 	switch recodeInfo.ApplyMethod {
 	case 1: //试用转正式
@@ -641,7 +645,9 @@ func afterApproved(companyApprovalId int, opUserId int, opUserName string) (err
 		//}
 		//如果合同时间小于等于今天,那么立马执行合同内容
 		if time.Now().After(contractStartDate) {
-			tmpErr = company_approval.TryOutToFormal(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId, contractInfo.StartDate, contractInfo.EndDate, opUser.RealName, companyProduct.ProductName, contractInfo.PackageType)
+			startDate = contractInfo.StartDate
+			endDate = contractInfo.EndDate
+			companyReportPermissionList, tmpErr = company_approval.TryOutToFormal(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId, contractInfo.StartDate, contractInfo.EndDate, opUser.RealName, companyProduct.ProductName, contractInfo.PackageType)
 			if tmpErr != nil {
 				err = errors.New("试用转正式失败,Err:" + tmpErr.Error())
 				return
@@ -663,21 +669,27 @@ func afterApproved(companyApprovalId int, opUserId int, opUserName string) (err
 			_ = companyProduct.Update(cols)
 		}
 	case 2: //冻结->试用
-		tmpErr := company_approval.FreezeToTryOut(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, recodeInfo.ApplyUserId, opUser.RealName, companyProduct.ProductName)
+		tmpCompanyReportPermissionList, tmpStartDate, tmpEndDate, tmpErr := company_approval.FreezeToTryOut(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, recodeInfo.ApplyUserId, opUser.RealName, companyProduct.ProductName)
 		if tmpErr != nil {
 			err = errors.New("冻结转试用失败,Err:" + tmpErr.Error())
 			return
 		}
+		companyReportPermissionList = tmpCompanyReportPermissionList
+		startDate = tmpStartDate
+		endDate = tmpEndDate
 	case 3: //试用延期
-		tmpErr := company_approval.TryOutDelay(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, opUser.RealName, companyProduct.EndDate, companyProduct.ProductName)
+		tmpCompanyReportPermissionList, tmpEndDate, tmpErr := company_approval.TryOutDelay(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, opUser.RealName, companyProduct.EndDate, companyProduct.ProductName)
 		if tmpErr != nil {
 			err = errors.New("试用延期失败,Err:" + tmpErr.Error())
 			return
 		}
+		companyReportPermissionList = tmpCompanyReportPermissionList
+		startDate = companyProduct.StartDate
+		endDate = tmpEndDate
 	case 4: //原销售申请领取流失客户
-		tmpErr := company_approval.ApplyReceive(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, recodeInfo.ApplyUserId, opUser.RealName, companyProduct.ProductName)
-		if tmpErr != nil {
-			err = errors.New("原销售申请领取流失客户失败,Err:" + tmpErr.Error())
+		companyReportPermissionList, startDate, endDate, err = company_approval.ApplyReceive(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, recodeInfo.ApplyUserId, opUser.RealName, companyProduct.ProductName)
+		if err != nil {
+			err = errors.New("原销售申请领取流失客户失败,Err:" + err.Error())
 			return
 		}
 	case 5, 6: //正式客户申请服务更新
@@ -714,7 +726,7 @@ func afterApproved(companyApprovalId int, opUserId int, opUserName string) (err
 
 		//如果合同时间小于等于今天,那么立马执行合同内容
 		if time.Now().After(contractStartDate) {
-			err = company_approval.ApplyServiceUpdate(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, recodeInfo.CompanyContractId, companyProduct.StartDate, contractInfo.EndDate, opUser.RealName, companyProduct.ProductName, contractInfo.PackageType)
+			companyReportPermissionList, err = company_approval.ApplyServiceUpdate(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, recodeInfo.CompanyContractId, companyProduct.StartDate, contractInfo.EndDate, opUser.RealName, companyProduct.ProductName, contractInfo.PackageType)
 			if tmpErr != nil {
 				err = errors.New(fmt.Sprint("正式客户申请服务更新失败,执行失败;Err:" + tmpErr.Error()))
 				return
@@ -802,18 +814,42 @@ func afterApproved(companyApprovalId int, opUserId int, opUserName string) (err
 		case 6: //正式客户新增补充协议
 			updateSource = "add_agreement"
 		}
+
+		startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
+		endDateTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
 		companyProductUpdateLog := &company_product_update_log.CompanyProductUpdateLog{
-			Id:         0,
-			CompanyId:  companyProduct.CompanyId,
-			ProductId:  companyProduct.ProductId,
-			Status:     companyProduct.Status,
-			SellerId:   logSellerId,
-			SellerName: logSellerName,
-			Source:     updateSource,
-			IsFormal:   companyProduct.IsFormal, //是否已经转正式,0是没有转正式,1是已经转过正式
-			CreateTime: time.Now(),
+			Id:          0,
+			CompanyId:   companyProduct.CompanyId,
+			ProductId:   companyProduct.ProductId,
+			Status:      companyProduct.Status,
+			SellerId:    logSellerId,
+			SellerName:  logSellerName,
+			Source:      updateSource,
+			IsFormal:    companyProduct.IsFormal, //是否已经转正式,0是没有转正式,1是已经转过正式
+			StartDate:   startDateTime,
+			EndDate:     endDateTime,
+			RealEndDate: startDateTime,
+			CreateTime:  time.Now(),
 		}
 		go company_product_update_log.AddCompanyProductUpdateLog(companyProductUpdateLog)
+
+		// 2: //冻结->试用;3: //试用延期;4: //原销售申请领取流失客户;
+		if recodeInfo.ApplyMethod == 2 || recodeInfo.ApplyMethod == 3 || recodeInfo.ApplyMethod == 4 {
+			companyProductTryOutUpdateLog := &company_product_try_out_update_log.CompanyProductTryOutUpdateLog{
+				Id:          0,
+				CompanyId:   companyProduct.CompanyId,
+				ProductId:   companyProduct.ProductId,
+				SellerId:    logSellerId,
+				SellerName:  logSellerName,
+				Source:      updateSource,
+				StartDate:   startDateTime,
+				EndDate:     endDateTime,
+				RealEndDate: startDateTime,
+				IsStop:      0,
+				CreateTime:  time.Now(),
+			}
+			go company_product_try_out_update_log.AddCompanyProductTryOutUpdateLog(companyProductTryOutUpdateLog, companyReportPermissionList)
+		}
 	}
 	return
 }