package cygx import ( "errors" "fmt" "github.com/tealeg/xlsx" "hongze/hz_crm_api/models/company" "hongze/hz_crm_api/models/cygx" "hongze/hz_crm_api/services/alarm_msg" "hongze/hz_crm_api/utils" "strconv" "time" ) // 获取公司剩余点数 func GetCygxActivityPointsCompanyByCompanyId(companyId int) (points string) { var err error points = "0" // 默认都展示 0 defer func() { if err != nil { go alarm_msg.SendAlarmMsg("获取公司剩余点数失败:"+err.Error(), 2) } }() pointsCompany, e := cygx.GetCygxActivityPointsCompanyByCompanyId(companyId) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetCygxActivityPointsCompanyByCompanyId,Err" + e.Error()) return } if pointsCompany == nil { return } //转字符串 points = fmt.Sprint(pointsCompany.Points) return } // CheckActivityPointsSet 校验研选扣点内容 func CheckActivityPointsSet(pointsSet *cygx.CygxActivityPointsSetRsq, activityId int) (errMsg string, itemResp *cygx.CygxActivityPointsSet, err error) { //校验研选扣点内容 if pointsSet == nil { return } switch pointsSet.PointsObject { case "": errMsg = "请选择扣点对象" case "1": if pointsSet.UserPointsNum == "" { errMsg = "参会人扣点数量不能为空" } case "2": if pointsSet.CompanyPointsNum == "" { errMsg = "办会人扣点数量不能为空" } if pointsSet.CompanyId == 0 { errMsg = "请选择对应公司" } case "3": if pointsSet.UserPointsNum == "" { errMsg = "参会人扣点数量不能为空" } if pointsSet.CompanyPointsNum == "" { errMsg = "办会人扣点数量不能为空" } if pointsSet.CompanyId == 0 { errMsg = "请选择对应公司" } } companyId := pointsSet.CompanyId if companyId > 0 { pointsCompany, e := cygx.GetCygxActivityPointsCompanyByCompanyId(companyId) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetCygxActivityPointsCompanyByCompanyId,Err" + e.Error()) return } if pointsCompany == nil { errMsg = "公司剩余点数不足" return } companyPointsNum, _ := strconv.ParseFloat(pointsSet.CompanyPointsNum, 2) if companyPointsNum == 0 { errMsg = "办会人扣点数量设置有误" + pointsSet.CompanyPointsNum } if activityId == 0 { if companyPointsNum > pointsCompany.Points { errMsg = "公司剩余点数不足" } } else { pointsSetDetail, e := cygx.GetCygxActivityPointsSetDetail(activityId) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetCygxActivityPointsSetDetail, Err: " + e.Error()) return } if pointsSetDetail != nil { if pointsSetDetail.CompanyId != companyId { if companyPointsNum > pointsCompany.Points { errMsg = "公司剩余点数不足" } } else { //查询最新的一条针对这个公司的扣点记录 var condition string var pars []interface{} condition += ` AND activity_id = ? AND company_id = ? AND mobile = '' ORDER BY id DESC LIMIT 1 ` pars = append(pars, activityId, companyId) activityPointsBillDetail, e := cygx.GetCygxActivityPointsBillDetailByCondition(condition, pars) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetCompanyPoints, Err: " + e.Error()) return } if activityPointsBillDetail != nil { CompanyPointsNumOld, _ := strconv.ParseFloat(pointsSetDetail.CompanyPointsNum, 2) if pointsCompany.Points-companyPointsNum+CompanyPointsNumOld < 0 { errMsg = "公司剩余点数不足" } } } } else { if companyPointsNum > pointsCompany.Points { errMsg = "公司剩余点数不足" } } } } if errMsg != "" { return } item := new(cygx.CygxActivityPointsSet) item.PointsObject = pointsSet.PointsObject item.CompanyId = pointsSet.CompanyId item.CompanyName = pointsSet.CompanyName item.UserPointsNum = pointsSet.UserPointsNum item.PointsType = pointsSet.PointsType item.CompanyPointsNum = pointsSet.CompanyPointsNum item.CancelDeadlineType = pointsSet.CancelDeadlineType item.CreateTime = time.Now() item.ModifyTime = time.Now() itemResp = item return } // UpdateYanXuanActivityPointsBillOldComapny 活动内容编辑的时候对原有的公司进行返点 func UpdateYanXuanActivityPointsBillOldComapny(activityInfo *cygx.ActivityDetail, adminId int, pointsSet *cygx.CygxActivityPointsSet, pointsSetOld *cygx.CygxActivityPointsSetRsq) (errMsg string, itemResp *cygx.CygxActivityPointsSet, err error) { defer func() { if err != nil { go alarm_msg.SendAlarmMsg("获取公司剩余点数失败:"+err.Error(), 2) } }() activityId := activityInfo.ActivityId var companyIdNew int var companyIdOld int if pointsSetOld == nil { return } companyIdOld = pointsSetOld.CompanyId if pointsSet != nil { companyIdNew = pointsSet.CompanyId } if companyIdNew == companyIdOld && companyIdNew > 0 { go YanXuanActivityPointsBillActivityEdit(activityId, adminId) //活动编辑处理研选扣点 } //如果新老机构一样或者非办会人扣点,那么不做任何处理 if companyIdNew == companyIdOld || companyIdOld == 0 { return } comapny, e := company.GetCompanyDetailById(companyIdOld) if e != nil { err = errors.New("GetCompanyDetailById" + e.Error()) return } companyPointsNumOld, _ := strconv.ParseFloat(pointsSetOld.CompanyPointsNum, 2) var items []*cygx.CygxActivityPointsBill item := new(cygx.CygxActivityPointsBill) var itemCompanys []*cygx.CygxActivityPointsCompany itemCompany := new(cygx.CygxActivityPointsCompany) // 获取用户所在公司剩余的点 companyPointsNum, e := cygx.GetCompanyPoints(companyIdOld) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetCompanyPoints, Err: " + e.Error()) return } item.ActivityId = activityId item.CreateTime = time.Now() item.CompanyId = comapny.CompanyId item.CompanyName = comapny.CompanyName item.BillDetailed = companyPointsNumOld item.RegisterPlatform = 0 item.AdminId = int64(adminId) item.Source = 2 item.ChartPermissionId = activityInfo.ChartPermissionId item.DoType = 2 item.Content = activityInfo.ActivityName + "--取消办会" item.Points = companyPointsNum + companyPointsNumOld items = append(items, item) //更新对应机构的剩余点数 itemCompany.CompanyId = comapny.CompanyId itemCompany.Points = item.Points itemCompany.ModifyTime = time.Now() itemCompanys = append(itemCompanys, itemCompany) //fmt.Println("更换公司处理返点") e = cygx.AddCygxActivityPointsBillMulti(items, itemCompanys) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("AddCygxActivityPointsBillMulti, Err: " + e.Error()) return } return } // 1用户报名添加到处理研选扣点 func YanXuanActivityPointsBillSignupAdd(activityId, uid, adminId int) (err error) { defer func() { if err != nil { fmt.Println(err) msg := fmt.Sprint("activityId:", activityId, "userId:", uid) go alarm_msg.SendAlarmMsg("用户报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2) } }() //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"` log := &cygx.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 1, AdminId: adminId, Source: 2, CreateTime: time.Now()} if utils.Re == nil { err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log) if err != nil { fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error()) } } return } // 2用户取消报名添加到处理研选扣点 func YanXuanActivityPointsBillSignupCancel(activityId, uid, adminId int) (err error) { defer func() { if err != nil { fmt.Println(err) msg := fmt.Sprint("activityId:", activityId, "userId:", uid) go alarm_msg.SendAlarmMsg("用户取消报名添加到处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2) } }() //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"` log := &cygx.YanXuanActivityPointsRedis{UserId: uid, ActivityId: activityId, SourceType: 2, AdminId: adminId, Source: 2, CreateTime: time.Now()} if utils.Re == nil { err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log) if err != nil { fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error()) } } return } // 3 活动编辑处理研选扣点 func YanXuanActivityPointsBillActivityEdit(activityId, adminId int) (err error) { defer func() { if err != nil { fmt.Println(err) msg := fmt.Sprint("activityId:", activityId) go alarm_msg.SendAlarmMsg("活动编辑理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2) } }() //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"` log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 3, AdminId: adminId, Source: 2, CreateTime: time.Now()} if utils.Re == nil { err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log) if err != nil { fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error()) } } return } // 4 活动发布以及取消发布处理研选扣点 func YanXuanActivityPointsBillActivityPublishAndCancel(activityId, adminId, publishStatus int) (err error) { defer func() { if err != nil { fmt.Println(err) msg := fmt.Sprint("activityId:", activityId) go alarm_msg.SendAlarmMsg("活动发布以及取消发布处理研选扣点,写入Redis队列消息失败:"+err.Error()+msg, 2) } }() //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"` log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 4, AdminId: adminId, Source: 2, PublishStatus: publishStatus, CreateTime: time.Now()} if utils.Re == nil { err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log) if err != nil { fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error()) } } return } // 5 活动到会研选扣点处理 func YanXuanActivityPointsBillSubmitMeeting(activityId, adminId int) (err error) { defer func() { if err != nil { fmt.Println(err) msg := fmt.Sprint("activityId:", activityId) go alarm_msg.SendAlarmMsg("活动到会研选扣点处理,写入Redis队列消息失败:"+err.Error()+msg, 2) } }() //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。6:研选审批通过的时候研选扣点更新、 7:正式专试用定时任务更新研选扣点"` log := &cygx.YanXuanActivityPointsRedis{ActivityId: activityId, SourceType: 5, AdminId: adminId, Source: 2, CreateTime: time.Now()} if utils.Re == nil { err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log) if err != nil { fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error()) } } return } // 6 研选审批通过的时候研选扣点更新 func YanXuanCompanyApproval(comapnyId, companyContractId int) (err error) { defer func() { if err != nil { fmt.Println(err) msg := fmt.Sprint("comapnyId:", comapnyId) go alarm_msg.SendAlarmMsg("研选审批通过的时候研选扣点更新,写入Redis队列消息失败:"+err.Error()+msg, 2) } }() //SourceType int `description:"1:报名、 2:取消报名、3:活动编辑、4:活动发布,取消发布、5:活动到会。"` log := &cygx.YanXuanActivityPointsRedis{ComapnyId: comapnyId, CompanyContractId: companyContractId, SourceType: 6, Source: 2, CreateTime: time.Now()} if utils.Re == nil { err := utils.Rc.LPush(utils.CYGX_YANXUAN_POINTS_KEY, log) if err != nil { fmt.Println("YanXuanActivityPointsRedis LPush Err:" + err.Error()) } } return } func init0703() { //2023.07.03剩余服务点数初始化 path := "0703.xlsx" xlFile, err := xlsx.OpenFile(path) if err != nil { fmt.Println(err) } mapcompanyName := make(map[string]string) fmt.Println(xlFile) var items []*cygx.CygxActivityPointsCompany for _, sheet := range xlFile.Sheets { //遍历行读取 maxRow := sheet.MaxRow for i := 0; i < maxRow; i++ { //fmt.Println(i) if i == 0 { continue } row := sheet.Row(i) cells := row.Cells var companyName string var points float64 item := new(cygx.CygxActivityPointsCompany) for k, cell := range cells { if k == 0 { text := cell.String() companyName = text } if k == 3 { text := cell.String() points, _ = strconv.ParseFloat(text, 2) item.Points = points } itemDetail, err := company.CheckCompanyProductByName(companyName, 2) if err != nil { fmt.Println(err, companyName) return } item.CompanyName = itemDetail.CompanyName item.CompanyId = itemDetail.CompanyId item.CreateTime = time.Now() item.ModifyTime = time.Now() if mapcompanyName[itemDetail.CompanyName] != "" { continue } items = append(items, item) mapcompanyName[itemDetail.CompanyName] = itemDetail.CompanyName } } } var companyIds string var itemsBill []*cygx.CygxActivityPointsBill for _, v := range items { fmt.Println(v.CompanyName, v.Points) itemBill := new(cygx.CygxActivityPointsBill) itemBill.CreateTime = time.Now() itemBill.CompanyId = v.CompanyId itemBill.CompanyName = v.CompanyName itemBill.Source = 3 itemBill.BillDetailed = v.Points itemBill.Points = v.Points itemBill.DoType = 2 itemBill.Content = "2023.07.03剩余服务点数初始化" itemsBill = append(itemsBill, itemBill) } err = cygx.AddCygxActivityPointsBillAndCompanyMulti(itemsBill, items) fmt.Println(len(items)) fmt.Println(len(itemsBill)) utils.FileLog.Info(companyIds) fmt.Println(companyIds) fmt.Println(err) } func UpdateActivityVivoPointsSet(activityInfo *cygx.ActivityDetail, vivoPointsSet cygx.CygxActivityVivoPointsSetReq, itemPointsSet *cygx.CygxActivityPointsSet, sourceVivo string) (err error) { activityId := activityInfo.ActivityId if vivoPointsSet.IsPay == 0 { return } if sourceVivo == "" { return } total, e := cygx.GetCygxActivityVivoPointsSetCountByActivityId(activityId) if e != nil { err = errors.New("GetCygxActivityVivoPointsSetCountByActivityId, Err: " + e.Error()) return } if vivoPointsSet.PointsNum == "" { vivoPointsSet.PointsNum = "0" } if vivoPointsSet.GoodsMoney == "" { vivoPointsSet.GoodsMoney = "0" } item := new(cygx.CygxActivityVivoPointsSet) item.ActivityId = activityId item.PointsObject = vivoPointsSet.PointsObject item.PointsNum = vivoPointsSet.PointsNum item.GoodsMoney = vivoPointsSet.GoodsMoney item.Source = sourceVivo item.CreateTime = time.Now() item.ModifyTime = time.Now() if total == 0 { e = cygx.AddCygxActivityVivoPointsSet(item) if e != nil { err = errors.New("AddCygxActivityVivoPointsSet, Err: " + e.Error()) return } } else { e = cygx.EditCygxActivityVivoPointsSet(item) if e != nil { err = errors.New("AddCygxActivityVivoPointsSet, Err: " + e.Error()) return } } return }