123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952 |
- package main
- import (
- . "app.yhyue.com/moapp/jybase/common"
- "app.yhyue.com/moapp/jybase/date"
- "app.yhyue.com/moapp/jybase/encrypt"
- "app.yhyue.com/moapp/jybase/mongodb"
- ml "app.yhyue.com/moapp/jybase/mysql"
- "app.yhyue.com/moapp/jybase/redis"
- . "app.yhyue.com/moapp/jypkg/middleground"
- "bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/pb"
- "bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/resource"
- upb "bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
- "bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/usercenter"
- "context"
- "database/sql"
- "encoding/json"
- "flag"
- "fmt"
- "github.com/gogf/gf/v2/container/garray"
- "github.com/gogf/gf/v2/container/gvar"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/gctx"
- "github.com/gogf/gf/v2/os/gtime"
- "github.com/gogf/gf/v2/util/gconv"
- "gopkg.in/natefinch/lumberjack.v2"
- "io"
- "io/ioutil"
- "log"
- "os"
- "regexp"
- "strings"
- "time"
- )
- const (
- appid = "10000"
- sessionId = "openPowerVirtualSessionId"
- )
- var (
- etcdAddress []string
- Mgo *mongodb.MongodbSim
- MgoLog *mongodb.MongodbSim
- MysqlMain *ml.Mysql
- goodsCode string
- goodsSpecId int64
- all map[string]string
- powerType string
- middleground *Middleground
- c *Config
- whether string
- inputStartTime, inputEndTime, inputUserNum int64
- )
- type Config struct {
- EtcdAddr []string
- Mongodb struct {
- Main *mgoConf
- Log *mgoConf
- }
- Mysql struct {
- Main *mysqlConf
- Base *mysqlConf
- }
- ProductSql string
- Redis string
- Domain string
- }
- type mgoConf struct {
- Address string
- Size int
- DbName string
- ReplSet string
- UserName string
- Password string
- Collection string
- }
- type mysqlConf struct {
- DbName string
- Address string
- UserName string
- PassWord string
- MaxOpenConns int
- MaxIdleConns int
- }
- func init() {
- ReadConfig(&c)
- }
- func main() {
- logger := &lumberjack.Logger{
- Filename: "./logs/openPower.log",
- MaxSize: 1024,
- MaxBackups: 300,
- MaxAge: 300,
- Compress: true,
- }
- log.SetOutput(io.MultiWriter(logger, os.Stdout))
- MysqlMain = &ml.Mysql{
- Address: c.Mysql.Main.Address,
- UserName: c.Mysql.Main.UserName,
- PassWord: c.Mysql.Main.PassWord,
- DBName: c.Mysql.Main.DbName,
- MaxOpenConns: c.Mysql.Main.MaxOpenConns,
- MaxIdleConns: c.Mysql.Main.MaxIdleConns,
- }
- MysqlMain.Init()
- allEntity := map[int64]Entity{}
- allEntity[-1] = &Yxy{}
- allEntity[-2] = &Sjgl{}
- allT := "-2:商机管理 -1:医械通"
- for _, v := range *MysqlMain.SelectBySql(`select a.id,c.code,c.name,a.goods_code,a.name as spec_name from base_service.base_goods_spec a
- inner join base_service.base_goods_spec_power b on (a.id=b.spec_id)
- inner join base_service.base_function c on (b.function_code=c.code)` + c.ProductSql + ` order by a.id`) {
- id := Int64All(v["id"])
- name, _ := v["name"].(string)
- code, _ := v["code"].(string)
- if allEntity[id] == nil {
- spec_name, _ := v["spec_name"].(string)
- spec_name = strings.TrimPrefix(spec_name, "特殊非售卖商品_")
- if allT != "" {
- allT += " "
- }
- allT += fmt.Sprintf("%d:%s", id, spec_name)
- goods_code, _ := v["goods_code"].(string)
- allEntity[id] = &Common{
- Name: spec_name,
- GoodsCode: goods_code,
- GoodsSpecId: id,
- All: map[string]string{name: code},
- }
- } else {
- (allEntity[id].(*Common)).All[name] = code
- }
- }
- phone := flag.String("p", "", "手机号")
- m := flag.Int("m", 0, "1:查询权益 2:开通权益 3:取消权益")
- t := flag.Int64("t", 0, allT)
- dayCount := flag.Int("c", 0, "自定义设置需要开通权益的天数,包含今天")
- entName := flag.String("n", "", "企业名称")
- isCheck := flag.Int("b", 1, "是否前置校验和后置处理")
- powerWay := flag.Int("a", 0, "权益开通/取消方式;0:一个身份 1:全部身份 2:仅仅企业上")
- isCreateUser := flag.Bool("cu", false, "是否创建用户")
- inputOrderCode := flag.String("oc", "", "订单号")
- flag.Int64Var(&inputStartTime, "st", 0, "unix类型的开始时间")
- flag.Int64Var(&inputEndTime, "et", 0, "unix类型的结束时间")
- flag.Int64Var(&inputUserNum, "un", 0, "使用人数")
- resetPower := flag.Bool("rp", false, "是否重新开通权益")
- inputProductType := flag.String("pt", "", "订单的产品类型")
- flag.Parse()
- //*phone = "15037870765"
- //*t = -2
- //*entName = "王传进的测试企业"
- //*isCreateUser = true
- //*inputOrderCode = "263451057668"
- //inputStartTime = 1747670400
- //inputEndTime = 1747670400
- //inputUserNum = 7
- //*inputProductType = "历史数据"
- //*m = 2
- //
- if *phone == "" {
- log.Fatalln("-p 参数无效")
- }
- if *inputOrderCode != "" {
- *isCreateUser = true
- if inputStartTime == 0 {
- log.Fatalln("-st 参数无效")
- }
- if inputEndTime == 0 {
- log.Fatalln("-et 参数无效")
- }
- if *inputProductType == "" {
- log.Fatalln("-pt 参数无效")
- }
- }
- if *m == 2 {
- if *t == -2 {
- if *entName == "" {
- log.Fatalln("-n 参数无效")
- } else if inputUserNum <= 0 {
- log.Fatalln("-un 参数无效")
- }
- }
- } else {
- *isCreateUser = false
- }
- var inputStartTimeStr, inputEndTimeStr string
- if inputStartTime > 0 {
- inputStartTimeStr = gtime.NewFromTimeStamp(inputStartTime).String()
- if inputStartTimeStr == "" {
- log.Fatalln("-st 参数无效")
- }
- }
- if inputEndTime > 0 {
- inputEndTimeStr = gtime.NewFromTimeStamp(inputEndTime).String()
- if inputEndTimeStr == "" {
- log.Fatalln("-et 参数无效")
- }
- }
- entity := allEntity[*t]
- if entity == nil {
- log.Fatalln("-t 参数无效")
- }
- powerType, goodsCode, goodsSpecId, all = entity.init()
- middleground = NewMiddleground(c.EtcdAddr)
- middleground.RegResourceCenter("resource.rpc").RegUserCenter("usercenter.rpc")
- //
- redis.InitRedis(c.Redis)
- Mgo = &mongodb.MongodbSim{
- MongodbAddr: c.Mongodb.Main.Address,
- Size: c.Mongodb.Main.Size,
- DbName: c.Mongodb.Main.DbName,
- ReplSet: c.Mongodb.Main.ReplSet,
- UserName: c.Mongodb.Main.UserName,
- Password: c.Mongodb.Main.Password,
- }
- Mgo.InitPool()
- MgoLog = &mongodb.MongodbSim{
- MongodbAddr: c.Mongodb.Log.Address,
- Size: c.Mongodb.Log.Size,
- DbName: c.Mongodb.Log.DbName,
- ReplSet: c.Mongodb.Log.ReplSet,
- UserName: c.Mongodb.Log.UserName,
- Password: c.Mongodb.Log.Password,
- }
- MgoLog.InitPool()
- //
- createUserOk, ur, newUserId, newBaseUserId := createUser(*phone, *isCreateUser)
- if !createUserOk {
- return
- }
- //是否创建企业
- if *isCreateUser && *entName != "" {
- isInEnt := MysqlMain.CountBySql(`select count(1) as count from jianyu.entniche_info a inner join jianyu.entniche_user b on (a.name=? and b.phone=? and a.id=b.ent_id)`, *entName, *phone)
- if isInEnt == 0 {
- log.Println("该手机号是否是企业管理员(y/n)?")
- fmt.Scan(&whether)
- if whether == "y" {
- if createEntOk, _, _, _ := createEnt(newUserId, *phone, *entName, newBaseUserId); !createEntOk {
- return
- }
- } else {
- var entAdminPhone string
- log.Println("请输入管理员手机号")
- for {
- fmt.Scan(&entAdminPhone)
- entAdminPhone = strings.TrimSpace(entAdminPhone)
- if !regexp.MustCompile("^[0-9]+$").MatchString(entAdminPhone) {
- log.Println("手机号格式错误,请重新输入!")
- } else {
- break
- }
- }
- createUserOk, _, adminUserId, adminBaseUserId := createUser(entAdminPhone, *isCreateUser)
- if !createUserOk {
- return
- }
- createEntOk, newEntId, newDeptId, nweEntUserId := createEnt(adminUserId, entAdminPhone, *entName, adminBaseUserId)
- if !createEntOk {
- return
- }
- log.Println("该手机号未在企业下,是否添加为员工(y/n)?")
- fmt.Scan(&whether)
- if whether != "y" {
- return
- }
- addToEnt(newEntId, newDeptId, nweEntUserId, newUserId, *phone)
- }
- } else if isInEnt < 0 {
- log.Fatalln("查询手机号是否在企业下失败!")
- }
- }
- //
- isFindIdentity := false
- var updateOrderUserId string
- var updateOrderEntId int64
- for _, v := range *ur {
- id := Int64All(v["base_user_id"])
- for _, identity := range middleground.UserCenter.IdentityList(id) {
- if *powerWay == 0 {
- if *entName == "" && identity.PositionType == 1 {
- continue
- } else if *entName != "" && (identity.PositionType == 0 || *entName != identity.Name) {
- continue
- }
- } else if *powerWay == 2 {
- if *entName == "" {
- continue
- } else if identity.PositionType == 0 || *entName != identity.Name {
- continue
- }
- }
- isFindIdentity = true
- msg := "身份信息:" + fmt.Sprintf("%+v", identity) + " 手机号:" + *phone
- var resClient = resource.NewResource(middleground.ResourceCenter.NewClient())
- var getPowers = func() *garray.StrArray {
- r, err := resClient.Haspowers(context.Background(), &pb.HaspowersReq{
- Appid: "10000",
- EntId: identity.EntId,
- EntUserId: identity.EntUserId,
- AccountId: identity.AccountId,
- EntAccountId: identity.EntAccountId,
- })
- if err != nil {
- log.Fatalln(msg, "查询", powerType, "权益失败!", err)
- }
- return garray.NewStrArrayFrom(r.Powers)
- }
- var notHavePowers = func() []string {
- array := []string{}
- powers := getPowers()
- for k, v := range all {
- if powers.Contains(v) {
- continue
- }
- array = append(array, k)
- }
- return array
- }
- if *m == 1 {
- if array := notHavePowers(); len(array) > 0 {
- log.Println(msg, powerType, "权益异常,缺少权益:", strings.Join(array, ","))
- } else {
- for k, _ := range all {
- log.Println(msg, "拥有", powerType, "权益:", k)
- }
- }
- } else if *m == 2 {
- if identity.PositionType == 1 {
- updateOrderUserId = gconv.String(identity.PositionId)
- updateOrderEntId = identity.EntId
- } else {
- updateOrderUserId = newUserId
- }
- if *isCheck == 1 && !entity.beforeOpen(phone, identity) {
- break
- }
- startTime, endTime := "", ""
- if inputStartTimeStr != "" {
- startTime = inputStartTimeStr
- }
- if inputEndTimeStr != "" {
- endTime = inputEndTimeStr
- } else if *dayCount > 0 {
- now := time.Now()
- end_time := time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 0, time.Local)
- end_time = end_time.AddDate(0, 0, *dayCount-1)
- endTime = date.FormatDate(&end_time, date.Date_Full_Layout)
- }
- isEmpower := false
- if identity.EntId > 0 {
- resp, err := resClient.WaitEmpowerDetailBySpecId(context.Background(), &pb.WaitEmpowerDetailBySpecIdReq{
- Appid: "10000",
- EntId: identity.EntId,
- SpecId: goodsSpecId,
- })
- if err != nil {
- log.Println(msg, powerType, "开通失败!", err)
- } else if len(resp.WaitEmpowerDetails) > 0 {
- if *powerWay < 2 {
- isEmpower = true
- } else if *powerWay == 2 {
- log.Println(msg, powerType, "权益已存在!")
- }
- }
- // for _, v := range all {
- // resp, err := resClient.WaitEmpowerDetail(context.Background(), &pb.WaitEmpowerDetailReq{
- // Appid: "10000",
- // EntId: identity.EntId,
- // FunctionCode: v,
- // })
- // log.Println(v, resp.Id)
- // if err != nil {
- // log.Println(msg, powerType, "开通失败!", err)
- // } else if resp.Id > 0 {
- // if *powerWay < 2 {
- // isEmpower = true
- // } else if *powerWay == 2 {
- // log.Fatalln(msg, powerType, "权益已存在!")
- // }
- // }
- // break
- // }
- }
- if len(notHavePowers()) == 0 && !*resetPower {
- log.Println(msg, powerType, "权益已存在,无需开通")
- continue
- }
- var r *pb.Resp
- var err error
- if isEmpower {
- for _, v := range all {
- r, err = resClient.Empower(context.Background(), &pb.EmpowerReq{
- Appid: "10000",
- FunctionCode: v,
- EntId: identity.EntId,
- EntUserId: []int64{identity.EntUserId},
- })
- }
- } else {
- powerReq := &pb.PowerReq{
- Appid: appid,
- GoodsCode: goodsCode,
- GoodsSpecId: goodsSpecId,
- BuyNum: 1,
- Type: 1,
- EndTime: endTime,
- StartTime: startTime,
- }
- if *powerWay == 2 {
- powerReq.EntAccountId = identity.EntAccountId
- powerReq.EntId = identity.EntId
- } else {
- powerReq.AccountId = identity.AccountId
- }
- r, err = resClient.PowerHandle(context.Background(), powerReq)
- }
- if err != nil {
- log.Println(msg, powerType, "开通失败!", err)
- } else if r.Status == 1 {
- if *isCheck == 1 {
- entity.afterOpen(phone, identity)
- }
- log.Println(msg, powerType, "已开通!")
- } else {
- log.Println(msg, powerType, "开通失败!")
- }
- } else if *m == 3 {
- powerReq := &pb.PowerReq{
- Appid: appid,
- GoodsCode: goodsCode,
- GoodsSpecId: goodsSpecId,
- BuyNum: 1,
- Type: -1,
- }
- if *powerWay == 2 {
- powerReq.EntAccountId = identity.EntAccountId
- powerReq.EntId = identity.EntId
- } else {
- powerReq.AccountId = identity.AccountId
- powerReq.EntAccountId = identity.EntAccountId
- powerReq.EntId = identity.EntId
- }
- r, err := resClient.PowerHandle(context.Background(), powerReq)
- if err != nil {
- log.Println(msg, powerType, "取消失败!", err)
- } else if r.Status == 1 {
- log.Println(msg, powerType, "已取消!")
- } else {
- log.Println(msg, powerType, "取消失败!", r.Status)
- }
- } else {
- log.Fatalln("-m 参数无效")
- }
- if *m == 2 || *m == 3 {
- _, err := usercenter.NewUserCenter(middleground.UserCenter.NewClient()).WorkDesktopClearUserInfo(context.Background(), &upb.WorkDesktopClearUserInfoReq{
- PositionId: fmt.Sprint(identity.PositionId),
- AppId: appid,
- })
- if err != nil {
- log.Println("清除用户工作桌面缓存失败", err)
- }
- }
- }
- }
- if !isFindIdentity {
- log.Fatalln("没有找到身份信息!")
- }
- if *inputOrderCode != "" && updateOrderUserId != "" {
- //更新订单主表
- func() {
- orderData := MysqlMain.SelectBySql(`select user_id,vip_starttime,vip_endtime,ent_id from jianyu.dataexport_order where order_code=?`, inputOrderCode)
- if orderData == nil || len(*orderData) == 0 {
- log.Fatalln("订单主表没有找到该订单,更新订单主表失败!")
- } else if len(*orderData) > 1 {
- log.Fatalln("订单主表找到多个订单,需要手动处理!")
- }
- updateArgs := []interface{}{}
- odVar := gvar.New((*orderData)[0]).MapStrVar()
- updateFields := []string{}
- array := []string{}
- if odVar["user_id"].IsEmpty() {
- updateFields = append(updateFields, "用户id")
- array = append(array, "user_id=?")
- updateArgs = append(updateArgs, updateOrderUserId)
- } else {
- log.Println("订单主表用户id存在,无需更新")
- }
- if odVar["vip_starttime"].IsEmpty() {
- updateFields = append(updateFields, "服务开始时间")
- array = append(array, "vip_starttime=?")
- updateArgs = append(updateArgs, inputStartTimeStr)
- } else {
- log.Println("订单主表服务开始时间存在,无需更新")
- }
- if odVar["vip_endtime"].IsEmpty() {
- updateFields = append(updateFields, "服务截止时间")
- array = append(array, "vip_endtime=?")
- updateArgs = append(updateArgs, inputEndTimeStr)
- } else {
- log.Println("订单主表服务截止时间存在,无需更新")
- }
- if updateOrderEntId > 0 {
- if odVar["ent_id"].IsEmpty() {
- updateFields = append(updateFields, "企业id")
- array = append(array, "ent_id=?")
- updateArgs = append(updateArgs, updateOrderEntId)
- } else {
- log.Println("订单主表企业id存在,无需更新")
- }
- }
- if len(array) > 0 {
- updateArgs = append(updateArgs, *inputOrderCode)
- if MysqlMain.UpdateOrDeleteBySql(`update jianyu.dataexport_order set `+strings.Join(array, ",")+` where order_code=?`, updateArgs...) < 0 {
- log.Fatalln("更新订单主表" + strings.Join(updateFields, "、") + "失败!")
- } else {
- log.Println("更新订单主表" + strings.Join(updateFields, "、") + "成功!")
- }
- }
- }()
- //更新订单子表
- func() {
- orderData := MysqlMain.SelectBySql(`select id,user_id,service_starttime,service_endtime from jianyu.jy_order_detail where order_code=? and product_type=?`, *inputOrderCode, *inputProductType)
- if orderData == nil || len(*orderData) == 0 {
- log.Fatalln("订单子表没有找到该订单,更新订单子表失败!")
- }
- for _, v := range *orderData {
- updateArgs := []interface{}{}
- odVar := gvar.New(v).MapStrVar()
- id := odVar["id"].Int64()
- updateFields := []string{}
- array := []string{}
- if odVar["user_id"].IsEmpty() {
- updateFields = append(updateFields, "用户id")
- array = append(array, "user_id=?")
- updateArgs = append(updateArgs, updateOrderUserId)
- } else {
- log.Println(id, "订单子表用户id存在,无需更新")
- }
- if odVar["service_starttime"].IsEmpty() {
- updateFields = append(updateFields, "服务开始时间")
- array = append(array, "service_starttime=?")
- updateArgs = append(updateArgs, inputStartTimeStr)
- } else {
- log.Println(id, "订单子表服务开始时间存在,无需更新")
- }
- if odVar["service_endtime"].IsEmpty() {
- updateFields = append(updateFields, "服务截止时间")
- array = append(array, "service_endtime=?")
- updateArgs = append(updateArgs, inputEndTimeStr)
- //
- updateFields = append(updateFields, "服务状态")
- array = append(array, "is_service_open=?")
- updateArgs = append(updateArgs, 1)
- } else {
- log.Println(id, "订单子表服务截止时间存在,无需更新")
- }
- if len(array) > 0 {
- updateArgs = append(updateArgs, id)
- if MysqlMain.UpdateOrDeleteBySql(`update jianyu.jy_order_detail set `+strings.Join(array, ",")+` where id=?`, updateArgs...) < 0 {
- log.Fatalln(id, "更新订单子表"+strings.Join(updateFields, "、")+"失败!")
- } else {
- log.Println(id, "更新订单子表"+strings.Join(updateFields, "、")+"成功!")
- }
- }
- }
- }()
- }
- }
- type Entity interface {
- init() (string, string, int64, map[string]string)
- beforeOpen(phone *string, identity *upb.Identity) bool
- afterOpen(phone *string, identity *upb.Identity)
- }
- type Common struct {
- Name string
- GoodsCode string
- GoodsSpecId int64
- All map[string]string
- }
- func (c *Common) init() (string, string, int64, map[string]string) {
- return c.Name, c.GoodsCode, c.GoodsSpecId, c.All
- }
- func (c *Common) beforeOpen(phone *string, identity *upb.Identity) bool {
- return true
- }
- func (c *Common) afterOpen(phone *string, identity *upb.Identity) {
- }
- /******************************医械云******************************************/
- type Yxy struct {
- }
- func (y *Yxy) init() (string, string, int64, map[string]string) {
- return "医械云权益", "lyh", 13, map[string]string{
- "医疗标讯搜索": "lyh_yl_ylbxss",
- "医疗机构搜索": "lyh_yl_yljgss",
- "经销商搜索": "lyh_yl_jxsss",
- "医疗机构画像": "lyh_yl_yljghx",
- "医疗机构认领": "lyh_yl_yljgrl",
- "经销商认领": "lyh_yl_jxsrl",
- "医疗订阅": "lyh_yl_yldy",
- }
- }
- func (y *Yxy) beforeOpen(phone *string, identity *upb.Identity) bool {
- order_user_id, u := y.getUser(identity)
- if u == nil {
- return false
- }
- ok, _, _, _ := y.isOK(*phone, *u, order_user_id)
- return ok
- }
- func (y *Yxy) getUser(identity *upb.Identity) (string, *map[string]interface{}) {
- if identity.PositionType == 0 {
- u, _ := Mgo.FindOneByField("user", map[string]interface{}{"base_user_id": identity.UserId}, `{"_id":1,"l_vip_endtime":1,"i_member_endtime":1,"s_member_mainid":1,"i_member_sub_status":1}`)
- if u == nil || len(*u) == 0 {
- log.Println(fmt.Sprintf("%+v", identity), "mongodb user 中没有找到该用户!")
- return "", nil
- }
- return mongodb.BsonIdToSId((*u)["_id"]), u
- } else {
- u, _ := Mgo.FindOneByField("ent_user", map[string]interface{}{"i_userid": identity.EntUserId}, `{"_id":1,"l_vip_endtime":1,"i_member_endtime":1,"s_member_mainid":1,"i_member_sub_status":1}`)
- if u == nil || len(*u) == 0 {
- log.Println(fmt.Sprintf("%+v", identity), "mongodb ent_user 中没有找到该用户!")
- return "", nil
- }
- return fmt.Sprint(identity.PositionId), u
- }
- }
- func (y *Yxy) afterOpen(phone *string, identity *upb.Identity) {
- order_user_id, u := y.getUser(identity)
- if u == nil {
- return
- }
- ok, orderVip, vipRs, bigRs := y.isOK(*phone, *u, order_user_id)
- if ok {
- y.createYxtOrder(*phone, *u, orderVip, vipRs, bigRs)
- }
- }
- func (y *Yxy) isOK(phone string, user map[string]interface{}, order_user_id string) (bool, bool, *[]map[string]interface{}, *[]map[string]interface{}) {
- orderVip := true // 是否根据超级订阅订单处理 如果是大会员也是超级订阅则按大会员处理
- flag1 := false
- flag2 := false
- mainUserId := order_user_id
- if IntAllDef(user["i_member_sub_status"], -1) == 1 {
- mainUser, ok := Mgo.FindById("user", ObjToString(user["s_member_mainid"]), `{"s_phone"1:,"s_m_phone":1}`)
- if ok && mainUser != nil {
- mainUserId = mongodb.BsonIdToSId((*mainUser)["_id"])
- } else {
- log.Println("该用户是子账号,没有找到其主账号的信息")
- return false, false, nil, nil
- }
- }
- bigMemberRs := MysqlMain.SelectBySql(`select * from dataexport_order where user_id=? and order_status=1 and product_type ="大会员" and (timestampdiff(day,vip_starttime,vip_endtime)>=365) order by create_time desc limit 1`, mainUserId)
- if bigMemberRs != nil && len(*bigMemberRs) == 1 {
- (*bigMemberRs)[0]["user_phone"] = phone
- (*bigMemberRs)[0]["user_id"] = order_user_id
- }
- vipRs := MysqlMain.SelectBySql(`select * from dataexport_order where user_id=? and order_status=1 and product_type ="VIP订阅" and (timestampdiff(day,vip_starttime,vip_endtime)>=365) order by create_time desc limit 1`, order_user_id)
- if (bigMemberRs == nil || len(*bigMemberRs) == 0) && (vipRs == nil || len(*vipRs) == 0) {
- log.Println("没有查询到该用户的年度超级订阅或者大会员订单")
- return false, false, nil, nil
- }
- // 同时存在超级订阅和大会员年度订单 不再判断最晚到期时间 大会员优先
- if vipRs != nil && len(*vipRs) == 1 {
- vipEndTime := Int64All(user["l_vip_endtime"])
- leftdayvip := time.Unix(vipEndTime, 0).Sub(time.Now()).Hours() / 24
- if leftdayvip >= 90 {
- orderVip = true
- flag1 = true
- }
- }
- if *bigMemberRs != nil && len(*bigMemberRs) == 1 {
- // 判断最晚到期时间
- bigMemberEndTime := IntAll(user["i_member_endtime"])
- leftdaybig := time.Unix(int64(bigMemberEndTime), 0).Sub(time.Now()).Hours() / 24
- if leftdaybig >= 90 {
- orderVip = false
- flag2 = true
- }
- }
- if !flag1 && !flag2 {
- log.Println("该用户剩余不符合条件")
- return false, false, nil, nil
- }
- return true, orderVip, vipRs, bigMemberRs
- }
- // 生成医械通订单
- func (y *Yxy) createYxtOrder(phone string, user map[string]interface{}, orderVip bool, vipRs, bigMemberRs *[]map[string]interface{}) {
- var insertOrder map[string]interface{}
- filterMap := map[string]interface{}{}
- // 超级订阅
- if orderVip {
- insertOrder = (*vipRs)[0]
- // 生订单信息
- orderMoney := Float64All(insertOrder["order_money"])
- endTime := Int64All(user["l_vip_endtime"])
- var money int
- filterData := (*vipRs)[0]["filter"]
- err := json.Unmarshal([]byte(filterData.(string)), &filterMap)
- if err != nil {
- log.Println("反序列化失败", err)
- return
- }
- if IntAll(insertOrder["is_backstage_order"]) == 1 {
- cycle := Float64All(filterMap["cyclecount"])
- cycleUnit := Float64All(filterMap["cycleunit"])
- money = y.getPriceBack(orderMoney, time.Unix(endTime, 0), cycle, cycleUnit)
- } else {
- money = y.getPrice(orderMoney, time.Unix(endTime, 0))
- }
- insertOrder["order_money"] = money
- insertOrder["original_price"] = money
- insertOrder["vip_endtime"] = time.Unix(endTime, 0).Format(date.Date_Full_Layout)
- } else {
- // 大会员
- endTime := Int64All(user["i_member_endtime"])
- filterData := (*bigMemberRs)[0]["filter"]
- err := json.Unmarshal([]byte(filterData.(string)), &filterMap)
- if err != nil {
- log.Println("反序列化失败", err)
- return
- }
- filterMap["area"] = "-"
- insertOrder = (*bigMemberRs)[0]
- insertOrder["order_money"] = 0
- insertOrder["original_price"] = 0
- insertOrder["vip_endtime"] = time.Unix(endTime, 0).Format(date.Date_Full_Layout)
- }
- filterMap["source"] = "qmx" // 后台订单
- // 生订单信息
- filter, _ := json.Marshal(filterMap)
- insertOrder["filter"] = string(filter)
- insertOrder["is_backstage_order"] = 1 // 后台创建
- insertOrder["product_type"] = "医械通"
- insertOrder["order_code"] = fmt.Sprintf("%s%s", time.Now().Format("150405"), GetRandom(6))
- insertOrder["prepay_id"] = ""
- insertOrder["pay_money"] = 0
- insertOrder["discount_price"] = 0
- insertOrder["pay_way"] = ""
- insertOrder["out_trade_no"] = ""
- insertOrder["create_time"] = date.NowFormat(date.Date_Full_Layout)
- insertOrder["vip_starttime"] = date.NowFormat(date.Date_Full_Layout)
- insertOrder["pay_time"] = insertOrder["vip_starttime"]
- insertOrder["prepay_time"] = insertOrder["vip_starttime"]
- delete(insertOrder, "id")
- saveRs := MysqlMain.Insert("dataexport_order", insertOrder)
- if saveRs > 0 {
- log.Println("医械通订单保存成功")
- } else {
- log.Println("医械通订单保存失败", saveRs)
- }
- }
- // 计算价格 线上的
- func (y *Yxy) getPrice(orderMoney float64, endTime time.Time) int {
- // 计算价格
- dis := endTime.Sub(time.Now())
- days := dis.Hours() / 24 // 剩余天数
- money := int(orderMoney / 360 * float64(int(days)))
- return money
- }
- // 计算价格 管理后台创建的
- func (y *Yxy) getPriceBack(orderMoney float64, endTime time.Time, cycle, cycleUnit float64) int {
- //(1:年 2:月 3:天 4:季)
- // 计算价格
- unitPrice := 0.0
- switch cycleUnit {
- case 1:
- unitPrice = orderMoney / cycle / 360
- case 2:
- unitPrice = orderMoney / cycle / 30
- case 3:
- unitPrice = orderMoney / cycle
- case 4:
- unitPrice = orderMoney / cycle / 90
- }
- dis := endTime.Sub(time.Now())
- days := dis.Hours() / 24 // 剩余天数
- //log.Println("=========", int(days), "=================")
- money := unitPrice * float64(int(days))
- return int(money)
- }
- // //////////////////////////////
- type Sjgl struct {
- }
- func (s *Sjgl) init() (string, string, int64, map[string]string) {
- return "", "", 0, nil
- }
- func (s *Sjgl) beforeOpen(phone *string, identity *upb.Identity) bool {
- status := 1
- if inputEndTime < time.Now().Unix() {
- status = 1
- }
- if !MysqlMain.ExecTx("开通商机管理权益", func(tx *sql.Tx) bool {
- if MysqlMain.UpdateOrDeleteBySqlByTx(tx, `update jianyu.entniche_info set isNew=1,startdate=?,enddate=?,status=?,quota=? where id=?`, inputStartTime, inputEndTime, status, inputUserNum, identity.EntId) < 0 {
- return false
- }
- if MysqlMain.UpdateOrDeleteBySqlByTx(tx, `update jianyu.entniche_user set power=1 where id=?`, identity.EntUserId) < 0 {
- return false
- }
- return true
- }) {
- log.Println("商机管理权益开通失败!")
- }
- return false
- }
- func (s *Sjgl) afterOpen(phone *string, identity *upb.Identity) {
- }
- func createUser(phone string, isCreateUser bool) (bool, *[]map[string]interface{}, string, int64) {
- ur, userOk := Mgo.Find("user", map[string]interface{}{
- "$or": []map[string]interface{}{
- map[string]interface{}{
- "s_phone": phone,
- },
- map[string]interface{}{
- "s_m_phone": phone,
- },
- },
- "i_appid": 2,
- }, nil, `{"_id":1,"base_user_id":1}`, false, -1, -1)
- var newBaseUserId int64
- var newUserId string
- if !userOk {
- log.Fatalln("mgo user 查询失败")
- } else if ur == nil || len(*ur) <= 0 {
- if isCreateUser {
- log.Println("没有找到该用户!是否创建(y/n)?")
- fmt.Scan(&whether)
- if whether != "y" {
- return false, nil, "", 0
- }
- } else {
- log.Fatalln("没有找到该用户!")
- }
- resp := middleground.UserCenter.UserAdd(upb.UserAddReq{Appid: appid, Phone: phone})
- if resp == nil || resp.Data.Status != 1 {
- log.Fatalln("创建用户失败")
- }
- newBaseUserId = resp.Data.Id
- newUserId = Mgo.Save("user", map[string]interface{}{
- "i_appid": 2,
- "s_phone": phone,
- "base_user_id": resp.Data.Id,
- "l_registedate": time.Now().Unix(),
- "s_regsource": "openpower",
- })
- MgoLog.Save("register_log", map[string]interface{}{
- "userid": newUserId,
- "phone": phone,
- "way": "phone",
- "source": "openpower",
- "create_time": date.NowFormat(date.Date_Full_Layout),
- })
- *ur = append(*ur, map[string]interface{}{
- "_id": mongodb.StringTOBsonId(newUserId),
- "base_user_id": newBaseUserId,
- })
- } else {
- newUserId = mongodb.BsonIdToSId((*ur)[0]["_id"])
- newBaseUserId = gconv.Int64((*ur)[0]["base_user_id"])
- }
- return true, ur, newUserId, newBaseUserId
- }
- func createEnt(mgoUserId, phone, entName string, baseUserId int64) (bool, int64, int64, int64) {
- entDept := MysqlMain.SelectBySql(`select a.id as eid,b.id as did,c.id as uid from jianyu.entniche_info a inner join entniche_department b on (a.id=b.ent_id and b.pid=0) inner join entniche_user c on (a.id=c.ent_id and c.phone=?) where a.phone=? and a.name=?`, phone, phone, entName)
- if entDept == nil {
- log.Fatalln("查询企业是否存在失败!")
- } else if len(*entDept) > 0 {
- return true, gconv.Int64((*entDept)[0]["eid"]), gconv.Int64((*entDept)[0]["did"]), gconv.Int64((*entDept)[0]["uid"])
- }
- log.Println("没有找到该企业!是否创建(y/n)?")
- fmt.Scan(&whether)
- if whether != "y" {
- return false, 0, 0, 0
- }
- //创建企业
- redis.Put("session", sessionId, map[string]interface{}{
- "userId": mgoUserId,
- "mgoUserId": mgoUserId,
- "base_user_id": baseUserId,
- }, 60)
- resp, err := g.Client().SetCookie("SESSIONID", sessionId).Post(gctx.New(), c.Domain+"/entbase/ent/add", g.Map{
- "switch": true,
- "name": entName,
- })
- if err != nil {
- log.Fatalln(err)
- }
- defer resp.Body.Close()
- b, _ := ioutil.ReadAll(resp.Body)
- eId := gvar.New(b).MapStrVar()["data"].MapStrVar()["entid"].String()
- if eId == "" {
- log.Fatalln("创建企业失败", string(b))
- }
- entId := gconv.Int64(encrypt.SE.Decode4HexByCheck(eId))
- if entId <= 0 {
- log.Fatalln("创建企业失败", string(b))
- }
- resp1, err1 := g.Client().SetCookie("SESSIONID", sessionId).Post(gctx.New(), c.Domain+"/entbase/ent/entinfo")
- if err1 != nil {
- log.Fatalln(err)
- }
- defer resp1.Body.Close()
- b1, _ := ioutil.ReadAll(resp1.Body)
- deptId := gvar.New(b1).MapStrVar()["data"].MapStrVar()["dept_id"].Int64()
- entUserId := gconv.Int64(encrypt.SE.Decode4HexByCheck(gvar.New(b1).MapStrVar()["data"].MapStrVar()["user_id"].String()))
- if deptId <= 0 {
- log.Fatalln("创建企业后,获取部门id失败", string(b1))
- }
- return true, entId, deptId, entUserId
- }
- func addToEnt(entId, deptId, entUserId int64, userId, phone string) {
- redis.Put("session", sessionId, map[string]interface{}{
- "entId": entId,
- "entUserId": entUserId,
- "frameworkEntId": entId,
- "userId": userId,
- }, 60)
- resp, err := g.Client().SetCookie("SESSIONID", sessionId).Post(gctx.New(), c.Domain+"/entbase/person/add", g.Map{
- "id": deptId,
- "name": phone,
- "phone": phone,
- })
- if err != nil {
- log.Fatalln(err)
- }
- defer resp.Body.Close()
- b, _ := ioutil.ReadAll(resp.Body)
- if gvar.New(b).MapStrVar()["data"].MapStrVar()["status"].Int() != 1 {
- log.Fatalln("人员添加到企业下失败", string(b))
- }
- }
|