package services import ( "encoding/json" "errors" "fmt" "hongze/hongze_web_mfyx/models" "hongze/hongze_web_mfyx/models/order" "hongze/hongze_web_mfyx/utils" "time" ) // 获取日卡、月卡商品配置信息 func GetUserGoodsCardList() (goodsListResp []*order.CygxGoodsResp) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg(fmt.Sprint("获取日卡、月卡商品配置信息失败 GetUserGoodsCardList, err:", err.Error()), 2) } }() var condition string var pars []interface{} condition = ` AND goods_id IN (1,2) ` goodsList, e := order.GetCygxGoodsList(condition, pars) if e != nil { err = errors.New("GetCygxGoodsList, Err: " + e.Error()) return } goodsListResp = goodsList return } // 获取单场活动关联的商品配置信息 func GetGoodsInfoByActivity(item *models.ActivityDetail) (goodsListResp []*order.CygxGoodsResp) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg(fmt.Sprint("获取单场活动关联的商品配置信息失败 GetGoodsInfoByActivity, err:", err.Error()), 2) } }() //var goodsList []*order.CygxGoodsResp //var e error var condition string var pars []interface{} if item.ActivityTypeId == 1 && item.IsLimitPeople == 1 { //专家电话会。限制人数, condition = ` AND goods_id IN (3) ` } else if (item.ActivityTypeId == 5 || item.ActivityTypeId == 8) && item.IsResearchPoints { //买方线下交流/专家线下沙龙。参会人扣点, condition = ` AND goods_id IN (4) ` } else if (item.ActivityTypeId == 5 || item.ActivityTypeId == 8) && !item.IsResearchPoints { //买方线下交流/专家线下沙龙。参会人扣点, condition = ` AND goods_id IN (5) ` } else if item.ActivityTypeId == 3 && item.IsResearchPoints { //非易董。公司调研电话会参会人扣点 condition = ` AND goods_id IN (6) ` } else if item.ActivityTypeId == 3 && !item.IsResearchPoints { //非易董。公司调研电话会参会人扣点 condition = ` AND goods_id IN (7) ` } else if item.ActivityTypeId == 1 && item.IsResearchPoints { //专家电话会,不限制人数,研选扣点(1299元) condition = ` AND goods_id IN (8) ` } goodsList, e := order.GetCygxGoodsList(condition, pars) if e != nil { err = errors.New("GetCygxGoodsList, Err: " + e.Error()) return } goodsListResp = goodsList return } // 获取用户十分钟之内是否有相同的订单信息 func GetHaverEquallyOrderByUser10Min(userId, goodsId int) (orderCode string) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg(fmt.Sprint("获取用户十分钟之内是否有相同的订单信息失败 GetHaverEquallyOrderByUser10Min, err:", err.Error()), 2) } }() var condition string var pars []interface{} endTime := time.Now().Add(-10 * time.Minute) condition = ` AND order_status = 1 AND user_id = ? AND goods_id = ? AND create_time > ? ORDER BY order_id DESC ` pars = append(pars, userId, goodsId, endTime) orderList, e := order.GetCygxOrderList(condition, pars, 0, 1) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetCygxOrderList, Err: " + e.Error()) return } if len(orderList) == 0 { return } else { for _, v := range orderList { orderCode = v.OrderCode } } return } // 获取用户十分钟之内是否有相同的订单信息 func GetHaverEquallyOrderByUser10MinByActivty(userId, sourceId int) (orderCode string, seconds int) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg(fmt.Sprint("获取用户十分钟之内是否有相同的订单信息失败 GetHaverEquallyOrderByUser10MinByActivty, err:", err.Error()), 2) } }() var condition string var pars []interface{} endTime := time.Now().Add(-10 * time.Minute) condition = ` AND order_status = 1 AND source = 'activity' AND user_id = ? AND source_id = ? AND create_time > ? ORDER BY order_id DESC ` pars = append(pars, userId, sourceId, endTime) orderList, e := order.GetCygxOrderList(condition, pars, 0, 1) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetCygxOrderList, Err: " + e.Error()) return } if len(orderList) == 0 { return } else { for _, v := range orderList { orderCode = v.OrderCode duration := time.Now().Sub(v.CreateTime) // 将时间差转换为秒数 seconds = 600 - int(duration.Seconds()) } } return } // 获取用户十分钟之内是否有相同的文章订单信息 func GetHaverEquallyOrderByUser10MinByArticle(userId, sourceId int) (orderCode string, seconds int) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg(fmt.Sprint("获取用户十分钟之内是否有相同的订单信息失败 GetHaverEquallyOrderByUser10MinByActivty, err:", err.Error()), 2) } }() var condition string var pars []interface{} endTime := time.Now().Add(-10 * time.Minute) condition = ` AND order_status = 1 AND source = 'article' AND user_id = ? AND source_id = ? AND create_time > ? ORDER BY order_id DESC ` pars = append(pars, userId, sourceId, endTime) orderList, e := order.GetCygxOrderList(condition, pars, 0, 1) if e != nil && e.Error() != utils.ErrNoRow() { err = errors.New("GetCygxOrderList, Err: " + e.Error()) return } if len(orderList) == 0 { return } else { for _, v := range orderList { orderCode = v.OrderCode duration := time.Now().Sub(v.CreateTime) // 将时间差转换为秒数 seconds = 600 - int(duration.Seconds()) } } return } // 处理支付订单回调 func HandleOrderHandle(itemCallback *WechatPayCallback) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg(fmt.Sprint("处理订单回调信息失败 HandleOrderHandle, err:", err.Error()), 2) } }() outTradeNo := itemCallback.OutTradeNo orderDetail, e := order.GetCygxOrderDetailByOrderCode(outTradeNo) if e != nil { err = errors.New("GetCygxOrderDetailByOrderCode, Err: " + e.Error()) return } go AddCygxOrderPayment(itemCallback) // 记录支付交易信息 if itemCallback.TradeState != "SUCCESS" { // 回调显示支付不成功,模版消息推送 if e != nil { err = errors.New("支付失败, OrderCode: " + outTradeNo) return } } //修改过状态的不再二次处理 if orderDetail.OrderStatus == 2 { return } itemOrder := new(order.CygxOrder) itemOrder.OrderCode = itemCallback.OutTradeNo itemOrder.PayTime = itemCallback.SuccessTime itemOrder.PayMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理 itemOrder.OrderStatus = 2 itemOrder.OutTradeCode = itemCallback.TransactionID //文章处理逻辑 OrderType int `comment:"订单类型,1:畅读卡订单,2:单场付费订单"` if orderDetail.OrderType == 1 { itemUserCard := new(order.CygxOrderUserCard) itemUserCard.OrderCode = orderDetail.OrderCode itemUserCard.UserId = orderDetail.UserId itemUserCard.Mobile = orderDetail.Mobile itemUserCard.Email = orderDetail.Email itemUserCard.CompanyId = orderDetail.CompanyId itemUserCard.CompanyName = orderDetail.CompanyName itemUserCard.RealName = orderDetail.RealName itemUserCard.SellerName = orderDetail.SellerName itemUserCard.CreateTime = time.Now() itemUserCard.ModifyTime = time.Now() itemUserCard.RegisterPlatform = orderDetail.RegisterPlatform if orderDetail.GoodsId == 1 { itemUserCard.StartDate = itemOrder.PayTime itemUserCard.EndDate = itemOrder.PayTime.AddDate(0, 0, 1) itemUserCard.CardType = "日卡" } else { now := time.Now() itemUserCard.StartDate = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local) itemUserCard.EndDate = itemUserCard.StartDate.AddDate(0, 1, 0) itemUserCard.CardType = "月卡" } e = order.AddCygxOrderUserCard(itemUserCard, itemOrder) if e != nil { err = errors.New("AddCygxOrderUserCard, Err: " + e.Error()) return } } else if orderDetail.OrderType == 2 { //如果是活动,把单场付费信息的活动写入 用户虚拟资产表 itemOrderVirtualAsset := new(order.CygxOrderVirtualAsset) itemOrderVirtualAsset.OrderCode = orderDetail.OrderCode itemOrderVirtualAsset.UserId = orderDetail.UserId itemOrderVirtualAsset.Mobile = orderDetail.Mobile itemOrderVirtualAsset.Email = orderDetail.Email itemOrderVirtualAsset.CompanyId = orderDetail.CompanyId itemOrderVirtualAsset.CompanyName = orderDetail.CompanyName itemOrderVirtualAsset.RealName = orderDetail.RealName itemOrderVirtualAsset.SellerName = orderDetail.SellerName itemOrderVirtualAsset.Source = orderDetail.Source itemOrderVirtualAsset.SourceId = orderDetail.SourceId itemOrderVirtualAsset.CreateTime = time.Now() itemOrderVirtualAsset.ModifyTime = time.Now() e = order.AddCygxOrderVirtualAsset(itemOrderVirtualAsset, itemOrder) if e != nil { err = errors.New("AddCygxOrderVirtualAsset, Err: " + e.Error()) return } } fmt.Println(orderDetail.Source) return } func AddCygxOrderPayment(itemCallback *WechatPayCallback) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg(fmt.Sprint("处理订单回调信息失败 HandleOrderHandle, err:", err.Error()), 2) } }() itemPay := new(order.CygxOrderPayment) itemPay.OrderCode = itemCallback.OutTradeNo itemPay.OutTradeCode = itemCallback.TransactionID itemPay.PayBody = itemCallback.TradeStateDesc jsonData, _ := json.Marshal(itemCallback) itemPay.PayDetail = string(jsonData) itemPay.PayMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理 itemPay.PayStatus = itemCallback.TradeState itemPay.CreateTime = time.Now() itemPay.PaymentType = 1 e := order.AddCygxOrderPayment(itemPay) if e != nil { err = errors.New("AddCygxOrderPayment, Err: " + e.Error()) return } return } // 处理退款订单回调 func HandleOrderRefundHandle(itemCallback *WechatPayCallback) { var err error defer func() { if err != nil { fmt.Println(err) go utils.SendAlarmMsg(fmt.Sprint("处理退款订单回调信息失败 HandleOrderRefundHandle, err:", err.Error()), 2) } }() outTradeNo := itemCallback.OutTradeNo orderDetail, e := order.GetCygxOrderDetailByOrderCode(outTradeNo) if e != nil { err = errors.New("GetCygxOrderDetailByOrderCode, Err: " + e.Error()) return } //go AddCygxOrderPayment(itemCallback) // 记录支付交易信息 //修改过状态的不再二次处理 if orderDetail.OrderStatus == 3 { return } itemOrder := new(order.CygxOrder) itemOrder.OrderCode = itemCallback.OutTradeNo itemOrder.RefundTime = itemCallback.SuccessTime itemOrder.RefundMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理 itemOrder.OrderStatus = 3 //文章处理逻辑 OrderType int `comment:"订单类型,1:畅读卡订单,2:单场付费订单"` if orderDetail.OrderType == 1 { itemUserCard := new(order.CygxOrderUserCard) itemUserCard.OrderCode = orderDetail.OrderCode itemUserCard.UserId = orderDetail.UserId itemUserCard.Mobile = orderDetail.Mobile itemUserCard.Email = orderDetail.Email itemUserCard.CompanyId = orderDetail.CompanyId itemUserCard.CompanyName = orderDetail.CompanyName itemUserCard.RealName = orderDetail.RealName itemUserCard.SellerName = orderDetail.SellerName itemUserCard.CreateTime = time.Now() itemUserCard.ModifyTime = time.Now() itemUserCard.RegisterPlatform = orderDetail.RegisterPlatform if orderDetail.GoodsId == 1 { itemUserCard.CardType = "日卡" } else { itemUserCard.CardType = "月卡" } e = order.RemoveCygxOrderUserCard(itemUserCard, itemOrder) // 移除用户 if e != nil { err = errors.New("RemoveCygxOrderUserCard, Err: " + e.Error()) return } } else if orderDetail.OrderType == 2 { //如果是活动,把单场付费信息的活动写入 用户虚拟资产表 itemOrderVirtualAsset := new(order.CygxOrderVirtualAsset) itemOrderVirtualAsset.OrderCode = orderDetail.OrderCode itemOrderVirtualAsset.UserId = orderDetail.UserId itemOrderVirtualAsset.Mobile = orderDetail.Mobile itemOrderVirtualAsset.Email = orderDetail.Email itemOrderVirtualAsset.CompanyId = orderDetail.CompanyId itemOrderVirtualAsset.CompanyName = orderDetail.CompanyName itemOrderVirtualAsset.RealName = orderDetail.RealName itemOrderVirtualAsset.SellerName = orderDetail.SellerName itemOrderVirtualAsset.Source = orderDetail.Source itemOrderVirtualAsset.SourceId = orderDetail.SourceId itemOrderVirtualAsset.CreateTime = time.Now() itemOrderVirtualAsset.ModifyTime = time.Now() e = order.RemoveCygxOrderVirtualAsset(itemOrderVirtualAsset, itemOrder) if e != nil { err = errors.New("AddCygxOrderVirtualAsset, Err: " + e.Error()) return } } fmt.Println(orderDetail.Source) return }