From 39a1f1f028b7881c72609e9e8c293971eca896e1 Mon Sep 17 00:00:00 2001 From: li Date: Thu, 9 Feb 2023 16:59:06 +0800 Subject: [PATCH] fix: --- controller/erp_retail.go | 154 +++++++++++++- model/commodity.go | 127 ++++++++++++ model/erp_retail_order.go | 4 +- model/model_test.go | 425 +++++++++++++++++++++++++++++++++++++- router/router_app.go | 4 + 5 files changed, 710 insertions(+), 4 deletions(-) diff --git a/controller/erp_retail.go b/controller/erp_retail.go index 5b34dbe..dfb9cbc 100644 --- a/controller/erp_retail.go +++ b/controller/erp_retail.go @@ -265,6 +265,7 @@ func ErpOrderCommodityList(c *gin.Context) { req := &struct { Tel string `json:"tel"` IMEI string `json:"imei"` + ErpCategoryId uint32 `json:"erp_category_id"` ErpCommodityName string `json:"erp_commodity_name"` }{} if err := c.ShouldBindJSON(&req); err != nil { @@ -284,6 +285,10 @@ func ErpOrderCommodityList(c *gin.Context) { if 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 if err != nil { logger.Error("erp commodity list err:", err) @@ -344,7 +349,7 @@ func ErpOrderAudit(c *gin.Context) { }{} if err := c.ShouldBindJSON(&req); err != nil { logger.Error(err) - RespJson(c, status.InternalServerError, nil) + RespJson(c, status.BadRequest, nil) return } @@ -358,3 +363,150 @@ func ErpOrderAudit(c *gin.Context) { RespOK(c, nil) 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 +} diff --git a/model/commodity.go b/model/commodity.go index c03c862..6f3d146 100644 --- a/model/commodity.go +++ b/model/commodity.go @@ -1,6 +1,9 @@ package model import ( + "fmt" + "github.com/codinl/go-logger" + "github.com/xuri/excelize/v2" "time" ) @@ -182,6 +185,130 @@ type ErpInventoryStockCommodity struct { // 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() { // if c.ErpCategoryId != 0 { // if c.ErpCategory == nil { diff --git a/model/erp_retail_order.go b/model/erp_retail_order.go index ca4526b..725387d 100644 --- a/model/erp_retail_order.go +++ b/model/erp_retail_order.go @@ -136,7 +136,7 @@ func (m *ErpOrderListReq) List() (*ErpOrderListResp, error) { if m.StartTime != "" { parse, err := time.Parse(DateTimeFormat, m.StartTime) if err != nil { - logger.Errorf("err:", err) + logger.Error("err:", err) //return users, 0, err } qs = qs.Where("created_at > ?", parse) @@ -144,7 +144,7 @@ func (m *ErpOrderListReq) List() (*ErpOrderListResp, error) { if m.EndTime != "" { parse, err := time.Parse(DateTimeFormat, m.EndTime) if err != nil { - logger.Errorf("err:", err) + logger.Error("err:", err) //return users, 0, err } parse = parse.AddDate(0, 0, 1) diff --git a/model/model_test.go b/model/model_test.go index 27a3279..f79199f 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -22,7 +22,6 @@ import ( "os" "sort" "strconv" - //"github.com/andreburgaud/crypt2go/ecb" //"github.com/andreburgaud/crypt2go/padding" "github.com/codinl/go-logger" @@ -2158,3 +2157,427 @@ func TestUnicode(t *testing.T) { 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) { + +} diff --git a/router/router_app.go b/router/router_app.go index 566b83c..b3270c0 100644 --- a/router/router_app.go +++ b/router/router_app.go @@ -291,6 +291,10 @@ func ConfigAppRouter(r gin.IRouter) { retail.POST("order_detail", controller.ErpOrderDetail) retail.POST("shop_assistant_list", controller.ShopAssistantList) 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) } }