1、excel导出改成读取配置文件的url地址;

2、优化库存导入时门店名称/商品名称/供应商名称跟系统不符提示模糊的问题;
3、导出库存详excel时增加"库存数量"列,数量默认为1,方便采购进行excel数据透视;
4、增加尊享会员相关接口和字段;
5、优化财务统计接口,默认剔除"尊享会员费",只有传参有才展示;
6、解决采购需求页面库存数量统计不准确的问题,初始值由0改成1;
7、增加短信群发编辑接口;
This commit is contained in:
chenlin 2024-09-02 17:22:55 +08:00
parent c8cedfb72e
commit 183caeefab
22 changed files with 1741 additions and 143 deletions

View File

@ -732,6 +732,37 @@ func GroupSendMessageCreateTemplate(c *gin.Context) {
app.OK(c, nil, "操作成功")
}
func GroupSendMessageEditTemplate(c *gin.Context) {
req := &models.GroupSendMessageTemplate{}
if c.ShouldBindJSON(req) != nil {
logger.Errorf("para err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
if req.Status == 2 { // 已发送的模版不能编辑
app.Error(c, http.StatusBadRequest, errors.New("para err"), "已发送的短信不能编辑,请重新创建!")
return
}
if req.UserType == 4 && req.Tels == "" {
app.Error(c, http.StatusBadRequest, errors.New("para err"), "指定用户手机号")
return
}
if req.Message == "" {
app.Error(c, http.StatusBadRequest, errors.New("para err"), "短信内容不能为空")
return
}
err := orm.Eloquent.Save(req).Error
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "添加文章错误")
return
}
app.OK(c, nil, "操作成功")
}
func GroupSendMessage(c *gin.Context) {
req := &struct {
GroupSendMessageTemplateId uint32 `json:"group_send_message_template_id"`
@ -1023,3 +1054,95 @@ func TelList(c *gin.Context) {
app.OK(c, telListInfo, "")
}
// PrivilegeMemberList 零售尊享会员列表
// @Summary 零售尊享会员列表
// @Tags 会员管理, V1.4.2
// @Produce json
// @Accept json
// @Param request body models.PrivilegeMemberListReq true "零售尊享会员列表模型"
// @Success 200 {object} models.PrivilegeMemberListResp
// @Router /api/v1/user_info/privilege_member/list [post]
func PrivilegeMemberList(c *gin.Context) {
req := new(models.PrivilegeMemberListReq)
if c.ShouldBindJSON(req) != nil {
logger.Errorf("para err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
resp, err := req.PrivilegeMemberList(c)
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
if err.Error() == "您没有该门店权限" {
app.Error(c, http.StatusInternalServerError, err, err.Error())
} else {
app.Error(c, http.StatusInternalServerError, err, "查询失败")
}
return
}
app.OK(c, resp, "")
}
// ActivateExtendedWarranty 零售尊享会员激活主机延保
// @Summary 零售尊享会员激活主机延保
// @Tags 会员管理, V1.4.2
// @Produce json
// @Accept json
// @Param request body models.ActivateExtendedWarrantyReq true "零售尊享会员激活主机延保模型"
// @Success 200 {object} app.Response
// @Router /api/v1/user_info/privilege_member/activate_extended_warranty [post]
func ActivateExtendedWarranty(c *gin.Context) {
var req = new(models.ActivateExtendedWarrantyReq)
if err := c.ShouldBindJSON(&req); err != nil {
logger.Error("ShouldBindJSON err:", logger.Field("err", err))
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
err := tools.Validate(req) //必填参数校验
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
err = req.ActivateExtendedWarranty(c)
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
app.OK(c, nil, "激活成功")
}
// CancelPrivilegeMembers 取消尊享会员
// @Summary 取消尊享会员
// @Tags 会员管理, V1.4.2
// @Produce json
// @Accept json
// @Param request body models.CancelPrivilegeMembersReq true "取消尊享会员模型"
// @Success 200 {object} app.Response
// @Router /api/v1/user_info/privilege_member/cancel_members [post]
func CancelPrivilegeMembers(c *gin.Context) {
var req = new(models.CancelPrivilegeMembersReq)
if err := c.ShouldBindJSON(&req); err != nil {
logger.Error("ShouldBindJSON err:", logger.Field("err", err))
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
err := tools.Validate(req) //必填参数校验
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
userInfo, err := req.CancelPrivilegeMembers()
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
app.OK(c, userInfo, "取消成功")
}

View File

@ -5,6 +5,7 @@ import (
"github.com/codinl/go-logger"
"github.com/xuri/excelize/v2"
orm "go-admin/common/global"
"go-admin/tools/config"
"time"
)
@ -268,7 +269,7 @@ func (m *UserMemberRecordReq) Export() (string, error) {
fmt.Println(err)
}
return ExportUrl + fileName, nil
return config.ExportConfig.Url + fileName, nil
}
func UserMemberRecordListSetUser(list []UserMemberRecord) {

View File

@ -1041,18 +1041,21 @@ func (m *StockImporter) ImportStockData(colsMap []map[string]interface{}) error
for i, _ := range list {
v1, ok1 := storeNameMap[list[i].StoreName]
if !ok1 {
logger.Error("store name err")
return errors.New("store name err")
logger.Errorf("erp store name err:%s", list[i].StoreName)
fmt.Printf("erp store name err:%s", list[i].StoreName)
return errors.New(fmt.Sprintf("导入门店名称[%s]跟系统不符,请检查", list[i].StoreName))
}
v2, ok2 := erpCommodityMap[list[i].Name]
if !ok2 || v2 == nil {
logger.Error("erp commodity name err")
return errors.New("erp commodity name err")
logger.Errorf("erp commodity name err:%s", list[i].Name)
fmt.Printf("erp commodity name err:%s", list[i].Name)
return errors.New(fmt.Sprintf("导入商品名称[%s]跟系统不符,请检查", list[i].Name))
}
v3, ok3 := erpSupplierNameMap[list[i].SupplierName]
if !ok3 {
logger.Error("erp supplier name err")
return errors.New("erp supplier name err")
logger.Errorf("erp supplier name err:%s", list[i].SupplierName)
fmt.Printf("erp supplier name err:%s", list[i].SupplierName)
return errors.New(fmt.Sprintf("导入供应商名称[%s]跟系统不符,请检查", list[i].SupplierName))
}
// 注意:表格导入是员工成本价,数据库存储是员工成本价加价=员工成本价-指导采购价
@ -1447,7 +1450,7 @@ func ErpCommodityListExport(list []ErpCommodity) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "商品资料" + ".xlsx"
title := []interface{}{"商品编号", "商品名称", "商品分类", "商品条码", "是否串码", "系统生成串码", "主供应商", "指导零售价",
@ -1560,7 +1563,7 @@ func InventoryDetailListExport(list []ErpStockCommodity, c *gin.Context) (string
return "", err
}
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "库存详情" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -1573,8 +1576,8 @@ func InventoryDetailListExport(list []ErpStockCommodity, c *gin.Context) (string
logger.Info("exportStaffCostPrice is:", logger.Field("exportStaffCostPrice", exportStaffCostPrice))
// 设置标题行
title := []interface{}{"商品编号", "商品名称", "商品分类", "是否串码", "商品串码", "所属门店", "供应商", "首次入库时间", "首次入库方式",
"首次入库订单编号", "最近入库时间"}
title := []interface{}{"商品编号", "商品名称", "商品分类", "是否串码", "商品串码", "所属门店", "供应商", "库存数量",
"首次入库时间", "首次入库方式", "首次入库订单编号", "最近入库时间"}
if exportPurchasePrice {
title = append(title, "入库采购价")
@ -1626,6 +1629,7 @@ func InventoryDetailListExport(list []ErpStockCommodity, c *gin.Context) (string
list[rowId].IMEI,
list[rowId].StoreName,
list[rowId].ErpSupplierName,
1,
list[rowId].FirstStockTime,
storageType,
list[rowId].OriginalSn,
@ -1672,7 +1676,7 @@ func ErpCategoryListExport(list []ErpCategory) (string, error) {
fmt.Println(err)
}
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "分类列表数据" + ".xlsx"
//title := []interface{}{"门店", "用户ID", "订单编号", "下单时间", "卡带", "说明", "回收价", "闲麦价", "审核时间", "审核人", "操作", "复核时间", "复核状态"}

View File

@ -108,12 +108,14 @@ type CooperativeMemberPromotion struct {
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
PrivilegeCount uint32 `json:"privilege_count"` // 尊享会员数量
Date string `json:"date" gorm:"index"` //
State string `json:"state"` // 待发起结算 待财务打款 已结算
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
RenewalPrivilegeCount uint32 `json:"renewal_privilege_count"` // 续费尊享会员数量
GoldDeduct uint32 `json:"gold_deduct" gorm:"-"` // 黄金会员提成
PlatinumDeduct uint32 `json:"platinum_deduct" gorm:"-"` // 白金会员提成
@ -140,10 +142,12 @@ type CooperativeMemberPromotionStore struct {
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
PrivilegeCount uint32 `json:"privilege_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"` // 续费黑金会员数量
RenewalPrivilegeCount uint32 `json:"renewal_privilege_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"` // 升级:白金->黑金数量
@ -159,10 +163,12 @@ type CooperativeMemberPromotionDay struct {
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
PrivilegeCount uint32 `json:"privilege_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"` // 续费黑金会员数量
RenewalPrivilegeCount uint32 `json:"renewal_privilege_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"` // 升级:白金->黑金数量
@ -178,10 +184,12 @@ type CooperativeMemberPromotionStoreDay struct {
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
PrivilegeCount uint32 `json:"privilege_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"` // 续费黑金会员数量
RenewalPrivilegeCount uint32 `json:"renewal_privilege_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"` // 升级:白金->黑金数量
@ -200,6 +208,7 @@ type CooperativeDeductSettle struct {
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
PrivilegeCount uint32 `json:"privilege_count"` // 尊享会员数量
GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成配置
PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成配置
BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金会员提成配置
@ -207,6 +216,7 @@ type CooperativeDeductSettle struct {
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
RenewalPrivilegeCount uint32 `json:"renewal_privilege_count"` // 续费尊享会员数量
RenewalGoldDeduct uint32 `json:"renewal_gold_deduct"` // 续费黄金会员提成
RenewalPlatinumDeduct uint32 `json:"renewal_platinum_deduct"` // 续费白金会员提成
@ -701,11 +711,13 @@ type CooperativeMemberPromotionStatistic struct {
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
PrivilegeCount uint32 `json:"privilege_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"` // 续费黑金会员数量
RenewalPrivilegeCount uint32 `json:"renewal_privilege_count"` // 续费尊享会员数量
Date string `json:"date" gorm:"index"` // 日期
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
@ -992,7 +1004,7 @@ func promotionStatisticListExport(list []CooperativeMemberPromotionStatistic) (s
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "租卡会员统计" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -1102,10 +1114,12 @@ func CooperativeMemberPromotionDayListToStatistic(list []CooperativeMemberPromot
GoldCount: list[i].GoldCount,
PlatinumCount: list[i].PlatinumCount,
BlackGoldCount: list[i].BlackGoldCount,
PrivilegeCount: list[i].PrivilegeCount,
DayTime: list[i].DayTime,
RenewalGoldCount: list[i].RenewalGoldCount,
RenewalPlatinumCount: list[i].RenewalPlatinumCount,
RenewalBlackGoldCount: list[i].RenewalBlackGoldCount,
RenewalPrivilegeCount: list[i].RenewalPrivilegeCount,
UpgradeGoldToPlatinumCount: list[i].UpgradeGoldToPlatinumCount,
UpgradeGoldToBlackCount: list[i].UpgradeGoldToBlackCount,
UpgradePlatinumToBlackCount: list[i].UpgradePlatinumToBlackCount,
@ -1129,10 +1143,12 @@ func CooperativeMemberPromotionStoreDayToStatistic(list []CooperativeMemberPromo
GoldCount: list[i].GoldCount,
PlatinumCount: list[i].PlatinumCount,
BlackGoldCount: list[i].BlackGoldCount,
PrivilegeCount: list[i].PrivilegeCount,
DayTime: list[i].DayTime,
RenewalGoldCount: list[i].RenewalGoldCount,
RenewalPlatinumCount: list[i].RenewalPlatinumCount,
RenewalBlackGoldCount: list[i].RenewalBlackGoldCount,
RenewalPrivilegeCount: list[i].RenewalPrivilegeCount,
UpgradeGoldToPlatinumCount: list[i].UpgradeGoldToPlatinumCount,
UpgradeGoldToBlackCount: list[i].UpgradeGoldToBlackCount,
UpgradePlatinumToBlackCount: list[i].UpgradePlatinumToBlackCount,
@ -1157,9 +1173,11 @@ func CooperativeMemberPromotionToStatistic(list []CooperativeMemberPromotion) []
GoldCount: list[i].GoldCount,
PlatinumCount: list[i].PlatinumCount,
BlackGoldCount: list[i].BlackGoldCount,
PrivilegeCount: list[i].PrivilegeCount,
RenewalGoldCount: list[i].RenewalGoldCount,
RenewalPlatinumCount: list[i].RenewalPlatinumCount,
RenewalBlackGoldCount: list[i].RenewalBlackGoldCount,
RenewalPrivilegeCount: list[i].RenewalPrivilegeCount,
Date: list[i].Date,
UpgradePlatinumToBlackCount: list[i].UpgradePlatinumToBlackCount,
UpgradeGoldToBlackCount: list[i].UpgradeGoldToBlackCount,
@ -1184,10 +1202,12 @@ func CooperativeMemberPromotionStoreToStatistic(list []CooperativeMemberPromotio
GoldCount: list[i].GoldCount,
PlatinumCount: list[i].PlatinumCount,
BlackGoldCount: list[i].BlackGoldCount,
PrivilegeCount: list[i].PrivilegeCount,
//DayTime: list[i].DayTime,
RenewalGoldCount: list[i].RenewalGoldCount,
RenewalPlatinumCount: list[i].RenewalPlatinumCount,
RenewalBlackGoldCount: list[i].RenewalBlackGoldCount,
RenewalPrivilegeCount: list[i].RenewalPrivilegeCount,
Date: list[i].Date,
StoreId: list[i].StoreId,
Store: list[i].Store,

View File

@ -2285,7 +2285,7 @@ func reportDecisionExport(req *ErpDecisionReportResp) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "进销存报表" + ".xlsx"
fmt.Println("url fileName:", url+fileName)

View File

@ -2395,7 +2395,7 @@ func storeManageDataExport(list []StoreManageData, storeName string, c *gin.Cont
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + storeName + "经营数据" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -2493,7 +2493,7 @@ func retailMarginDataExport(req *ErpOrderRetailMarginResp, c *gin.Context) (stri
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "商品零售毛利汇总" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -3009,7 +3009,7 @@ func retailDetailExportBack(list []ErpOrder, sumData RetailDetailTotalData) (str
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "零售明细" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -3274,7 +3274,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData, c *gin.C
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "零售明细" + ".xlsx"
fmt.Println("url fileName:", url+fileName)

View File

@ -9,6 +9,7 @@ import (
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
"go-admin/tools/config"
"gorm.io/gorm"
"strings"
"time"
@ -1864,7 +1865,7 @@ func GoodsStockFile(goodsData []ExportGoods, fileName string) string {
fmt.Println(err)
}
return ExportUrl + fileName
return config.ExportConfig.Url + fileName
}
func GoodsStatusStringByStatus(status uint8) string {
@ -3332,7 +3333,7 @@ func MemberReportFile(memberReports []InviteMemberReport, fileName string) strin
fmt.Println(err)
}
return ExportUrl + fileName
return config.ExportConfig.Url + fileName
}
type CooperativeSetPayInfoReq struct {

View File

@ -1,22 +0,0 @@
package models
import (
"testing"
)
func TestSend(t *testing.T) {
//tel := "17080320980"
tel := "13714071204,17727927738"
//tel := "17602181899"
SmsSend(tel, "【go2switch】温馨提示:您的会员即将过期,请在过期之前将卡归还到门店,如有问题联系客服")
}
func TestCreateInviteMemberReport(t *testing.T) {
CreateInviteMemberReport()
}
func TestGtSendMessage(t *testing.T) {
GtSendMessage([]string{"17080320980"}, "【go2switch】绿城短信推送测试,测试")
}

View File

@ -488,7 +488,7 @@ func reportByProductExport(req *InventoryReportByProductResp) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "产品库存汇总(按门店)" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -834,7 +834,7 @@ func reportAllotExport(req *InventoryReportByAllotResp) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "库存调拨汇总" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -1132,7 +1132,7 @@ func reportAllotDetailExport(req *InventoryReportAllotDetailResp) (string, error
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "库存调拨明细" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -1436,7 +1436,7 @@ func reportOtherExport(req *InventoryReportByOtherResp) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "其他出入库汇总" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -1784,7 +1784,7 @@ func reportOtherDetailExport(req *InventoryReportOtherDetailResp) (string, error
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "其他出入库明细" + ".xlsx"
fmt.Println("url fileName:", url+fileName)

View File

@ -519,7 +519,7 @@ func OrderListExport(list []Order) (string, error) {
fmt.Println(err)
}
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "租赁订单" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -1581,8 +1581,11 @@ func (m *FundRecordListReq) List() ([]FundRecord, int64, string, error) {
var fundRecords []FundRecord
qs := orm.Eloquent.Table("fund_record")
// 默认剔除"尊享会员费",只有传参有才展示
if m.FundType != "" {
qs = qs.Where("fund_type=?", m.FundType)
} else {
qs = qs.Where("fund_type != ?", "privilege_member_fee")
}
if m.TransactionId != "" {
qs = qs.Where("transaction_id=?", m.TransactionId)
@ -1691,7 +1694,7 @@ func fundRecordListExport(list []FundRecord) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "财务统计" + ".xlsx"
fmt.Println("url fileName:", url+fileName)

View File

@ -1937,6 +1937,15 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get
}
}
commodityIDs := make([]uint32, len(commodities))
for i, commodity := range commodities {
commodityIDs[i] = commodity.ID
}
if len(commodityIDs) == 0 {
return resp, nil
}
// 批量查询商品上月销售数量
var soldOutCommodities []ErpStockCommodity
firstDay, lastDay := GetLastMonthRange() // 获取上个月的时间范围
@ -1947,12 +1956,12 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get
}
if len(storeIdList) > 1 {
err = orm.Eloquent.Table("erp_stock_commodity").
Where("state = ? AND updated_at BETWEEN ? AND ? AND store_id in (?)",
SoldOut, firstDay, lastDay, storeIdList).Find(&soldOutCommodities).Error
Where("state = ? AND updated_at BETWEEN ? AND ? AND store_id in (?) AND erp_commodity_id IN (?)",
SoldOut, firstDay, lastDay, storeIdList, commodityIDs).Find(&soldOutCommodities).Error
} else {
err = orm.Eloquent.Table("erp_stock_commodity").
Where("state = ? AND updated_at BETWEEN ? AND ? AND store_id = ?",
SoldOut, firstDay, lastDay, storeIdList[0]).Find(&soldOutCommodities).Error
Where("state = ? AND updated_at BETWEEN ? AND ? AND store_id = ? AND erp_commodity_id IN (?)",
SoldOut, firstDay, lastDay, storeIdList[0], commodityIDs).Find(&soldOutCommodities).Error
}
if err != nil {
return nil, err
@ -1973,12 +1982,12 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get
var stockCommodities []ErpStockCommodity
if len(storeIdList) > 1 {
err = orm.Eloquent.Table("erp_stock_commodity").
Where("state = ? AND store_id in (?)",
InStock, storeIdList).Find(&stockCommodities).Error
Where("state = ? AND store_id in (?) AND erp_commodity_id IN (?)",
InStock, storeIdList, commodityIDs).Find(&stockCommodities).Error
} else {
err = orm.Eloquent.Table("erp_stock_commodity").
Where("state = ? AND store_id = ?",
InStock, storeIdList[0]).Find(&stockCommodities).Error
Where("state = ? AND store_id = ? AND erp_commodity_id IN (?)",
InStock, storeIdList[0], commodityIDs).Find(&stockCommodities).Error
}
if err != nil {
return nil, err
@ -1991,14 +2000,14 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get
if exist { // 存在
inStockMap[key] += 1
} else { // 不存在
inStockMap[key] = 0
inStockMap[key] = 1
}
}
// 查询采购需求单信息
var demand []ErpPurchaseDemand
demandQs := orm.Eloquent.Table("erp_purchase_demand").
Where("state = 1").Where("count <> 0")
Where("state = 1").Where("count <> 0").Where("erp_commodity_id IN (?)", commodityIDs)
if len(storeIdList) > 0 {
if len(storeIdList) == 1 {
demandQs = demandQs.Where("store_id = ?", storeIdList[0])
@ -2016,7 +2025,7 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get
demandRemarkQs := orm.Eloquent.Table("erp_purchase_demand_remark").
Where("state = 1").
Where("remark IS NOT NULL").
Where("remark <> ''")
Where("remark <> ''").Where("erp_commodity_id IN (?)", commodityIDs)
err = demandRemarkQs.Find(&demandRemarkInfo).Error
if err != nil {
return nil, err
@ -2759,7 +2768,7 @@ func demandDataExport(list []DemandData) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "采购需求" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -2911,7 +2920,7 @@ func demandDataExportOnShopAssistant(list []DemandData) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "采购需求" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -3632,7 +3641,7 @@ func reportByOrderExport(req *ErpPurchaseReportByOrderResp) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "采购报表(按单)" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -4682,7 +4691,7 @@ func reportByCommodityExport(req *ErpPurchaseReportByCommodityResp) (string, err
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "采购报表(按商品)" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -5228,7 +5237,7 @@ func reportBySupplierExport(req *ErpPurchaseReportBySupplierResp) (string, error
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "供应商采购汇总" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -5530,7 +5539,7 @@ func reportDetailExport(req *ErpPurchaseReportDetailResp, c *gin.Context) (strin
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "采购明细" + ".xlsx"
fmt.Println("url fileName:", url+fileName)

View File

@ -9,6 +9,7 @@ import (
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
"go-admin/tools/config"
"time"
)
@ -271,7 +272,7 @@ func RecycleCardOrderListExport(list []RecycleCardOrder) (string, error) {
//if err := file.SaveAs("./" + fileName); err != nil {
fmt.Println(err)
}
return ExportUrl + fileName, nil
return config.ExportConfig.Url + fileName, nil
}
func RecycleCardOrderStateUpdate() {

View File

@ -417,7 +417,7 @@ func sysUserExport(req []SysUserPage) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "系统用户" + ".xlsx"
fmt.Println("url fileName:", url+fileName)

View File

@ -47,6 +47,8 @@ const (
UpgradeGoldToPlatinumAuto // 18-黄金→白金(自动)
UpgradeGoldToBlackAuto // 19-黄金→黑金(自动)
UpgradePlatinumToBlackAuto // 20-白金→黑金(自动)
OpenAnnualPrivilege // 21 开通年费尊享会员
RenewAnnualPrivilegeAuto // 22 续费年费尊享会员(自动)
)
const (
@ -56,6 +58,7 @@ const (
MemberLevelPeriod = 3 // 短期会员
MemberLevelPlatinum = 4 // 白金会员
MemberLevelBlackGold = 5 // 黑金会员
MemberLevelPrivilege = 6 // 尊享会员
)
const (
@ -63,6 +66,12 @@ const (
UserTypeShopAssistant = 2 // 店员
)
const ( // 尊享会员延保状态
ExtendExpire = 1 // 已过期
ExtendWaitActive = 2 // 待激活
ExtendEffectivity = 3 // 已激活
)
// gen:qs
//
//go:generate goqueryset -in user.go
@ -132,9 +141,9 @@ const QueryTimeFormat = "2006-01-02T15:04:05+08:00"
const StoreDateTimeFormat = "2006.01.02"
const (
ExportUrl = "https://admin.deovo.com/load/export/"
//ExportUrl = "https://dev.admin.deovo.com/load/export/" // dev环境
//ExportUrl = "/Users/max/Documents/" // 本地环境
// ExportUrl = "https://admin.deovo.com/load/export/"
// ExportUrl = "https://dev.admin.deovo.com/load/export/" // dev环境
// ExportUrl = "/Users/max/Documents/" // 本地环境
)
type UserInvite struct {
@ -780,7 +789,7 @@ func newUserListExport(list []U) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "所有会员" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -1034,6 +1043,7 @@ type InviteMemberReport struct {
GoldCountQuarter uint32 `json:"gold_count_quarter"` // 季度黄金数量
PlatinumCount uint32 `json:"platinum_count"` // 白金数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金数量
PrivilegeCount uint32 `json:"privilege_count"` // 尊享会员数量
//ReportTime string `json:"report_time" gorm:"index"` // 业绩时间
Date string `json:"date" gorm:"index"` // 业绩时间
DeductAmount uint32 `json:"deduct_amount"` // 店员提成
@ -1047,6 +1057,7 @@ type InviteMemberReport struct {
RenewalGoldCountQuarter uint32 `json:"renewal_gold_count_quarter"` // 续费季度黄金会员数量(自动)
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量(自动)
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量(自动)
RenewalPrivilegeCount uint32 `json:"renewal_privilege_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"` // 升级:白金->黑金数量(自动)
@ -1330,7 +1341,7 @@ func ExportUserMember(storeId uint32, startTime, endTime string) string {
log.Fatal(err)
}
return ExportUrl + fileName
return config.ExportConfig.Url + fileName
}
// gen:qs
@ -1342,7 +1353,7 @@ type UserInviteRecord struct {
StoreId uint64 `json:"store_id"` // 门店id 邀请用户门店
Action uint32 `json:"action"` // 1-未激活 2-激活邀请
SpendType uint32 `json:"spend_type"` // 1-未开通 2-开通会员 3-续费 4-升级
MemberLevel uint32 `json:"member_level"` // 会员等级 0-未开通 1-普通 2-黄金 3-短期 4-白金 5-黑金
MemberLevel uint32 `json:"member_level"` // 会员等级 0-未开通 1-普通 2-黄金 3-短期 4-白金 5-黑金 6-尊享会员
MemberGenre uint32 `json:"member_genre"` // 会员类型 200-黄金年费 201-黄金季度 202-黄金半年
First uint32 `json:"first"` // 首次
Scan uint32 `json:"scan"` // 扫码
@ -1441,7 +1452,7 @@ type NewUserInviteRecordReq struct {
UserTel string `json:"user_tel"` // 用户手机号
CreateStartTime time.Time `json:"create_start_time"` // 注册小程序时间-开始时间
CreateEndTime time.Time `json:"create_end_time"` // 注册小程序时间-结束时间
RecordType []uint32 `json:"record_type"` // 记录类型 1-首次邀请2-开通年费黄金3-开通季度黄金4-开通半年黄金, 5-开通年费白金6-开通年费黑金7-续费年费黄金干预8-续费年费白金干预9-续费年费黑金干预10-续费年费黄金(自动), 11-续费季度黄金自动12-续费半年黄金自动13-续费年费白金自动14-续费年费黑金自动15-黄金→白金(干预), 16-黄金→黑金干预17-白金→黑金干预18-黄金→白金自动19-黄金→黑金自动20-白金→黑金(自动)
RecordType []uint32 `json:"record_type"` // 记录类型 1-首次邀请2-开通年费黄金3-开通季度黄金4-开通半年黄金, 5-开通年费白金6-开通年费黑金7-续费年费黄金干预8-续费年费白金干预9-续费年费黑金干预10-续费年费黄金(自动), 11-续费季度黄金自动12-续费半年黄金自动13-续费年费白金自动14-续费年费黑金自动15-黄金→白金(干预), 16-黄金→黑金干预17-白金→黑金干预18-黄金→白金自动19-黄金→黑金自动20-白金→黑金(自动)21-开通尊享会员, 22-续费尊享会员
RecordStartTime time.Time `json:"record_start_time"` // 记录时间-开始时间
RecordEndTime time.Time `json:"record_end_time"` // 记录时间-结束时间
MemberLevel uint32 `json:"member_level"` // 当前类型10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员
@ -1457,29 +1468,33 @@ type UserInviteRecordListResp struct {
}
type UserInviteRecordListData struct {
StoreId uint32 `json:"store_id"` // 邀请人所属门店id
StoreName string `json:"store_name"` // 邀请人所属门店名称
InviteUserName string `json:"invite_user_name"` // 邀请人昵称
InviteUid uint32 `json:"invite_uid"` // 邀请人ID
UserUid uint32 `json:"user_uid"` // 用户ID
UserTel string `json:"user_tel"` // 用户手机号
CreateTime time.Time `json:"create_time"` // 注册小程序时间
RecordType uint32 `json:"record_type"` // 记录类型
RecordTime time.Time `json:"record_time"` // 记录时间
MemberLevel uint32 `json:"member_level"` // 会员等级1-普通 2-黄金 4-白金 5-黑金
MemberExpire time.Time `json:"memberExpire"` // 租卡会员到期时间
StoreId uint32 `json:"store_id"` // 邀请人所属门店id
StoreName string `json:"store_name"` // 邀请人所属门店名称
InviteUserName string `json:"invite_user_name"` // 邀请人昵称
InviteUid uint32 `json:"invite_uid"` // 邀请人ID
UserUid uint32 `json:"user_uid"` // 用户ID
UserTel string `json:"user_tel"` // 用户手机号
CreateTime time.Time `json:"create_time"` // 注册小程序时间
RecordType uint32 `json:"record_type"` // 记录类型
RecordTime time.Time `json:"record_time"` // 记录时间
MemberLevel uint32 `json:"member_level"` // 当前租卡会员类型1-普通 2-黄金 4-白金 5-黑金
MemberExpire time.Time `json:"memberExpire"` // 租卡会员到期时间
PrivilegeMemberLevel uint32 `json:"privilege_member_level"` // 当前尊享会员类型1-普通 6-尊享会员
PrivilegeMemberExpire time.Time `json:"privilege_memberExpire"` // 尊享会员到期时间
}
func (m *NewUserInviteRecordReq) NewList(c *gin.Context) (*UserInviteRecordListResp, error) {
resp := new(UserInviteRecordListResp)
var records []struct {
UserInviteRecord
StoreId uint32
InviteUserName string
UserTel string
CreateTime time.Time
MemberExpire time.Time
UserMemberLevel uint32
StoreId uint32
InviteUserName string
UserTel string
CreateTime time.Time
MemberExpire time.Time
UserMemberLevel uint32
PrivilegeMemberExpire time.Time
PrivilegeMemberLevel uint32
}
err := UpdateUserInviteRecordRenewHide()
if err != nil {
@ -1513,9 +1528,11 @@ func (m *NewUserInviteRecordReq) NewList(c *gin.Context) (*UserInviteRecordListR
qs := orm.Eloquent.Table("user_invite_record").Where("action=2")
countQuery := orm.Eloquent.Table("user_invite_record").Where("action=2").
Select("user_invite_record.*, B1.nick_name AS InviteUserName, " +
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel").
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel, " +
"B3.member_expire AS PrivilegeMemberExpire, B3.member_level AS PrivilegeMemberLevel").
Joins("Left JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid and B1.uid != 0").
Joins("Left JOIN user B2 ON user_invite_record.to_uid = B2.uid").
Joins("Left JOIN privilege_member B3 ON user_invite_record.to_uid = B3.uid").
Group("user_invite_record.id").
Order("MAX(user_invite_record.action_time) DESC")
@ -1580,50 +1597,55 @@ func (m *NewUserInviteRecordReq) NewList(c *gin.Context) (*UserInviteRecordListR
var recordTypeConditions []string
for _, t := range m.RecordType {
switch t {
case 1:
case 1: // 首次邀请
recordTypeConditions = append(recordTypeConditions, "(first=1 AND spend_type=1)")
case 2:
case 2: // 开通年费黄金
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=2)")
case 3:
case 3: // 开通季度黄金
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=2 AND user_invite_record.member_genre=201)")
case 4:
case 4: // 开通半年黄金
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=2 AND user_invite_record.member_genre=202)")
case 5:
case 5: // 开通年费白金
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=2)")
case 6:
case 6: // 开通年费黑金
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=2)")
case 7:
case 7: // 续费年费黄金(干预)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=0)")
case 8:
case 8: // 续费年费白金(干预)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=3 AND renew_hide=0)")
case 9:
case 9: // 续费年费黑金(干预)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=3 AND renew_hide=0)")
case 10:
case 10: // 续费年费黄金(自动)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=1)")
case 11:
case 11: // 续费季度黄金(自动)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=1 AND user_invite_record.member_genre=201)")
case 12:
case 12: // 续费半年黄金(自动)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=1 AND user_invite_record.member_genre=202)")
case 13:
case 13: // 续费年费白金(自动)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=3 AND renew_hide=1)")
case 14:
case 14: // 续费年费黑金(自动)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=3 AND renew_hide=1)")
case 15:
case 15: // 黄金→白金(干预)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=4 AND renew_hide=0)")
case 16:
case 16: // 黄金→黑金(干预)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=0 AND user_invite_record.member_genre in (200,201,202))")
case 17:
case 17: // 白金→黑金(干预)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=0 AND user_invite_record.member_genre not in (200,201,202))")
case 18:
case 18: // 黄金→白金(自动)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=4 AND renew_hide=1)")
case 19:
case 19: // 黄金→黑金(自动)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=1 AND user_invite_record.member_genre in (200,201,202))")
case 20:
case 20: // 白金→黑金(自动)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=1 AND user_invite_record.member_genre not in (200,201,202))")
case 21: // 开通年费尊享会员
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=6 AND spend_type=2)")
case 22: // 续费年费尊享会员(自动)
recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=6 AND spend_type=3 AND renew_hide=1)")
}
}
@ -1657,9 +1679,11 @@ func (m *NewUserInviteRecordReq) NewList(c *gin.Context) (*UserInviteRecordListR
if m.IsExport == 1 { // 导出excel
err = qs.Select("user_invite_record.*, B1.nick_name AS InviteUserName, " +
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel").
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel, " +
"B3.member_expire AS PrivilegeMemberExpire, B3.member_level AS PrivilegeMemberLevel").
Joins("Left JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid and B1.uid != 0").
Joins("Left JOIN user B2 ON user_invite_record.to_uid = B2.uid").
Joins("Left JOIN privilege_member B3 ON user_invite_record.to_uid = B3.uid").
Group("user_invite_record.id").
Order("MAX(user_invite_record.action_time) DESC").
Find(&records).Error
@ -1669,9 +1693,11 @@ func (m *NewUserInviteRecordReq) NewList(c *gin.Context) (*UserInviteRecordListR
}
} else {
err = qs.Select("user_invite_record.*, B1.nick_name AS InviteUserName, " +
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel").
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel, " +
"B3.member_expire AS PrivilegeMemberExpire, B3.member_level AS PrivilegeMemberLevel").
Joins("Left JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid and B1.uid != 0").
Joins("Left JOIN user B2 ON user_invite_record.to_uid = B2.uid").
Joins("Left JOIN privilege_member B3 ON user_invite_record.to_uid = B3.uid").
Group("user_invite_record.id").
Order("MAX(user_invite_record.action_time) DESC").
Offset(page * pageSize).
@ -1686,17 +1712,19 @@ func (m *NewUserInviteRecordReq) NewList(c *gin.Context) (*UserInviteRecordListR
var listData []UserInviteRecordListData
for _, item := range records {
data := UserInviteRecordListData{
StoreId: item.StoreId,
StoreName: storeMap[item.StoreId],
InviteUserName: item.InviteUserName,
InviteUid: item.FromUid,
UserUid: item.ToUid,
UserTel: item.UserTel,
CreateTime: item.CreateTime,
RecordType: uint32(CalculateMemberType(item.SpendType, item.RenewHide, item.MemberGenre, item.MemberLevel)),
RecordTime: item.ActionTime,
MemberLevel: item.UserMemberLevel,
MemberExpire: item.MemberExpire,
StoreId: item.StoreId,
StoreName: storeMap[item.StoreId],
InviteUserName: item.InviteUserName,
InviteUid: item.FromUid,
UserUid: item.ToUid,
UserTel: item.UserTel,
CreateTime: item.CreateTime,
RecordType: uint32(CalculateMemberType(item.SpendType, item.RenewHide, item.MemberGenre, item.MemberLevel)),
RecordTime: item.ActionTime,
MemberLevel: item.UserMemberLevel,
MemberExpire: item.MemberExpire,
PrivilegeMemberLevel: item.PrivilegeMemberLevel,
PrivilegeMemberExpire: item.PrivilegeMemberExpire,
}
if item.FromUid == 0 {
@ -1782,6 +1810,8 @@ func getMemberLevelChineseDescription(memberLevel uint32) string {
return "白金会员"
case 5:
return "黑金会员"
case 6:
return "尊享会员"
}
return ""
@ -1792,7 +1822,7 @@ func userInviteRecordExport(list []UserInviteRecordListData) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "会员邀请记录" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -1888,6 +1918,8 @@ func CalculateMemberType(spendType, renewHide, memberGenre, memberLevel uint32)
return OpenAnnualPlatinum
case 5:
return OpenAnnualBlack
case 6:
return OpenAnnualPrivilege
}
case spendType == 3 && renewHide == 0:
switch memberLevel {
@ -1906,6 +1938,8 @@ func CalculateMemberType(spendType, renewHide, memberGenre, memberLevel uint32)
return RenewAnnualPlatinumAuto
case 5:
return RenewAnnualBlackAuto
case 6:
return RenewAnnualPrivilegeAuto
}
case spendType == 4 && renewHide == 0:
switch memberLevel {
@ -2517,7 +2551,7 @@ func ExportUserMemberList(storeId, memberType, cooperativeId uint32, startTime,
fmt.Println(err)
}
return ExportUrl + fileName
return config.ExportConfig.Url + fileName
}
type ExportUserInviteMemberList []UserInviteMember
@ -2782,6 +2816,7 @@ func (m *CooperativeBusiness) UserInviteReport(userInfo UserInfo) {
GoldCountQuarter: 0,
PlatinumCount: 0,
BlackGoldCount: 0,
PrivilegeCount: 0,
Date: reportTime,
DeductAmount: 0,
CooperativeBusinessId: userInfo.CooperativeBusinessId,
@ -2794,6 +2829,7 @@ func (m *CooperativeBusiness) UserInviteReport(userInfo UserInfo) {
RenewalGoldCountQuarter: 0,
RenewalPlatinumCount: 0,
RenewalBlackGoldCount: 0,
RenewalPrivilegeCount: 0,
UpgradeGoldToPlatinumCount: 0,
UpgradeGoldToBlackCount: 0,
UpgradePlatinumToBlackCount: 0,
@ -2997,7 +3033,7 @@ func inviteMemberReport(list []InviteMemberReport) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "店员绩效" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
@ -3667,7 +3703,7 @@ func MemberStatisticDailyListExport(dailys []MemberStatisticDaily) (string, erro
if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil {
fmt.Println(err)
}
return ExportUrl + fileName, nil
return config.ExportConfig.Url + fileName, nil
}
func UserInviteRecordListSetAssistantName(records []UserInviteRecord) {
@ -3915,7 +3951,7 @@ func UpdateExpireMemberLevel() {
for i, _ := range users {
if err = orm.Eloquent.Model(&UserInfo{}).Where("id = ?", users[i].ID).Updates(map[string]interface{}{
"member_level": 1,
"member_level": MemberLevelUser,
}).Error; err != nil {
logger.Errorf("UpdateExpireMemberLevel err,", err.Error())
continue
@ -3923,6 +3959,31 @@ func UpdateExpireMemberLevel() {
}
}
// UpdateExpirePrivilegeMemberLevel 更新过期尊享会员等级
func UpdateExpirePrivilegeMemberLevel() {
var users []PrivilegeMember
err := orm.Eloquent.Table("privilege_member").Where("member_expire < ?", time.Now()).
Where("member_level = ?", MemberLevelPrivilege).Find(&users).Error
if err != nil {
logger.Error(err.Error())
return
}
if len(users) == 0 {
logger.Info("UpdateExpirePrivilegeMemberLevel users is null")
return
}
for i, _ := range users {
if err = orm.Eloquent.Model(&PrivilegeMember{}).Where("id = ?", users[i].ID).Updates(map[string]interface{}{
"member_level": MemberLevelUser,
}).Error; err != nil {
logger.Errorf("UpdateExpirePrivilegeMemberLevel err,", err.Error())
continue
}
}
}
// GetUserInfoByTel 通过手机号获取用户信息
func GetUserInfoByTel(tel string) (UserInfo, error) {
var userInfo UserInfo
@ -3955,3 +4016,415 @@ func IsInMemberLevels(memberLevel uint32) bool {
}
return false
}
// PrivilegeMember 零售尊享会员
type PrivilegeMember struct {
Model
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` // 用户id
Tel string `json:"tel"` // 电话
StoreId uint64 `json:"store_id"` // 门店id
MemberLevel uint32 `json:"member_level"` // 当前会员等级:1-普通用户6-尊享会员
MemberExpire *time.Time `json:"member_expire"` // 会员到期时间
OpenMemberTime *time.Time `json:"open_member_time"` // 开通会员时间
ExtendStatus uint32 `json:"extend_status"` // 延保状态:0-非会员, 1-已过期2-待激活、3-已激活
HostCode string `json:"host_code"` // 主机编码
Images string `json:"images"` // 图片凭证
AuditorId uint32 `json:"auditor_id" gorm:"index"` // 审核人id
AuditorName string `json:"auditor_name"` // 审核人姓名
AuditTime *time.Time `json:"audit_time"` // 审核时间
Remark string `json:"remark"` // 备注
Store *Store `json:"store" gorm:"-"` // 门店信息
}
// PrivilegeMemberListReq 查询零售尊享会员列表入参
type PrivilegeMemberListReq struct {
Uid uint32 `json:"uid"` // 用户ID
Tel string `json:"tel"` // 手机号
HostCode string `json:"host_code"` // 主机编码
StoreId []uint32 `json:"store_id"` // 门店列表(支持复选)
MemberLevel uint32 `json:"member_level"` // 当前会员等级
AuditorId uint32 `json:"auditor_id"` // 审核人
ExtendStatus uint32 `json:"extend_status"` // 延保状态
OpenMemberStart string `json:"open_member_start"` // 首次开通尊享会员-开始时间
OpenMemberEnd string `json:"open_member_end"` // 首次开通尊享会员-结束时间
MemberExpireStart string `json:"member_expire_start"` // 尊享会员到期时间-开始时间
MemberExpireEnd string `json:"member_expire_end"` // 尊享会员到期时间-结束时间
AuditTimeStart string `json:"audit_time_start"` // 审核开始时间
AuditTimeEnd string `json:"audit_time_end"` // 审核结束时间
IsExport uint32 `json:"is_export"` // 1-导出excel
PageIndex int `json:"pageIndex"` // 页码
PageSize int `json:"pageSize"` // 页面条数
}
// PrivilegeMemberListResp 查询零售尊享会员列表出参
type PrivilegeMemberListResp struct {
Total int64 `json:"total"` // 总条数
PageIndex int `json:"pageIndex"` // 页码
PageSize int `json:"pageSize"` // 页面条数
ExportUrl string `json:"export_url"` // 导出excel路径
List []PrivilegeMember `json:"list"` // 零售尊享会员信息
}
func (m *PrivilegeMemberListReq) PrivilegeMemberList(c *gin.Context) (*PrivilegeMemberListResp, error) {
// 非管理员才判断所属门店
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
sysUser, err := GetSysUserByCtx(c)
if err != nil {
return nil, errors.New("操作失败:" + err.Error())
}
// 返回sysUser未过期的门店id列表
storeList := GetValidStoreIDs(sysUser.StoreData)
if len(storeList) > 0 {
m.StoreId = CompareLists(storeList, m.StoreId)
if len(m.StoreId) == 0 { // 没有匹配的数据,表示入参门店不是用户有权限的门店
return &PrivilegeMemberListResp{}, nil
}
m.StoreId = append(m.StoreId, 0)
} else {
return nil, errors.New("用户未绑定门店")
}
}
page := m.PageIndex - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
resp := &PrivilegeMemberListResp{
PageIndex: page + 1,
PageSize: m.PageSize,
}
var memberList []PrivilegeMember
qs := orm.Eloquent.Model(&PrivilegeMember{}).Debug()
if m.Uid != 0 {
qs = qs.Where("uid = ?", m.Uid)
}
if m.Tel != "" {
qs = qs.Where("tel = ?", m.Tel)
}
if m.HostCode != "" {
qs = qs.Where("host_code = ?", m.HostCode)
}
if len(m.StoreId) != 0 {
if len(m.StoreId) == 1 {
qs = qs.Where("store_id = ?", m.StoreId[0])
} else {
qs = qs.Where("store_id IN (?)", m.StoreId)
}
}
if m.MemberLevel != 0 {
qs = qs.Where("member_level = ?", m.MemberLevel)
}
if m.AuditorId != 0 {
qs = qs.Where("auditor_id = ?", m.AuditorId)
}
if m.ExtendStatus != 0 {
qs = qs.Where("extend_status = ?", m.ExtendStatus)
}
if m.OpenMemberStart != "" {
parse, err := time.Parse(QueryTimeFormat, m.OpenMemberStart)
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, err
}
qs = qs.Where("open_member_time > ?", parse)
}
if m.OpenMemberEnd != "" {
parse, err := time.Parse(QueryTimeFormat, m.OpenMemberEnd)
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, err
}
qs = qs.Where("open_member_time < ?", parse)
}
if m.MemberExpireStart != "" {
parse, err := time.Parse(QueryTimeFormat, m.MemberExpireStart)
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, err
}
qs = qs.Where("member_expire > ?", parse)
}
if m.MemberExpireEnd != "" {
parse, err := time.Parse(QueryTimeFormat, m.MemberExpireEnd)
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, err
}
qs = qs.Where("member_expire < ?", parse)
}
if m.AuditTimeStart != "" {
parse, err := time.Parse(QueryTimeFormat, m.AuditTimeStart)
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, err
}
qs = qs.Where("audit_time > ?", parse)
}
if m.AuditTimeEnd != "" {
parse, err := time.Parse(QueryTimeFormat, m.AuditTimeEnd)
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, err
}
qs = qs.Where("audit_time < ?", parse)
}
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("count err:", logger.Field("err", err))
return nil, err
}
if m.IsExport == 1 { // 导出excel
err = qs.Order("id DESC").Find(&memberList).Error
if err != nil && err != RecordNotFound {
logger.Error("err:", logger.Field("err", err))
return nil, err
}
} else {
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&memberList).Error
if err != nil && err != RecordNotFound {
logger.Error("err:", logger.Field("err", err))
return nil, err
}
}
// 查询门店信息
storeList := make(map[uint32]Store)
storeList = GetStoreMap()
for i, u := range memberList {
if u.StoreId == 0 {
continue
}
// 添加门店信息
store := storeList[uint32(u.StoreId)]
memberList[i].Store = &store
// 校验时间如果为01-01-01 08:05则赋值为空
validateZeroTime(&memberList[i].AuditTime)
}
if m.IsExport == 1 {
fileName, err := PrivilegeMemberExport(memberList)
if err != nil {
logger.Error("err:", logger.Field("err", err))
return nil, err
}
resp.ExportUrl = fileName
} else {
resp.List = memberList
resp.Total = count
resp.PageSize = m.PageSize
resp.PageIndex = m.PageIndex
}
return resp, nil
}
// PrivilegeMemberExport 尊享会员导出excel
func PrivilegeMemberExport(list []PrivilegeMember) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := config.ExportConfig.Url
fileName := time.Now().Format(TimeFormat) + "零售尊享会员" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
//title := []interface{}{"用户ID", "手机号", "所属门店", "当前会员等级", "首次开通尊享会员时间", "尊享会员到期时间", "延保状态",
// "主机编码", "图片凭证", "审核人", "审核时间"}
title := []interface{}{"用户ID", "手机号", "所属门店", "当前会员等级", "首次开通尊享会员时间", "尊享会员到期时间", "延保状态",
"主机编码", "审核人", "审核时间"}
for i, _ := range title {
cell, _ := excelize.CoordinatesToCellName(1+i, 1)
err := file.SetCellValue(fSheet, cell, title[i])
if err != nil {
logger.Error("file set value err:", logger.Field("err", err))
}
}
var row []interface{}
nExcelStartRow := 0
// 查询门店信息
var storeList []Store
err := orm.Eloquent.Table("store").Find(&storeList).Error
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return "", err
}
storeMap := make(map[uint32]string, 0)
for i, _ := range storeList {
storeMap[storeList[i].ID] = storeList[i].Name
}
fmt.Println("storeMap is:", storeMap)
for i := 0; i < len(list); i++ {
var strExtendStatus string
switch list[i].ExtendStatus {
case 1:
strExtendStatus = "已过期"
case 2:
strExtendStatus = "待激活"
case 3:
strExtendStatus = "已激活"
default:
strExtendStatus = ""
}
row = []interface{}{
list[i].Uid, // 用户ID
list[i].Tel, // 手机号
storeMap[uint32(list[i].StoreId)], // 所属门店
getMemberLevelChineseDescription(list[i].MemberLevel), // 当前会员等级
tools.ConvertTimeToStringByPoint(list[i].OpenMemberTime), // 首次开通尊享会员时间
tools.ConvertTimeToStringByPoint(list[i].MemberExpire), // 尊享会员到期时间
strExtendStatus, // 延保状态
list[i].HostCode, // 主机编码
//list[i].Images, // 图片凭证
list[i].AuditorName, // 审核人
tools.ConvertTimeToStringByPoint(list[i].AuditTime), // 审核时间
}
for j, _ := range row {
cell, _ := excelize.CoordinatesToCellName(1+j, nExcelStartRow+2)
err = file.SetCellValue(fSheet, cell, row[j])
if err != nil {
logger.Error("file set value err:", logger.Field("err", err))
}
}
nExcelStartRow++
}
// 设置所有单元格的样式: 居中、加边框
style, _ := file.NewStyle(`{"alignment":{"horizontal":"center","vertical":"center"},
"border":[{"type":"left","color":"000000","style":1},
{"type":"top","color":"000000","style":1},
{"type":"right","color":"000000","style":1},
{"type":"bottom","color":"000000","style":1}]}`)
// 设置单元格的样式: 居中、加边框、自动换行
style1, _ := file.NewStyle(`{"alignment":{"horizontal":"center","vertical":"center","wrap_text":true},
"border":[{"type":"left","color":"000000","style":1},
{"type":"top","color":"000000","style":1},
{"type":"right","color":"000000","style":1},
{"type":"bottom","color":"000000","style":1}]}`)
endRow := fmt.Sprintf("J%d", nExcelStartRow+1)
// 应用样式到整个表格
file.SetColWidth("Sheet1", "A", "A", 12)
file.SetColWidth("Sheet1", "B", "B", 15)
file.SetColWidth("Sheet1", "C", "C", 30)
file.SetColWidth("Sheet1", "D", "D", 18)
file.SetColWidth("Sheet1", "F", "E", 18)
file.SetColWidth("Sheet1", "F", "F", 18)
file.SetColWidth("Sheet1", "G", "G", 15)
file.SetColWidth("Sheet1", "H", "H", 18)
file.SetColWidth("Sheet1", "I", "I", 15)
file.SetColWidth("Sheet1", "J", "J", 18)
_ = file.SetCellStyle("Sheet1", "A1", "J1", style1)
_ = file.SetCellStyle("Sheet1", "A2", endRow, style)
fmt.Println("save fileName:", config.ExportConfig.Path+fileName)
if err := file.SaveAs(config.ExportConfig.Path + fileName); err != nil {
fmt.Println(err)
}
return url + fileName, nil
}
type ActivateExtendedWarrantyReq struct {
Uid uint32 `json:"uid" binding:"required"` // 用户ID
HostCode string `json:"host_code" binding:"required"` // 主机编码
Images string `json:"images" binding:"required"` // 图片凭证
Remark string `json:"remark"` // 备注
}
func (m *ActivateExtendedWarrantyReq) ActivateExtendedWarranty(c *gin.Context) error {
sysUser, err := GetSysUserByCtx(c)
if err != nil {
logger.Errorf("err:%#v", err)
return err
}
var userStoreId uint64
// 查询用户尊享会员记录
var memberInfo PrivilegeMember
err = orm.Eloquent.Model(&PrivilegeMember{}).Debug().Where("uid = ?", m.Uid).Find(&memberInfo).Error
if err != nil {
return err
}
if memberInfo.StoreId == 0 {
// 获取店员有效门店
storeInfo, _ := GetUserEffectiveStore(uint32(sysUser.Uid))
if len(storeInfo) != 0 {
userStoreId = uint64(storeInfo[0].StoreID)
}
} else {
userStoreId = memberInfo.StoreId
}
err = orm.Eloquent.Table("privilege_member").Where("uid = ?", m.Uid).Updates(map[string]interface{}{
"store_id": userStoreId,
"extend_status": ExtendEffectivity,
"host_code": m.HostCode,
"images": m.Images,
"remark": m.Remark,
"audit_time": time.Now(),
"auditor_name": sysUser.NickName,
"auditor_id": sysUser.UserId,
"updated_at": time.Now(),
}).Error
if err != nil {
logger.Error("order err:", logger.Field("err", err))
return err
}
return nil
}
type CancelPrivilegeMembersReq struct {
Uid uint32 `json:"uid" binding:"required"` // 用户ID
}
func (m *CancelPrivilegeMembersReq) CancelPrivilegeMembers() (*PrivilegeMember, error) {
var userInfo PrivilegeMember
err := orm.Eloquent.Table("privilege_member").Where("uid", m.Uid).Find(&userInfo).Error
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, err
}
if userInfo.MemberLevel != MemberLevelPrivilege {
logger.Errorf("err:", logger.Field("err", "用户不是尊享会员"), logger.Field("uid", m.Uid))
return nil, errors.New("取消失败,用户不是尊享会员")
}
nowTime := time.Now()
userInfo.MemberLevel = MemberLevelUser
userInfo.MemberExpire = &nowTime
userInfo.ExtendStatus = ExtendExpire
sql := fmt.Sprintf("UPDATE `privilege_member` SET member_level = 1,member_expire=?,updated_at=?,extend_status=1 WHERE uid = ?;")
err = orm.Eloquent.Debug().Exec(sql, nowTime, nowTime, m.Uid).Error
if err != nil {
logger.Errorf("err:", logger.Field("err", err))
return nil, err
}
//var userInvite UserInvite
//orm.Eloquent.Table("user_invite").Where("to_uid=?", m.Uid).Where("spend_type=2").
// Order("id DESC").Limit(1).Find(&userInvite)
//sqlInvite := fmt.Sprintf("UPDATE user_invite SET member_status=3,action=1,spend_type=1 WHERE id= ? ;")
//err = orm.Eloquent.Exec(sqlInvite, userInvite.ID).Error
//if err != nil {
// logger.Errorf("err:", logger.Field("err", err))
// return nil, err
//}
return &userInfo, nil
}

View File

@ -15,7 +15,10 @@ func registerUserManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMid
userInfo.POST("/invite_derive", usermanage.ExportDataUser)
userInfo.POST("/mark", usermanage.MarkUser)
userInfo.POST("/tel", usermanage.TelList)
userInfo.POST("/new_user_invite_record_list", usermanage.NewUserInviteRecordList)
userInfo.POST("/new_user_invite_record_list", usermanage.NewUserInviteRecordList) // 会员邀请记录
userInfo.POST("/privilege_member/list", usermanage.PrivilegeMemberList) // 尊享会员列表
userInfo.POST("/privilege_member/activate_extended_warranty", usermanage.ActivateExtendedWarranty) // 激活尊享会员主机延保
userInfo.POST("/privilege_member/cancel_members", usermanage.CancelPrivilegeMembers) // 取消尊享会员
}
}
@ -62,6 +65,7 @@ func registerUserManageUnAuthRouter(v1 *gin.RouterGroup) {
{
groupSendMessage.POST("template/list", usermanage.GroupSendMessageCreateTemplateList)
groupSendMessage.POST("template/add", usermanage.GroupSendMessageCreateTemplate)
groupSendMessage.POST("template/edit", usermanage.GroupSendMessageEditTemplate)
groupSendMessage.POST("/send", usermanage.GroupSendMessage)
groupSendMessage.POST("template/del", usermanage.GroupSendMessageCreateTemplateDel)
}

View File

@ -138,27 +138,38 @@ func run() error {
if err != nil {
fmt.Println("err:", err)
}
// 更新过期用户的当前会员等级-20240308添加
err = s.Every(1).Day().At("00:05").Do(models.UpdateExpireMemberLevel)
if err != nil {
fmt.Println("err:", err)
}
// 用户邀请用户报表
//err = s.Every(1).Day().At("00:00").Do(models.CreateInviteMemberReport)
err = s.Every(1).Day().At("00:10").Do(models.CreateInviteMemberReport)
if err != nil {
fmt.Println("err:", err)
}
// 更新过期尊享会员等级-20240829添加
err = s.Every(1).Day().At("00:15").Do(models.UpdateExpirePrivilegeMemberLevel)
if err != nil {
fmt.Println("err:", err)
}
// 用户续费
err = s.Every(1).Day().At("19:00").Do(models.SendMessageMemberRenewal)
if err != nil {
fmt.Println("err:", err)
}
// 管理端首页
err = s.Every(1).Day().At("1:00").Do(models.IndexMemberStatistic)
if err != nil {
fmt.Println("err:", err)
}
// 卡带回收自动取消
err = s.Every(10).Minutes().Do(models.RecycleCardOrderStateUpdate)
if err != nil {

View File

@ -52,6 +52,6 @@ settings:
export:
path: /Users/max/Documents/
url: http://39.108.188.218:8000/img/export/
url: /Users/max/Documents/
# path: /www/server/images/export/
# url: https://dev.admin.deovo.com/load/export/

View File

@ -6077,6 +6077,108 @@ const docTemplate = `{
}
}
},
"/api/v1/user_info/privilege_member/activate_extended_warranty": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"会员管理",
"V1.4.2"
],
"summary": "零售尊享会员激活主机延保",
"parameters": [
{
"description": "零售尊享会员激活主机延保模型",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.ActivateExtendedWarrantyReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/app.Response"
}
}
}
}
},
"/api/v1/user_info/privilege_member/cancel_members": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"会员管理",
"V1.4.2"
],
"summary": "取消尊享会员",
"parameters": [
{
"description": "取消尊享会员模型",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.CancelPrivilegeMembersReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/app.Response"
}
}
}
}
},
"/api/v1/user_info/privilege_member/list": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"会员管理",
"V1.4.2"
],
"summary": "零售尊享会员列表",
"parameters": [
{
"description": "零售尊享会员列表模型",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.PrivilegeMemberListReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/models.PrivilegeMemberListResp"
}
}
}
}
},
"/api/v1/user_info/tel": {
"post": {
"consumes": [
@ -6548,6 +6650,32 @@ const docTemplate = `{
}
}
},
"models.ActivateExtendedWarrantyReq": {
"type": "object",
"required": [
"host_code",
"images",
"uid"
],
"properties": {
"host_code": {
"description": "主机编码",
"type": "string"
},
"images": {
"description": "图片凭证",
"type": "string"
},
"remark": {
"description": "备注",
"type": "string"
},
"uid": {
"description": "用户ID",
"type": "integer"
}
}
},
"models.AssistantInviteMemberReportListResp": {
"type": "object",
"properties": {
@ -6658,6 +6786,18 @@ const docTemplate = `{
}
}
},
"models.CancelPrivilegeMembersReq": {
"type": "object",
"required": [
"uid"
],
"properties": {
"uid": {
"description": "用户ID",
"type": "integer"
}
}
},
"models.CannibalizeStockTask": {
"type": "object",
"properties": {
@ -7353,6 +7493,10 @@ const docTemplate = `{
"description": "白金会员数量",
"type": "integer"
},
"privilege_count": {
"description": "尊享会员数量",
"type": "integer"
},
"renewal_black_gold_count": {
"description": "续费黑金会员数量",
"type": "integer"
@ -7365,6 +7509,10 @@ const docTemplate = `{
"description": "续费白金会员数量",
"type": "integer"
},
"renewal_privilege_count": {
"description": "续费尊享会员数量",
"type": "integer"
},
"store": {
"$ref": "#/definitions/models.Store"
},
@ -7640,6 +7788,10 @@ const docTemplate = `{
"description": "采购进货",
"type": "integer"
},
"system_in": {
"description": "系统入库",
"type": "integer"
},
"system_out": {
"description": "系统出库",
"type": "integer"
@ -7709,6 +7861,10 @@ const docTemplate = `{
"description": "采购进货",
"type": "integer"
},
"total_system_in": {
"description": "系统入库",
"type": "integer"
},
"total_system_out": {
"description": "系统出库",
"type": "integer"
@ -7759,6 +7915,10 @@ const docTemplate = `{
"description": "主供应商名称",
"type": "string"
},
"img": {
"description": "图片",
"type": "string"
},
"last_wholesale_price": {
"description": "最近采购价",
"type": "number"
@ -9204,7 +9364,6 @@ const docTemplate = `{
"salesman",
"store_id",
"store_name",
"tel",
"total_count"
],
"properties": {
@ -13192,6 +13351,10 @@ const docTemplate = `{
"description": "白金会员提成",
"type": "integer"
},
"privilege_count": {
"description": "尊享会员数量",
"type": "integer"
},
"renewal_black_gold_count": {
"description": "续费黑金会员数量(自动)",
"type": "integer"
@ -13212,6 +13375,10 @@ const docTemplate = `{
"description": "续费白金会员数量(自动)",
"type": "integer"
},
"renewal_privilege_count": {
"description": "续费尊享会员数量",
"type": "integer"
},
"store_id": {
"description": "门店id",
"type": "integer"
@ -13582,7 +13749,7 @@ const docTemplate = `{
"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-白金→黑金(自动)",
"description": "记录类型 1-首次邀请2-开通年费黄金3-开通季度黄金4-开通半年黄金, 5-开通年费白金6-开通年费黑金7-续费年费黄金干预8-续费年费白金干预9-续费年费黑金干预10-续费年费黄金(自动), 11-续费季度黄金自动12-续费半年黄金自动13-续费年费白金自动14-续费年费黑金自动15-黄金→白金(干预), 16-黄金→黑金干预17-白金→黑金干预18-黄金→白金自动19-黄金→黑金自动20-白金→黑金(自动)21-开通尊享会员, 22-续费尊享会员",
"type": "array",
"items": {
"type": "integer"
@ -14146,6 +14313,183 @@ const docTemplate = `{
}
}
},
"models.PrivilegeMember": {
"type": "object",
"properties": {
"audit_time": {
"description": "审核时间",
"type": "string"
},
"auditor_id": {
"description": "审核人id",
"type": "integer"
},
"auditor_name": {
"description": "审核人姓名",
"type": "string"
},
"createdAt": {
"description": "创建时间",
"type": "string"
},
"extend_status": {
"description": "延保状态:0-非会员, 1-已过期2-待激活、3-已激活",
"type": "integer"
},
"host_code": {
"description": "主机编码",
"type": "string"
},
"id": {
"description": "数据库记录编号",
"type": "integer"
},
"images": {
"description": "图片凭证",
"type": "string"
},
"member_expire": {
"description": "会员到期时间",
"type": "string"
},
"member_level": {
"description": "当前会员等级:1-普通用户6-尊享会员",
"type": "integer"
},
"open_member_time": {
"description": "开通会员时间",
"type": "string"
},
"remark": {
"description": "备注",
"type": "string"
},
"store": {
"description": "门店信息",
"allOf": [
{
"$ref": "#/definitions/models.Store"
}
]
},
"store_id": {
"description": "门店id",
"type": "integer"
},
"tel": {
"description": "电话",
"type": "string"
},
"uid": {
"description": "用户id",
"type": "integer"
},
"updatedAt": {
"description": "更新时间",
"type": "string"
}
}
},
"models.PrivilegeMemberListReq": {
"type": "object",
"properties": {
"audit_time_end": {
"description": "审核结束时间",
"type": "string"
},
"audit_time_start": {
"description": "审核开始时间",
"type": "string"
},
"auditor_id": {
"description": "审核人",
"type": "integer"
},
"extend_status": {
"description": "延保状态",
"type": "integer"
},
"host_code": {
"description": "主机编码",
"type": "string"
},
"is_export": {
"description": "1-导出excel",
"type": "integer"
},
"member_expire_end": {
"description": "尊享会员到期时间-结束时间",
"type": "string"
},
"member_expire_start": {
"description": "尊享会员到期时间-开始时间",
"type": "string"
},
"member_level": {
"description": "当前会员等级",
"type": "integer"
},
"open_member_end": {
"description": "首次开通尊享会员-结束时间",
"type": "string"
},
"open_member_start": {
"description": "首次开通尊享会员-开始时间",
"type": "string"
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "页面条数",
"type": "integer"
},
"store_id": {
"description": "门店列表(支持复选)",
"type": "array",
"items": {
"type": "integer"
}
},
"tel": {
"description": "手机号",
"type": "string"
},
"uid": {
"description": "用户ID",
"type": "integer"
}
}
},
"models.PrivilegeMemberListResp": {
"type": "object",
"properties": {
"export_url": {
"description": "导出excel路径",
"type": "string"
},
"list": {
"description": "零售尊享会员信息",
"type": "array",
"items": {
"$ref": "#/definitions/models.PrivilegeMember"
}
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "页面条数",
"type": "integer"
},
"total": {
"description": "总条数",
"type": "integer"
}
}
},
"models.ProductInventoryAddReq": {
"type": "object",
"required": [
@ -16829,7 +17173,15 @@ const docTemplate = `{
"type": "string"
},
"member_level": {
"description": "会员等级1-普通 2-黄金 4-白金 5-黑金",
"description": "当前租卡会员类型1-普通 2-黄金 4-白金 5-黑金",
"type": "integer"
},
"privilege_memberExpire": {
"description": "尊享会员到期时间",
"type": "string"
},
"privilege_member_level": {
"description": "当前尊享会员类型1-普通 6-尊享会员",
"type": "integer"
},
"record_time": {

View File

@ -6066,6 +6066,108 @@
}
}
},
"/api/v1/user_info/privilege_member/activate_extended_warranty": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"会员管理",
"V1.4.2"
],
"summary": "零售尊享会员激活主机延保",
"parameters": [
{
"description": "零售尊享会员激活主机延保模型",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.ActivateExtendedWarrantyReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/app.Response"
}
}
}
}
},
"/api/v1/user_info/privilege_member/cancel_members": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"会员管理",
"V1.4.2"
],
"summary": "取消尊享会员",
"parameters": [
{
"description": "取消尊享会员模型",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.CancelPrivilegeMembersReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/app.Response"
}
}
}
}
},
"/api/v1/user_info/privilege_member/list": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"会员管理",
"V1.4.2"
],
"summary": "零售尊享会员列表",
"parameters": [
{
"description": "零售尊享会员列表模型",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.PrivilegeMemberListReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/models.PrivilegeMemberListResp"
}
}
}
}
},
"/api/v1/user_info/tel": {
"post": {
"consumes": [
@ -6537,6 +6639,32 @@
}
}
},
"models.ActivateExtendedWarrantyReq": {
"type": "object",
"required": [
"host_code",
"images",
"uid"
],
"properties": {
"host_code": {
"description": "主机编码",
"type": "string"
},
"images": {
"description": "图片凭证",
"type": "string"
},
"remark": {
"description": "备注",
"type": "string"
},
"uid": {
"description": "用户ID",
"type": "integer"
}
}
},
"models.AssistantInviteMemberReportListResp": {
"type": "object",
"properties": {
@ -6647,6 +6775,18 @@
}
}
},
"models.CancelPrivilegeMembersReq": {
"type": "object",
"required": [
"uid"
],
"properties": {
"uid": {
"description": "用户ID",
"type": "integer"
}
}
},
"models.CannibalizeStockTask": {
"type": "object",
"properties": {
@ -7342,6 +7482,10 @@
"description": "白金会员数量",
"type": "integer"
},
"privilege_count": {
"description": "尊享会员数量",
"type": "integer"
},
"renewal_black_gold_count": {
"description": "续费黑金会员数量",
"type": "integer"
@ -7354,6 +7498,10 @@
"description": "续费白金会员数量",
"type": "integer"
},
"renewal_privilege_count": {
"description": "续费尊享会员数量",
"type": "integer"
},
"store": {
"$ref": "#/definitions/models.Store"
},
@ -7629,6 +7777,10 @@
"description": "采购进货",
"type": "integer"
},
"system_in": {
"description": "系统入库",
"type": "integer"
},
"system_out": {
"description": "系统出库",
"type": "integer"
@ -7698,6 +7850,10 @@
"description": "采购进货",
"type": "integer"
},
"total_system_in": {
"description": "系统入库",
"type": "integer"
},
"total_system_out": {
"description": "系统出库",
"type": "integer"
@ -7748,6 +7904,10 @@
"description": "主供应商名称",
"type": "string"
},
"img": {
"description": "图片",
"type": "string"
},
"last_wholesale_price": {
"description": "最近采购价",
"type": "number"
@ -9193,7 +9353,6 @@
"salesman",
"store_id",
"store_name",
"tel",
"total_count"
],
"properties": {
@ -13181,6 +13340,10 @@
"description": "白金会员提成",
"type": "integer"
},
"privilege_count": {
"description": "尊享会员数量",
"type": "integer"
},
"renewal_black_gold_count": {
"description": "续费黑金会员数量(自动)",
"type": "integer"
@ -13201,6 +13364,10 @@
"description": "续费白金会员数量(自动)",
"type": "integer"
},
"renewal_privilege_count": {
"description": "续费尊享会员数量",
"type": "integer"
},
"store_id": {
"description": "门店id",
"type": "integer"
@ -13571,7 +13738,7 @@
"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-白金→黑金(自动)",
"description": "记录类型 1-首次邀请2-开通年费黄金3-开通季度黄金4-开通半年黄金, 5-开通年费白金6-开通年费黑金7-续费年费黄金干预8-续费年费白金干预9-续费年费黑金干预10-续费年费黄金(自动), 11-续费季度黄金自动12-续费半年黄金自动13-续费年费白金自动14-续费年费黑金自动15-黄金→白金(干预), 16-黄金→黑金干预17-白金→黑金干预18-黄金→白金自动19-黄金→黑金自动20-白金→黑金(自动)21-开通尊享会员, 22-续费尊享会员",
"type": "array",
"items": {
"type": "integer"
@ -14135,6 +14302,183 @@
}
}
},
"models.PrivilegeMember": {
"type": "object",
"properties": {
"audit_time": {
"description": "审核时间",
"type": "string"
},
"auditor_id": {
"description": "审核人id",
"type": "integer"
},
"auditor_name": {
"description": "审核人姓名",
"type": "string"
},
"createdAt": {
"description": "创建时间",
"type": "string"
},
"extend_status": {
"description": "延保状态:0-非会员, 1-已过期2-待激活、3-已激活",
"type": "integer"
},
"host_code": {
"description": "主机编码",
"type": "string"
},
"id": {
"description": "数据库记录编号",
"type": "integer"
},
"images": {
"description": "图片凭证",
"type": "string"
},
"member_expire": {
"description": "会员到期时间",
"type": "string"
},
"member_level": {
"description": "当前会员等级:1-普通用户6-尊享会员",
"type": "integer"
},
"open_member_time": {
"description": "开通会员时间",
"type": "string"
},
"remark": {
"description": "备注",
"type": "string"
},
"store": {
"description": "门店信息",
"allOf": [
{
"$ref": "#/definitions/models.Store"
}
]
},
"store_id": {
"description": "门店id",
"type": "integer"
},
"tel": {
"description": "电话",
"type": "string"
},
"uid": {
"description": "用户id",
"type": "integer"
},
"updatedAt": {
"description": "更新时间",
"type": "string"
}
}
},
"models.PrivilegeMemberListReq": {
"type": "object",
"properties": {
"audit_time_end": {
"description": "审核结束时间",
"type": "string"
},
"audit_time_start": {
"description": "审核开始时间",
"type": "string"
},
"auditor_id": {
"description": "审核人",
"type": "integer"
},
"extend_status": {
"description": "延保状态",
"type": "integer"
},
"host_code": {
"description": "主机编码",
"type": "string"
},
"is_export": {
"description": "1-导出excel",
"type": "integer"
},
"member_expire_end": {
"description": "尊享会员到期时间-结束时间",
"type": "string"
},
"member_expire_start": {
"description": "尊享会员到期时间-开始时间",
"type": "string"
},
"member_level": {
"description": "当前会员等级",
"type": "integer"
},
"open_member_end": {
"description": "首次开通尊享会员-结束时间",
"type": "string"
},
"open_member_start": {
"description": "首次开通尊享会员-开始时间",
"type": "string"
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "页面条数",
"type": "integer"
},
"store_id": {
"description": "门店列表(支持复选)",
"type": "array",
"items": {
"type": "integer"
}
},
"tel": {
"description": "手机号",
"type": "string"
},
"uid": {
"description": "用户ID",
"type": "integer"
}
}
},
"models.PrivilegeMemberListResp": {
"type": "object",
"properties": {
"export_url": {
"description": "导出excel路径",
"type": "string"
},
"list": {
"description": "零售尊享会员信息",
"type": "array",
"items": {
"$ref": "#/definitions/models.PrivilegeMember"
}
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "页面条数",
"type": "integer"
},
"total": {
"description": "总条数",
"type": "integer"
}
}
},
"models.ProductInventoryAddReq": {
"type": "object",
"required": [
@ -16818,7 +17162,15 @@
"type": "string"
},
"member_level": {
"description": "会员等级1-普通 2-黄金 4-白金 5-黑金",
"description": "当前租卡会员类型1-普通 2-黄金 4-白金 5-黑金",
"type": "integer"
},
"privilege_memberExpire": {
"description": "尊享会员到期时间",
"type": "string"
},
"privilege_member_level": {
"description": "当前尊享会员类型1-普通 6-尊享会员",
"type": "integer"
},
"record_time": {

View File

@ -270,6 +270,25 @@ definitions:
required:
- id
type: object
models.ActivateExtendedWarrantyReq:
properties:
host_code:
description: 主机编码
type: string
images:
description: 图片凭证
type: string
remark:
description: 备注
type: string
uid:
description: 用户ID
type: integer
required:
- host_code
- images
- uid
type: object
models.AssistantInviteMemberReportListResp:
properties:
export_url:
@ -348,6 +367,14 @@ definitions:
required:
- print_list_info
type: object
models.CancelPrivilegeMembersReq:
properties:
uid:
description: 用户ID
type: integer
required:
- uid
type: object
models.CannibalizeStockTask:
properties:
count:
@ -854,6 +881,9 @@ definitions:
platinum_count:
description: 白金会员数量
type: integer
privilege_count:
description: 尊享会员数量
type: integer
renewal_black_gold_count:
description: 续费黑金会员数量
type: integer
@ -863,6 +893,9 @@ definitions:
renewal_platinum_count:
description: 续费白金会员数量
type: integer
renewal_privilege_count:
description: 续费尊享会员数量
type: integer
store:
$ref: '#/definitions/models.Store'
store_id:
@ -1063,6 +1096,9 @@ definitions:
purchase_stock:
description: 采购进货
type: integer
system_in:
description: 系统入库
type: integer
system_out:
description: 系统出库
type: integer
@ -1114,6 +1150,9 @@ definitions:
total_purchase_stock:
description: 采购进货
type: integer
total_system_in:
description: 系统入库
type: integer
total_system_out:
description: 系统出库
type: integer
@ -1150,6 +1189,9 @@ definitions:
erp_supplier_name:
description: 主供应商名称
type: string
img:
description: 图片
type: string
last_wholesale_price:
description: 最近采购价
type: number
@ -2255,7 +2297,6 @@ definitions:
- salesman
- store_id
- store_name
- tel
- total_count
type: object
models.ErpOrderDeleteReq:
@ -5092,6 +5133,9 @@ definitions:
platinum_deduct:
description: 白金会员提成
type: integer
privilege_count:
description: 尊享会员数量
type: integer
renewal_black_gold_count:
description: 续费黑金会员数量(自动)
type: integer
@ -5107,6 +5151,9 @@ definitions:
renewal_platinum_count:
description: 续费白金会员数量(自动)
type: integer
renewal_privilege_count:
description: 续费尊享会员数量
type: integer
store_id:
description: 门店id
type: integer
@ -5369,7 +5416,8 @@ definitions:
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-白金→黑金(自动)
11-续费季度黄金自动12-续费半年黄金自动13-续费年费白金自动14-续费年费黑金自动15-黄金→白金(干预), 16-黄金→黑金干预17-白金→黑金干预18-黄金→白金自动19-黄金→黑金自动20-白金→黑金自动21-开通尊享会员,
22-续费尊享会员
items:
type: integer
type: array
@ -5771,6 +5819,134 @@ definitions:
description: 更新时间
type: string
type: object
models.PrivilegeMember:
properties:
audit_time:
description: 审核时间
type: string
auditor_id:
description: 审核人id
type: integer
auditor_name:
description: 审核人姓名
type: string
createdAt:
description: 创建时间
type: string
extend_status:
description: 延保状态:0-非会员, 1-已过期2-待激活、3-已激活
type: integer
host_code:
description: 主机编码
type: string
id:
description: 数据库记录编号
type: integer
images:
description: 图片凭证
type: string
member_expire:
description: 会员到期时间
type: string
member_level:
description: 当前会员等级:1-普通用户6-尊享会员
type: integer
open_member_time:
description: 开通会员时间
type: string
remark:
description: 备注
type: string
store:
allOf:
- $ref: '#/definitions/models.Store'
description: 门店信息
store_id:
description: 门店id
type: integer
tel:
description: 电话
type: string
uid:
description: 用户id
type: integer
updatedAt:
description: 更新时间
type: string
type: object
models.PrivilegeMemberListReq:
properties:
audit_time_end:
description: 审核结束时间
type: string
audit_time_start:
description: 审核开始时间
type: string
auditor_id:
description: 审核人
type: integer
extend_status:
description: 延保状态
type: integer
host_code:
description: 主机编码
type: string
is_export:
description: 1-导出excel
type: integer
member_expire_end:
description: 尊享会员到期时间-结束时间
type: string
member_expire_start:
description: 尊享会员到期时间-开始时间
type: string
member_level:
description: 当前会员等级
type: integer
open_member_end:
description: 首次开通尊享会员-结束时间
type: string
open_member_start:
description: 首次开通尊享会员-开始时间
type: string
pageIndex:
description: 页码
type: integer
pageSize:
description: 页面条数
type: integer
store_id:
description: 门店列表(支持复选)
items:
type: integer
type: array
tel:
description: 手机号
type: string
uid:
description: 用户ID
type: integer
type: object
models.PrivilegeMemberListResp:
properties:
export_url:
description: 导出excel路径
type: string
list:
description: 零售尊享会员信息
items:
$ref: '#/definitions/models.PrivilegeMember'
type: array
pageIndex:
description: 页码
type: integer
pageSize:
description: 页面条数
type: integer
total:
description: 总条数
type: integer
type: object
models.ProductInventoryAddReq:
properties:
commodities:
@ -7714,11 +7890,17 @@ definitions:
description: 邀请人昵称
type: string
member_level:
description: 会员等级1-普通 2-黄金 4-白金 5-黑金
description: 当前租卡会员类型1-普通 2-黄金 4-白金 5-黑金
type: integer
memberExpire:
description: 租卡会员到期时间
type: string
privilege_member_level:
description: 当前尊享会员类型1-普通 6-尊享会员
type: integer
privilege_memberExpire:
description: 尊享会员到期时间
type: string
record_time:
description: 记录时间
type: string
@ -11904,6 +12086,72 @@ paths:
tags:
- 会员管理
- V1.2.0
/api/v1/user_info/privilege_member/activate_extended_warranty:
post:
consumes:
- application/json
parameters:
- description: 零售尊享会员激活主机延保模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.ActivateExtendedWarrantyReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/app.Response'
summary: 零售尊享会员激活主机延保
tags:
- 会员管理
- V1.4.2
/api/v1/user_info/privilege_member/cancel_members:
post:
consumes:
- application/json
parameters:
- description: 取消尊享会员模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.CancelPrivilegeMembersReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/app.Response'
summary: 取消尊享会员
tags:
- 会员管理
- V1.4.2
/api/v1/user_info/privilege_member/list:
post:
consumes:
- application/json
parameters:
- description: 零售尊享会员列表模型
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.PrivilegeMemberListReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.PrivilegeMemberListResp'
summary: 零售尊享会员列表
tags:
- 会员管理
- V1.4.2
/api/v1/user_info/tel:
post:
consumes:

View File

@ -120,7 +120,7 @@ func InitDBTest() {
// "mh_pro", "fLeytnBFCRB553ab", "39.108.188.218", "3306",
// "mh_pro")
dialect := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
"mh_dev", "m5h4parZsXjbeiFh", "39.108.188.218", "3306",
"mh_dev", "d9qy46ONI0ZTF9eH", "112.33.14.191", "3306",
"mh_dev")
DBTest, err = gorm.Open("mysql", dialect)

View File

@ -0,0 +1,18 @@
package test
import (
"go-admin/app/admin/models"
"testing"
)
func TestSend(t *testing.T) {
//tel := "17080320980"
tel := "13714071204,17727927738"
//tel := "17602181899"
models.SmsSend(tel, "【go2switch】温馨提示:您的会员即将过期,请在过期之前将卡归还到门店,如有问题联系客服")
}
func TestGtSendMessage(t *testing.T) {
models.GtSendMessage([]string{"15019230751"}, "【go2ns】绿城短信推送测试,测试")
}