1.新增V1.2.0相关接口,已基本完成;

This commit is contained in:
chenlin 2024-01-31 18:00:16 +08:00
parent f9cf5b08e4
commit be82112908
22 changed files with 4277 additions and 327 deletions

View File

@ -3,16 +3,25 @@ package cooperativemanage
import (
"errors"
"fmt"
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"go-admin/app/admin/models"
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/pkg/jwtauth"
"go-admin/tools"
"go-admin/tools/app"
"net/http"
"time"
)
// CooperativeBusinessList 查看供应商列表
// @Summary 查看供应商列表
// @Tags 合作商, v1.2.0
// @Produce json
// @Accept json
// @Param request body models.CooperativeBusinessListReq true "查看供应商列表模型"
// @Success 200 {object} models.CooperativeBusinessListResp
// @Router /api/v1/cooperative/list [post]
func CooperativeBusinessList(c *gin.Context) {
req := &models.CooperativeBusinessListReq{}
if c.ShouldBindJSON(req) != nil {
@ -28,12 +37,13 @@ func CooperativeBusinessList(c *gin.Context) {
return
}
ret := map[string]interface{}{
"count": count,
"list": list,
"pageIndex": req.Page,
"total_page": req.PageSize,
ret := models.CooperativeBusinessListResp{
Count: count,
List: list,
PageIndex: req.Page,
TotalPage: req.PageSize,
}
app.OK(c, ret, "")
return
}
@ -46,10 +56,18 @@ type CooperativeMemberDeductReq struct {
// cooperative_member_deduct
}
// CooperativeAdd 新增供应商
// @Summary 新增供应商
// @Tags 合作商, v1.2.0
// @Produce json
// @Accept json
// @Param request body models.CooperativeBusiness true "新增供应商模型"
// @Success 200 {object} app.Response
// @Router /api/v1/cooperative/add [post]
func CooperativeAdd(c *gin.Context) {
req := &models.CooperativeBusiness{}
if err := c.ShouldBindJSON(req); err != nil {
logger.Error("para err", err)
logger.Errorf("para err", err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
@ -72,7 +90,7 @@ func CooperativeAdd(c *gin.Context) {
}
err = orm.Eloquent.Create(deduct).Error
if err != nil {
logger.Error("create cooperative member deduct err:", err)
logger.Errorf("create cooperative member deduct err:", err)
app.Error(c, http.StatusInternalServerError, err, "添加失败")
return
}
@ -81,6 +99,34 @@ func CooperativeAdd(c *gin.Context) {
return
}
// CooperativeEdit 编辑供应商
// @Summary 编辑供应商
// @Tags 合作商, v1.2.0
// @Produce json
// @Accept json
// @Param request body models.CooperativeBusiness true "编辑供应商模型"
// @Success 200 {object} app.Response
// @Router /api/v1/cooperative/edit [post]
func CooperativeEdit(c *gin.Context) {
req := &models.CooperativeBusiness{}
if err := c.ShouldBindJSON(req); err != nil {
logger.Errorf("para err", err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
req.AddTime = time.Now()
err := orm.Eloquent.Model(&models.CooperativeBusiness{}).Where("id = ?", req.ID).Updates(req).Error
if err != nil {
logger.Errorf("edit cooperative err:", err)
app.Error(c, http.StatusInternalServerError, err, "更新失败")
return
}
app.OK(c, nil, "添加成功")
return
}
func CooperativeMemberPromotionList(c *gin.Context) {
req := &models.CooperativeMemberPromotionReq{}
if c.ShouldBindJSON(req) != nil {
@ -177,6 +223,14 @@ func CooperativeMemberPromotionStoreDayList(c *gin.Context) {
return
}
// CooperativeMemberPromotionStatisticList 租卡会员统计
// @Summary 租卡会员统计
// @Tags 会员管理, V1.2.0
// @Produce json
// @Accept json
// @Param request body models.CooperativeMemberPromotionStatisticReq true "租卡会员统计模型"
// @Success 200 {object} models.CooperativeMemberPromotionStatisticListResp
// @Router /api/v1/cooperative/member_promotion_statistic/list [post]
func CooperativeMemberPromotionStatisticList(c *gin.Context) {
req := &models.CooperativeMemberPromotionStatisticReq{}
if c.ShouldBindJSON(req) != nil {
@ -192,11 +246,12 @@ func CooperativeMemberPromotionStatisticList(c *gin.Context) {
return
}
ret := map[string]interface{}{
"count": count,
"list": list,
"pageIndex": req.Page,
ret := models.CooperativeMemberPromotionStatisticListResp{
Count: count,
PageIndex: req.Page,
List: list,
}
app.OK(c, ret, "")
return
}
@ -215,12 +270,12 @@ func CooperativeMemberPromotionSettleInfo(c *gin.Context) {
var memberPromotion models.CooperativeMemberPromotion
err := orm.Eloquent.Table("").Where("id=?", req.CooperativeMemberPromotionId).Find(&memberPromotion).Error
if err != nil {
logger.Error("cooperative member promotion err:", err)
logger.Errorf("cooperative member promotion err:", err)
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
if memberPromotion.CooperativeBusinessId != req.CooperativeBusinessId {
logger.Error("cooperative business id err:")
logger.Errorf("cooperative business id err:")
app.Error(c, http.StatusInternalServerError, errors.New("cooperative business id err"), "结算错误")
return
}
@ -229,13 +284,13 @@ func CooperativeMemberPromotionSettleInfo(c *gin.Context) {
cooperative.SetMemberDeductConfig()
if memberPromotion.State != models.PromotionStateUnSettlement {
logger.Error("cooperative member promotion state err:")
logger.Errorf("cooperative member promotion state err:")
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
if cooperative.CooperativeMemberDeduct == nil {
logger.Error("cooperative member deduct nil:")
logger.Errorf("cooperative member deduct nil:")
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
@ -273,18 +328,18 @@ func CooperativeMemberPromotionSettleConfirm(c *gin.Context) {
var memberPromotion models.CooperativeMemberPromotion
err := orm.Eloquent.Table("").Where("id=?", req.CooperativeMemberPromotionId).Find(&memberPromotion).Error
if err != nil {
logger.Error("cooperative member promotion err:", err)
logger.Errorf("cooperative member promotion err:", err)
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
if memberPromotion.CooperativeBusinessId != req.CooperativeBusinessId {
logger.Error("cooperative business id err:")
logger.Errorf("cooperative business id err:")
app.Error(c, http.StatusInternalServerError, errors.New("cooperative business id err"), "结算错误")
return
}
// TODO
//if memberPromotion.Date != models.MonthDateAdd(-1) {
// logger.Error("settle date err:")
// logger.Errorf("settle date err:")
// app.Error(c, http.StatusInternalServerError, errors.New("settle date err"), "结算错误")
// return
//}
@ -294,13 +349,13 @@ func CooperativeMemberPromotionSettleConfirm(c *gin.Context) {
cooperative.SetMemberDeductConfig()
if memberPromotion.State != models.PromotionStateUnSettlement {
logger.Error("cooperative member promotion state err:")
logger.Errorf("cooperative member promotion state err:")
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
if cooperative.CooperativeMemberDeduct == nil {
logger.Error("cooperative member deduct nil:")
logger.Errorf("cooperative member deduct nil:")
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
@ -345,7 +400,7 @@ func CooperativeMemberPromotionSettleConfirm(c *gin.Context) {
err = begin.Create(deductSettle).Error
if err != nil {
begin.Rollback()
logger.Error("create cooperative deduct settle err:", err)
logger.Errorf("create cooperative deduct settle err:", err)
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
@ -355,7 +410,7 @@ func CooperativeMemberPromotionSettleConfirm(c *gin.Context) {
}).Error
if err != nil {
begin.Rollback()
logger.Error("update cooperative_member_promotion state err:", err)
logger.Errorf("update cooperative_member_promotion state err:", err)
app.Error(c, http.StatusInternalServerError,
errors.New("update cooperative_member_promotion state err"), "结算错误")
return
@ -363,7 +418,7 @@ func CooperativeMemberPromotionSettleConfirm(c *gin.Context) {
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", err)
logger.Errorf("commit err:", err)
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
@ -409,17 +464,17 @@ func CooperativeMemberPromotionSettleRemit(c *gin.Context) {
var deductSettle models.CooperativeDeductSettle
err := orm.Eloquent.Table("").Where("id=?", req.CooperativeDeductSettleId).Find(&deductSettle).Error
if err != nil {
logger.Error("cooperative member promotion err:", err)
logger.Errorf("cooperative member promotion err:", err)
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
if deductSettle.CooperativeBusinessId != req.CooperativeBusinessId {
logger.Error("cooperative business id err:")
logger.Errorf("cooperative business id err:")
app.Error(c, http.StatusInternalServerError, errors.New("cooperative business id err"), "操作失败")
return
}
if deductSettle.State != models.PromotionStateFinancePay {
logger.Error("deduct settle state err:")
logger.Errorf("deduct settle state err:")
app.Error(c, http.StatusInternalServerError, errors.New("deduct settle state err"), "操作失败")
return
}
@ -431,7 +486,7 @@ func CooperativeMemberPromotionSettleRemit(c *gin.Context) {
}).Error
if err != nil {
begin.Rollback()
logger.Error("update cooperative_member_promotion state err:", err)
logger.Errorf("update cooperative_member_promotion state err:", err)
app.Error(c, http.StatusInternalServerError, errors.New("update cooperative_member_promotion state err"), "操作失败")
return
}
@ -440,14 +495,14 @@ func CooperativeMemberPromotionSettleRemit(c *gin.Context) {
}).Error
if err != nil {
begin.Rollback()
logger.Error("update cooperative_member_promotion state err:", err)
logger.Errorf("update cooperative_member_promotion state err:", err)
app.Error(c, http.StatusInternalServerError, errors.New("update cooperative_member_promotion state err"), "操作失败")
return
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", err)
logger.Errorf("commit err:", err)
app.Error(c, http.StatusInternalServerError, err, "结算错误")
return
}
@ -531,7 +586,7 @@ func UpdateCooperativeMemberStoreDeduct(c *gin.Context) {
var store models.Store
err := orm.Eloquent.Table("store").Where("id=?", memberDeduct.StoreId).Find(&store).Error
if err != nil {
logger.Error("store err:", store)
logger.Errorf("store err:", store)
app.Error(c, http.StatusInternalServerError, err, "修改失败")
return
}
@ -539,7 +594,7 @@ func UpdateCooperativeMemberStoreDeduct(c *gin.Context) {
}
err := orm.Eloquent.Save(memberDeduct).Error
if err != nil {
logger.Error("update cooperative member deduct err:", err)
logger.Errorf("update cooperative member deduct err:", err)
app.Error(c, http.StatusInternalServerError, err, "修改失败")
return
}
@ -573,10 +628,18 @@ func CooperativeOrderList(c *gin.Context) {
app.OK(c, ret, "")
}
// AssistantInviteMemberReportList 店员绩效
// @Summary 店员绩效
// @Tags 门店管理, v1.2.0
// @Produce json
// @Accept json
// @Param request body models.AssistantInviteMemberReportReq true "店员绩效模型"
// @Success 200 {object} models.AssistantInviteMemberReportListResp
// @Router /api/v1/cooperative/member_promotion/assistant_report [post]
func AssistantInviteMemberReportList(c *gin.Context) {
req := models.AssistantInviteMemberReportReq{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
logger.Errorf("parameter err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
@ -584,13 +647,13 @@ func AssistantInviteMemberReportList(c *gin.Context) {
data, _ := c.Get(jwtauth.JwtPayloadKey)
sysUid, ok := data.(jwtauth.MapClaims)["identity"]
if !ok {
logger.Error("sys uid err")
logger.Errorf("sys uid err")
app.Error(c, http.StatusInternalServerError, errors.New("sys uid err"), "查询失败")
return
}
sysUser, err := models.GetSysUser(sysUid)
if err != nil {
logger.Error("sys user err:", err)
logger.Errorf("sys user err:", err)
app.Error(c, http.StatusInternalServerError, err, "查询失败")
return
}
@ -604,11 +667,12 @@ func AssistantInviteMemberReportList(c *gin.Context) {
return
}
ret := map[string]interface{}{
"list": list,
"cur_page": req.Page,
"count": count,
ret := models.AssistantInviteMemberReportListResp{
List: list,
CurPage: req.Page,
Count: count,
}
app.OK(c, ret, "")
return
}
@ -649,7 +713,7 @@ func CooperativeStoreList(c *gin.Context) {
func CooperativeGameCardStockList(c *gin.Context) {
req := models.CooperativeGameCardStockReq{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
logger.Errorf("parameter err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
@ -657,20 +721,20 @@ func CooperativeGameCardStockList(c *gin.Context) {
//data, _ := c.Get(jwtauth.JwtPayloadKey)
//sysUid, ok := data.(jwtauth.MapClaims)["identity"]
//if !ok {
// logger.Error("sys uid err")
// logger.Errorf("sys uid err")
// app.Error(c, http.StatusInternalServerError, errors.New("sys uid err"), "查询失败")
// return
//}
//sysUser, err := models.GetSysUser(sysUid)
//if err != nil {
// logger.Error("sys user err:", err)
// logger.Errorf("sys user err:", err)
// app.Error(c, http.StatusInternalServerError, err, "查询失败")
// return
//}
////req.CooperativeBusinessId = sysUser.CooperativeBusinessId
businessId, err := models.GetCooperativeBusinessId(c)
if err != nil {
logger.Error("get cooperative business id err:", err)
logger.Errorf("get cooperative business id err:", err)
app.Error(c, http.StatusInternalServerError, err, "查询失败")
return
}
@ -695,7 +759,7 @@ func CooperativeGameCardGoodsList(c *gin.Context) {
}
businessId, err := models.GetCooperativeBusinessId(c)
if err != nil {
logger.Error("get cooperative business id err:", err)
logger.Errorf("get cooperative business id err:", err)
app.Error(c, http.StatusInternalServerError, err, "查询失败")
return
}
@ -727,7 +791,7 @@ func CooperativeCannibalizeTaskList(c *gin.Context) {
req.CooperativeBusinessId = businessId
resp, err := req.List()
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
app.Error(c, http.StatusInternalServerError, err, "任务列表错误")
return
}
@ -754,7 +818,7 @@ func CooperativeStockExport(c *gin.Context) {
var cooperativeBusiness models.CooperativeBusiness
err = orm.Eloquent.Table("cooperative_business").Where("id=?", businessId).Find(&cooperativeBusiness).Error
if err != nil {
logger.Error("cooperative business err:", err)
logger.Errorf("cooperative business err:", err)
app.Error(c, http.StatusInternalServerError, err, "导出失败")
return
}
@ -762,7 +826,7 @@ func CooperativeStockExport(c *gin.Context) {
if req.StoreId == 0 {
ids, err := models.GetStoreIdsByCooperativeBusinessId(businessId)
if err != nil {
logger.Error("store id cooperative business err:", err)
logger.Errorf("store id cooperative business err:", err)
app.Error(c, http.StatusInternalServerError, err, "导出失败")
return
}
@ -796,7 +860,7 @@ func CooperativeMemberPromotionExport(c *gin.Context) {
//var cooperativeBusiness models.CooperativeBusiness
//err = orm.Eloquent.Table("cooperative_business").Where("id=?", businessId).Find(&cooperativeBusiness).Error
//if err != nil {
// logger.Error("cooperative business err:", err)
// logger.Errorf("cooperative business err:", err)
// app.Error(c, http.StatusInternalServerError, err, "导出失败")
// return
//}
@ -804,7 +868,7 @@ func CooperativeMemberPromotionExport(c *gin.Context) {
//if req.StoreId == 0 {
// ids, err := models.GetStoreIdsByCooperativeBusinessId(businessId)
// if err != nil {
// logger.Error("store id cooperative business err:", err)
// logger.Errorf("store id cooperative business err:", err)
// app.Error(c, http.StatusInternalServerError, err, "导出失败")
// return
// }
@ -813,7 +877,7 @@ func CooperativeMemberPromotionExport(c *gin.Context) {
memberPromotion := req.Export()
if memberPromotion == "" {
logger.Error("member promotion url nil:")
logger.Errorf("member promotion url nil:")
app.Error(c, http.StatusInternalServerError, errors.New("member promotion url nil"), "导出失败")
return
}
@ -823,3 +887,82 @@ func CooperativeMemberPromotionExport(c *gin.Context) {
}
app.OK(c, ret, "数据导出成功")
}
// CooperativeSetPayInfo 设置支付信息
// @Summary 设置支付信息
// @Tags 合作商, v1.2.0
// @Produce json
// @Accept json
// @Param request body models.CooperativeSetPayInfoReq true "设置支付信息模型"
// @Success 200 {object} app.Response
// @Router /api/v1/cooperative/set_pay_info [post]
func CooperativeSetPayInfo(c *gin.Context) {
var req = new(models.CooperativeSetPayInfoReq)
if err := c.ShouldBindJSON(&req); err != nil {
logger.Errorf("ShouldBindJSON err:", logger.Field("err", err))
app.Error(c, http.StatusBadRequest, err, "参数错误:"+err.Error())
return
}
err := tools.Validate(req) //必填参数校验
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
sysUser, err := models.GetSysUserByCtx(c)
if err != nil {
logger.Error("sys user err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "操作失败:"+err.Error())
return
}
if req.CooperativeBusinessId == 0 { // 如果入参为空则默认使用当前用户所属的合作商id
if sysUser.CooperativeBusinessId == 0 {
logger.Error("sysUser.CooperativeBusinessId is 0")
app.Error(c, http.StatusInternalServerError, errors.New("合作商id为空"), "保存失败:合作商id为空")
return
}
req.CooperativeBusinessId = sysUser.CooperativeBusinessId
}
err = models.SetPayInfo(req)
if err != nil {
logger.Error("CreateErpOrder err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, err.Error())
return
}
app.OK(c, nil, "")
}
// CooperativeGetPayInfo 获取支付信息
// @Summary 获取支付信息
// @Tags 合作商, v1.2.0
// @Produce json
// @Accept json
// @Success 200 {object} models.CooperativePayInfo
// @Router /api/v1/cooperative/get_pay_info [post]
func CooperativeGetPayInfo(c *gin.Context) {
//var req = new(models.CooperativeGetPayInfoReq)
//if err := c.ShouldBindJSON(&req); err != nil {
// logger.Errorf("ShouldBindJSON err:", logger.Field("err", err))
// app.Error(c, http.StatusBadRequest, err, "参数错误:"+err.Error())
// return
//}
//
//err := tools.Validate(req) //必填参数校验
//if err != nil {
// app.Error(c, http.StatusBadRequest, err, err.Error())
// return
//}
payInfo, err := models.GetPayInfo()
if err != nil {
logger.Error("CreateErpOrder err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, err.Error())
return
}
app.OK(c, payInfo, "")
}

View File

@ -280,7 +280,7 @@ func QueryCode(c *gin.Context) {
list, err := models.GetCodeList(req)
if err != nil {
logger.Error("GetCodeList err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "获取失败")
app.Error(c, http.StatusInternalServerError, err, err.Error())
return
}

View File

@ -118,6 +118,14 @@ func GoodsOrderRefundSendReceive(c *gin.Context) {
app.OK(c, nil, "订单退货成功")
}
// MallUserVmRecord 用户积分记录
// @Summary 用户积分记录
// @Tags 数据统计, V1.2.0
// @Produce json
// @Accept json
// @Param request body models.MallUserVmRecordReq true "用户积分记录模型"
// @Success 200 {object} models.MallUserVmRecordResp
// @Router /api/v1/mall/goods/user/vm_record [post]
func MallUserVmRecord(c *gin.Context) {
req := &models.MallUserVmRecordReq{}
if c.ShouldBindJSON(req) != nil {
@ -132,12 +140,13 @@ func MallUserVmRecord(c *gin.Context) {
app.Error(c, http.StatusInternalServerError, errors.New("order detail err"), msg)
return
}
ret := map[string]interface{}{
"count": totalCount,
"list": orderList,
"page_index": req.PageIdx,
"page_size": req.PageSize,
//"total_page": totalPage,
ret := models.MallUserVmRecordResp{
Count: totalCount,
List: orderList,
PageIndex: req.PageIdx,
PageSize: req.PageSize,
}
app.OK(c, ret, "")
}

View File

@ -103,11 +103,11 @@ func UserList(c *gin.Context) {
// NewUserList 所有用户
// @Summary 所有用户
// @Tags 会员管理
// @Tags 会员管理, V1.2.0
// @Produce json
// @Accept json
// @Param request body models.NewUserListReq true "所有用户模型"
// @Success 200 {object} models.U
// @Success 200 {object} models.NewUserListResp
// @Router /api/v1/user_info/list [post]
func NewUserList(c *gin.Context) {
var req = new(models.NewUserListReq)
@ -118,41 +118,13 @@ func NewUserList(c *gin.Context) {
}
fmt.Printf("req: %+v \n", req)
userList, _, count, err := models.GetNewUserList(req)
ret, err := models.GetNewUserList(req)
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "查询失败")
return
}
var uids []uint32
for _, u := range userList {
if u.MemberExpireDays > 0 {
uids = append(uids, u.Uid)
}
}
//未归还卡带
cards, err := models.GetUserExpiredCards(uids)
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "查询失败")
return
}
for i, u := range userList {
c, ok := cards[u.Uid]
if ok {
userList[i].OrderCards = c
//滞纳金 一个卡带一天2块钱
userList[i].ForfeitPenalty = len(c) * 200 * int(userList[i].MemberExpireDays)
}
}
ret := map[string]interface{}{
"count": count,
"list": userList,
"pageIndex": req.PageIndex,
"total_page": req.PageSize,
}
app.OK(c, ret, "")
}
@ -942,6 +914,32 @@ func UserInviteRecordList(c *gin.Context) {
app.OK(c, ret, "")
}
// NewUserInviteRecordList 会员邀请记录
// @Summary 会员邀请记录
// @Tags 会员管理, V1.2.0
// @Produce json
// @Accept json
// @Param request body models.NewUserInviteRecordReq true "会员邀请记录模型"
// @Success 200 {object} models.UserInviteRecordListResp
// @Router /api/v1/user_info/new_user_invite_record_list [post]
func NewUserInviteRecordList(c *gin.Context) {
req := new(models.NewUserInviteRecordReq)
if c.ShouldBindJSON(req) != nil {
logger.Errorf("para err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
resp, err := req.NewList()
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "查询失败")
return
}
app.OK(c, resp, "")
}
func ExpireMemberSmsSendRecordList(c *gin.Context) {
req := &models.ExpireMemberSmsSendListReq{}
if c.ShouldBindJSON(req) != nil {

View File

@ -2118,6 +2118,7 @@ func GetCodeList(req *QueryCodeReq) (*QueryCodeResp, error) {
qs := orm.Eloquent.Debug().Table("erp_stock_commodity").
Where("imei LIKE ? OR erp_barcode LIKE ?", "%"+req.ScanCode+"%", "%"+req.ScanCode+"%")
es := qs
err := qs.Order(orderStr).Offset(page * req.PageSize).Limit(req.PageSize).Find(&commodities).Error
if err != nil && err != RecordNotFound {
@ -2137,7 +2138,9 @@ func GetCodeList(req *QueryCodeReq) (*QueryCodeResp, error) {
for _, commodity := range commodities {
if commodity.IMEI != "" && strings.Contains(commodity.IMEI, req.ScanCode) { // 串码非空且包含查找的数据
strCode = commodity.IMEI
} else { // 串码为空,直接返回条码数据
} else if commodity.IMEI != "" && strings.Contains(commodity.ErpBarcode, req.ScanCode) { // 串码不为空,但条码包含扫码数据
return nil, errors.New("串码类商品请直接输入串码")
} else {
strCode = commodity.ErpBarcode
}
stockList = append(stockList, strCode)

View File

@ -16,11 +16,13 @@ import (
type CooperativeBusiness struct {
Model
Name string `json:"name" binding:"required"`
Avatar string `json:"avatar" binding:"required"`
Address string `json:"address" binding:"required"`
Tel string `json:"tel" binding:"required"`
AddTime time.Time `json:"add_time"` // 加入时间
Name string `json:"name" binding:"required"` // 供应商名称
Avatar string `json:"avatar" binding:"required"` // logo
Address string `json:"address"` // 地址
Tel string `json:"tel" binding:"required"` // 电话
AddTime time.Time `json:"add_time"` // 加入时间
Username string `json:"username" binding:"required"` // 用户名
Password string `json:"password" binding:"required"` // 密码
CooperativeMemberDeduct *CooperativeMemberDeduct `json:"cooperative_member_deduct" gorm:"-"`
CooperativeAssistantMemberDeduct *CooperativeAssistantMemberDeduct `json:"cooperative_assistant_member_deduct" gorm:"-"`
@ -116,6 +118,10 @@ type CooperativeMemberPromotion struct {
RenewalPlatinumDeduct uint32 `json:"renewal_platinum_deduct" gorm:"-"` // 续费白金会员提成
RenewalBlackGoldDeduct uint32 `json:"renewal_black_gold_deduct" gorm:"-"` // 续费黑金金会员提成
UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量
UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量
UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量
DeductAmount uint32 `json:"deduct_amount" gorm:"-"` // 结算净额
// cooperative_member_promotion
}
@ -123,49 +129,58 @@ type CooperativeMemberPromotion struct {
// 合作商推广会员门店 饼图
type CooperativeMemberPromotionStore struct {
Model
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
CooperativeName string `json:"cooperative_name"` // 合作商名称
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
Date string `json:"date" gorm:"index"` //
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
Store *Store `json:"store" gorm:"-"`
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
CooperativeName string `json:"cooperative_name"` // 合作商名称
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
Date string `json:"date" gorm:"index"` //
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量
UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量
UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量
Store *Store `json:"store" gorm:"-"`
// cooperative_member_promotion_store
}
// 合作商推广会员每天
type CooperativeMemberPromotionDay struct {
Model
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
CooperativeName string `json:"cooperative_name"` // 合作商名称
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
DayTime string `json:"day_time" gorm:"index"` //
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
CooperativeName string `json:"cooperative_name"` // 合作商名称
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
DayTime string `json:"day_time" gorm:"index"` //
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量
UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量
UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量
// cooperative_member_promotion_day
}
// 合作商推广会员门店每天 柱状图
type CooperativeMemberPromotionStoreDay struct {
Model
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
CooperativeName string `json:"cooperative_name"` // 合作商名称
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
DayTime string `json:"day_time" gorm:"index"` //
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
Store *Store `json:"store" gorm:"-"`
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
CooperativeName string `json:"cooperative_name"` // 合作商名称
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
DayTime string `json:"day_time" gorm:"index"` //
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量
UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量
UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量
Store *Store `json:"store" gorm:"-"`
// cooperative_member_promotion_store_day
}
@ -201,6 +216,13 @@ type CooperativeBusinessListReq struct {
PageSize int `json:"pageSize"`
}
type CooperativeBusinessListResp struct {
Count int64 `json:"count"`
List []CooperativeBusiness `json:"list"`
PageIndex int `json:"pageIndex"`
TotalPage int `json:"total_page"`
}
func (m *CooperativeBusinessListReq) List() ([]CooperativeBusiness, int64, error) {
var cooperatives []CooperativeBusiness
qs := orm.Eloquent.Table("cooperative_business")
@ -682,18 +704,29 @@ type CooperativeMemberPromotionStatistic struct {
Date string `json:"date" gorm:"index"` //
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量
UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量
UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量
Store *Store `json:"store" gorm:"-"`
// cooperative_member_promotion_day
}
type CooperativeMemberPromotionStatisticReq struct {
Type uint32 `json:"type"` // 1-日店员推广 2-日门店店员推广
CooperativeBusinessId uint32 `json:"cooperative_business_id"`
StartDate string `json:"start_date"`
EndDate string `json:"end_date"`
StoreId uint32 `json:"store_id"`
Page int `json:"pageIndex"`
PageSize int `json:"pageSize"`
Type uint32 `json:"type"` // 1-按天展示 2-按月展示
CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id
StartDate string `json:"start_date"` // 开始月份
EndDate string `json:"end_date"` // 结束月份
StoreId uint32 `json:"store_id"` // 门店ID
Page int `json:"pageIndex"` // 页码
PageSize int `json:"pageSize"` // 每页条数
IsExport uint32 `json:"is_export"` // 1-导出
}
type CooperativeMemberPromotionStatisticListResp struct {
Count int64 `json:"count"`
PageIndex int `json:"pageIndex"`
List []CooperativeMemberPromotionStatistic `json:"list"`
}
func (m *CooperativeMemberPromotionStatisticReq) List() ([]CooperativeMemberPromotionStatistic, int64, error) {
@ -866,18 +899,20 @@ func CooperativeMemberPromotionToStatistic(list []CooperativeMemberPromotion) []
}
for i, _ := range list {
promotions = append(promotions, CooperativeMemberPromotionStatistic{
Model: list[i].Model,
CooperativeBusinessId: list[i].CooperativeBusinessId,
CooperativeName: list[i].CooperativeName,
GoldCount: list[i].GoldCount,
PlatinumCount: list[i].PlatinumCount,
BlackGoldCount: list[i].BlackGoldCount,
RenewalGoldCount: list[i].RenewalGoldCount,
RenewalPlatinumCount: list[i].RenewalPlatinumCount,
RenewalBlackGoldCount: list[i].RenewalBlackGoldCount,
Date: list[i].Date,
Model: list[i].Model,
CooperativeBusinessId: list[i].CooperativeBusinessId,
CooperativeName: list[i].CooperativeName,
GoldCount: list[i].GoldCount,
PlatinumCount: list[i].PlatinumCount,
BlackGoldCount: list[i].BlackGoldCount,
RenewalGoldCount: list[i].RenewalGoldCount,
RenewalPlatinumCount: list[i].RenewalPlatinumCount,
RenewalBlackGoldCount: list[i].RenewalBlackGoldCount,
Date: list[i].Date,
UpgradePlatinumToBlackCount: list[i].UpgradePlatinumToBlackCount,
UpgradeGoldToBlackCount: list[i].UpgradeGoldToBlackCount,
UpgradeGoldToPlatinumCount: list[i].UpgradeGoldToPlatinumCount,
//StoreId: list[i].StoreId,
})
}
return promotions
@ -898,12 +933,15 @@ func CooperativeMemberPromotionStoreToStatistic(list []CooperativeMemberPromotio
PlatinumCount: list[i].PlatinumCount,
BlackGoldCount: list[i].BlackGoldCount,
//DayTime: list[i].DayTime,
RenewalGoldCount: list[i].RenewalGoldCount,
RenewalPlatinumCount: list[i].RenewalPlatinumCount,
RenewalBlackGoldCount: list[i].RenewalBlackGoldCount,
Date: list[i].Date,
StoreId: list[i].StoreId,
Store: list[i].Store,
RenewalGoldCount: list[i].RenewalGoldCount,
RenewalPlatinumCount: list[i].RenewalPlatinumCount,
RenewalBlackGoldCount: list[i].RenewalBlackGoldCount,
Date: list[i].Date,
StoreId: list[i].StoreId,
Store: list[i].Store,
UpgradeGoldToPlatinumCount: list[i].UpgradeGoldToPlatinumCount,
UpgradeGoldToBlackCount: list[i].UpgradeGoldToBlackCount,
UpgradePlatinumToBlackCount: list[i].UpgradePlatinumToBlackCount,
})
}
return promotions

View File

@ -3,8 +3,8 @@ package models
import (
"encoding/json"
"errors"
"github.com/codinl/go-logger"
orm "go-admin/common/global"
"go-admin/logger"
)
// gen:qs
@ -29,12 +29,13 @@ type PayConfig struct {
}
const (
ConfigNamePay = "pay_config" // 支付配置
ConfigNameMember = "member_config" // 会员配置
ConfigNameMemberVm = "member_vm_config" // 会员积分配置
ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置
ConfigActivityRenewal = "activity_renewal_config" // 活动配置
ConfigRecycleCard = "recycle_card_config" // 回收卡配置
ConfigNamePay = "pay_config" // 支付配置
ConfigNameMember = "member_config" // 会员配置
ConfigNameMemberVm = "member_vm_config" // 会员积分配置
ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置
ConfigActivityRenewal = "activity_renewal_config" // 活动配置
ConfigRecycleCard = "recycle_card_config" // 回收卡配置
ConfigCooperativePayInfo = "cooperative_pay_info" // 合作商支付设置
)
func PayConfigInfo() (*PayConfig, error) {
@ -43,13 +44,13 @@ func PayConfigInfo() (*PayConfig, error) {
err := orm.Eloquent.Table("config").Where("name=?", ConfigNamePay).Find(&configAllocation).Error
//err := NewConfigQuerySet(DB).NameEq(ConfigNamePay).One(&configAllocation)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return payConfig, err
}
err = json.Unmarshal([]byte(configAllocation.Value), payConfig)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return payConfig, err
}
@ -69,13 +70,13 @@ func MemberConfigInfo() ([]MemberConfig, error) {
err := orm.Eloquent.Table("config").Where("name=?", ConfigNameMember).Find(&configAllocation).Error
//err := NewConfigQuerySet(DB).NameEq(ConfigNameMember).One(&configAllocation)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return memberConfigs, err
}
err = json.Unmarshal([]byte(configAllocation.Value), &memberConfigs)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return memberConfigs, err
}
@ -113,13 +114,13 @@ func memberVmConfigInfo() ([]MemberVmConfig, error) {
err := orm.Eloquent.Table("config").Where("name=?", ConfigNameMemberVm).Find(&configAllocation).Error
//err := NewConfigQuerySet(DB).NameEq(ConfigNameMemberVm).One(&configAllocation)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return memberVmConfigs, err
}
err = json.Unmarshal([]byte(configAllocation.Value), &memberVmConfigs)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return memberVmConfigs, err
}
@ -159,13 +160,13 @@ func AttendanceVmConfigInfo() (*AttendanceVmConfig, error) {
err := orm.Eloquent.Table("config").Where("name=?", ConfigNameAttendanceVm).Find(&configAllocation).Error
//err := NewConfigQuerySet(DB).NameEq(ConfigNameAttendanceVm).One(&configAllocation)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return attendanceConfig, err
}
err = json.Unmarshal([]byte(configAllocation.Value), attendanceConfig)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return attendanceConfig, err
}
@ -208,13 +209,13 @@ func ActivityRenewalConfigInfo() (ActivityRenewalConfig, error) {
Where("name=?", ConfigActivityRenewal).Find(&configAllocation).Error
//err := NewConfigQuerySet(DB).NameEq(ConfigActivityRenewal).One(&configAllocation)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return activityRenewalConfig, err
}
err = json.Unmarshal([]byte(configAllocation.Value), &activityRenewalConfig)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return activityRenewalConfig, err
}
@ -224,14 +225,14 @@ func ActivityRenewalConfigInfo() (ActivityRenewalConfig, error) {
func ActivityRenewalConfigUpdate(activity ActivityRenewalConfig) (ActivityRenewalConfig, error) {
bytes, err := json.Marshal(activity)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return activity, err
}
orm.Eloquent.Table("config").
Where("name=?", ConfigActivityRenewal).Update("Value", string(bytes))
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return activity, err
}
@ -241,7 +242,7 @@ func ActivityRenewalConfigUpdate(activity ActivityRenewalConfig) (ActivityRenewa
func GetActivityRenewalConfig() ActivityRenewalConfig {
info, err := ActivityRenewalConfigInfo()
if err != nil {
logger.Error("info err:", err)
logger.Errorf("info err:", err)
return info
}
return info
@ -258,13 +259,13 @@ func RecycleCardConfigInfo() (RecycleCardConfig, error) {
err := orm.Eloquent.Table("config").
Where("name=?", ConfigRecycleCard).Find(&configAllocation).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return recycleConfig, err
}
err = json.Unmarshal([]byte(configAllocation.Value), &recycleConfig)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return recycleConfig, err
}
@ -274,16 +275,89 @@ func RecycleCardConfigInfo() (RecycleCardConfig, error) {
func RecycleCardConfigUpdate(recycleConfig RecycleCardConfig) (RecycleCardConfig, error) {
bytes, err := json.Marshal(recycleConfig)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return recycleConfig, err
}
orm.Eloquent.Table("config").
Where("name=?", ConfigRecycleCard).Update("Value", string(bytes))
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return recycleConfig, err
}
return recycleConfig, nil
}
// CooperativePayInfo 支付信息
type CooperativePayInfo struct {
CooperativeBusinessId uint32 `json:"cooperative_business_id" binding:"required"` // 合作商id
UnionPayMerchantId string `json:"union_pay_merchant_id" gorm:"index"` // 聚合支付平台商户号
WxAppId string `json:"wx_app_id" gorm:"index"` // 微信小程序AppID
WxAppMchId string `json:"wx_app_mchId" gorm:"index"` // 微信支付商户号
WxAppMchSecret string `json:"wx_app_mchSecret" gorm:"index"` // 微信支付商户密钥
}
func SetPayInfo(req *CooperativeSetPayInfoReq) error {
payInfo := CooperativePayInfo{
CooperativeBusinessId: req.CooperativeBusinessId,
UnionPayMerchantId: req.UnionPayMerchantId,
WxAppId: req.WxAppId,
WxAppMchId: req.WxAppMchId,
WxAppMchSecret: req.WxAppMchSecret,
}
jPayInfo, err := json.Marshal(payInfo)
if err != nil {
logger.Errorf("CooperativePayInfo marshal err:", logger.Field("err", err))
return err
}
var configInfo Config
err = orm.Eloquent.Table("config").Where("name=?", ConfigCooperativePayInfo).Find(&configInfo).Error
if err != nil {
logger.Error("query erp_order err:", logger.Field("err", err))
return errors.New("操作失败:" + err.Error())
}
if errors.Is(err, RecordNotFound) || configInfo.ID == 0 { // 没有记录则新增
configInfo.Name = ConfigCooperativePayInfo
configInfo.Value = string(jPayInfo)
err = orm.Eloquent.Create(&configInfo).Error
if err != nil {
logger.Errorf("create CooperativePayInfo err:", logger.Field("err", err))
return errors.New("保存失败:" + err.Error())
}
} else { // 有记录则更新
var updateConfigInfo Config
updateConfigInfo.ID = configInfo.ID
updateConfigInfo.Name = ConfigCooperativePayInfo
updateConfigInfo.Value = string(jPayInfo)
err = orm.Eloquent.Model(&Config{}).Where("id = ?", configInfo.ID).Updates(updateConfigInfo).Error
if err != nil {
logger.Error("update CooperativePayInfo err:", logger.Field("err", err))
return errors.New("保存失败:" + err.Error())
}
}
return nil
}
func GetPayInfo() (*CooperativePayInfo, error) {
payConfig := new(CooperativePayInfo)
var configAllocation Config
err := orm.Eloquent.Table("config").Where("name=?", ConfigCooperativePayInfo).Find(&configAllocation).Error
if err != nil {
logger.Errorf("err:", err)
return payConfig, err
}
err = json.Unmarshal([]byte(configAllocation.Value), payConfig)
if err != nil {
logger.Errorf("err:", err)
return payConfig, err
}
return payConfig, nil
}

View File

@ -8,6 +8,7 @@ import (
"go-admin/app/admin/apis/pay"
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
"go-admin/tools/config"
"gorm.io/gorm"
"math/rand"
@ -58,7 +59,7 @@ type ErpOrder struct {
MakerTime time.Time `json:"maker_time"` // 制单时间
AuditorId uint32 `json:"auditor_id" gorm:"index"` // 审核人id
AuditorName string `json:"auditor_name"` // 审核人姓名
AuditTime time.Time `json:"audit_time"` // 审核时间
AuditTime *time.Time `json:"audit_time"` // 审核时间
CashierList string `json:"cashier_list" gorm:"type:text"` // 付款方式存储json数据
SalesmanList string `json:"salesman_list" gorm:"type:text"` // 销售员信息存储json数据
MemberType string `json:"member_type"` // 会员类型:general 普通; member 会员
@ -709,6 +710,25 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state int) error {
return errors.New("订单类型错误")
}
// 更新用户积分
var vmCount int
var describe, event string
if erpOrder.RetailType == RetailTypeSale && state == SoldOut { // 零售订单,而且订单已支付,更新用户积分
describe = "零售销售获得积分"
event = VmEventErpOrderSale
vmCount = tools.RoundFloat64(erpOrder.TotalAmount)
} else if erpOrder.RetailType == RetailTypeRejected { // 退货订单,扣减用户积分
describe = "零售退货扣除积分"
event = VmEventErpOrderReject
vmCount = 0 - tools.RoundFloat64(erpOrder.TotalAmount)
}
err = UserVmUpdate(gdb, uint32(erpOrder.Uid), vmCount, event, describe)
if err != nil {
logger.Errorf("err:", err)
return err
}
return nil
}

View File

@ -3224,7 +3224,7 @@ func MemberReportFile(memberReports []InviteMemberReport, fileName string) strin
var row []interface{}
for rowId := 0; rowId < len(memberReports); rowId++ {
row = []interface{}{fmt.Sprintf("%d", memberReports[rowId].Store.ID), memberReports[rowId].Store.Name,
fmt.Sprintf("%d", memberReports[rowId].UserInfo.Uid), memberReports[rowId].UserInfo.ShopAssistantName,
fmt.Sprintf("%d", memberReports[rowId].User.Uid), memberReports[rowId].User.ShopAssistantName,
fmt.Sprintf("%d", memberReports[rowId].GoldCount), fmt.Sprintf("%d", memberReports[rowId].PlatinumCount),
fmt.Sprintf("%d", memberReports[rowId].BlackGoldCount)}
@ -3243,3 +3243,15 @@ func MemberReportFile(memberReports []InviteMemberReport, fileName string) strin
return ExportUrl + fileName
}
type CooperativeSetPayInfoReq struct {
CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id
UnionPayMerchantId string `json:"name" binding:"required"` // 聚合支付平台商户号
WxAppId string `json:"wx_app_id"` // 微信小程序AppID
WxAppMchId string `json:"wx_app_mchId" binding:"required"` // 微信支付商户号
WxAppMchSecret string `json:"wx_app_mchSecret" binding:"required"` // 微信支付商户密钥
}
type CooperativeGetPayInfoReq struct {
CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id
}

View File

@ -4,10 +4,10 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/codinl/go-logger"
"github.com/rs/zerolog/log"
utils "go-admin/app/admin/models/tools"
orm "go-admin/common/global"
"go-admin/logger"
"gorm.io/gorm"
"sort"
"strconv"
@ -183,7 +183,7 @@ func CreateGoodsSerialNo() string {
var count int64
err := orm.Eloquent.Table("goods").Where("serial_no=?", serialNo).Count(&count).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return ""
}
if count > 0 {
@ -202,7 +202,7 @@ func CreateGoodsId() uint32 {
var count int64
err := orm.Eloquent.Table("goods").Where("goods_id=?", orderId).Count(&count).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return 0
}
if count > 0 {
@ -242,7 +242,7 @@ func (m *GoodsListReq) GoodsList() ([]Goods, int64, error) {
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, 0, err
}
//totalPage := int(count)/m.PageSize + 1
@ -250,7 +250,7 @@ func (m *GoodsListReq) GoodsList() ([]Goods, int64, error) {
//err = qs.Order("cat_sort DESC,sort DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&goodsList).Error
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&goodsList).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, 0, err
}
GoodsListSetGoodsCat(goodsList)
@ -267,7 +267,7 @@ func (m *GoodsDetailReq) GoodsDetail() (*Goods, error) {
//err := NewGoodsQuerySet(DB).GoodsIdEq(m.GoodsId).One(&goods).GoodsIdEq(m.GoodsId).One(&goods)
err := orm.Eloquent.Table("goods").Where("goods_id=?", m.GoodsId).Find(&goods).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, err
}
return &goods, nil
@ -410,14 +410,14 @@ func (m *GoodsOrderListReq) OrderList() ([]GoodsOrder, int64, error) {
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, 0, err
}
//totalPage := int(count)/m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&list).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, 0, err
}
GoodsOrderListSetGoods(list)
@ -439,7 +439,7 @@ func (m *GoodsOrderDetailReq) OrderDetail() (*GoodsOrder, error) {
err := qs.Find(&order).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, err
}
//orders := GoodsOrderListSetGoods([]GoodsOrder{order})
@ -449,7 +449,7 @@ func (m *GoodsOrderDetailReq) OrderDetail() (*GoodsOrder, error) {
//var goods Goods
goods, err := GetGoods(order.GoodsId)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, err
}
var goodsAttribute GoodsAttribute
@ -490,13 +490,13 @@ func (m *GoodsOrderDetailReq) OrderDetail() (*GoodsOrder, error) {
var userAddress UserAddress
err = orm.Eloquent.Table("user_address").Where("id=?", order.AddressId).Find(&userAddress).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, err
}
order.UserAddress = &userAddress
err = order.SetDeliverStore()
if err != nil {
logger.Error(" err:", err)
logger.Errorf(" err:", err)
}
return &order, nil
}
@ -506,7 +506,7 @@ func (m *Goods) GoodsCreate() error {
m.GoodsId = CreateGoodsId()
err := orm.Eloquent.Create(m).Error
if err != nil {
logger.Error("err:", err.Error())
logger.Errorf("err:", err.Error())
return err
}
return nil
@ -515,7 +515,7 @@ func (m *Goods) GoodsCreate() error {
func (m *Goods) Edit() error {
err := orm.Eloquent.Save(m).Error
if err != nil {
logger.Error("err:", err.Error())
logger.Errorf("err:", err.Error())
return err
}
return nil
@ -524,7 +524,7 @@ func (m *Goods) Edit() error {
func (m *Goods) GetDetail() error {
err := orm.Eloquent.Table("goods").Where("goods_id=?", m.GoodsId).Find(m).Error
if err != nil {
logger.Error("err:", err.Error())
logger.Errorf("err:", err.Error())
return err
}
var goodsAttributes []GoodsAttribute
@ -566,7 +566,7 @@ func GetGoodsMapByIds(ids []uint32) map[uint32]Goods {
err := orm.Eloquent.Table("goods").Where("goods_id IN (?)", ids).Find(&goodsList).Error
//err := NewGoodsQuerySet(DB).GoodsIdIn(ids...).All(&goodsList)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return goodsMap
}
for i, _ := range goodsList {
@ -606,7 +606,7 @@ func (m *GoodsOrderDeliverReq) OrderDeliver() (*GoodsOrder, error) {
var order GoodsOrder
err := orm.Eloquent.Table("goods_order").Where("order_id=?", m.OrderId).Find(&order).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, err
}
if order.State != GoodsOrderStateOnDeliver {
@ -625,7 +625,7 @@ func (m *GoodsOrderDeliverReq) OrderDeliver() (*GoodsOrder, error) {
//"delivery_status": 2,
}).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, err
}
order.DeliveryTrackingNo = m.DeliveryTrackingNo
@ -643,7 +643,7 @@ func (m *GoodsOrderDeliverReq) OrderDeliver() (*GoodsOrder, error) {
goods, err := GetGoods(order.GoodsId)
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, err
}
var goodsAttribute GoodsAttribute
@ -678,7 +678,7 @@ func (m *GoodsOrderDeliverReq) OrderDeliver() (*GoodsOrder, error) {
var userAddress UserAddress
err = orm.Eloquent.Table("user_address").Where("id=?", order.AddressId).Find(&userAddress).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, err
}
order.UserAddress = &userAddress
@ -689,12 +689,27 @@ func (m *GoodsOrderDeliverReq) OrderDeliver() (*GoodsOrder, error) {
}
type MallUserVmRecordReq struct {
PageIdx int `json:"pageIndex"`
PageSize int `json:"pageSize"`
Uid uint32 `json:"uid"`
PageIdx int `json:"pageIndex"`
PageSize int `json:"pageSize"`
Uid uint32 `json:"uid"` // 用户ID
Tel string `json:"tel"` // 用户手机号
StartTime string `json:"start_time"` // 开始时间示例2006-01-02T15:04:05+08:00
EndTime string `json:"end_time"` // 结束时间示例2006-01-02T15:04:05+08:00
}
func (m *MallUserVmRecordReq) MallUserVmRecordList() ([]UserVmRecord, int64, error) {
type MallUserVmRecordResp struct {
Count int64 `json:"count"`
List []MallUserVmRecordData `json:"list"`
PageIndex int `json:"page_index"`
PageSize int `json:"page_size"`
}
type MallUserVmRecordData struct {
UserVmRecord
Tel string `json:"tel"` // 用户手机号
}
func (m *MallUserVmRecordReq) MallUserVmRecordList() ([]MallUserVmRecordData, int64, error) {
page := m.PageIdx - 1
if page < 0 {
page = 0
@ -703,29 +718,83 @@ func (m *MallUserVmRecordReq) MallUserVmRecordList() ([]UserVmRecord, int64, err
m.PageSize = 10
}
var list []UserVmRecord
qs := orm.Eloquent.Table("user_vm_record") // NewGoodsOrderQuerySet(DB)
var list []MallUserVmRecordData
qs := orm.Eloquent.Table("user_vm_record")
countQuery := orm.Eloquent.Table("user_vm_record").
Joins("LEFT JOIN user ON user_vm_record.uid = user.uid")
if m.Uid != 0 {
qs = qs.Where("uid=?", m.Uid)
qs = qs.Where("user_vm_record.uid=?", m.Uid)
countQuery = countQuery.Where("user_vm_record.uid=?", m.Uid)
}
if m.Tel != "" {
qs = qs.Where("user.tel=?", m.Tel)
countQuery = countQuery.Where("user.tel=?", m.Tel)
}
if m.StartTime != "" {
startTime, err := time.Parse(QueryTimeFormat, m.StartTime)
if err == nil {
qs = qs.Where("user_vm_record.created_at>?", startTime)
countQuery = countQuery.Where("user_vm_record.created_at>?", startTime)
} else {
logger.Errorf("MallUserVmRecordList time start parse err:", err.Error())
}
}
if m.EndTime != "" {
endTime, err := time.Parse(QueryTimeFormat, m.EndTime)
if err == nil {
qs = qs.Where("user_vm_record.created_at<?", endTime)
countQuery = countQuery.Where("user_vm_record.created_at<?", endTime)
} else {
logger.Errorf("MallUserVmRecordList time end parse err:", err.Error())
}
}
qs = qs.Select("user_vm_record.*, user.tel").
Joins("Left JOIN user ON user_vm_record.uid = user.uid")
err := qs.Offset(page * m.PageSize).Limit(m.PageSize).Find(&list).Error
if err != nil {
logger.Errorf("err:", err)
return nil, 0, err
}
// 计算count
var count int64
err := qs.Count(&count).Error
err = countQuery.Count(&count).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, 0, err
}
//totalPage := int(count)/m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&list).Error
if err != nil {
logger.Error("err:", err)
return nil, 0, err
}
return list, count, nil
}
func MallUserVmRecordListSetUser(list []UserVmRecord) []UserVmRecord {
ids := make([]uint32, 0, len(list))
for i, _ := range list {
ids = append(ids, list[i].Uid)
}
if len(ids) == 0 {
return list
}
infoMap, err := GetUserInfoMap(ids)
if err != nil {
logger.Errorf("user info map err:", logger.Field("err", err))
return list
}
for i, _ := range list {
v, ok := infoMap[list[i].Uid]
if ok {
list[i].User = &v
}
fmt.Println("UserInfo:", v)
}
return list
}
//func (c *GoodsCat) Add() error {
// err := orm.Eloquent.Create(c).Error
//}
@ -737,7 +806,7 @@ func SpecListSetValue(list []Spec) []Spec {
}
specValueMap, err := GetSpecValueMap(sids)
if err != nil {
logger.Error("get spec value map err:", err)
logger.Errorf("get spec value map err:", err)
return list
}
for i, _ := range list {
@ -759,7 +828,7 @@ func GetSpecValueMap(ids []uint32) (map[uint32][]SpecValue, error) {
err := orm.Eloquent.Table("spec_value").Where("spec_id in (?)", ids).
Order("spec_id DESC,sort DESC").Find(&specValues).Error
if err != nil {
logger.Error("create spec value list err:", err)
logger.Errorf("create spec value list err:", err)
return specValueMap, err
}
for i, _ := range specValues {
@ -777,7 +846,7 @@ func (a *GoodsAttribute) SetSpecValues() {
err := orm.Eloquent.Table("spec_value").Where(fmt.Sprintf("id in (%s)", a.SpecValueIndex)).
Find(&a.SpecValues).Error
if err != nil {
logger.Error("set spec value list err:", err)
logger.Errorf("set spec value list err:", err)
return
}
}
@ -786,7 +855,7 @@ func GetGoods(id uint32) (Goods, error) {
var goods Goods
err := orm.Eloquent.Table("goods").Where("goods_id=?", id).Find(&goods).Error
if err != nil {
logger.Error("goods err:", err)
logger.Errorf("goods err:", err)
return goods, err
}
return goods, nil
@ -798,7 +867,7 @@ func IndexSortString(n string) (string, error) {
for i, _ := range numStrings {
num, err := strconv.Atoi(numStrings[i])
if err != nil {
logger.Error("num err:", err)
logger.Errorf("num err:", err)
return "", err
}
nums = append(nums, num)
@ -1082,17 +1151,17 @@ func (r *GoodsOrderRefundSendReceiveReq) Receive() error {
}
//combo, err := GetCombo(goodsOrder.GoodsAttributeComboId)
//if err != nil {
// logger.Error("get err:",)
// logger.Errorf("get err:",)
//}
if goodsOrder.State == GoodsOrderStateRefundedCancel {
logger.Error("state err")
logger.Errorf("state err")
return errors.New("state err")
}
if goodsOrder.Vm != 0 {
err = UserVmUpdate(goodsOrder.Uid, int(goodsOrder.Vm), VmEventBuyGoods, "购买商品积分抵扣取消")
err = UserVmUpdate(nil, goodsOrder.Uid, int(goodsOrder.Vm), VmEventBuyGoods, "购买商品积分抵扣取消")
if err != nil {
logger.Error("update user vm err:", err)
logger.Errorf("update user vm err:", err)
return err
}
}
@ -1157,7 +1226,7 @@ func GetWxPayExpressFeeRefundRecord(orderId uint32) (string, error) {
err := orm.Eloquent.Table("user_open_member_record").Where("order_id=?", orderId).
Order("id DESC").Limit(1).Find(&openMemberRecord).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return "", err
}
return openMemberRecord.OpenNo, nil
@ -1171,7 +1240,7 @@ func OrderUpdateGoodsStockBack(attributeId, count uint32, gdb *gorm.DB) error {
count, count, attributeId)
err := gdb.Exec(sql).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return err
}
return nil
@ -1252,14 +1321,14 @@ func (m *DeliverTaskReq) List() ([]DeliverTask, int64, error) {
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, 0, err
}
//totalPage := int(count)/m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&list).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return nil, 0, err
}
DeliverTaskListSetUserAddress(list)
@ -1334,7 +1403,7 @@ func DeliverTaskSubListSetDetail(list []*DeliverTaskSub) {
var orderCards []OrderCard
err = orm.Eloquent.Table("order_card").Where("order_id=?", order.ID).Find(&orderCards).Error
if err != nil {
logger.Error("err:", err)
logger.Errorf("err:", err)
return
}
@ -1378,7 +1447,7 @@ func UpdateDeliverTaskSubState(orderId uint32) {
fmt.Sprintf("SELECT * FROM deliver_task_sub WHERE deliver_task_id=%d AND state='%s'",
sub.DeliverTaskId, DeliverTaskStateOnDeliver))
if err != nil {
logger.Error("deliver task sub exist err:", err)
logger.Errorf("deliver task sub exist err:", err)
return
}
if !exist {
@ -1394,7 +1463,7 @@ func UpdateDeliverTaskSubState(orderId uint32) {
func (o *GoodsOrder) SetDeliverStore() error {
store, err := GetStore(o.DeliverStoreId)
if err != nil {
logger.Error("set deliver store err:", err)
logger.Errorf("set deliver store err:", err)
return err
}
o.DeliverStore = store
@ -1418,7 +1487,7 @@ GROUP BY b.goods_id
Scan(&list).
Error
if err != nil {
logger.Error("get goods first sku failed", err)
logger.Errorf("get goods first sku failed", err)
return nil
}

View File

@ -993,7 +993,7 @@ func ShareCardUserVmRecord() {
shareCardDateVm.TotalVm += shareCardDateVm.Vm
//fmt.Println("shareCardDateVm:", shareCardDateVm)
err = UserVmUpdate(shareCardDateVm.Uid, int(shareCardDateVm.Vm), VmEventUserShareCard, "用户共享卡收益")
err = UserVmUpdate(nil, shareCardDateVm.Uid, int(shareCardDateVm.Vm), VmEventUserShareCard, "用户共享卡收益")
//err = UserVmUpdate(shareCardDateVm.Uid, int(shareCardDateVm.TotalVm), VmEventUserShareCard, "用户共享卡收益")
if err != nil {
logger.Error("user vm update err:", logger.Field("err", err))

File diff suppressed because it is too large Load Diff

View File

@ -5,15 +5,18 @@ import (
"fmt"
orm "go-admin/common/global"
"go-admin/logger"
"gorm.io/gorm"
)
const (
VmEventBuyGoods = "buy_goods"
VmEventOpenMember = "open_member"
VmEventInvite1Member = "invite_1_member"
VmEventInvite2Member = "invite_2_member"
VmEventUserShareCard = "user_share_card"
VmEventAttendance = "attendance"
VmEventBuyGoods = "buy_goods" // 购买商品积分抵扣
VmEventOpenMember = "open_member" // 开通会员奖励
VmEventInvite1Member = "invite_1_member" // 邀请会员奖励
VmEventInvite2Member = "invite_2_member" // 邀请会员奖励
VmEventUserShareCard = "user_share_card" // 用户共享卡收益
VmEventAttendance = "attendance" // 连续签到获取积分
VmEventErpOrderSale = "erp_order_sale" // 零售销售获得积分
VmEventErpOrderReject = "erp_order_reject" // 零售退货扣除积分
)
// 用户积分
@ -34,15 +37,16 @@ type UserVm struct {
type UserVmRecord struct {
Model
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"`
BeforeVm uint32 `json:"before_vm"` // 变动前
AfterVm uint32 `json:"after_vm"` // 变动后
Alter int `json:"alter"` // 数值
Event string `json:"event" gorm:"type:varchar(100)"` // 事件
Describe string `json:"describe" gorm:"type:text"` // 描述
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` // 用户ID
BeforeVm uint32 `json:"before_vm"` // 变动前
AfterVm uint32 `json:"after_vm"` // 变动后
Alter int `json:"alter"` // 数值
Event string `json:"event" gorm:"type:varchar(100)"` // 事件
Describe string `json:"describe" gorm:"type:text"` // 描述
User *UserInfo `json:"user,omitempty" gorm:"-"`
}
func UserVmUpdate(uid uint32, amount int, event, describe string) error {
func UserVmUpdate(gdb *gorm.DB, uid uint32, amount int, event, describe string) error {
var userVm UserVm
err := orm.Eloquent.Table("user_vm").
Where("uid=?", uid).Find(&userVm).Error
@ -51,7 +55,13 @@ func UserVmUpdate(uid uint32, amount int, event, describe string) error {
return err
}
begin := orm.Eloquent.Begin()
flag := false
begin := gdb
if gdb == nil {
flag = true
begin = orm.Eloquent.Begin()
}
if err == RecordNotFound {
if amount < 0 {
begin.Rollback()
@ -93,11 +103,14 @@ func UserVmUpdate(uid uint32, amount int, event, describe string) error {
return err
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("err:", logger.Field("err", err))
return err
if flag {
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("err:", logger.Field("err", err))
return err
}
}
return nil
}

View File

@ -14,6 +14,7 @@ func registerCooperativeManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.Gi
{
cooperativeBusiness.POST("list", cooperativemanage.CooperativeBusinessList) // 获取合作商列表
cooperativeBusiness.POST("add", cooperativemanage.CooperativeAdd) // 获取合作商
cooperativeBusiness.POST("edit", cooperativemanage.CooperativeEdit) // 编辑供应商
cooperativeBusiness.POST("member_promotion/list", cooperativemanage.CooperativeMemberPromotionList) // 合作商推广会员列表
cooperativeBusiness.POST("member_promotion_store/list", cooperativemanage.CooperativeMemberPromotionStoreList) // 合作商推广会员门店列表
cooperativeBusiness.POST("member_promotion_day/list", cooperativemanage.CooperativeMemberPromotionDayList) // 合作商每天推广会员列表
@ -35,6 +36,8 @@ func registerCooperativeManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.Gi
cooperativeBusiness.POST("cannibalize_task_list", cooperativemanage.CooperativeCannibalizeTaskList) // 合作商调拨任务列表
cooperativeBusiness.POST("stock_export", cooperativemanage.CooperativeStockExport) // 合作商库存导出
cooperativeBusiness.POST("member_promotion_export", cooperativemanage.CooperativeMemberPromotionExport) // 合作商推广会员导出
cooperativeBusiness.POST("set_pay_info", cooperativemanage.CooperativeSetPayInfo) // 设置支付信息
cooperativeBusiness.POST("get_pay_info", cooperativemanage.CooperativeGetPayInfo) // 获取支付信息
}
}

View File

@ -42,7 +42,7 @@ func registerMallManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMid
goods.POST("goods/order/detail", mallmanage.GoodsOrderDetail) // 详情
goods.POST("goods/order/deliver", mallmanage.GoodsOrderDeliver) // 发货
goods.POST("goods/order/refund_send_receive", mallmanage.GoodsOrderRefundSendReceive) // 退货接收
goods.POST("goods/user/vm_record", mallmanage.MallUserVmRecord)
goods.POST("goods/user/vm_record", mallmanage.MallUserVmRecord) // 用户积分记录
goods.POST("goods/attribute_add", mallmanage.GoodsAttributeAdd) // 添加规格
goods.POST("goods/attribute_m_del", mallmanage.GoodsAttributeMDel) // 删除规格

View File

@ -37,6 +37,7 @@ func registerUserManageUnAuthRouter(v1 *gin.RouterGroup) {
userInfo.POST("/member_record_list_export", usermanage.UserMemberRecordListExport)
userInfo.POST("/member_statistic_list", usermanage.UserMemberStatisticList)
userInfo.POST("/user_invite_record_list", usermanage.UserInviteRecordList)
userInfo.POST("/new_user_invite_record_list", usermanage.NewUserInviteRecordList)
userInfo.POST("/expire_member_sms_list", usermanage.ExpireMemberSmsSendRecordList)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -417,6 +417,37 @@ definitions:
required:
- id
type: object
models.AssistantInviteMemberReportListResp:
properties:
count:
type: integer
cur_page:
type: integer
list:
items:
$ref: '#/definitions/models.InviteMemberReport'
type: array
type: object
models.AssistantInviteMemberReportReq:
properties:
cooperative_business_id:
description: 合作商id
type: integer
date:
description: 日期
type: string
pageIndex:
description: 页码
type: integer
pageSize:
description: 每页数量
type: integer
store_id:
description: 门店id
type: integer
sys_user:
$ref: '#/definitions/models.SysUser'
type: object
models.BatchPrintInfo:
properties:
erp_commodity_name:
@ -610,6 +641,238 @@ definitions:
store_id:
type: integer
type: object
models.CooperativeBusiness:
properties:
add_time:
description: 加入时间
type: string
address:
description: 地址
type: string
avatar:
description: logo
type: string
cooperative_assistant_member_deduct:
$ref: '#/definitions/models.CooperativeAssistantMemberDeduct'
cooperative_member_deduct:
$ref: '#/definitions/models.CooperativeMemberDeduct'
createdAt:
description: 创建时间
type: string
id:
description: 数据库记录编号
type: integer
name:
description: 供应商名称
type: string
password:
description: 密码
type: string
tel:
description: 电话
type: string
username:
description: 用户名
type: string
required:
- avatar
- name
- password
- tel
- username
type: object
models.CooperativeBusinessListReq:
properties:
end_time:
description: 结束时间
type: string
pageIndex:
type: integer
pageSize:
type: integer
start_time:
description: 开始时间
type: string
type: object
models.CooperativeBusinessListResp:
properties:
count:
type: integer
list:
items:
$ref: '#/definitions/models.CooperativeBusiness'
type: array
pageIndex:
type: integer
total_page:
type: integer
type: object
models.CooperativeMemberDeduct:
properties:
black_gold_deduct:
description: 黑金金会员提成
type: integer
cooperative_business_id:
type: integer
createdAt:
description: 创建时间
type: string
gold_deduct:
description: 黄金会员提成
type: integer
id:
description: 数据库记录编号
type: integer
platinum_deduct:
description: 白金会员提成
type: integer
renewal_black_gold_deduct:
description: 续费黑金金会员提成
type: integer
renewal_gold_deduct:
description: 续费黄金会员提成
type: integer
renewal_platinum_deduct:
description: 续费白金会员提成
type: integer
required:
- black_gold_deduct
- gold_deduct
- platinum_deduct
- renewal_black_gold_deduct
- renewal_gold_deduct
- renewal_platinum_deduct
type: object
models.CooperativeMemberPromotionStatistic:
properties:
black_gold_count:
description: 黑金会员数量
type: integer
cooperative_business_id:
type: integer
cooperative_name:
description: 合作商名称
type: string
createdAt:
description: 创建时间
type: string
date:
type: string
day_time:
type: string
gold_count:
description: 黄金会员数量
type: integer
id:
description: 数据库记录编号
type: integer
platinum_count:
description: 白金会员数量
type: integer
renewal_black_gold_count:
description: 续费黑金会员数量
type: integer
renewal_gold_count:
description: 续费黄金会员数量
type: integer
renewal_platinum_count:
description: 续费白金会员数量
type: integer
store:
$ref: '#/definitions/models.Store'
store_id:
description: 门店id
type: integer
upgrade_gold_to_black_count:
description: 升级:黄金->黑金数量
type: integer
upgrade_gold_to_platinum_count:
description: 升级:黄金->白金数量
type: integer
upgrade_platinum_to_black_count:
description: 升级:白金->黑金数量
type: integer
type: object
models.CooperativeMemberPromotionStatisticListResp:
properties:
count:
type: integer
list:
items:
$ref: '#/definitions/models.CooperativeMemberPromotionStatistic'
type: array
pageIndex:
type: integer
type: object
models.CooperativeMemberPromotionStatisticReq:
properties:
cooperative_business_id:
description: 合作商id
type: integer
end_date:
description: 结束月份
type: string
is_export:
description: 1-导出
type: integer
pageIndex:
description: 页码
type: integer
pageSize:
description: 每页条数
type: integer
start_date:
description: 开始月份
type: string
store_id:
description: 门店ID
type: integer
type:
description: 1-按天展示 2-按月展示
type: integer
type: object
models.CooperativePayInfo:
properties:
cooperative_business_id:
description: 合作商id
type: integer
union_pay_merchant_id:
description: 聚合支付平台商户号
type: string
wx_app_id:
description: 微信小程序AppID
type: string
wx_app_mchId:
description: 微信支付商户号
type: string
wx_app_mchSecret:
description: 微信支付商户密钥
type: string
required:
- cooperative_business_id
type: object
models.CooperativeSetPayInfoReq:
properties:
cooperative_business_id:
description: 合作商id
type: integer
name:
description: 聚合支付平台商户号
type: string
wx_app_id:
description: 微信小程序AppID
type: string
wx_app_mchId:
description: 微信支付商户号
type: string
wx_app_mchSecret:
description: 微信支付商户密钥
type: string
required:
- name
- wx_app_mchId
- wx_app_mchSecret
type: object
models.DictType:
properties:
createBy:
@ -1939,6 +2202,96 @@ definitions:
description: 用户名
type: string
type: object
models.InviteMemberReport:
properties:
black_gold_count:
description: 黑金数量
type: integer
black_gold_deduct:
description: 黑金会员提成
type: integer
cooperative_business_id:
description: 合作商id
type: integer
cooperative_name:
description: 合作商名称
type: string
createdAt:
description: 创建时间
type: string
date:
description: ReportTime string `json:"report_time" gorm:"index"` //
业绩时间
type: string
deduct_amount:
description: 店员提成
type: integer
gold_count:
description: 黄金数量
type: integer
gold_deduct:
description: 黄金会员提成
type: integer
id:
description: 数据库记录编号
type: integer
invite_renewal_black_gold_count:
description: 续费黑金会员数量(干预)
type: integer
invite_renewal_gold_count:
description: 续费黄金会员数量(干预)
type: integer
invite_renewal_platinum_count:
description: 续费白金会员数量(干预)
type: integer
invite_upgrade_gold_to_black_count:
description: 升级:黄金->黑金数量(干预)
type: integer
invite_upgrade_gold_to_platinum_count:
description: 升级:黄金->白金数量(干预)
type: integer
invite_upgrade_platinum_to_black_count:
description: 升级:白金->黑金数量(干预)
type: integer
platinum_count:
description: 白金数量
type: integer
platinum_deduct:
description: 白金会员提成
type: integer
renewal_black_gold_count:
description: 续费黑金会员数量(自动)
type: integer
renewal_gold_count:
description: 续费黄金会员数量(自动)
type: integer
renewal_platinum_count:
description: 续费白金会员数量(自动)
type: integer
store:
allOf:
- $ref: '#/definitions/models.Store'
description: 门店
store_id:
description: 门店id
type: integer
uid:
description: 店员uid
type: integer
upgrade_gold_to_black_count:
description: 升级:黄金->黑金数量(自动)
type: integer
upgrade_gold_to_platinum_count:
description: 升级:黄金->白金数量(自动)
type: integer
upgrade_platinum_to_black_count:
description: 升级:白金->黑金数量(自动)
type: integer
user:
allOf:
- $ref: '#/definitions/models.UserInfo'
description: invite_member_report
type: object
models.Login:
properties:
code:
@ -2016,6 +2369,70 @@ definitions:
description: 用户名
type: string
type: object
models.MallUserVmRecordData:
properties:
after_vm:
description: 变动后
type: integer
alter:
description: 数值
type: integer
before_vm:
description: 变动前
type: integer
createdAt:
description: 创建时间
type: string
describe:
description: 描述
type: string
event:
description: 事件
type: string
id:
description: 数据库记录编号
type: integer
tel:
description: 用户手机号
type: string
uid:
description: 用户ID
type: integer
user:
$ref: '#/definitions/models.UserInfo'
type: object
models.MallUserVmRecordReq:
properties:
end_time:
description: 结束时间示例2006-01-02T15:04:05+08:00
type: string
pageIndex:
type: integer
pageSize:
type: integer
start_time:
description: 开始时间示例2006-01-02T15:04:05+08:00
type: string
tel:
description: 用户手机号
type: string
uid:
description: 用户ID
type: integer
type: object
models.MallUserVmRecordResp:
properties:
count:
type: integer
list:
items:
$ref: '#/definitions/models.MallUserVmRecordData'
type: array
page_index:
type: integer
page_size:
type: integer
type: object
models.Menu:
properties:
action:
@ -2076,6 +2493,50 @@ definitions:
visible:
type: string
type: object
models.NewUserInviteRecordReq:
properties:
create_end_time:
description: 注册小程序时间-结束时间
type: string
create_start_time:
description: 注册小程序时间-开始时间
type: string
from_uid:
description: 邀请人ID
type: integer
invite_user_name:
description: 邀请人昵称
type: string
is_export:
description: 1-导出
type: integer
member_level:
description: 当前类型1-普通 2-黄金 4-白金 5-黑金
type: integer
pageIndex:
type: integer
pageSize:
type: integer
record_end_time:
description: 记录时间-结束时间
type: string
record_start_time:
description: 记录时间-开始时间
type: string
record_type:
description: 记录类型 1-首次邀请2-开通年费黄金3-开通季度黄金4-开通半年黄金, 5-开通年费白金6-开通年费黑金7-续费年费黄金干预8-续费年费白金干预9-续费年费黑金干预10-续费年费黄金(自动),
11-续费季度黄金自动12-续费半年黄金自动13-续费年费白金自动14-续费年费黑金自动15-黄金→白金(干预), 16-黄金→黑金干预17-白金→黑金干预18-黄金→白金自动19-黄金→黑金自动20-白金→黑金(自动)
type: integer
store_id:
description: 邀请人所属门店id
type: integer
to_uid:
description: 用户ID
type: integer
user_tel:
description: 用户手机号
type: string
type: object
models.NewUserListReq:
properties:
create_endTime:
@ -2087,6 +2548,9 @@ definitions:
filter:
description: 是否过滤无滞纳金已标记用户
type: boolean
is_export:
description: 1-导出
type: integer
memberLevel:
description: 当前会员等级
type: integer
@ -2120,6 +2584,29 @@ definitions:
uid:
description: 用户id
type: integer
user_type:
description: 用户类型 用户类型 1-普通用户 2-店员
type: integer
type: object
models.NewUserListResp:
properties:
export_url:
description: 导出excel地址
type: string
list:
description: 用户数据
items:
$ref: '#/definitions/models.U'
type: array
pageIndex:
description: 页码
type: integer
pageSize:
description: 每页展示条数
type: integer
total:
description: 总条数
type: integer
type: object
models.Order:
properties:
@ -3274,7 +3761,7 @@ definitions:
description: 开通会员级别2-黄金会员 4-白金会员 5-黑金会员
type: integer
open_member_time:
description: 开通会员
description: 开通会员时间
type: string
order_amount:
description: 消费金额
@ -3396,7 +3883,7 @@ definitions:
description: 开通会员级别2-黄金会员 4-白金会员 5-黑金会员
type: integer
open_member_time:
description: 开通会员
description: 开通会员时间
type: string
order_cards:
items:
@ -3441,6 +3928,61 @@ definitions:
description: 角色id
type: integer
type: object
models.UserInviteRecordListData:
properties:
create_time:
description: 注册小程序时间
type: string
invite_uid:
description: 邀请人ID
type: integer
invite_user_name:
description: 邀请人昵称
type: string
member_level:
description: 会员等级1-普通 2-黄金 4-白金 5-黑金
type: integer
memberExpire:
description: 租卡会员到期时间
type: string
record_time:
description: 记录时间
type: string
record_type:
description: 记录类型
type: integer
store_id:
description: 邀请人所属门店id
type: integer
store_name:
description: 邀请人所属门店名称
type: string
user_tel:
description: 用户手机号
type: string
user_uid:
description: 用户ID
type: integer
type: object
models.UserInviteRecordListResp:
properties:
export_url:
description: 导出excel地址
type: string
list:
items:
$ref: '#/definitions/models.UserInviteRecordListData'
type: array
pageIndex:
description: 页码
type: integer
pageSize:
description: 每页展示条数
type: integer
total:
description: 总条数
type: integer
type: object
tools.Params:
properties:
treeCode:
@ -4128,6 +4670,153 @@ paths:
summary: 配置列表数据
tags:
- system/配置
/api/v1/cooperative/add:
post:
consumes:
- application/json
parameters:
- description: 新增供应商模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.CooperativeBusiness'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/app.Response'
summary: 新增供应商
tags:
- 合作商
- v1.2.0
/api/v1/cooperative/edit:
post:
consumes:
- application/json
parameters:
- description: 编辑供应商模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.CooperativeBusiness'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/app.Response'
summary: 编辑供应商
tags:
- 合作商
- v1.2.0
/api/v1/cooperative/get_pay_info:
post:
consumes:
- application/json
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.CooperativePayInfo'
summary: 获取支付信息
tags:
- 合作商
- v1.2.0
/api/v1/cooperative/list:
post:
consumes:
- application/json
parameters:
- description: 查看供应商列表模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.CooperativeBusinessListReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.CooperativeBusinessListResp'
summary: 查看供应商列表
tags:
- 合作商
- v1.2.0
/api/v1/cooperative/member_promotion/assistant_report:
post:
consumes:
- application/json
parameters:
- description: 店员绩效模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.AssistantInviteMemberReportReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.AssistantInviteMemberReportListResp'
summary: 店员绩效
tags:
- 门店管理
- v1.2.0
/api/v1/cooperative/member_promotion_statistic/list:
post:
consumes:
- application/json
parameters:
- description: 租卡会员统计模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.CooperativeMemberPromotionStatisticReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.CooperativeMemberPromotionStatisticListResp'
summary: 租卡会员统计
tags:
- 会员管理
- V1.2.0
/api/v1/cooperative/set_pay_info:
post:
consumes:
- application/json
parameters:
- description: 设置支付信息模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.CooperativeSetPayInfoReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/app.Response'
summary: 设置支付信息
tags:
- 合作商
- v1.2.0
/api/v1/db/columns/page:
get:
description: 数据库表列分页列表 / database table column page list
@ -5043,6 +5732,28 @@ paths:
summary: 登录日志列表
tags:
- system/日志
/api/v1/mall/goods/user/vm_record:
post:
consumes:
- application/json
parameters:
- description: 用户积分记录模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.MallUserVmRecordReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.MallUserVmRecordResp'
summary: 用户积分记录
tags:
- 数据统计
- V1.2.0
/api/v1/menu:
get:
description: 获取JSON
@ -6098,10 +6809,33 @@ paths:
"200":
description: OK
schema:
$ref: '#/definitions/models.U'
$ref: '#/definitions/models.NewUserListResp'
summary: 所有用户
tags:
- 会员管理
- V1.2.0
/api/v1/user_info/new_user_invite_record_list:
post:
consumes:
- application/json
parameters:
- description: 会员邀请记录模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.NewUserInviteRecordReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.UserInviteRecordListResp'
summary: 会员邀请记录
tags:
- 会员管理
- V1.2.0
/api/v1/user_info/tel:
post:
consumes:

1
go.mod
View File

@ -3,7 +3,6 @@ module go-admin
go 1.16
require (
github.com/360EntSecGroup-Skylar/excelize v1.4.1
github.com/BurntSushi/toml v1.3.2 // indirect
github.com/aliyun/aliyun-sts-go-sdk v0.0.0-20171106034748-98d3903a2309
github.com/bytedance/sonic v1.10.2 // indirect

3
go.sum
View File

@ -11,8 +11,6 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks=
github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5EvSCJcmH3dT9luvxzu8iGAE=
github.com/AlecAivazis/survey/v2 v2.0.5/go.mod h1:WYBhg6f0y/fNYUuesWQc0PKbJcEliGcYHB9sNT3Bg74=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
@ -517,7 +515,6 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.3-0.20181224173747-660f15d67dbb/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=

View File

@ -5,8 +5,10 @@ import (
"fmt"
"gorm.io/gorm"
"log"
"math"
"runtime"
"strconv"
"time"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
@ -82,3 +84,17 @@ func GetOrm(c *gin.Context) (*gorm.DB, error) {
return nil, errors.New(fmt.Sprintf("msgID[%s], db connect not exist", msgID))
}
}
// RoundFloat64 将float64类型四舍五入取整
func RoundFloat64(input float64) int {
rounded := int(math.Round(input))
return rounded
}
// ConvertTimeToString 将time类型转换为string
func ConvertTimeToString(t time.Time) string {
if t.IsZero() {
return "" // 零值或 nil 返回空字符串
}
return t.Format("2006-01-02 15:04:05")
}