package service import ( "fmt" "log" "strings" "time" "app.yhyue.com/moapp/jybase/common" "app.yhyue.com/moapp/jybase/date" "app.yhyue.com/moapp/jybase/redis" "bp.jydev.jianyu360.cn/BaseService/powerCheckCenter/entity" ) //权益 type PowerService struct { *entity.Conn } // func NewPower(conn *entity.Conn) *PowerService { return &PowerService{ conn, } } //权益相关 userid用户mongodbid baseUserId func (this *PowerService) Power(userid string, baseUserId, accountId, entId int64) *entity.Power { //获取权益 //大会员状态 data, ok := this.Conn.MgoJy.FindById("user", userid, `{"l_vip_starttime":1,"l_vip_endtime":1,"s_phone":1,"s_m_phone":1,i_member_status":1,"i_member_give":1,"s_member_mainid":1,"i_member_sub_status":1,"i_member_trial":1,"i_vip_status":1,"o_vipjy":1,"o_jy":1,"l_registedate":1,"s_myemail":1,"base_user_id":1}`) if ok && *data != nil && len(*data) > 0 { ent := &entity.Ent{} entniche := &entity.Entniche{} vip := &entity.Vip{} member := &entity.Member{} registeDate := common.Int64All((*data)["l_registedate"]) //注册时间 //VIP vipStatus := common.Int64All((*data)["i_vip_status"]) vipStartTime := common.Int64All((*data)["l_vip_starttime"]) vipEndTime := common.Int64All((*data)["l_vip_endtime"]) ovipjy := common.ObjToMap((*data)["o_vipjy"]) oBuyset := common.ObjToMap((*ovipjy)["o_buyset"]) upgrade := common.Int64All((*oBuyset)["oBuyset"]) areacount := common.Int64All((*oBuyset)["areacount"]) buyerclasscount := common.Int64All((*oBuyset)["buyerclasscount"]) vip = &entity.Vip{ Status: vipStatus, StartTime: vipStartTime, EndTime: vipEndTime, Upgrade: upgrade, Areacount: areacount, Buyerclasscount: buyerclasscount, MaxKeyLength: 300, PowerType: common.Int64All(common.If(vipStatus > 0, 1, 0)), //TODO 附件下载次数 } //免费相关 free := &entity.Free{} o_jy, _ := (*data)["o_jy"].(map[string]interface{}) a_key, _ := o_jy["a_key"].([]interface{}) free.FreeHasKey = len(a_key) > 0 //免费用户可查看企业画像次数//免费用户可查看采购单位画像次数//免费用户可以进行附件下载次数 freeEntPort, freeBuyerPort, freeFile := FreeExperience(userid) free.FreeEntPort, free.FreeBuyerPort, free.FreeFile = int64(freeEntPort), int64(freeBuyerPort), int64(freeFile) // //子账号被启用 i_member_sub_status := common.IntAllDef((*data)["i_member_sub_status"], 0) memberStatus := common.Int64All((*data)["i_member_status"]) memberStarttime := common.Int64All((*data)["i_member_starttime"]) memberEndtime := common.Int64All((*data)["i_member_endtime"]) member = &entity.Member{ Status: memberStatus, StartTime: memberStarttime, EndTime: memberEndtime, MaxKeyLength: 300, //最大关键词数量限制 } if memberStatus > 0 { member.MemberPower = 1 //是否分配了大会员;0:否 1:是 } if (*data)["s_member_mainid"] != nil && common.ObjToString((*data)["s_member_mainid"]) != "" && i_member_sub_status > 0 { member.Pid = common.ObjToString((*data)["s_member_mainid"]) member.IsSubCount = 1 } if (member.Pid != "" && common.IntAllDef((*data)["i_member_sub_status"], 0) == 1) || this.Conn.MgoJy.Count("member", map[string]interface{}{"userid": userid}) > 0 { member.Used = true } if (*data)["i_member_trial"] != nil { member.IsMemberTrial = 1 } //获取大会员版本名称 //TODO 自定义有问题 if combo := this.Conn.Mysql.SelectBySql(`select s_name from bigmember_combo where id=?`, memberStatus); combo != nil && len(*combo) > 0 { member.MemberName = common.ObjToString((*combo)[0]["s_name"]) } memberServiceMap := map[int64]bool{} //获取大会员相关操作 serviceList := this.Conn.Mysql.Find("bigmember_service_user", map[string]interface{}{"s_userid": userid, "i_status": 0}, "DISTINCT(s_serviceid),i_frequency", "", -1, -1) if serviceList != nil && len(*serviceList) != 0 { pCount, eCount, dailyNum, customers := 0, 0, 0, 10 for _, item := range *serviceList { serviceid := common.Int64All(item["s_serviceid"]) memberServiceMap[serviceid] = true member.MemberPowerList = append(member.MemberPowerList, serviceid) if serviceid == 14 { //项目数量 pCount = common.IntAll(item["i_frequency"]) } else if serviceid == 4 || serviceid == 12 || serviceid == 13 { //企业情报监控 企业中标动态 tEcount := common.IntAll(item["i_frequency"]) if tEcount > eCount { eCount = tEcount } } else if serviceid == 17 || serviceid == 18 { //每日数据包 dailyNum = common.IntAll(item["i_frequency"]) } else if serviceid == 7 { //潜在客户 关注客户 customers = common.IntAll(item["i_frequency"]) } } member.EntNum = int64(eCount) member.ProNum = int64(pCount) member.DailyNum = int64(dailyNum) member.Customers = int64(customers) } // phone, _ := common.If((*data)["s_phone"] != nil, (*data)["s_phone"], (*data)["s_m_phone"]).(string) if phone != "" { //用于判断是否含有企业主体的超级订阅、大会员服务 epowerData := this.Conn.Mysql.SelectBySql(`SELECT c.product_type FROM entniche_user a INNER JOIN entniche_power b INNER JOIN entniche_wait_empower c ON a.id =b.ent_user_id AND c.id = b.wait_empower_id WHERE a.phone =? AND c.end_time >?`, phone, time.Now().Format(date.Date_Full_Layout)) if epowerData != nil && len(*epowerData) > 0 { for _, v := range *epowerData { product_type := common.ObjToString(v["product_type"]) if strings.Contains(product_type, entity.ProductType_vip) { vip.PowerType = 2 } else if strings.Contains(product_type, entity.ProductType_member) { member.PowerType = 2 } } } //免费用户画像和附件下载权限 o_jy := common.ObjToMap((*data)["o_jy"]) //IsNewFreeTimeCell dev3.6.4版本之前发了个紧急版本处理老用户订阅问题,i_newfree字段必须用户选择地区才能生成,不能作为判断是否是新用户得唯一标识,在此版本添加了常量:IsNewFreeTimeCell作为判断标准;--ws if common.IntAll((*o_jy)["i_newfree"]) > 0 || entity.IsNewFreeTimeCell < registeDate { free.IsUpgrade = true //新免费用户 } //查询是否是商机管理付费用户 res := this.Conn.Mysql.SelectBySql(`SELECT i. STATUS AS status, i.isNew, i.power_source, r.role_id, u.power, i.name,i.id,i.startdate,i.enddate,i.auth_status,i.auth_reason,i.dept_subscribe FROM (entniche_user u LEFT JOIN entniche_user_role r ON r.user_id = u.id ) LEFT JOIN entniche_info i ON u.ent_id = i.id WHERE u.phone = ? and i.id = ? ORDER BY i. STATUS DESC, i.auth_status DESC`, phone, entId) if res != nil && len(*res) > 0 { for _, v := range *res { if common.IntAll(v["id"]) == 0 { continue } entniche.IsNew = common.Int64All(v["isNew"]) entniche.Status = common.Int64All(v["status"]) entniche.IsEntPower = common.Int64All(v["power"]) entniche.PowerSource = common.Int64All(v["power_source"]) entniche.StartTime = common.Int64All(v["startdate"]) entniche.EndTime = common.Int64All(v["enddate"]) // ent.Name = common.ObjToString((*res)[0]["name"]) ent.EntRoleId = common.Int64All(v["role_id"]) ent.EntAuthStatus = common.Int64All(v["auth_status"]) ent.EntAuthReason = common.ObjToString(v["auth_reason"]) ent.DeptSubscribe = common.Int64All(v["dept_subscribe"]) //判断企业是否购买企业版相关 eweData := this.Conn.Mysql.SelectBySql(`select * from entniche_wait_empower where ent_id=? and end_time>?`, entId, time.Now().Format(date.Date_Full_Layout)) if eweData != nil && len(*eweData) > 0 { for _, v := range *eweData { product_type := common.ObjToString(v["product_type"]) if strings.Contains(product_type, entity.ProductType_member) { ent.BuyMember = 1 } else if strings.Contains(product_type, entity.ProductType_vip) { ent.BuyVip = 1 } } } //企业管理员 if ent.EntRoleId == 1 && ((ent.BuyMember == 1 || ent.BuyVip == 1) || (entniche.Status == 1 && entniche.PowerSource == 0)) { ent.EntSubscribeManager = 1 } //部门管理员 if ent.EntRoleId == 2 && entniche.Status == 1 && entniche.PowerSource == 0 && ent.DeptSubscribe == 1 { ent.EntSubscribeManager = 1 } // if ent.EntRoleId == 1 || ent.EntRoleId == 2 { if (ent.BuyMember == 1 || ent.BuyVip == 1) || (entniche.Status == 1 && entniche.PowerSource == 0) { ent.EntSubscribe = 1 } } } //广东移动DICT 用户 ent.PrivateGD = this.Conn.Mysql.CountBySql(`select count(1) from privatedata where phone = ?`, phone) > 0 } } log.Println("vip:", vip) log.Println("member:", member) log.Println("free:", free) log.Println("ent:", ent) log.Println("entniche:", entniche) return &entity.Power{ Vip: vip, Member: member, Free: free, Ent: ent, Entniche: entniche, } } return nil } //免费用户体验会员功能权限 //免费用户在企业画像/采购单位画像/附件下载留资 留资成功后用户才有功能使用次数 func FreeExperience(userId string) (int, int, int) { return redis.GetInt(entity.PowerCacheDb, fmt.Sprintf(entity.PowerCacheEntPortKey, userId)), redis.GetInt(entity.PowerCacheDb, fmt.Sprintf(entity.PowerCacheBuyerPortKey, userId)), redis.GetInt(entity.PowerCacheDb, fmt.Sprintf(entity.PowerCacheFileKey, userId)) }