package cygx import ( "encoding/json" "github.com/rdlucklib/rdluck_tools/paging" "hongze/hz_crm_api/controllers" "hongze/hz_crm_api/models" "hongze/hz_crm_api/models/cygx" cygxService "hongze/hz_crm_api/services/cygx" "hongze/hz_crm_api/utils" "strconv" "time" ) // 产品内测 type OrderController struct { controllers.BaseAuthController } // @Title 列表 // @Description 列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param StartDate query string false "开始时间 ,列如2021-03-06 " // @Param EndDate query string false "结束时间,列如2021-03-06 " // @Param AdminId query string false "销售ID " // @Param ShareId query string false "推荐人ID " // @Param PaymentType query string false "支付渠道 取值范围:1微信小程序,2微信扫码支付,3微信H5支付。 " // @Param OrderType query int false "订单类型 1:畅读卡订单,2:单场付费订单" // @Param OrderStatus query int false "订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭" // @Param PaymentProject query string false "付款项目" // @Param UserCardType query string false "会员卡类型 ,日卡、月卡" // @Param OrderCode query string false "订单编号" // @Param KeyWord query string false "搜索关键词" // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp // @router /order/list [get] func (this *OrderController) OrderList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } resp := new(cygx.UserOrderListResp) pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") orderType, _ := this.GetInt("OrderType", 1) orderStatus, _ := this.GetInt("OrderStatus", -1) startDate := this.GetString("StartDate") endDate := this.GetString("EndDate") adminId := this.GetString("AdminId") shareId := this.GetString("ShareId") paymentType, _ := this.GetInt("PaymentType") orderCode := this.GetString("OrderCode") keyWord := this.GetString("KeyWord") paymentProject := this.GetString("PaymentProject") userCardType := this.GetString("UserCardType") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) var condition string var pars []interface{} if orderType > 0 { //订单类型 1:畅读卡订单,2:单场付费订单 condition += ` AND order_type = ? ` pars = append(pars, orderType) } if startDate != "" && endDate != "" { //时间范围 condition += ` AND create_time BETWEEN ? AND ? ` pars = append(pars, startDate+" 00:00:01", endDate+" 23:59:59") } if adminId != "" { //所属销售筛选 condition += ` AND seller_id IN (` + adminId + `) ` } if shareId != "" { //推荐人ID condition += ` AND share_id IN (` + shareId + `) ` } if paymentType > 0 { // 支付渠道 var tradeType string switch paymentType { case 1: tradeType = "JSAPI" case 2: tradeType = "NATIVE" case 3: tradeType = "MWEB" } condition += ` AND trade_type = ? ` pars = append(pars, tradeType) } if orderStatus > -1 { //订单状态 condition += ` AND order_status = ? ` pars = append(pars, orderStatus) } if orderCode != "" { //订单编号 orderCode = "%" + orderCode + "%" condition += ` AND order_code LIKE ? ` pars = append(pars, orderCode) } if paymentProject != "" { //付款项目 condition += ` AND goods_name = ? ` pars = append(pars, paymentProject) } if userCardType != "" { //日卡月卡, 前端不好区分这里用了两个字段 condition += ` AND goods_name = ? ` pars = append(pars, userCardType) } if keyWord != "" { //用户姓名,手机号 keyWord = "%" + keyWord + "%" condition += ` AND (mobile LIKE ? OR real_name LIKE ? ) ` pars = append(pars, keyWord, keyWord) } total, err := cygx.GetCygxOrderCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } condition += " ORDER BY order_id DESC " list, err := cygx.GetCygxOrderList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } var mobiles []string for _, v := range list { mobiles = append(mobiles, v.Mobile) } inviteNameMap := cygxService.GetCygxUserBusinessCardMap(mobiles) // 根据手机号获取邀请人 for _, v := range list { item := new(cygx.OrderListResp) item.OrderCode = v.OrderCode item.OrderMoney = v.OrderMoney item.SourceId = v.SourceId item.Source = v.Source item.SourceTitle = v.SourceTitle switch v.Source { case utils.CYGX_OBJ_ARTICLE: //文章详情 item.HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.SourceId) case utils.CYGX_OBJ_ACTIVITY: //活动详情 item.HttpUrl = utils.CYGX_MFYX_URL + "/activity/detail/" + strconv.Itoa(v.SourceId) case utils.CYGX_OBJ_ACTIVITYVIDEO: //活动视频 item.HttpUrl = utils.CYGX_MFYX_URL + "/activity/detail/" + strconv.Itoa(v.SourceId) case utils.CYGX_OBJ_ACTIVITYVOICE: //活动音频 item.HttpUrl = utils.CYGX_MFYX_URL + "/activity/detail/" + strconv.Itoa(v.SourceId) case utils.CYGX_OBJ_YANXUANSPECIAL: //专栏详情 item.HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.SourceId) } item.OrderStatus = v.OrderStatus switch item.OrderStatus { case 0: item.OrderStatusText = "已取消" case 1: item.OrderStatusText = "待支付" case 2: item.OrderStatusText = "已支付" case 3: item.OrderStatusText = "退款成功" case 4: item.OrderStatusText = "退款处理中" case 5: item.OrderStatusText = "退款异常" case 6: item.OrderStatusText = "退款关闭" } //TradeType string `comment:"交易类型,枚举值:JSAPI:公众号支付 、 NATIVE:扫码支付 、 App:App支付 、 MICROPAY:付款码支付 、 MWEB:H5支付 、 FACEPAY:刷脸支付"` switch v.TradeType { case "JSAPI": item.PaymentTypeText = "小程序" case "NATIVE": item.PaymentTypeText = "PC" case "MWEB": item.PaymentTypeText = "H5" } item.UserId = v.UserId item.RealName = v.RealName item.Mobile = v.Mobile item.Email = v.Email item.CompanyId = v.CompanyId item.CompanyName = v.CompanyName item.SellerName = v.SellerName if v.ShareName != "" { item.InviteName = v.ShareName } else { item.InviteName = inviteNameMap[v.Mobile] } item.PaymentProject = v.GoodsName if v.OrderStatus != 0 && v.OrderStatus != 1 { item.PayTime = v.PayTime.Format(utils.FormatDateTime) } if orderType == 1 && v.OrderStatus != 0 && v.OrderStatus != 1 { if v.GoodsId == 1 { item.StartDate = v.StartDate.Format(utils.FormatDateTime) item.EndDate = v.EndDate.Format(utils.FormatDateTime) } else { item.StartDate = v.StartDate.Format(utils.FormatDate) item.EndDate = v.EndDate.Format(utils.FormatDate) } } item.CreateTime = v.CreateTime.Format(utils.FormatDateTime) resp.List = append(resp.List, item) } if len(resp.List) == 0 { resp.List = make([]*cygx.OrderListResp, 0) } page := paging.GetPaging(currentIndex, pageSize, total) resp.Paging = page br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 退款 // @Description 退款接口 // @Param request body cygx.UserRemarAddReq true "type json string" // @Success 200 操作成功 // @router /order/refund [post] func (this *UserController) OrderRefund() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req cygx.CygxOrderRefundReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } orderCode := req.OrderCode remark := req.Remark if remark == "" { br.Msg = "请填写退款原因" return } orderDetail, err := cygx.GetCygxOrderDetailByOrderCode(orderCode) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + err.Error() return } if orderDetail.OrderStatus != 2 { br.Msg = "订单状态异常!" br.ErrMsg = "订单状态异常,orderCode:" + orderCode return } //订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭 statusCode, err := cygxService.RefundsApiService(orderDetail) var orderStatus int if statusCode == 200 && err == nil { orderStatus = 4 } else { orderStatus = 5 } item := new(cygx.CygxOrderRefund) item.OrderCode = orderCode item.RefundMoney = orderDetail.OrderMoney item.RefundWay = 1 item.Remark = remark item.CreateTime = time.Now() item.RefundTime = time.Now() item.AdminId = sysUser.AdminId item.AdminName = sysUser.RealName err = cygx.AddCygxOrderRefund(item, orderStatus) if err != nil { br.Msg = "新增失败." br.ErrMsg = "新增失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "已提交退款,请到退款记录页面查看" } // @Title 退款记录列表 // @Description 退款记录列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param StartDate query string false "开始时间 ,列如2021-03-06 " // @Param EndDate query string false "结束时间,列如2021-03-06 " // @Param AdminId query string false "销售ID " // @Param ShareId query string false "推荐人ID " // @Param PaymentType query string false "支付渠道 取值范围:1微信小程序,2微信扫码支付,3微信H5支付。 " // @Param OrderType query int false "订单类型 1:畅读卡订单,2:单场付费订单" // @Param OrderStatus query int false "订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭" // @Param PaymentProject query string false "付款项目" // @Param UserCardType query string false "会员卡类型 ,日卡、月卡" // @Param OrderCode query string false "订单编号" // @Param KeyWord query string false "搜索关键词" // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp // @router /order/refund/list [get] func (this *OrderController) OrderRefundList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } resp := new(cygx.UserOrderListResp) pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") orderType, _ := this.GetInt("OrderType", 1) orderStatus, _ := this.GetInt("OrderStatus", -1) startDate := this.GetString("StartDate") endDate := this.GetString("EndDate") adminId := this.GetString("AdminId") shareId := this.GetString("ShareId") paymentType, _ := this.GetInt("PaymentType") orderCode := this.GetString("OrderCode") keyWord := this.GetString("KeyWord") paymentProject := this.GetString("PaymentProject") userCardType := this.GetString("UserCardType") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) var condition string var pars []interface{} condition += ` AND order_status IN (3,4,5,6) ` if orderType > 0 { //订单类型 1:畅读卡订单,2:单场付费订单 condition += ` AND order_type = ? ` pars = append(pars, orderType) } if startDate != "" && endDate != "" { //时间范围 condition += ` AND create_time BETWEEN ? AND ? ` pars = append(pars, startDate+" 00:00:01", endDate+" 23:59:59") } if adminId != "" { //所属销售筛选 condition += ` AND seller_id IN (` + adminId + `) ` } if shareId != "" { //推荐人ID condition += ` AND share_id IN (` + shareId + `) ` } if paymentType > 0 { // 支付渠道 var tradeType string switch paymentType { case 1: tradeType = "JSAPI" case 2: tradeType = "NATIVE" case 3: tradeType = "MWEB" } condition += ` AND trade_type = ? ` pars = append(pars, tradeType) } if orderStatus > -1 { //订单状态 condition += ` AND order_status = ? ` pars = append(pars, orderStatus) } if orderCode != "" { //订单编号 orderCode = "%" + orderCode + "%" condition += ` AND order_code LIKE ? ` pars = append(pars, orderCode) } if paymentProject != "" { //付款项目 condition += ` AND goods_name = ? ` pars = append(pars, paymentProject) } if userCardType != "" { //日卡月卡, 前端不好区分这里用了两个字段 condition += ` AND goods_name = ? ` pars = append(pars, userCardType) } if keyWord != "" { //用户姓名,手机号 keyWord = "%" + keyWord + "%" condition += ` AND (mobile LIKE ? OR real_name LIKE ? ) ` pars = append(pars, keyWord, keyWord) } total, err := cygx.GetCygxOrderCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } condition += " ORDER BY order_id DESC " list, err := cygx.GetCygxOrderList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } var mobiles []string for _, v := range list { mobiles = append(mobiles, v.Mobile) } inviteNameMap := cygxService.GetCygxUserBusinessCardMap(mobiles) // 根据手机号获取邀请人 for _, v := range list { item := new(cygx.OrderListResp) item.OrderCode = v.OrderCode item.OrderMoney = v.OrderMoney item.SourceId = v.SourceId item.Source = v.Source item.SourceTitle = v.SourceTitle switch v.Source { case utils.CYGX_OBJ_ARTICLE: //文章详情 item.HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.SourceId) case utils.CYGX_OBJ_ACTIVITY: //活动详情 case utils.CYGX_OBJ_ACTIVITYVIDEO: //活动视频 item.HttpUrl = utils.CYGX_MFYX_URL + "/activity/detail/" + strconv.Itoa(v.SourceId) case utils.CYGX_OBJ_ACTIVITYVOICE: //活动音频 item.HttpUrl = utils.CYGX_MFYX_URL + "/activity/detail/" + strconv.Itoa(v.SourceId) item.HttpUrl = utils.CYGX_MFYX_URL + "/activity/detail/" + strconv.Itoa(v.SourceId) case utils.CYGX_OBJ_YANXUANSPECIAL: //专栏详情 item.HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.SourceId) } //OrderStatus int `comment:"订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭"` item.OrderStatus = v.OrderStatus switch item.OrderStatus { case 3: item.OrderStatusText = "退款成功" case 4: item.OrderStatusText = "退款处理中" case 5: item.OrderStatusText = "退款异常" case 6: item.OrderStatusText = "退款关闭" } //TradeType string `comment:"交易类型,枚举值:JSAPI:公众号支付 、 NATIVE:扫码支付 、 App:App支付 、 MICROPAY:付款码支付 、 MWEB:H5支付 、 FACEPAY:刷脸支付"` switch v.TradeType { case "JSAPI": item.PaymentTypeText = "小程序" case "NATIVE": item.PaymentTypeText = "PC" case "MWEB": item.PaymentTypeText = "H5" } item.UserId = v.UserId item.RealName = v.RealName item.Mobile = v.Mobile item.Email = v.Email item.CompanyId = v.CompanyId item.CompanyName = v.CompanyName item.SellerName = v.SellerName if v.ShareName != "" { item.InviteName = v.ShareName } else { item.InviteName = inviteNameMap[v.Mobile] } item.PaymentProject = v.GoodsName switch v.GoodsId { case 1: item.PaymentProject = "日卡" case 2: item.PaymentProject = "月卡" } item.RefundTime = v.RefundTime.Format(utils.FormatDateTime) item.RefundRemark = v.RefundRemark //if v.OrderStatus == 2 { item.PayTime = v.PayTime.Format(utils.FormatDateTime) //} if orderType == 1 { if v.GoodsId == 1 { item.StartDate = v.StartDate.Format(utils.FormatDateTime) item.EndDate = v.EndDate.Format(utils.FormatDateTime) } else { item.StartDate = v.StartDate.Format(utils.FormatDate) item.EndDate = v.EndDate.Format(utils.FormatDate) } } item.CreateTime = v.CreateTime.Format(utils.FormatDateTime) resp.List = append(resp.List, item) } if len(resp.List) == 0 { resp.List = make([]*cygx.OrderListResp, 0) } page := paging.GetPaging(currentIndex, pageSize, total) resp.Paging = page br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 退款撤销 // @Description 退款撤销接口 // @Param request body cygx.UserRemarAddReq true "type json string" // @Success 200 操作成功 // @router /order/refund_revoke [post] func (this *UserController) OrderRefundRevoke() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req cygx.CygxOrderRefundReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } orderCode := req.OrderCode orderDetail, err := cygx.GetCygxOrderDetailByOrderCode(orderCode) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败, Err:" + err.Error() return } if orderDetail.OrderStatus != 4 { br.Msg = "订单状态异常!" br.ErrMsg = "订单状态异常,orderCode:" + orderCode return } item := new(cygx.CygxOrderAction) item.Action = "关闭退款" item.OrderStatus = 6 item.OrderStatusText = "关闭退款" item.OrderCode = orderDetail.OrderCode item.UserId = orderDetail.UserId item.RealName = orderDetail.RealName item.Mobile = orderDetail.Mobile item.Email = orderDetail.Email item.CompanyId = orderDetail.CompanyId item.CompanyName = orderDetail.CompanyName item.SellerName = orderDetail.SellerName item.CreateTime = time.Now() item.ModifyTime = time.Now() item.AdminId = sysUser.AdminId item.AdminName = sysUser.RealName err = cygx.AddCygxOrderRefundRevoke(item) if err != nil { br.Msg = "新增失败." br.ErrMsg = "新增失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "操作成功" }