Browse Source

no message

zhangchuanxing 10 hours ago
parent
commit
3b88d72843

+ 1 - 1
controllers/company_approval.go

@@ -513,7 +513,6 @@ func (this *CompanyApprovalController) List() {
 				item.CompanyProductStatus = utils.COMPANY_STATUS_X_CLASS_TRY_OUT
 			}
 			if item.WxUserId > 0 {
-				item.CompanyName = item.WxUserName + "(" + item.CompanyName + ")"
 				item.ApplyContent = "个人转正"
 			}
 
@@ -549,6 +548,7 @@ func (this *CompanyApprovalController) List() {
 				ApplyRealName: item.ApplyRealName,
 				ApplyUserId:   item.ApplyUserId,
 				WxUserId:      item.WxUserId,
+				WxUserName:    item.WxUserName,
 				OpButton:      opButton,
 			}
 

+ 112 - 0
models/company/company_approval.go

@@ -117,6 +117,7 @@ type CompanyApprovalList struct {
 	ApplyContractType int            `description:"申请合同类型  0 非标  1 标准"`
 	ApplyUserId       int            `description:"申请人编号id" json:"-"`
 	WxUserId          int            `description:"用户id,针对某份合同仅对单个用户使用的时候的场景"`
+	WxUserName        string         `description:"用户姓名,针对某份合同仅对单个用户使用的时候的场景"`
 }
 
 // ApprovalButton 审批操作权限
@@ -283,6 +284,83 @@ func TryOutToFormal(companyId, productId, sellerId, companyApprovalId, companyCo
 	return
 }
 
