package mobile import ( "errors" "fmt" "gin-vue-admin/global" "gin-vue-admin/model" "gin-vue-admin/model/request" "gin-vue-admin/model/response" "gin-vue-admin/service" "gin-vue-admin/utils" "github.com/gin-gonic/gin" "go.uber.org/zap" "time" ) func OpenVip(c *gin.Context) { var req request.OpenVipReq _ = c.ShouldBindJSON(&req) //response.OkWithData(gin.H{"reply": req}, c) //return err, vipConf := service.GetVipConf(req.VipId) if err != nil { global.GVA_LOG.Error("支付失败!", zap.Any("err", err)) response.FailWithMessage("支付失败", c) return } userId := getUserID(c) err, userData := service.GetUserInfo(userId) if err != nil { global.GVA_LOG.Error("支付失败!", zap.Any("err", err)) response.FailWithMessage("支付失败", c) return } if req.IsPoints == 1 { req.Money = req.Money - req.PointsNum } if req.IsPoints == 1 && req.PointsNum > (userData.PointsNum-userData.PointsNumFreeze) { fmt.Println(req.PointsNum, userData.PointsNum) response.FailWithMessage("支付失败,积分数量不足", c) return } if req.IsPoints == 1 && vipConf.VipMoney != req.Money+req.PointsNum { fmt.Println(vipConf.VipMoney, req.Money, req.PointsNum) response.FailWithMessage("支付失败,支付金额有误", c) return } if req.Money < 1 { fmt.Println(req.Money) response.FailWithMessage("支付失败,支付金额有误", c) return } //创建vip订单 reqVipOrder := model.VipOrder{} reqVipOrder.OrderNo = utils.GetOrderNo("V", int(userId)) reqVipOrder.UserId = int(userId) reqVipOrder.VipLevel = vipConf.VipLevel reqVipOrder.VipMoney = vipConf.VipMoney reqVipOrder.VipDay = vipConf.VipDay reqVipOrder.VipConfId = vipConf.Id reqVipOrder.PayMoney = req.Money reqVipOrder.Status = 1 reqVipOrder.IsPoints = req.IsPoints reqVipOrder.PointsNum = req.PointsNum err = service.CreateVipOrder(reqVipOrder) if err != nil { global.GVA_LOG.Error("支付失败!", zap.Any("err", err)) response.FailWithMessage("支付失败", c) return } if req.IsPoints == 1 { //创建积分订单 reqPointsOrder := model.PointsOrder{} reqPointsOrder.UserId = int(userId) reqPointsOrder.PayType = 1 reqPointsOrder.PayStatus = 1 reqPointsOrder.PointsNo = utils.GetOrderNo("P", int(userId)) reqPointsOrder.PointsNum = req.PointsNum reqPointsOrder.OtherNo = reqVipOrder.OrderNo reqPointsOrder.Remark = "vip抵扣" err = service.CreatePointsOrder(reqPointsOrder) if err != nil { global.GVA_LOG.Error("支付失败!", zap.Any("err", err)) response.FailWithMessage("支付失败", c) return } } //发起支付 orderPay := new(request.OrderPayReq) orderPay.OrderNo = reqVipOrder.OrderNo orderPay.PayMoney = float64(req.Money) / 100 orderPay.WxCode = req.WxCode orderPay.PayCallBack = global.GVA_CONFIG.Pay.PayCallBack orderPay.UserType = req.UserType if req.Openid == "" { //orderPay.Openid = userData.Openid global.GVA_LOG.Error("openid为空", zap.Any("err", err)) //response.FailWithMessage("用户数据有误", c) //return } else { orderPay.Openid = req.Openid } //req.Openid = "" reply, err := goPay(orderPay) if err != nil { global.GVA_LOG.Error("支付失败!", zap.Any("err", err)) response.FailWithMessage("支付失败", c) return } //fmt.Println(reply) response.OkWithData(gin.H{"reply": reply}, c) return } func goPay(orderPay *request.OrderPayReq) (interface{}, error) { //orderPayLog, _ := json.Marshal(orderPay) //收款账户配置 var err error if orderPay.Openid == "" { //orderPay.Openid, err = wx.GetOpenId(global.GVA_CONFIG.Bkwx.Appid, // global.GVA_CONFIG.Bkwx.Appsecret, orderPay.WxCode) //获取openid //if err != nil || orderPay.Openid == "" { //fmt.Println(err) return nil, errors.New("openid不存在,支付失败") //} } confData := service.GetSysConf("pay_conf") confVal := new(request.SysConfPayConf) utils.UnserislizeJson(confData, confVal) data, err := utils.Pay(orderPay, confVal.PayNum) if err != nil || data == nil { return "", err } //data = orderPay.OrderNo return data, nil } func GetVipList(c *gin.Context) { var req request.GetVipConfListReq _ = c.ShouldBindJSON(&req) req.IsNewUser = 1 if service.IsNewUser(int(getUserID(c))) > 0 { req.IsNewUser = 0 } err, list, total := service.GetVipConfList(req) reply := request.GetVipConfListReply{} reply.List = list reply.Total = total if pointsConf := service.GetSysConf("points"); pointsConf != "" { confValPoints := new(request.SysConfPoints) utils.UnserislizeJson(pointsConf, confValPoints) reply.SysConfPoints = *confValPoints } if err != nil { global.GVA_LOG.Error("查询失败!", zap.Any("err", err)) response.FailWithMessage("查询失败", c) } else { response.OkWithDetailed(reply, "获取成功", c) } return } func CallBack(c *gin.Context) { var req request.CallBackReq _ = c.ShouldBindJSON(&req) _, logData := service.GetApiLogInfoForReq(string(utils.SerializeJson(req))) if logData.Id > 0 { return } //用户调用api日志 apiLog := model.ApiLog{ UserId: 1, Status: 1, Api: "/vip/callBack", Req: string(utils.SerializeJson(req)), Reply: "", } service.CreateApiLog(apiLog) err, vipOrder := service.GetVipOrder(req.AttachInfo) if err != nil { fmt.Println("GetVipOrder", err) } if vipOrder.Status == 2 { //return } //修改订单信息 err = service.UpdateVipOrder(req) if err != nil { fmt.Println("UpdateVipOrder", err) } if req.AttachInfo[0:3] == "WXP" { } else { err, vipUser := service.GetVipUser(vipOrder.UserId) if err != nil { fmt.Println("GetVipUser", err) } if vipOrder.IsPoints == 1 && vipOrder.PointsNum != 0 { //修改积分订单,扣减积分 err = service.UpdatePointsOrderForOtherNo(req.AttachInfo) if err != nil { fmt.Println("UpdatePointsOrderForOtherNo", err) } err = service.UpdateUserPoints(vipOrder.UserId, 2, vipOrder.PointsNum) if err != nil { fmt.Println("UpdateUserPoints", err) } err, userData := service.GetUserInfo(uint(vipOrder.UserId)) if err != nil { fmt.Println("GetUserInfo", err) } cTime := time.Now() //积分流水 reqPointsLog := model.PointsLog{} reqPointsLog.UserId = vipOrder.UserId reqPointsLog.ChangeType = 3 reqPointsLog.ChangeTime = cTime reqPointsLog.ChangeNum = vipOrder.PointsNum reqPointsLog.NowPointsNum = userData.PointsNum reqPointsLog.Remark = "VIP业务" reqPointsLog.OtherNo = req.AttachInfo reqPointsLog.Source = 2 reqPointsLog.CreateTime = cTime err = service.CreatePointsLog(reqPointsLog) if err != nil { global.GVA_LOG.Error("赠送失败!", zap.Any("err", err)) response.FailWithMessage("赠送失败", c) return } } //增加时间 if vipUser.Id != 0 { reqVipUser := model.VipUser{} reqVipUser.UserId = vipOrder.UserId reqVipUser.VipLevel = vipOrder.VipLevel if time.Now().Before(vipUser.MaturityTime) { reqVipUser.MaturityTime = vipUser.MaturityTime.AddDate(0, 0, vipOrder.VipDay) } else { reqVipUser.MaturityTime = time.Now().AddDate(0, 0, vipOrder.VipDay) } if err := service.UpdateVipUser(reqVipUser, vipOrder.UserId); err != nil { global.GVA_LOG.Error("创建失败!", zap.Any("err", err)) response.FailWithMessage("创建失败", c) } else { response.OkWithMessage("创建成功", c) } } else { reqVipUser := model.VipUser{} reqVipUser.UserId = vipOrder.UserId reqVipUser.VipLevel = vipOrder.VipLevel reqVipUser.MaturityTime = time.Now().AddDate(0, 0, vipOrder.VipDay) if err := service.CreateVipUser(reqVipUser); err != nil { global.GVA_LOG.Error("创建失败!", zap.Any("err", err)) response.FailWithMessage("创建失败", c) } else { response.OkWithMessage("创建成功", c) } } } return } func OpenVipOwn(c *gin.Context) { var req request.OpenVipOwnReq _ = c.ShouldBindJSON(&req) //用户调用api日志 apiLog := model.ApiLog{ UserId: 1, Status: 1, Api: "/vip/openVipOwn", Req: string(utils.SerializeJson(req)), Reply: "", } service.CreateApiLog(apiLog) userInfo := service.FindUserByMobile(req.Mobile) if userInfo.ID == 0 { response.FailWithMessage("用户未注册", c) return //user := model.SysUser{ // Mobile: req.Mobile, //} //_, userInfo = service.UserRegister(user) } userId := int(userInfo.ID) var replyVipUser model.VipUser var err error if service.IsVipUser(userId) == 1 { err, replyVipUser = service.GetVipUser(userId) if err != nil { fmt.Println(err) return } } reqVipUser := model.VipUser{} reqVipUser.UserId = userId reqVipUser.VipLevel = 2 //增加时间 if replyVipUser.Id != 0 { if time.Now().Before(replyVipUser.MaturityTime) { reqVipUser.MaturityTime = replyVipUser.MaturityTime.AddDate(0, 0, req.Day) } else { reqVipUser.MaturityTime = time.Now().AddDate(0, 0, req.Day) } if err := service.UpdateVipUser(reqVipUser, userId); err != nil { global.GVA_LOG.Error("创建失败!", zap.Any("err", err)) response.FailWithMessage("创建失败", c) return } } else { reqVipUser.MaturityTime = time.Now().AddDate(0, 0, req.Day) if err := service.CreateVipUser(reqVipUser); err != nil { global.GVA_LOG.Error("创建失败!", zap.Any("err", err)) response.FailWithMessage("创建失败", c) return } } response.OkWithData(reqVipUser, c) return }