fix:
This commit is contained in:
parent
582c388a84
commit
39a1f1f028
|
@ -265,6 +265,7 @@ func ErpOrderCommodityList(c *gin.Context) {
|
||||||
req := &struct {
|
req := &struct {
|
||||||
Tel string `json:"tel"`
|
Tel string `json:"tel"`
|
||||||
IMEI string `json:"imei"`
|
IMEI string `json:"imei"`
|
||||||
|
ErpCategoryId uint32 `json:"erp_category_id"`
|
||||||
ErpCommodityName string `json:"erp_commodity_name"`
|
ErpCommodityName string `json:"erp_commodity_name"`
|
||||||
}{}
|
}{}
|
||||||
if err := c.ShouldBindJSON(&req); err != nil {
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
@ -284,6 +285,10 @@ func ErpOrderCommodityList(c *gin.Context) {
|
||||||
if req.ErpCommodityName != "" {
|
if req.ErpCommodityName != "" {
|
||||||
qs = qs.Where("erp_commodity_name=?", req.ErpCommodityName)
|
qs = qs.Where("erp_commodity_name=?", req.ErpCommodityName)
|
||||||
}
|
}
|
||||||
|
if req.ErpCategoryId != 0 {
|
||||||
|
qs = qs.Where("erp_category_id=?", req.ErpCategoryId)
|
||||||
|
}
|
||||||
|
|
||||||
err := qs.Order("id DESC").Find(&commodities).Error
|
err := qs.Order("id DESC").Find(&commodities).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("erp commodity list err:", err)
|
logger.Error("erp commodity list err:", err)
|
||||||
|
@ -344,7 +349,7 @@ func ErpOrderAudit(c *gin.Context) {
|
||||||
}{}
|
}{}
|
||||||
if err := c.ShouldBindJSON(&req); err != nil {
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
logger.Error(err)
|
logger.Error(err)
|
||||||
RespJson(c, status.InternalServerError, nil)
|
RespJson(c, status.BadRequest, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,3 +363,150 @@ func ErpOrderAudit(c *gin.Context) {
|
||||||
RespOK(c, nil)
|
RespOK(c, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ErpCashierStoreList(c *gin.Context) {
|
||||||
|
req := struct {
|
||||||
|
StoreId uint32 `json:"store_id"`
|
||||||
|
PageNum int `json:"page_num"`
|
||||||
|
PageSize int `json:"page_size"`
|
||||||
|
//IsExport uint32 `json:"is_export"` // 1-导出
|
||||||
|
}{}
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
logger.Error(err)
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//uc := auth.GetCurrentUser(c)
|
||||||
|
//if uc == nil {
|
||||||
|
// logger.Error("uc is nil")
|
||||||
|
// RespJson(c, status.Unauthorized, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
|
||||||
|
////uc = &auth.UserClaims{Uid: 8588420}
|
||||||
|
//assistant := model.GetUserByUid(uc.Uid)
|
||||||
|
//if assistant.UserType != 2 {
|
||||||
|
// logger.Error("not assistant")
|
||||||
|
// RespJson(c, status.InternalServerError, nil)
|
||||||
|
// return
|
||||||
|
//}
|
||||||
|
//req.StoreId = uint32(assistant.StoreId)
|
||||||
|
|
||||||
|
resp := &model.ErpCashierStoreListResp{
|
||||||
|
PageNum: req.PageNum,
|
||||||
|
PageSize: req.PageSize,
|
||||||
|
}
|
||||||
|
page := req.PageNum - 1
|
||||||
|
if page < 0 {
|
||||||
|
page = 0
|
||||||
|
}
|
||||||
|
if req.PageSize == 0 {
|
||||||
|
req.PageSize = 10
|
||||||
|
}
|
||||||
|
|
||||||
|
qs := model.DB.Table("erp_store_cashier")
|
||||||
|
if req.StoreId != 0 {
|
||||||
|
qs = qs.Where("store_id=?", req.StoreId)
|
||||||
|
}
|
||||||
|
var count int64
|
||||||
|
err := qs.Count(&count).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("count err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.Total = int(count)/req.PageSize + 1
|
||||||
|
var categories []model.ErpStoreCashier
|
||||||
|
//if req.IsExport == 1 {
|
||||||
|
// //err = qs.Order("id DESC").Find(&categories).Error
|
||||||
|
// //if err != nil && err != model.RecordNotFound {
|
||||||
|
// // logger.Error("dailys err:", err)
|
||||||
|
// // RespJson(c, status.InternalServerError, nil)
|
||||||
|
// // return
|
||||||
|
// //}
|
||||||
|
// //
|
||||||
|
// //listExport, err := model.ErpStoreCashierListExport(categories)
|
||||||
|
// //if err != nil {
|
||||||
|
// // logger.Error("list export err:", err)
|
||||||
|
// // RespJson(c, status.InternalServerError, nil)
|
||||||
|
// // return
|
||||||
|
// //}
|
||||||
|
// //resp.ExportUrl = listExport
|
||||||
|
//} else {
|
||||||
|
//}
|
||||||
|
err = qs.Order("id DESC").Offset(page * req.PageSize).Limit(req.PageSize).Find(&categories).Error
|
||||||
|
if err != nil && err != model.RecordNotFound {
|
||||||
|
logger.Error("erp commodity list err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.List = categories
|
||||||
|
|
||||||
|
RespOK(c, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 串码查询商品详情
|
||||||
|
func ErpOrderDel(c *gin.Context) {
|
||||||
|
req := &struct {
|
||||||
|
ErpOrderId uint32 `json:"erp_order_id"`
|
||||||
|
}{}
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
logger.Error(err)
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err := model.DB.Table("erp_order").Where("id = ?", req.ErpOrderId).Delete(&model.ErpOrder{}).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("order del err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RespOK(c, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func UserInfoList(c *gin.Context) {
|
||||||
|
req := &struct {
|
||||||
|
Tel string `json:"tel"`
|
||||||
|
}{}
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
logger.Error(err)
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var users []model.User
|
||||||
|
err := model.DB.Table("user").Where("tel LIKE '%" + req.Tel + "%'").Find(&users).Error
|
||||||
|
//err := model.NewUserQuerySet(model.DB).TelLike(req.Tel).All(&users)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("erp commodity list err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RespOK(c, users)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func ErpCommodityList(c *gin.Context) {
|
||||||
|
req := &model.ErpCommodityListReq{}
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
logger.Error(err)
|
||||||
|
RespJson(c, status.BadRequest, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := req.List()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("erp commodity list err:", err)
|
||||||
|
RespJson(c, status.InternalServerError, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
RespOK(c, resp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/codinl/go-logger"
|
||||||
|
"github.com/xuri/excelize/v2"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -182,6 +185,130 @@ type ErpInventoryStockCommodity struct {
|
||||||
// erp_inventory_stock_commodity
|
// erp_inventory_stock_commodity
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ErpCommodityListReq struct {
|
||||||
|
SerialNumber string `json:"serial_number"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
ErpCategoryId uint32 `json:"erp_category_id"`
|
||||||
|
IMEI string `json:"imei"`
|
||||||
|
ErpSupplierId uint32 `json:"erp_supplier_id"`
|
||||||
|
PageNum int `json:"page_num"`
|
||||||
|
PageSize int `json:"page_size"`
|
||||||
|
IsExport uint32 `json:"is_export"` // 1-导出
|
||||||
|
}
|
||||||
|
type ErpCommodityListResp struct {
|
||||||
|
List []ErpCommodity `json:"list"`
|
||||||
|
Total int `json:"total"`
|
||||||
|
PageNum int `json:"page_num"`
|
||||||
|
PageSize int `json:"page_size"`
|
||||||
|
ExportUrl string `json:"export_url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ErpCommodityListReq) List() (*ErpCommodityListResp, error) {
|
||||||
|
resp := &ErpCommodityListResp{
|
||||||
|
PageNum: m.PageNum,
|
||||||
|
PageSize: m.PageSize,
|
||||||
|
}
|
||||||
|
page := m.PageNum - 1
|
||||||
|
if page < 0 {
|
||||||
|
page = 0
|
||||||
|
}
|
||||||
|
if m.PageSize == 0 {
|
||||||
|
m.PageSize = 10
|
||||||
|
}
|
||||||
|
qs := DB.Table("erp_commodity")
|
||||||
|
if m.SerialNumber != "" {
|
||||||
|
qs = qs.Where("serial_number=?", m.SerialNumber)
|
||||||
|
}
|
||||||
|
if m.Name != "" {
|
||||||
|
//qs = qs.Where("name Like %" + m.Name + "%")
|
||||||
|
qs = qs.Where("name LIKE ?", m.Name)
|
||||||
|
}
|
||||||
|
if m.IMEI != "" {
|
||||||
|
qs = qs.Where("imei=?", m.IMEI)
|
||||||
|
}
|
||||||
|
if m.ErpCategoryId != 0 {
|
||||||
|
qs = qs.Where("erp_category_id=?", m.ErpCategoryId)
|
||||||
|
}
|
||||||
|
if m.ErpSupplierId != 0 {
|
||||||
|
qs = qs.Where("erp_supplier_id=?", m.ErpSupplierId)
|
||||||
|
}
|
||||||
|
|
||||||
|
var count int64
|
||||||
|
err := qs.Count(&count).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("count err:", err)
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
resp.Total = int(count)/m.PageSize + 1
|
||||||
|
var commodities []ErpCommodity
|
||||||
|
|
||||||
|
if m.IsExport == 1 {
|
||||||
|
err = qs.Order("id DESC").Find(&commodities).Error
|
||||||
|
if err != nil && err != RecordNotFound {
|
||||||
|
logger.Error("dailys err:", err)
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
listExport, err := ErpCommodityListExport(commodities)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("list export err:", err)
|
||||||
|
}
|
||||||
|
resp.ExportUrl = listExport
|
||||||
|
} else {
|
||||||
|
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&commodities).Error
|
||||||
|
if err != nil && err != RecordNotFound {
|
||||||
|
logger.Error("erp commodity list err:", err)
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
resp.List = commodities
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ErpCommodityListExport(list []ErpCommodity) (string, error) {
|
||||||
|
file := excelize.NewFile()
|
||||||
|
streamWriter, err := file.NewStreamWriter("Sheet1")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "http://39.108.188.218:8000/img/export/"
|
||||||
|
fileName := time.Now().Format(TimeFormat) + "商品" + ".xlsx"
|
||||||
|
|
||||||
|
//title := []interface{}{"供应商编号", "供应商名称", "联系人", "手机号", "地址", "开户银行", "银行账号", "付款周期/天"}
|
||||||
|
title := []interface{}{"商品编号", "商品名称", "商品分类", "是否串码", "主供应商", "零售价", "最低零售价", "员工成本价",
|
||||||
|
"采购价", "提成等级1", "提成等级2", "产地", "备注", "会员折扣(零售价的百分比)"}
|
||||||
|
cell, _ := excelize.CoordinatesToCellName(1, 1)
|
||||||
|
if err = streamWriter.SetRow(cell, title); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
var row []interface{}
|
||||||
|
for rowId := 0; rowId < len(list); rowId++ {
|
||||||
|
isIMEI := "否"
|
||||||
|
if list[rowId].IMEIType == 2 {
|
||||||
|
isIMEI = "是"
|
||||||
|
}
|
||||||
|
|
||||||
|
row = []interface{}{list[rowId].SerialNumber, list[rowId].Name, list[rowId].ErpCategoryName,
|
||||||
|
isIMEI, list[rowId].ErpSupplierName, list[rowId].RetailPrice,
|
||||||
|
list[rowId].MinRetailPrice, list[rowId].StaffCostPrice, list[rowId].WholesalePrice, list[rowId].Brokerage1,
|
||||||
|
list[rowId].Brokerage2, list[rowId].Origin, list[rowId].Remark, list[rowId].MemberDiscount}
|
||||||
|
cell, _ := excelize.CoordinatesToCellName(1, rowId+2)
|
||||||
|
if err := streamWriter.SetRow(cell, row); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := streamWriter.Flush(); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil {
|
||||||
|
//if err := file.SaveAs("./" + fileName); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
return url + fileName, nil
|
||||||
|
}
|
||||||
|
|
||||||
//func (c *ErpCommodity) IdInit() {
|
//func (c *ErpCommodity) IdInit() {
|
||||||
// if c.ErpCategoryId != 0 {
|
// if c.ErpCategoryId != 0 {
|
||||||
// if c.ErpCategory == nil {
|
// if c.ErpCategory == nil {
|
||||||
|
|
|
@ -136,7 +136,7 @@ func (m *ErpOrderListReq) List() (*ErpOrderListResp, error) {
|
||||||
if m.StartTime != "" {
|
if m.StartTime != "" {
|
||||||
parse, err := time.Parse(DateTimeFormat, m.StartTime)
|
parse, err := time.Parse(DateTimeFormat, m.StartTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("err:", err)
|
logger.Error("err:", err)
|
||||||
//return users, 0, err
|
//return users, 0, err
|
||||||
}
|
}
|
||||||
qs = qs.Where("created_at > ?", parse)
|
qs = qs.Where("created_at > ?", parse)
|
||||||
|
@ -144,7 +144,7 @@ func (m *ErpOrderListReq) List() (*ErpOrderListResp, error) {
|
||||||
if m.EndTime != "" {
|
if m.EndTime != "" {
|
||||||
parse, err := time.Parse(DateTimeFormat, m.EndTime)
|
parse, err := time.Parse(DateTimeFormat, m.EndTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("err:", err)
|
logger.Error("err:", err)
|
||||||
//return users, 0, err
|
//return users, 0, err
|
||||||
}
|
}
|
||||||
parse = parse.AddDate(0, 0, 1)
|
parse = parse.AddDate(0, 0, 1)
|
||||||
|
|
|
@ -22,7 +22,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
//"github.com/andreburgaud/crypt2go/ecb"
|
//"github.com/andreburgaud/crypt2go/ecb"
|
||||||
//"github.com/andreburgaud/crypt2go/padding"
|
//"github.com/andreburgaud/crypt2go/padding"
|
||||||
"github.com/codinl/go-logger"
|
"github.com/codinl/go-logger"
|
||||||
|
@ -2158,3 +2157,427 @@ func TestUnicode(t *testing.T) {
|
||||||
fmt.Println("===", string(newStr))
|
fmt.Println("===", string(newStr))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func packageAndDefer() int {
|
||||||
|
val := 10
|
||||||
|
defer func() {
|
||||||
|
val += 1
|
||||||
|
fmt.Println("11", val)
|
||||||
|
}()
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestModel(t *testing.T) {
|
||||||
|
fmt.Println(packageAndDefer())
|
||||||
|
m := make(map[uint32]string, 0)
|
||||||
|
fmt.Println(m)
|
||||||
|
|
||||||
|
//// A header for a Go map.
|
||||||
|
//type hmap struct {
|
||||||
|
// // Note: the format of the hmap is also encoded in cmd/compile/internal/reflectdata/reflect.go.
|
||||||
|
// // Make sure this stays in sync with the compiler's definition.
|
||||||
|
// count int // # live cells == size of map. Must be first (used by len() builtin)
|
||||||
|
// flags uint8
|
||||||
|
// B uint8 // log_2 of # of buckets (can hold up to loadFactor * 2^B items)
|
||||||
|
// noverflow uint16 // approximate number of overflow buckets; see incrnoverflow for details
|
||||||
|
// hash0 uint32 // hash seed
|
||||||
|
// buckets unsafe.Pointer // array of 2^B Buckets. may be nil if count==0.
|
||||||
|
// oldbuckets unsafe.Pointer // previous bucket array of half the size, non-nil only when growing
|
||||||
|
// nevacuate uintptr // progress counter for evacuation (buckets less than this have been evacuated)
|
||||||
|
// extra *mapextra // optional fields
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserPromotion struct {
|
||||||
|
Automatic uint32 `json:"automatic"`
|
||||||
|
Promotion uint32 `json:"promotion"`
|
||||||
|
Shopper uint32 `json:"shopper"`
|
||||||
|
Date string `json:"date"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 店员推广续费会员
|
||||||
|
func TestUserAddress_Create(t *testing.T) {
|
||||||
|
InitTestDB()
|
||||||
|
InitDBProd()
|
||||||
|
DB = DBDev
|
||||||
|
contentTime, err := time.Parse(DateTimeFormat, "2023-02-01")
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err=?", err)
|
||||||
|
}
|
||||||
|
list := make([]UserPromotion, 0)
|
||||||
|
for i := 0; i < 6; i++ {
|
||||||
|
startTime := contentTime.AddDate(0, i*(-1), 0)
|
||||||
|
endTime := startTime.AddDate(0, -1, 0)
|
||||||
|
|
||||||
|
shopper, _ := NewUserInviteQuerySet(DB).CreatedAtLte(startTime).CreatedAtGte(endTime).SpendTypeEq(3).InviteFormEq(1).Count()
|
||||||
|
var userInvites []UserInvite
|
||||||
|
_ = NewUserInviteQuerySet(DB).CreatedAtLte(startTime).CreatedAtGte(endTime).SpendTypeEq(3).All(&userInvites)
|
||||||
|
|
||||||
|
promotion := &UserPromotion{
|
||||||
|
Automatic: 0,
|
||||||
|
Promotion: 0,
|
||||||
|
Shopper: uint32(shopper),
|
||||||
|
Date: endTime.Format("2006-01"),
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, invite := range userInvites {
|
||||||
|
if invite.InviteForm == 1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
var fund FundRecord
|
||||||
|
err := NewFundRecordQuerySet(DBProd).UidEq(invite.ToUid).FundTypeEq("member_fee").OrderDescByID().Limit(1).One(&fund)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
if fund.Amount == 34900 || fund.Amount == 59900 || fund.Amount == 200 {
|
||||||
|
promotion.Promotion += 1
|
||||||
|
} else {
|
||||||
|
promotion.Automatic += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
list = append(list, *promotion)
|
||||||
|
//fmt.Println("", promotion.Date, ",", promotion.Promotion, ",", promotion.Automatic, ",", promotion.Shopper)
|
||||||
|
}
|
||||||
|
|
||||||
|
file := excelize.NewFile()
|
||||||
|
streamWriter, err := file.NewStreamWriter("Sheet1")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
fileName := time.Now().Format(TimeFormat) + "店员推广续费会员数据" + ".xlsx"
|
||||||
|
style1 := &excelize.Style{
|
||||||
|
Border: []excelize.Border{{
|
||||||
|
Type: "left",
|
||||||
|
Color: "#000000",
|
||||||
|
Style: 1,
|
||||||
|
}},
|
||||||
|
Fill: excelize.Fill{
|
||||||
|
Type: "pattern",
|
||||||
|
Pattern: 1,
|
||||||
|
Color: []string{"#000000"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
styleId, err := file.NewStyle(style1)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
styleId, _ = file.NewStyle(`{"fill":{"type":"pattern","color":["#E0EBF5"],"pattern":1}}`)
|
||||||
|
title := []interface{}{"日期", "线上领券续费", "原价续费", "店员推广续费"}
|
||||||
|
cell, _ := excelize.CoordinatesToCellName(1, 1)
|
||||||
|
if err = streamWriter.SetRow(cell, title); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
fmt.Println("style:", styleId)
|
||||||
|
|
||||||
|
var row []interface{}
|
||||||
|
for rowId := 0; rowId < len(list); rowId++ {
|
||||||
|
row = []interface{}{list[rowId].Date, list[rowId].Promotion, list[rowId].Automatic, list[rowId].Shopper}
|
||||||
|
cell, _ := excelize.CoordinatesToCellName(1, rowId+2)
|
||||||
|
fmt.Println("cell", cell)
|
||||||
|
//name, err := excelize.CoordinatesToCellName(1, rowId+2)
|
||||||
|
//if err != nil {
|
||||||
|
// logger.Error("err:", err)
|
||||||
|
//}
|
||||||
|
//fmt.Println("ColumnNumberToName-----:", name)
|
||||||
|
|
||||||
|
if err := streamWriter.SetRow(cell, row); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
err = file.SetCellStyle("Sheet1", cell, cell, styleId)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := streamWriter.Flush(); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("fileName", fileName)
|
||||||
|
//if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil {
|
||||||
|
if err := file.SaveAs("./" + fileName); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGoodsStockFile(t *testing.T) {
|
||||||
|
file := excelize.NewFile()
|
||||||
|
//streamWriter, err := file.NewStreamWriter("Sheet1")
|
||||||
|
//if err != nil {
|
||||||
|
// fmt.Println(err)
|
||||||
|
//}
|
||||||
|
fileName := time.Now().Format(TimeFormat) + "店员推广续费会员数据" + ".xlsx"
|
||||||
|
styleBorder := &excelize.Style{
|
||||||
|
Border: []excelize.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,
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
styleFill := &excelize.Style{
|
||||||
|
Border: []excelize.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,
|
||||||
|
}},
|
||||||
|
Fill: excelize.Fill{
|
||||||
|
Type: "pattern",
|
||||||
|
Pattern: 1,
|
||||||
|
Color: []string{"E0EBF5"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
styleBorderId, err := file.NewStyle(styleBorder)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
styleFillId, err := file.NewStyle(styleFill)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
title := []interface{}{"日期", "线上领券续费", "原价续费", "店员推广续费"}
|
||||||
|
|
||||||
|
//if err = streamWriter.SetRow(cell, title); err != nil {
|
||||||
|
// fmt.Println(err)
|
||||||
|
//}
|
||||||
|
for i, _ := range title {
|
||||||
|
cell, _ := excelize.CoordinatesToCellName(1+i, 1)
|
||||||
|
err = file.SetCellValue("Sheet1", cell, title[i])
|
||||||
|
err = file.SetCellStyle("Sheet1", cell, cell, styleFillId)
|
||||||
|
//err = file.SetCellStyle("Sheet1", cell, cell, styleBorderId)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("style:", styleBorderId)
|
||||||
|
fmt.Println("style:", styleFillId)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
fmt.Println("fileName", fileName)
|
||||||
|
if err := file.SaveAs("./" + fileName); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拉新数据
|
||||||
|
func TestOrderCardUserRentCard(t *testing.T) {
|
||||||
|
InitDBProd()
|
||||||
|
DB = DBProd
|
||||||
|
var cards []OrderCard
|
||||||
|
err := DBProd.Raw("SELECT * FROM order_card WHERE uid IN (41062552,61322858,79502493,5151314,75683046,92301496,84098843) AND card_status IN (2,3,4);").Scan(&cards).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
userOrderMap := make(map[uint32]OrderCard, 0)
|
||||||
|
//storeMap := make(map[uint32]Store, 0)
|
||||||
|
storeIds := make([]uint32, 0, len(cards))
|
||||||
|
gameIds := make([]uint32, 0, len(cards))
|
||||||
|
userIds := make([]uint32, 0, len(cards))
|
||||||
|
|
||||||
|
for i, _ := range cards {
|
||||||
|
if cards[i].CardStatus == 4 {
|
||||||
|
var userOrder OrderCard
|
||||||
|
//err = NewOrderCardQuerySet(DBProd.Debug()).SerialNumberEq(cards[i].SerialNumber).CreatedAtGt(cards[i].RevertTime).OrderAscByID().Limit(1).One(&userOrder)
|
||||||
|
err = NewOrderCardQuerySet(DBProd.Debug()).SerialNumberEq(cards[i].SerialNumber).CreatedAtGt(cards[i].DeliveryTime).OrderAscByID().Limit(1).One(&userOrder)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
userOrderMap[cards[i].ID] = userOrder
|
||||||
|
userIds = append(userIds, userOrder.Uid)
|
||||||
|
if cards[i].ID == 16395 {
|
||||||
|
fmt.Println("userOrder", userOrder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
storeIds = append(storeIds, cards[i].StoreId)
|
||||||
|
gameIds = append(gameIds, cards[i].GameCardId)
|
||||||
|
}
|
||||||
|
storeMap, err := GetStoreMap(storeIds)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
gameMap := GetGameCardMap(gameIds)
|
||||||
|
userMap, _ := GetUserMap(userIds)
|
||||||
|
file := excelize.NewFile()
|
||||||
|
streamWriter, err := file.NewStreamWriter("Sheet1")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fileName := time.Now().Format(TimeFormat) + "锁卡订单数据" + ".xlsx"
|
||||||
|
|
||||||
|
title := []interface{}{"订单id", "门店id", "门店名称", "游戏id", "游戏名称", "游戏卡编码", "锁卡时间", "订单状态", "还卡时间", "借卡用户uid", "开通会员时间", "是否拉新"}
|
||||||
|
cell, _ := excelize.CoordinatesToCellName(1, 1)
|
||||||
|
if err = streamWriter.SetRow(cell, title); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
list := cards
|
||||||
|
var row []interface{}
|
||||||
|
for rowId := 0; rowId < len(list); rowId++ {
|
||||||
|
store, _ := storeMap[list[rowId].StoreId]
|
||||||
|
gameCard := gameMap[list[rowId].GameCardId]
|
||||||
|
userOrder, _ := userOrderMap[list[rowId].ID]
|
||||||
|
userInfo := userMap[userOrder.Uid]
|
||||||
|
if userInfo == nil {
|
||||||
|
userInfo = &User{}
|
||||||
|
}
|
||||||
|
if userInfo == nil {
|
||||||
|
fmt.Println("---------------userInfo")
|
||||||
|
}
|
||||||
|
|
||||||
|
row = []interface{}{list[rowId].ID, store.ID, store.Name, list[rowId].GameCardId, gameCard.Name, list[rowId].SerialNumber,
|
||||||
|
list[rowId].CreatedAt.Format(TimeFormat), GetOrderStatus(list[rowId].CardStatus), list[rowId].DeliveryTime.Format(TimeFormat),
|
||||||
|
userOrder.Uid, GetUserOpenMemberTime(userInfo.OpenMemberTime), IsPullingNew(userInfo.OpenMemberTime, list[rowId].DeliveryTime),
|
||||||
|
}
|
||||||
|
cell, _ := excelize.CoordinatesToCellName(1, rowId+2)
|
||||||
|
if err := streamWriter.SetRow(cell, row); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := streamWriter.Flush(); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
//if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil {
|
||||||
|
if err := file.SaveAs("./" + fileName); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGameCardMap(ids []uint32) map[uint32]GameCard {
|
||||||
|
gameMap := make(map[uint32]GameCard, 0)
|
||||||
|
if len(ids) == 0 {
|
||||||
|
return gameMap
|
||||||
|
}
|
||||||
|
var games []GameCard
|
||||||
|
err := NewGameCardQuerySet(DBProd).IDIn(ids...).All(&games)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err:", err)
|
||||||
|
}
|
||||||
|
for i, _ := range games {
|
||||||
|
gameMap[games[i].ID] = games[i]
|
||||||
|
}
|
||||||
|
return gameMap
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetOrderStatus(status uint32) string {
|
||||||
|
switch status {
|
||||||
|
case 2:
|
||||||
|
return "游玩中"
|
||||||
|
case 3:
|
||||||
|
return "归还中"
|
||||||
|
case 4:
|
||||||
|
return "已完成"
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsPullingNew(open, revert time.Time) string {
|
||||||
|
if open.AddDate(0, 1, 0).After(revert) {
|
||||||
|
return "是"
|
||||||
|
} else {
|
||||||
|
return "否"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUserOpenMemberTime(open time.Time) string {
|
||||||
|
if open.IsZero() {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
return open.Format(TimeFormat)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type OpenMember struct {
|
||||||
|
Last int `json:"last"`
|
||||||
|
Now int `json:"now"`
|
||||||
|
Date string `json:"date"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUserMember(t *testing.T) {
|
||||||
|
//InitTestDB()
|
||||||
|
InitDBProd()
|
||||||
|
DB = DBProd
|
||||||
|
contentTime, err := time.Parse(DateTimeFormat, "2023-02-01")
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("err=?", err)
|
||||||
|
}
|
||||||
|
list := make([]OpenMember, 0)
|
||||||
|
for i := 0; i < 6; i++ {
|
||||||
|
startTime := contentTime.AddDate(0, i*(-1), 0)
|
||||||
|
endTime := startTime.AddDate(0, -1, 0)
|
||||||
|
|
||||||
|
countNow, _ := NewUserQuerySet(DBProd).OpenMemberTimeGte(endTime).OpenMemberTimeLte(startTime).MemberLevelIn(2, 4, 5).Count()
|
||||||
|
|
||||||
|
countLast, _ := NewUserQuerySet(DBProd).OpenMemberTimeGte(endTime.AddDate(-1, 0, 0)).
|
||||||
|
OpenMemberTimeLte(startTime.AddDate(-1, 0, 0)).MemberLevelIn(2, 4, 5).Count()
|
||||||
|
list = append(list, OpenMember{
|
||||||
|
Last: countLast,
|
||||||
|
Now: countNow,
|
||||||
|
Date: endTime.Format("2006-01"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
file := excelize.NewFile()
|
||||||
|
streamWriter, err := file.NewStreamWriter("Sheet1")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fileName := time.Now().Format(TimeFormat) + "去年同期会员" + ".xlsx"
|
||||||
|
|
||||||
|
title := []interface{}{"日期", "黄金会员(去年)", "黄金会员(今年)"}
|
||||||
|
cell, _ := excelize.CoordinatesToCellName(1, 1)
|
||||||
|
if err = streamWriter.SetRow(cell, title); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
var row []interface{}
|
||||||
|
for rowId := 0; rowId < len(list); rowId++ {
|
||||||
|
|
||||||
|
row = []interface{}{GetMonth(list[rowId].Date), list[rowId].Last, list[rowId].Now}
|
||||||
|
cell, _ := excelize.CoordinatesToCellName(1, rowId+2)
|
||||||
|
if err := streamWriter.SetRow(cell, row); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := streamWriter.Flush(); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
//if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil {
|
||||||
|
if err := file.SaveAs("./" + fileName); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetMonth(date string) string {
|
||||||
|
return date[len(date)-2:] + "月份"
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNameSunHash(t *testing.T) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -291,6 +291,10 @@ func ConfigAppRouter(r gin.IRouter) {
|
||||||
retail.POST("order_detail", controller.ErpOrderDetail)
|
retail.POST("order_detail", controller.ErpOrderDetail)
|
||||||
retail.POST("shop_assistant_list", controller.ShopAssistantList)
|
retail.POST("shop_assistant_list", controller.ShopAssistantList)
|
||||||
retail.POST("order_audit", controller.ErpOrderAudit)
|
retail.POST("order_audit", controller.ErpOrderAudit)
|
||||||
|
retail.POST("cashier_store_list", controller.ErpCashierStoreList)
|
||||||
|
retail.POST("order_del", controller.ErpOrderDel)
|
||||||
|
retail.POST("user_info/list", controller.UserInfoList)
|
||||||
|
retail.POST("commodity_list", controller.ErpCommodityList)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user