+// TryOutToFormalByWxUser 试用转正式
+func TryOutToFormalByWxUser(companyId, productId, sellerId, companyApprovalId, companyContractId int, startDate, endDate, sellerName, productName string, packageType, raiPackageType, userId int) (newCompanyReportPermissionList []*CompanyReportPermission, err error) {
+	o := orm.NewOrm()
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			tmpErr := to.Rollback()
+			if tmpErr != nil {
+				go alarm_msg.SendAlarmMsg("TryOutToFormalByWxUser 事务回滚失败,Err:"+tmpErr.Error(), 3)
+			}
+		} else {
+			err = to.Commit()
+		}
+	}()
+	var sql string
+
+	sql = `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
+	_, err = to.Raw(sql, companyApprovalId, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+	items := make([]*UserReportPermission, 0)
+	sql = `SELECT * FROM company_report_permission WHERE company_id=? AND product_id=? `
+	_, err = to.Raw(sql, companyId, productId).QueryRows(&items)
+	for _, pv := range items {
+		cpLog := new(UserPermissionLog)
+		cpLog.CompanyId = companyId
+		cpLog.ChartPermissionId = pv.ChartPermissionId
+		cpLog.CreateTime = time.Now()
+		cpLog.SysUserId = sellerId
+		cpLog.SysUserName = sellerName
+		cpLog.StartDate = pv.StartDate
+		cpLog.EndDate = pv.EndDate
+		cpLog.ProductId = productId
+		cpLog.ProductName = pv.ProductName
+		go AddUserPermissionLog(cpLog)
+	}
+
+	contractPermission := make([]*CompanyReportPermission, 0)
+	sql = `SELECT * FROM company_contract_permission WHERE company_contract_id=? AND company_id=? `
+	_, err = to.Raw(sql, companyContractId, companyId).QueryRows(&contractPermission)
+	if err != nil {
+		return
+	}
+	for _, pv := range contractPermission {
+		tmpUserReportPermission := &UserReportPermission{
+			UserId:             userId,
+			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(),
+		}
+		_, tmpErr := to.Insert(tmpUserReportPermission)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+	}
+	sql = `UPDATE company_contract SET status=1 WHERE company_contract_id=? AND company_id=? AND product_id=? `
+	_, err = to.Raw(sql, companyContractId, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+	return
+}
+
 // TryOutToFormalXClassRai 权益客户试用转正式
 func TryOutToFormalXClassRai(companyId, productId, sellerId, companyApprovalId, companyContractId int, startDate, endDate, sellerName, productName string, raiPackageType int) (newCompanyReportPermissionList []*CompanyReportPermission, err error) {
 	o := orm.NewOrm()
@@ -1122,6 +1200,40 @@ func ApplyApproveContract(companyId, productId, companyApprovalId, companyContra
 	return
 }
 
+// ApplyApproveContract 更新审批单、合同状态
+func ApplyApproveContractByUser(companyId, productId, companyApprovalId, companyContractId int) (err error) {
+	o := orm.NewOrm()
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			tmpErr := to.Rollback()
+			if tmpErr != nil {
+				go alarm_msg.SendAlarmMsg("ApplyApproveContract 事务回滚失败,Err:"+tmpErr.Error(), 3)
+			}
+		} else {
+			err = to.Commit()
+		}
+	}()
+
+	//更新审批单
+	sql := `UPDATE company_approval SET approve_status='已审批',approve_time=NOW(),modify_time=NOW() WHERE company_approval_id=? AND company_id=? AND product_id=? `
+	_, err = to.Raw(sql, companyApprovalId, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+
+	//更新合同
+	sql = `UPDATE company_contract SET status=1 WHERE company_contract_id=? AND company_id=? AND product_id=? `
+	_, err = to.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()

+ 1 - 1
models/company/company_permission_log.go

@@ -18,7 +18,7 @@ type CompanyPermissionLog struct {
 	ProductName       string
 }
 
-//新增客户权限日志
+// 新增客户权限日志
 func AddCompanyPermissionLog(item *CompanyPermissionLog) (err error) {
 	o := orm.NewOrm()
 	_, err = o.Insert(item)

+ 26 - 0
models/company/user_permission_log.go

@@ -0,0 +1,26 @@
+package company
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type UserPermissionLog struct {
+	Id                int `orm:"column(id);pk"`
+	CompanyId         int
+	ChartPermissionId int
+	CreateTime        time.Time
+	SysUserId         int
+	SysUserName       string
+	StartDate         string
+	EndDate           string
+	ProductId         int
+	ProductName       string
+}
+
+// 新增用户权限日志
+func AddUserPermissionLog(item *UserPermissionLog) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 30 - 0
models/company/user_report_permission.go

@@ -0,0 +1,30 @@
+package company
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type UserReportPermission struct {
+	UserReportPermissionId int64     `orm:"column(user_report_permission_id);pk"`
+	UserId                 int       `description:"用户ID"`
+	CompanyId              int       `description:"公司ID"`
+	ReportPermissionId     int       `description:"权限ID"`
+	CreatedTime            time.Time `description:"创建时间"`
+	LastUpdatedTime        time.Time `description:"修改时间"`
+	ChartPermissionId      int       `description:"权限ID"`
+	StartDate              string    `description:"权限开始日期"`
+	EndDate                string    `description:"权限结束日期"`
+	ProductId              int       `description:"产品id"`
+	ProductName            string    `description:"产品名称"`
+	CompanyContractId      int       `description:"合同id"`
+	Status                 string    `description:"'正式','试用','关闭'"`
+	ModifyTime             time.Time `description:"修改时间"`
+}
+
+// 新增用户权限
+func AddUserReportPermission(item *UserReportPermission) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 2 - 0
models/db.go

@@ -271,6 +271,8 @@ func initCompany() {
 		new(company.CompanyHistoryRemark),                    // 客户记录历史备注表
 		new(company.CompanyHistoryRemarkLog),                 // 客户记录历史备注日志表
 		new(company.WxUserMoveLog),                           // 客户联系人移动记录日志表
+		new(company.UserReportPermission),                    // 用户权限表
+		new(company.UserPermissionLog),                       // 用户权限日志表
 	)
 }
 

+ 43 - 14
services/company_apply/company_approval.go

@@ -672,29 +672,19 @@ func afterApproved(companyApprovalId int, opUserId int, opUserName string) (err
 		//	br.ErrMsg = "产品中合同结束时间转换失败,Err:" + err.Error()
 		//	return
 		//}
-		//如果是权益的用户客户转正审批单独走
-		if companyProduct.Status == utils.COMPANY_STATUS_FOREVER && companyProduct.ProductId == 2 {
-			//contractInfo.StartDate = contractStartDate.AddDate(0, 4, 0).Format(utils.FormatDate) // 开始时间与结束时间都加三个月
-			//contractInfo.EndDate = contractEndDate.AddDate(0, 4, 0).Format(utils.FormatDate)
-			startDate = contractInfo.StartDate
-			endDate = contractInfo.EndDate
-			companyReportPermissionList, tmpErr = company.TryOutToFormalXClassRai(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId, contractInfo.StartDate, contractInfo.EndDate, opUser.RealName, companyProduct.ProductName, contractInfo.RaiPackageType)
-			if tmpErr != nil {
-				err = errors.New("试用转正式失败,Err:" + tmpErr.Error())
-				return
-			}
-		} else {
+
+		if contractInfo.WxUserId > 0 {
 			//如果合同时间小于等于今天,那么立马执行合同内容
 			if time.Now().After(contractStartDate) {
 				startDate = contractInfo.StartDate
 				endDate = contractInfo.EndDate
-				companyReportPermissionList, tmpErr = company.TryOutToFormal(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId, contractInfo.StartDate, contractInfo.EndDate, opUser.RealName, companyProduct.ProductName, contractInfo.PackageType, contractInfo.RaiPackageType)
+				companyReportPermissionList, tmpErr = company.TryOutToFormalByWxUser(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId, contractInfo.StartDate, contractInfo.EndDate, opUser.RealName, companyProduct.ProductName, contractInfo.PackageType, contractInfo.RaiPackageType, contractInfo.WxUserId)
 				if tmpErr != nil {
 					err = errors.New("试用转正式失败,Err:" + tmpErr.Error())
 					return
 				}
 			} else {
-				tmpErr = company.ApplyApproveContract(recodeInfo.CompanyId, recodeInfo.ProductId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId)
+				tmpErr = company.ApplyApproveContractByUser(recodeInfo.CompanyId, recodeInfo.ProductId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId)
 				if tmpErr != nil {
 					err = errors.New("试用转正式失败,Err:" + tmpErr.Error())
 					return
@@ -709,6 +699,45 @@ func afterApproved(companyApprovalId int, opUserId int, opUserName string) (err
 				cols = append(cols, "ContractEndDate")
 				_ = companyProduct.Update(cols)
 			}
+		} else {
+			//如果是权益的用户客户转正审批单独走
+			if companyProduct.Status == utils.COMPANY_STATUS_FOREVER && companyProduct.ProductId == 2 {
+				//contractInfo.StartDate = contractStartDate.AddDate(0, 4, 0).Format(utils.FormatDate) // 开始时间与结束时间都加三个月
+				//contractInfo.EndDate = contractEndDate.AddDate(0, 4, 0).Format(utils.FormatDate)
+				startDate = contractInfo.StartDate
+				endDate = contractInfo.EndDate
+				companyReportPermissionList, tmpErr = company.TryOutToFormalXClassRai(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId, contractInfo.StartDate, contractInfo.EndDate, opUser.RealName, companyProduct.ProductName, contractInfo.RaiPackageType)
+				if tmpErr != nil {
+					err = errors.New("试用转正式失败,Err:" + tmpErr.Error())
+					return
+				}
+			} else {
+				//如果合同时间小于等于今天,那么立马执行合同内容
+				if time.Now().After(contractStartDate) {
+					startDate = contractInfo.StartDate
+					endDate = contractInfo.EndDate
+					companyReportPermissionList, tmpErr = company.TryOutToFormal(recodeInfo.CompanyId, recodeInfo.ProductId, opUser.AdminId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId, contractInfo.StartDate, contractInfo.EndDate, opUser.RealName, companyProduct.ProductName, contractInfo.PackageType, contractInfo.RaiPackageType)
+					if tmpErr != nil {
+						err = errors.New("试用转正式失败,Err:" + tmpErr.Error())
+						return
+					}
+				} else {
+					tmpErr = company.ApplyApproveContract(recodeInfo.CompanyId, recodeInfo.ProductId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId)
+					if tmpErr != nil {
+						err = errors.New("试用转正式失败,Err:" + tmpErr.Error())
+						return
+					}
+					//不添加日志
+					isAddCompanyProductUpdateLog = false
+				}
+				//如果合同中的结束日期大于产品中的合同结束日期,那么就去修改产品中的合同结束日期
+				if contractEndDate.After(companyProduct.ContractEndDate) {
+					companyProduct.ContractEndDate = contractEndDate
+					cols := make([]string, 0)
+					cols = append(cols, "ContractEndDate")
+					_ = companyProduct.Update(cols)
+				}
+			}
 		}
 	case 2: //冻结->试用
 		//权益的 x类试用转冻结的申请解冻