From bc5a7065b3393d6dd99411b54e91f90e3a4636ce Mon Sep 17 00:00:00 2001 From: chenlin Date: Fri, 5 Jul 2024 15:39:36 +0800 Subject: [PATCH 1/6] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E9=9B=B6=E5=94=AE?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E5=AF=BC=E5=87=BAexcel=E6=B1=87=E6=80=BB?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=8D=E5=87=86=E7=A1=AE=E7=9A=84=E7=BC=BA?= =?UTF-8?q?=E9=99=B7=EF=BC=9B=202.=E4=BF=AE=E6=94=B9=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=97=B6=E5=91=98=E5=B7=A5=E6=88=90=E6=9C=AC?= =?UTF-8?q?=E4=BB=B7=E6=A0=A1=E9=AA=8C=EF=BC=8C=E5=8F=AF=E4=BB=A5=3D0?= =?UTF-8?q?=EF=BC=9B=203.=E9=80=9A=E8=BF=87=E5=90=8D=E7=A7=B0=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E6=9F=A5=E8=AF=A2=E5=BA=93=E5=AD=98=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=97=B6=E8=AE=A2=E5=8D=95=E6=94=AF=E4=BB=98=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=BD=AE=E4=B8=BA0=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/models/erp_order.go | 22 ++++++++++++++-------- app/admin/models/file.go | 10 +++++----- app/admin/models/game_card.go | 1 + 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/admin/models/erp_order.go b/app/admin/models/erp_order.go index 59d9d0b..663a73b 100644 --- a/app/admin/models/erp_order.go +++ b/app/admin/models/erp_order.go @@ -3040,7 +3040,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string, return "", errors.New("RetailMarginDataExport, 订单类型异常:" + list[i].RetailType) } - commodityIdMap := make(map[uint32]bool) + orderFlag := false // 先判断商品数量,确定要写几行数据 for rowId := 0; rowId < len(list[i].Commodities); rowId++ { if list[i].RetailType == RetailTypeSale { @@ -3083,8 +3083,8 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string, } // 单个订单的汇总数据只记录一次 - if !commodityIdMap[list[i].Commodities[rowId].ErpCommodityId] { - commodityIdMap[list[i].Commodities[rowId].ErpCommodityId] = true + if !orderFlag { + orderFlag = true salesMan := "" nSalesProfitPer := 0.0 nStaffProfitPer := 0.0 @@ -3562,11 +3562,17 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp sumData.TotalAmount = 0 // 订单实收金额 sumData.StorePer = 0 // 门店提成 - sumData.ScanAmount = cashier.ScanAmount - sumData.CashAmount = cashier.CashAmount - sumData.PosAmount = cashier.PosAmount - sumData.StoreVmAmount = cashier.StoreVmAmount - sumData.OtherAmount = cashier.OtherAmount + //sumData.ScanAmount = cashier.ScanAmount + //sumData.CashAmount = cashier.CashAmount + //sumData.PosAmount = cashier.PosAmount + //sumData.StoreVmAmount = cashier.StoreVmAmount + //sumData.OtherAmount = cashier.OtherAmount + + sumData.ScanAmount = 0 + sumData.CashAmount = 0 + sumData.PosAmount = 0 + sumData.StoreVmAmount = 0 + sumData.OtherAmount = 0 var result []RetailDetailByJoin diff --git a/app/admin/models/file.go b/app/admin/models/file.go index 10a8c2e..953775c 100644 --- a/app/admin/models/file.go +++ b/app/admin/models/file.go @@ -531,11 +531,11 @@ func checkStockExcel(sheetCols [][]string) error { // } //} - if i < len(sheetCols[5]) { - if employeeCost, err := strconv.ParseFloat(sheetCols[5][i], 64); err != nil || employeeCost <= 0 { - return errors.New("第" + strconv.Itoa(i+1) + "行员工成本价必须是大于0的数字") - } - } + //if i < len(sheetCols[5]) { + // if employeeCost, err := strconv.ParseFloat(sheetCols[5][i], 64); err != nil || employeeCost <= 0 { + // return errors.New("第" + strconv.Itoa(i+1) + "行员工成本价必须是大于0的数字") + // } + //} // 供应商不能为空 if i < len(sheetCols[6]) { diff --git a/app/admin/models/game_card.go b/app/admin/models/game_card.go index f99433b..b6f5ce3 100644 --- a/app/admin/models/game_card.go +++ b/app/admin/models/game_card.go @@ -1534,6 +1534,7 @@ func MemberExpirationReminderDay(days int64) { } } +// ExpireMemberSMSSend 用户过期如果一直不还卡,最多会收到12条短信,过期超过3个月就不会发送了 func ExpireMemberSMSSend() { nowTime := time.Now() days := []uint32{1, 2, 3, 4, 5, 6, 7, 14, 21, 28, 60, 90} From b750b191999d2246f8da8ada8d293baa892ee07c Mon Sep 17 00:00:00 2001 From: chenlin Date: Mon, 8 Jul 2024 10:47:28 +0800 Subject: [PATCH 2/6] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=90=8E=E5=90=8C=E6=AD=A5=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E5=95=86=E5=93=81=E7=9A=84=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=9B=202.=E4=BF=AE=E6=94=B9=E6=89=AB?= =?UTF-8?q?=E7=A0=81=E4=BB=98=E6=9F=A5=E8=AF=A2=E8=AE=A2=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E5=95=86=E6=88=B7=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E8=BF=AA=E4=B8=BA=E5=95=86=E6=88=B7=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/pay/wx_pay.go | 51 +++++++++++-------------------- app/admin/apis/pay/wx_pay_test.go | 4 +-- app/admin/models/store.go | 42 ++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 37 deletions(-) diff --git a/app/admin/apis/pay/wx_pay.go b/app/admin/apis/pay/wx_pay.go index 18bbde0..486a753 100644 --- a/app/admin/apis/pay/wx_pay.go +++ b/app/admin/apis/pay/wx_pay.go @@ -699,7 +699,7 @@ type HmPayUnifiedOrderRsp struct { } func ParsePrivateKeyDeovo() (*rsa.PrivateKey, error) { - //fp := "/Users/max/Documents/code/deovo/mh_goadmin_server/config/hm_pay/private_key.pem" + //fp := "/Users/max/Documents/code/deovo/mh_goadmin_server/config/hm_pay/deovo_private_key.pem" fp := "./config/hm_pay/deovo_private_key.pem" privateKey, err := os.ReadFile(fp) if err != nil { @@ -1063,7 +1063,7 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode if config.ApplicationConfig.Mode == "dev" { biz.CreateIp = clientIpDev - publicPara.AppId = HmPayMerchantId + biz.TerminalId = "test999" // 测试终端 } unifiedOrderReq.HmPayPublicPara = publicPara @@ -1080,21 +1080,12 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode return nil, err } - if config.ApplicationConfig.Mode == "dev" { - sign, err := GenHmPaySign(m) - if err != nil { - logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err)) - return nil, err - } - unifiedOrderReq.Sign = sign - } else { - sign, err := GenHmPaySignDeovo(m) - if err != nil { - logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err)) - return nil, err - } - unifiedOrderReq.Sign = sign + sign, err := GenHmPaySignDeovo(m) + if err != nil { + logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err)) + return nil, err } + unifiedOrderReq.Sign = sign unifiedOrderResp, err := HmPayUnifiedOrder(unifiedOrderReq) if err != nil { @@ -1108,18 +1099,10 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode return nil, err } - if config.ApplicationConfig.Mode == "dev" { - err = HmVerifySha1Rsa(signContent, unifiedOrderResp.Sign) - if err != nil { - logger.Errorf("HmVerifySha1Rsa err:", err) - return nil, err - } - } else { - err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign) - if err != nil { - logger.Errorf("HmVerifySha1Rsa err:", err) - return nil, err - } + err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign) + if err != nil { + logger.Errorf("HmVerifySha1Rsa err:", err) + return nil, err } //fmt.Println("unifiedOrderResp:", unifiedOrderResp.Data) @@ -1141,7 +1124,7 @@ func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) { unifiedOrderReq := HmJsPayUnifiedOrderReq{} publicPara := HmPayPublicPara{ - AppId: HmPayMerchantId, + AppId: HmPayMerchantIdDeovo, Method: "trade.query", SignType: "RSA", Sign: "", @@ -1166,7 +1149,7 @@ func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) { return nil, err } - sign, err := GenHmPaySign(m) + sign, err := GenHmPaySignDeovo(m) if err != nil { logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err)) return nil, err @@ -1184,7 +1167,7 @@ func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) { logger.Errorf("ToSignContent err:", err) return nil, err } - err = HmVerifySha1Rsa(signContent, unifiedOrderResp.Sign) + err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign) if err != nil { logger.Errorf("HmVerifySha1Rsa err:", err) return nil, err @@ -1210,7 +1193,7 @@ func HmCancelOrder(orderId string) (*HmPayTradeCancelResp, error) { unifiedOrderReq := HmJsPayUnifiedOrderReq{} publicPara := HmPayPublicPara{ - AppId: HmPayMerchantId, + AppId: HmPayMerchantIdDeovo, Method: "trade.cancel", SignType: "RSA", Sign: "", @@ -1235,7 +1218,7 @@ func HmCancelOrder(orderId string) (*HmPayTradeCancelResp, error) { return nil, err } - sign, err := GenHmPaySign(m) + sign, err := GenHmPaySignDeovo(m) if err != nil { logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err)) return nil, err @@ -1253,7 +1236,7 @@ func HmCancelOrder(orderId string) (*HmPayTradeCancelResp, error) { logger.Errorf("ToSignContent err:", err) return nil, err } - err = HmVerifySha1Rsa(signContent, unifiedOrderResp.Sign) + err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign) if err != nil { logger.Errorf("HmVerifySha1Rsa err:", err) return nil, err diff --git a/app/admin/apis/pay/wx_pay_test.go b/app/admin/apis/pay/wx_pay_test.go index 9b09149..8ede688 100644 --- a/app/admin/apis/pay/wx_pay_test.go +++ b/app/admin/apis/pay/wx_pay_test.go @@ -31,7 +31,7 @@ func TestHmJsPayBToCOrder(t *testing.T) { authCode := "6264900646139788518" notifyUrl := "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice" - order, err := HmJsPayBToCOrder(orderId, totalFee, authCode, notifyUrl) + order, err := HmJsPayBToCOrder(13, orderId, totalFee, authCode, notifyUrl) if err != nil { fmt.Println("err:", err) } @@ -41,7 +41,7 @@ func TestHmJsPayBToCOrder(t *testing.T) { // 查询 func TestHmQueryOrder(t *testing.T) { - orderId := "sale2023122225067733" + orderId := "sale2024070651813719" order, err := HmQueryOrder(orderId) if err != nil { diff --git a/app/admin/models/store.go b/app/admin/models/store.go index 4c3414f..c203a9e 100644 --- a/app/admin/models/store.go +++ b/app/admin/models/store.go @@ -183,11 +183,51 @@ func (m *Store) Add() error { func (m *Store) Modify() error { para := m.getModifyPara() if len(para) > 0 { - err := orm.Eloquent.Table(m.TableName()).Unscoped().Where("id", m.ID).Updates(para).Error + // 查询门店信息 + oldStoreInfo, err := GetStore(m.ID) if err != nil { + logger.Errorf("GetStore err:", logger.Field("err", err)) + return err + } + + begin := orm.Eloquent.Begin() + err = begin.Table(m.TableName()).Unscoped().Where("id", m.ID).Updates(para).Error + if err != nil { + begin.Rollback() logger.Errorf("err:", logger.Field("err", err)) return err } + + if oldStoreInfo.Name != m.Name { + // 更新库存表 + err = begin.Table("erp_stock").Where("store_id=?", m.ID). + Updates(map[string]interface{}{ + "store_name": m.Name, + }).Error + if err != nil { + begin.Rollback() + logger.Error("Update erp_stock err:", logger.Field("err", err)) + return err + } + + // 更新库存详情表 + err = begin.Table("erp_stock_commodity").Where("store_id=?", m.ID). + Updates(map[string]interface{}{ + "store_name": m.Name, + }).Error + if err != nil { + begin.Rollback() + logger.Error("Update erp_stock_commodity err:", logger.Field("err", err)) + return err + } + } + + err = begin.Commit().Error + if err != nil { + begin.Rollback() + logger.Error("commit err:", logger.Field("err", err)) + return err + } } return nil } From 26bd09bf1d238a6667089974f1ffa943a26c55d8 Mon Sep 17 00:00:00 2001 From: chenlin Date: Tue, 9 Jul 2024 11:43:59 +0800 Subject: [PATCH 3/6] =?UTF-8?q?1.=E5=AF=B9=E9=9B=B6=E5=94=AE=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=9F=A5=E8=AF=A2=E7=9A=84=E6=95=B0=E6=8D=AE=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E6=8E=92=E5=BA=8F=EF=BC=8C=E6=8C=89=E7=85=A7=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E6=97=B6=E9=97=B4=E9=99=8D=E5=BA=8F=E6=8E=92=E5=88=97?= =?UTF-8?q?=EF=BC=9B=202.=E7=A7=9F=E8=B5=81=E8=AE=A2=E5=8D=95=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E9=97=A8=E5=BA=97=E6=9D=83=E9=99=90=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E8=BF=94=E5=9B=9E=E5=AF=B9=E5=BA=94=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E7=9A=84=E5=8F=91=E8=B4=A7=E5=92=8C=E8=A7=84=E5=88=92=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E6=8D=AE=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/pay/wx_pay_test.go | 2 +- app/admin/models/erp_order.go | 5 ++++ app/admin/models/order.go | 49 +++++++++++++++++-------------- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/app/admin/apis/pay/wx_pay_test.go b/app/admin/apis/pay/wx_pay_test.go index 8ede688..2af27d9 100644 --- a/app/admin/apis/pay/wx_pay_test.go +++ b/app/admin/apis/pay/wx_pay_test.go @@ -41,7 +41,7 @@ func TestHmJsPayBToCOrder(t *testing.T) { // 查询 func TestHmQueryOrder(t *testing.T) { - orderId := "sale2024070651813719" + orderId := "sale2024070569804727" order, err := HmQueryOrder(orderId) if err != nil { diff --git a/app/admin/models/erp_order.go b/app/admin/models/erp_order.go index 663a73b..bf9f3fb 100644 --- a/app/admin/models/erp_order.go +++ b/app/admin/models/erp_order.go @@ -3757,6 +3757,11 @@ func packData(result []RetailDetailByJoin) []ErpOrder { orders = append(orders, item) } + // 根据AuditTime进行降序排序 + sort.SliceStable(orders, func(i, j int) bool { + return orders[i].AuditTime.After(*orders[j].AuditTime) + }) + return orders } diff --git a/app/admin/models/order.go b/app/admin/models/order.go index 2dc8bae..0cfc637 100644 --- a/app/admin/models/order.go +++ b/app/admin/models/order.go @@ -18,7 +18,6 @@ import ( "go-admin/tools" "go-admin/tools/config" "golang.org/x/sync/errgroup" - "gorm.io/gorm" "time" ) @@ -232,6 +231,7 @@ func (m *OrderListReq) List(exportFlag int, c *gin.Context) ([]Order, int64, str func (m *OrderListReq) queryListFormOrderCard(exportFlag int, c *gin.Context) ([]Order, int64, error) { var orderCards []OrderCard orders := make([]Order, 0) + qs := orm.Eloquent.Table("order_card").Where("card_status=?", m.CardStatus) // 非管理员才判断所属门店 @@ -250,9 +250,9 @@ func (m *OrderListReq) queryListFormOrderCard(exportFlag int, c *gin.Context) ([ } else { if len(storeList) > 0 { if len(storeList) == 1 { - qs = qs.Where("store_id = ?", storeList[0]) + qs = qs.Where("store_id = ? OR revert_store_id = ?", storeList[0], storeList[0]) } else { - qs = qs.Where("store_id IN (?)", storeList) + qs = qs.Where("store_id IN (?) OR revert_store_id IN (?)", storeList, storeList) } } else { return nil, 0, errors.New("用户未绑定门店") @@ -276,7 +276,7 @@ func (m *OrderListReq) queryListFormOrderCard(exportFlag int, c *gin.Context) ([ } if m.StoreId != 0 { // 门店id,共有 - qs = qs.Where("store_id", m.StoreId) + qs = qs.Where("store_id = ? OR revert_store_id = ?", m.StoreId, m.StoreId) } if !m.StartTime.IsZero() { // 共有 fmt.Println("起始时间:", m.StartTime.Unix()) @@ -365,8 +365,13 @@ func (m *OrderListReq) queryListFormOrder(exportFlag int, c *gin.Context) ([]Ord if m.PageSize == 0 { m.PageSize = 10 } - var qs *gorm.DB - qs = orm.Eloquent.Table("order").Where("pay_status", 2) + + qs := orm.Eloquent.Table("order").Select("DISTINCT `order`.*").Joins("JOIN order_card ON order.id = order_card.order_id"). + Where("order.pay_status = ?", 2) + + orderQs := orm.Eloquent.Table("(?) as unique_orders", qs).Order("unique_orders.created_at DESC") + + //qs = orm.Eloquent.Table("order").Where("pay_status", 2) // 非管理员才判断所属门店 if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { @@ -384,9 +389,9 @@ func (m *OrderListReq) queryListFormOrder(exportFlag int, c *gin.Context) ([]Ord } else { if len(storeList) > 0 { if len(storeList) == 1 { - qs = qs.Where("store_id = ?", storeList[0]) + qs = qs.Where("order.store_id = ? OR order_card.revert_store_id = ?", storeList[0], storeList[0]) } else { - qs = qs.Where("store_id IN (?)", storeList) + qs = qs.Where("order.store_id IN (?) OR order_card.revert_store_id IN (?)", storeList, storeList) } } else { return nil, 0, errors.New("用户未绑定门店") @@ -410,46 +415,46 @@ func (m *OrderListReq) queryListFormOrder(exportFlag int, c *gin.Context) ([]Ord orderIds = append(orderIds, orderCards[i].OrderId) } - qs = qs.Where("id in (?)", orderIds) + qs = qs.Where("order.id in (?)", orderIds) } if m.PickupCode != "" { isDeliver = false - qs = qs.Where("pickup_code", m.PickupCode) + qs = qs.Where("order.pickup_code", m.PickupCode) } if m.PayStatus != 0 { - qs = qs.Where("pay_status", m.PayStatus) + qs = qs.Where("order.pay_status", m.PayStatus) } if m.DeliveryType != 0 { - qs = qs.Where("delivery_type", m.DeliveryType) + qs = qs.Where("order.delivery_type", m.DeliveryType) } if m.OrderId != 0 { isDeliver = false - qs = qs.Where("id", m.OrderId) + qs = qs.Where("order.id", m.OrderId) } if isDeliver { if m.Uid != 0 { - qs = qs.Where("uid", m.Uid) + qs = qs.Where("order.uid", m.Uid) } if m.GameCardId != 0 { - qs = qs.Where("game_card_id", m.GameCardId) + qs = qs.Where("order.game_card_id", m.GameCardId) } if m.StoreId != 0 { - qs = qs.Where("store_id", m.StoreId) + qs = qs.Where("order.store_id = ? OR order_card.revert_store_id = ?", m.StoreId, m.StoreId) } if !m.StartTime.IsZero() { fmt.Println("起始时间:", m.StartTime.Unix()) - qs = qs.Where("created_at > ?", m.StartTime) + qs = qs.Where("order.created_at > ?", m.StartTime) } if !m.EndTime.IsZero() { fmt.Println("时间:", m.StartTime.Unix()) - qs = qs.Where("created_at < ?", m.EndTime) + qs = qs.Where("order.created_at < ?", m.EndTime) } } var count int64 - err := qs.Count(&count).Error + err := orderQs.Count(&count).Error if err != nil { logger.Errorf("err:", logger.Field("err", err)) return nil, 0, err @@ -462,11 +467,11 @@ func (m *OrderListReq) queryListFormOrder(exportFlag int, c *gin.Context) ([]Ord } if exportFlag == 1 { //一次性导出excel - qs = qs.Preload("User").Order("created_at DESC") + orderQs = orderQs.Preload("User") } else { - qs = qs.Preload("User").Order("created_at DESC").Offset(page * pageSize).Limit(pageSize) + orderQs = orderQs.Preload("User").Offset(page * pageSize).Limit(pageSize) } - err = qs.Find(&orders).Error + err = orderQs.Find(&orders).Error if err != nil { logger.Errorf("err:", logger.Field("err", err)) return nil, 0, err From d5f4e618c422751fcb5cbb03d8c98244c0a6e2f1 Mon Sep 17 00:00:00 2001 From: chenlin Date: Tue, 9 Jul 2024 19:05:18 +0800 Subject: [PATCH 4/6] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E9=9B=B6=E5=94=AE?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AE=A1=E6=A0=B8=E6=9B=B4=E6=96=B0=E9=9D=9E?= =?UTF-8?q?=E4=B8=B2=E7=A0=81=E5=95=86=E5=93=81=E5=BA=93=E5=AD=98=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97=E6=8E=92?= =?UTF-8?q?=E6=9F=A5=E5=BA=93=E5=AD=98=E4=B8=8D=E7=AC=A6=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/models/erp_order.go | 15 +++++++++++---- app/admin/models/inventory_change.go | 4 ++-- test/stock_test.go | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/admin/models/erp_order.go b/app/admin/models/erp_order.go index bf9f3fb..f255bed 100644 --- a/app/admin/models/erp_order.go +++ b/app/admin/models/erp_order.go @@ -803,6 +803,7 @@ func stringToIntArray(str string) ([]uint32, error) { // 更新零售订单商品表的库存商品表主键id字段 func updateErpStockCommodityID(gdb *gorm.DB, id uint32, nIdList []uint32) error { + fmt.Println("nIdList is:", nIdList) strId := intArrayToString(nIdList) // 查找在库的非串码商品 @@ -829,8 +830,8 @@ func updateErpStockCommodityID(gdb *gorm.DB, id uint32, nIdList []uint32) error return nil } -// 找一个可用的库存商品表主键ID -func findRightErpStockCommodityId(idList map[uint32][]uint32, commodityId uint32, stockCommodity []ErpStockCommodity) (uint32, error) { +// FindRightErpStockCommodityId 找一个可用的库存商品表主键ID +func FindRightErpStockCommodityId(idList map[uint32][]uint32, commodityId uint32, stockCommodity []ErpStockCommodity) (uint32, error) { // 获取给定商品ID对应的ID列表 existingIds, ok := idList[commodityId] if !ok || len(existingIds) == 0 { @@ -967,12 +968,18 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error { } // 找一个可用的库存商品表主键ID,使用零售商品表的主键ID作为key - rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList, + rightId, err := FindRightErpStockCommodityId(usedStockCommodityIdList, commodities[i].ErpCommodityId, stockCommodity) if err != nil { return err } + logger.Info("rightId is:", logger.Field("rightId", rightId)) + if rightId == 0 { + logger.Error("rightId is 0") + return errors.New("查询商品库存出错") + } + // 优先出库库存时间最长的数据 err = gdb.Table("erp_stock_commodity").Where("id = ?", rightId). Updates(map[string]interface{}{"state": state}).Error // 状态更新为销售锁定中;反审核则更新为在库 @@ -1057,7 +1064,7 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error { } // 找一个可用的库存商品表主键ID - rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList, + rightId, err := FindRightErpStockCommodityId(usedStockCommodityIdList, commodities[i].ErpCommodityId, stockCommodity) if err != nil { return err diff --git a/app/admin/models/inventory_change.go b/app/admin/models/inventory_change.go index 81b91c1..5d4a77b 100644 --- a/app/admin/models/inventory_change.go +++ b/app/admin/models/inventory_change.go @@ -818,7 +818,7 @@ func handleInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) er } // 找一个可用的库存商品表主键ID - rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList, + rightId, err := FindRightErpStockCommodityId(usedStockCommodityIdList, trimCommodities[i].CommodityId, stockCommodity) if err != nil { return err @@ -1008,7 +1008,7 @@ func handleCancelInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrd } // 找一个可用的库存商品表主键ID - rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList, + rightId, err := FindRightErpStockCommodityId(usedStockCommodityIdList, trimCommodities[i].CommodityId, stockCommodity) if err != nil { return err diff --git a/test/stock_test.go b/test/stock_test.go index 1a502f5..68015ef 100644 --- a/test/stock_test.go +++ b/test/stock_test.go @@ -52,6 +52,24 @@ func TestStock(t *testing.T) { } +func TestFindRightErpStockCommodityId(t *testing.T) { + + usedStockCommodityIdList := make(map[uint32][]uint32) + commodityId := 23 + var stockCommodity []models.ErpStockCommodity + //stockCommodity1 := models.ErpStockCommodity{} + //stockCommodity1.ID = 4350 + // + //stockCommodity2 := models.ErpStockCommodity{} + //stockCommodity2.ID = 4351 + // + //stockCommodity = append(stockCommodity, stockCommodity1) + //stockCommodity = append(stockCommodity, stockCommodity2) + + rightId, _ := models.FindRightErpStockCommodityId(usedStockCommodityIdList, uint32(commodityId), stockCommodity) + fmt.Println("rightId is:", rightId) +} + func TestSetGameCardStock(t *testing.T) { SetGameCardStock() } From b669654f7e5be3f5671b458572aa5d76d90e938d Mon Sep 17 00:00:00 2001 From: chenlin Date: Wed, 10 Jul 2024 15:24:34 +0800 Subject: [PATCH 5/6] =?UTF-8?q?1.=E5=BA=93=E5=AD=98=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0=E6=8E=92=E5=BA=8F=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E4=BE=9B=E9=9B=B6=E5=94=AE=E5=BC=80=E5=8D=95?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=90=8D=E7=A7=B0=E6=9F=A5=E8=AF=A2=E6=9C=80?= =?UTF-8?q?=E8=BF=91=E5=BA=93=E5=AD=98=E7=9A=84=E5=95=86=E5=93=81=EF=BC=9B?= =?UTF-8?q?=202.=E5=AE=A1=E6=A0=B8=E9=9B=B6=E5=94=AE=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BA=93=E5=AD=98=E6=97=B6=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=94=80=E5=94=AE=E6=AF=9B=E5=88=A9=E5=92=8C?= =?UTF-8?q?=E5=91=98=E5=B7=A5=E6=AF=9B=E5=88=A9=EF=BC=9B=203.=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9B=B4=E6=96=B0=E9=9B=B6=E5=94=AE=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E6=96=B9=E5=BC=8F=E7=9A=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E8=A7=A3=E5=86=B3=E9=9B=B6=E5=94=AE=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=87=91=E9=A2=9D=E5=90=8E=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E8=A1=A8=E9=87=91=E9=A2=9D=E4=B8=8D=E5=8F=98?= =?UTF-8?q?=E7=9A=84=E7=BC=BA=E9=99=B7=EF=BC=9B=204.=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=AE=A2=E5=8D=95=E9=94=80=E5=94=AE=E5=91=98?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/models/commodity.go | 9 +- app/admin/models/erp_order.go | 155 ++++++++++------------------------ config/settings.yml | 8 +- docs/docs.go | 76 +++++++++++++---- docs/swagger.json | 76 +++++++++++++---- docs/swagger.yaml | 56 +++++++++--- 6 files changed, 217 insertions(+), 163 deletions(-) diff --git a/app/admin/models/commodity.go b/app/admin/models/commodity.go index 34083e5..0058061 100644 --- a/app/admin/models/commodity.go +++ b/app/admin/models/commodity.go @@ -2277,6 +2277,7 @@ type ErpStockCommodityListReq struct { PageIndex int `json:"pageIndex"` // 页码 PageSize int `json:"pageSize"` // 每页展示数据条数 IsExport uint32 `json:"is_export"` // 是否导出excel:1-导出 + StockSortFlag uint32 `json:"stock_sort_flag"` // 排序方式:0-按入库时间降序排列(默认),1-按入库时间升序排列 //Sn string `json:"sn"` // 首次入库订单编号 } @@ -2362,7 +2363,7 @@ func (m *ErpStockCommodityListReq) GetDetailList(c *gin.Context, nType uint32) ( //获取库存商品列表 var commodities []ErpStockCommodity if m.IsExport == 1 { - err := qs.Find(&commodities).Order("id DESC").Error + err := qs.Find(&commodities).Order("stock_time DESC,id DESC").Error if err != nil && !errors.Is(err, RecordNotFound) { //logger.Error("dailys err:", err) return resp, err @@ -2374,7 +2375,11 @@ func (m *ErpStockCommodityListReq) GetDetailList(c *gin.Context, nType uint32) ( } resp.ExportUrl = listExport } else { - err := qs.Offset(page * m.PageSize).Limit(m.PageSize).Order("stock_time DESC,id DESC").Find(&commodities).Error + if m.StockSortFlag == 1 { + err = qs.Offset(page * m.PageSize).Limit(m.PageSize).Order("stock_time ASC,id ASC").Find(&commodities).Error + } else { + err = qs.Offset(page * m.PageSize).Limit(m.PageSize).Order("stock_time DESC,id DESC").Find(&commodities).Error + } if err != nil && !errors.Is(err, RecordNotFound) { //logger.Error("erp commodity list err:", err) return resp, err diff --git a/app/admin/models/erp_order.go b/app/admin/models/erp_order.go index f255bed..0fdbfc7 100644 --- a/app/admin/models/erp_order.go +++ b/app/admin/models/erp_order.go @@ -802,7 +802,7 @@ func stringToIntArray(str string) ([]uint32, error) { } // 更新零售订单商品表的库存商品表主键id字段 -func updateErpStockCommodityID(gdb *gorm.DB, id uint32, nIdList []uint32) error { +func updateErpStockCommodityID(gdb *gorm.DB, commodity ErpOrderCommodity, nIdList []uint32) error { fmt.Println("nIdList is:", nIdList) strId := intArrayToString(nIdList) @@ -814,12 +814,14 @@ func updateErpStockCommodityID(gdb *gorm.DB, id uint32, nIdList []uint32) error return err } - err = gdb.Table("erp_order_commodity").Where("id = ?", id). + err = gdb.Table("erp_order_commodity").Where("id = ?", commodity.ID). Updates(map[string]interface{}{ "erp_stock_commodity_id": strId, "retail_price": stockCommodity.RetailPrice, "wholesale_price": stockCommodity.WholesalePrice, "staff_cost_price": stockCommodity.StaffCostPrice, + "sales_profit": commodity.SalePrice - stockCommodity.WholesalePrice, + "staff_profit": commodity.SalePrice - stockCommodity.WholesalePrice - stockCommodity.StaffCostPrice, }).Error //Update("erp_stock_commodity_id", strId).Error if err != nil { @@ -1000,7 +1002,7 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error { stockCommodityIdList = append(stockCommodityIdList, rightId) usedStockCommodityIdList[commodities[i].ErpCommodityId] = append(usedStockCommodityIdList[commodities[i].ErpCommodityId], rightId) - err = updateErpStockCommodityID(gdb, commodities[i].ID, stockCommodityIdList) + err = updateErpStockCommodityID(gdb, commodities[i], stockCommodityIdList) if err != nil { return err } @@ -1033,7 +1035,8 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error { var stockCommodity []ErpStockCommodity var stockCommodityIdList []uint32 - if commodities[i].ErpStockCommodityID != "" { + stockCommodityID, _ := tools.StringToInt(commodities[i].ErpStockCommodityID) + if stockCommodityID > 0 { err = gdb.Table("erp_stock_commodity").Where("id = ?", commodities[i].ErpStockCommodityID). Updates(map[string]interface{}{"state": InStock}).Error // 状态更新为在库 if err != nil { @@ -1087,7 +1090,7 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error { stockCommodityIdList = append(stockCommodityIdList, rightId) usedStockCommodityIdList[commodities[i].ID] = append(usedStockCommodityIdList[commodities[i].ID], rightId) } - err = updateErpStockCommodityID(gdb, commodities[i].ID, stockCommodityIdList) + err = updateErpStockCommodityID(gdb, commodities[i], stockCommodityIdList) if err != nil { return err } @@ -1324,7 +1327,10 @@ func mergeOrderCommodities(orderCommodities []ErpOrderCommodity) []ErpOrderCommo existingCommodity.SaleDiscount += commodity.SaleDiscount existingCommodity.MemberDiscount += commodity.MemberDiscount existingCommodity.ReceivedAmount += commodity.ReceivedAmount - existingCommodity.ErpStockCommodityID = strings.Join([]string{existingCommodity.ErpStockCommodityID, commodity.ErpStockCommodityID}, ",") + stockCommodityID, _ := tools.StringToInt(commodity.ErpStockCommodityID) + if stockCommodityID > 0 { + existingCommodity.ErpStockCommodityID = strings.Join([]string{existingCommodity.ErpStockCommodityID, commodity.ErpStockCommodityID}, ",") + } } else { // 使用commodity的副本避免对原始数据的修改 commodityCopy := commodity @@ -4626,7 +4632,8 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) { // 串码商品直接查询;非串码商品查询库存时间最久的商品 var commodities []ErpStockCommodity if len(imeiList) != 0 { - err := orm.Eloquent.Table("erp_stock_commodity").Where("imei IN (?)", imeiList). + err := orm.Eloquent.Table("erp_stock_commodity").Where("imei IN (?) and state = ? "+ + "and store_id = ?", imeiList, InStock, req.StoreId). Find(&commodities).Error if err != nil { logger.Error("get commodities err:", logger.Field("err", err)) @@ -4640,7 +4647,8 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) { if len(commodityIds) != 0 { commodities = nil - err = orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id IN (?)", commodityIds). + err = orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id IN (?) and state = ? "+ + "and store_id = ?", commodityIds, InStock, req.StoreId). Find(&commodities).Error if err != nil { logger.Error("get commodities err:", logger.Field("err", err)) @@ -5089,50 +5097,22 @@ func updateSalesData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) error return errors.New("操作失败:" + err.Error()) } - var newOrderSales []ErpOrderSales - var deletedOrderSales []ErpOrderSales - var matchingOrderSales []ErpOrderSales - // 找到新增的商品 - for _, reqSales := range req.Salesman { - var found bool - for _, dbSales := range orderSales { - if reqSales.Uid == dbSales.Uid { - found = true - break - } - } - if !found { - reqSales.ID = 0 - reqSales.CreatedAt = Now() - newOrderSales = append(newOrderSales, reqSales) - } - } - - // 找到删除的商品 - for _, dbSales := range orderSales { - var found bool - for _, reqSales := range req.Salesman { - if reqSales.Uid == dbSales.Uid { - found = true - // 找到匹配的商品,加入匹配列表 - matchingOrderSales = append(matchingOrderSales, dbSales) - break - } - } - if !found { - deletedOrderSales = append(deletedOrderSales, dbSales) - } - } - - // 更新 - for _, orderSaleInfo := range matchingOrderSales { - if err = gdb.Model(&ErpOrderSales{}).Where("id = ?", orderSaleInfo.ID).Updates(orderSaleInfo).Error; err != nil { - logger.Error("更新订单销售员信息-更新 error") + // 1-删除所有的零售订单支付方式 + if len(orderSales) != 0 { + err = gdb.Delete(&orderSales).Error + if err != nil { + logger.Error("更新订单销售员信息-删除 error") return errors.New("操作失败:" + err.Error()) } } - // 新增 + var newOrderSales []ErpOrderSales + for _, reqSales := range req.Salesman { + reqSales.ID = 0 + newOrderSales = append(newOrderSales, reqSales) + } + + // 2-新增所有的零售订单支付方式 if len(newOrderSales) != 0 { err = gdb.Create(&newOrderSales).Error if err != nil { @@ -5141,15 +5121,6 @@ func updateSalesData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) error } } - // 删除 - if len(deletedOrderSales) != 0 { - err = gdb.Delete(&deletedOrderSales).Error - if err != nil { - logger.Error("更新订单销售员信息-删除 error") - return errors.New("操作失败:" + err.Error()) - } - } - return nil } @@ -5163,54 +5134,27 @@ func updatePayWayData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) erro return errors.New("操作失败:" + err.Error()) } - var newOrderPayWay []ErpOrderPayWay - var deletedOrderPayWay []ErpOrderPayWay - var matchingOrderPayWay []ErpOrderPayWay - // 找到新增的商品 - for _, reqPayWay := range req.Cashiers { - var found bool - for _, dbPayWay := range orderPayWay { - if reqPayWay.CashierId == dbPayWay.CashierId { - found = true - break - } - } - if !found { - payWay := ErpOrderPayWay{ - ErpOrderId: orderId, - CashierId: reqPayWay.CashierId, - Name: reqPayWay.Name, - Amount: reqPayWay.Amount, - } - newOrderPayWay = append(newOrderPayWay, payWay) - } - } - - // 找到删除的商品 - for _, dbPayWay := range orderPayWay { - var found bool - for _, reqPayWay := range req.Cashiers { - if reqPayWay.CashierId == dbPayWay.CashierId { - found = true - // 找到匹配的商品,加入匹配列表 - matchingOrderPayWay = append(matchingOrderPayWay, dbPayWay) - break - } - } - if !found { - deletedOrderPayWay = append(deletedOrderPayWay, dbPayWay) - } - } - - // 更新 - for _, orderPayWayInfo := range matchingOrderPayWay { - if err = gdb.Model(&ErpOrderPayWay{}).Where("id = ?", orderPayWayInfo.ID).Updates(orderPayWayInfo).Error; err != nil { - logger.Error("更新零售订单支付方式-更新 error") + // 1-删除所有的零售订单支付方式 + if len(orderPayWay) != 0 { + err = gdb.Delete(&orderPayWay).Error + if err != nil { + logger.Error("更新零售订单支付方式-删除 error") return errors.New("操作失败:" + err.Error()) } } - // 新增 + var newOrderPayWay []ErpOrderPayWay + for _, reqPayWay := range req.Cashiers { + payWay := ErpOrderPayWay{ + ErpOrderId: orderId, + CashierId: reqPayWay.CashierId, + Name: reqPayWay.Name, + Amount: reqPayWay.Amount, + } + newOrderPayWay = append(newOrderPayWay, payWay) + } + + // 2-新增所有的零售订单支付方式 if len(newOrderPayWay) != 0 { err = gdb.Create(&newOrderPayWay).Error if err != nil { @@ -5219,14 +5163,5 @@ func updatePayWayData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) erro } } - // 删除 - if len(deletedOrderPayWay) != 0 { - err = gdb.Delete(&deletedOrderPayWay).Error - if err != nil { - logger.Error("更新零售订单支付方式-删除 error") - return errors.New("操作失败:" + err.Error()) - } - } - return nil } diff --git a/config/settings.yml b/config/settings.yml index 164c7d9..20811ce 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -30,8 +30,8 @@ settings: enabledjob: false jwt: # token 密钥,生产环境时及的修改 -# secret: go-admin - secret: adminqYrhCcQRvVNAaEo4h4osoW + secret: go-admin +# secret: adminqYrhCcQRvVNAaEo4h4osoW # token 过期时间 单位:秒 timeout: 3600 database: @@ -39,10 +39,10 @@ settings: driver: mysql # 数据库连接字符串 mysql 缺省信息 charset=utf8&parseTime=True&loc=Local&timeout=1000ms # source: root:myTest@921@tcp(127.0.0.1:3306)/mh_dev?charset=utf8&parseTime=True&loc=Local&timeout=1000ms -# source: mh_dev:d9qy46ONI0ZTF9eH@tcp(112.33.14.191:3306)/mh_dev?charset=utf8&parseTime=True&loc=Local&timeout=1000ms + source: mh_dev:d9qy46ONI0ZTF9eH@tcp(112.33.14.191:3306)/mh_dev?charset=utf8&parseTime=True&loc=Local&timeout=1000ms # source: mh_pro:c5JBW3X6EEVQluYM@tcp(39.108.188.218:3306)/mh_pro?charset=utf8&parseTime=True&loc=Local&timeout=1000ms # source: mh_test:GPLzZ8rMmbJbKtMh@tcp(112.33.14.191:3306)/mh_test?charset=utf8&parseTime=True&loc=Local&timeout=1000ms - source: mh_new_pro:YnzexdTfBHMSGZki@tcp(39.108.188.218:3306)/mh_new_pro?charset=utf8&parseTime=True&loc=Local&timeout=1000ms +# source: mh_new_pro:YnzexdTfBHMSGZki@tcp(39.108.188.218:3306)/mh_new_pro?charset=utf8&parseTime=True&loc=Local&timeout=1000ms gen: # 代码生成读取的数据库名称 diff --git a/docs/docs.go b/docs/docs.go index 2f90afb..16b1103 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -5374,7 +5374,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/basic.SupplierListRequest" + "$ref": "#/definitions/models.GetSupplierRequest" } } ], @@ -5384,7 +5384,7 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.Supplier" + "$ref": "#/definitions/models.GetSupplierResp" } } } @@ -6374,19 +6374,6 @@ const docTemplate = `{ } } }, - "basic.SupplierListRequest": { - "type": "object", - "properties": { - "name": { - "description": "供应商名称", - "type": "string" - }, - "number": { - "description": "供应商编号", - "type": "string" - } - } - }, "basic.SupplierUpdateRequest": { "type": "object", "required": [ @@ -11171,6 +11158,13 @@ const docTemplate = `{ }, "state": { "description": "库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库(前端只看1,4)", + "type": "array", + "items": { + "type": "integer" + } + }, + "stock_sort_flag": { + "description": "排序方式:0-按入库时间降序排列(默认),1-按入库时间升序排列", "type": "integer" }, "stock_time_end": { @@ -11759,6 +11753,54 @@ const docTemplate = `{ } } }, + "models.GetSupplierRequest": { + "type": "object", + "properties": { + "cooperativeBusinessId": { + "description": "合作商id", + "type": "integer" + }, + "name": { + "description": "供应商名称", + "type": "string" + }, + "number": { + "description": "供应商编号", + "type": "string" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "每页展示数据条数", + "type": "integer" + } + } + }, + "models.GetSupplierResp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.Supplier" + } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "每页展示条数", + "type": "integer" + }, + "total": { + "description": "数据总条数", + "type": "integer" + } + } + }, "models.GoodsOrderListReq": { "type": "object", "properties": { @@ -16183,11 +16225,11 @@ const docTemplate = `{ "properties": { "DJ": { "description": "商品指导零售价", - "type": "integer" + "type": "number" }, "JE": { "description": "商品指导零售价乘以销售数量", - "type": "integer" + "type": "number" }, "SL": { "description": "销售数量", diff --git a/docs/swagger.json b/docs/swagger.json index 321ba59..66fd6d0 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -5363,7 +5363,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/basic.SupplierListRequest" + "$ref": "#/definitions/models.GetSupplierRequest" } } ], @@ -5373,7 +5373,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/models.Supplier" + "$ref": "#/definitions/models.GetSupplierResp" } } } @@ -6363,19 +6363,6 @@ } } }, - "basic.SupplierListRequest": { - "type": "object", - "properties": { - "name": { - "description": "供应商名称", - "type": "string" - }, - "number": { - "description": "供应商编号", - "type": "string" - } - } - }, "basic.SupplierUpdateRequest": { "type": "object", "required": [ @@ -11160,6 +11147,13 @@ }, "state": { "description": "库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库(前端只看1,4)", + "type": "array", + "items": { + "type": "integer" + } + }, + "stock_sort_flag": { + "description": "排序方式:0-按入库时间降序排列(默认),1-按入库时间升序排列", "type": "integer" }, "stock_time_end": { @@ -11748,6 +11742,54 @@ } } }, + "models.GetSupplierRequest": { + "type": "object", + "properties": { + "cooperativeBusinessId": { + "description": "合作商id", + "type": "integer" + }, + "name": { + "description": "供应商名称", + "type": "string" + }, + "number": { + "description": "供应商编号", + "type": "string" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "每页展示数据条数", + "type": "integer" + } + } + }, + "models.GetSupplierResp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.Supplier" + } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "每页展示条数", + "type": "integer" + }, + "total": { + "description": "数据总条数", + "type": "integer" + } + } + }, "models.GoodsOrderListReq": { "type": "object", "properties": { @@ -16172,11 +16214,11 @@ "properties": { "DJ": { "description": "商品指导零售价", - "type": "integer" + "type": "number" }, "JE": { "description": "商品指导零售价乘以销售数量", - "type": "integer" + "type": "number" }, "SL": { "description": "销售数量", diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 7d59916..bc933a3 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -177,15 +177,6 @@ definitions: - bank_list - name type: object - basic.SupplierListRequest: - properties: - name: - description: 供应商名称 - type: string - number: - description: 供应商编号 - type: string - type: object basic.SupplierUpdateRequest: properties: account_holder: @@ -3674,6 +3665,11 @@ definitions: type: string state: description: 库存状态:1-在库 2-已售 3-采购退货 4-调拨中 5-出库(前端只看1,4) + items: + type: integer + type: array + stock_sort_flag: + description: 排序方式:0-按入库时间降序排列(默认),1-按入库时间升序排列 type: integer stock_time_end: description: 最近入库结束时间 @@ -4091,6 +4087,40 @@ definitions: total_page: type: integer type: object + models.GetSupplierRequest: + properties: + cooperativeBusinessId: + description: 合作商id + type: integer + name: + description: 供应商名称 + type: string + number: + description: 供应商编号 + type: string + pageIndex: + description: 页码 + type: integer + pageSize: + description: 每页展示数据条数 + type: integer + type: object + models.GetSupplierResp: + properties: + list: + items: + $ref: '#/definitions/models.Supplier' + type: array + pageIndex: + description: 页码 + type: integer + pageSize: + description: 每页展示条数 + type: integer + total: + description: 数据总条数 + type: integer + type: object models.GoodsOrderListReq: properties: goods_id: @@ -7282,10 +7312,10 @@ definitions: properties: DJ: description: 商品指导零售价 - type: integer + type: number JE: description: 商品指导零售价乘以销售数量 - type: integer + type: number SL: description: 销售数量 type: integer @@ -11290,7 +11320,7 @@ paths: name: request required: true schema: - $ref: '#/definitions/basic.SupplierListRequest' + $ref: '#/definitions/models.GetSupplierRequest' produces: - application/json responses: @@ -11298,7 +11328,7 @@ paths: description: OK schema: items: - $ref: '#/definitions/models.Supplier' + $ref: '#/definitions/models.GetSupplierResp' type: array summary: 供应商列表 tags: From 17c8472e7653e286e7a695431064b50e27f8e7a4 Mon Sep 17 00:00:00 2001 From: chenlin Date: Fri, 12 Jul 2024 09:39:14 +0800 Subject: [PATCH 6/6] =?UTF-8?q?1.=E5=BA=93=E5=AD=98=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=95=86=E5=93=81=E5=90=8D=E7=A7=B0=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=A4=8D=E9=80=89=EF=BC=9B=202.=E9=9B=B6=E5=94=AE?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=A1=A8=E5=A2=9E=E5=8A=A0=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E9=93=B6=E8=81=94=E6=B5=81=E6=B0=B4=E5=8F=B7=E5=AD=97=E6=AE=B5?= =?UTF-8?q?bank=5Ftrx=5Fno=EF=BC=8C=E6=9F=A5=E8=AF=A2=E9=9B=B6=E5=94=AE?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8/=E8=AF=A6=E6=83=85/?= =?UTF-8?q?=E9=9B=B6=E5=94=AE=E6=98=8E=E7=BB=86=E6=97=B6=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E8=AF=A5=E5=AD=97=E6=AE=B5=EF=BC=9B=203.=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E8=AE=B0=E5=BD=95=E8=A1=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AD=97=E6=AE=B5bank=5Ftrx=5Fno=EF=BC=9B=204.=E9=9B=B6?= =?UTF-8?q?=E5=94=AE=E6=98=8E=E7=BB=86=E6=94=AF=E6=8C=81=E9=93=B6=E8=81=94?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E5=8F=B7=E3=80=81=E6=94=B6=E4=BB=98=E6=AC=BE?= =?UTF-8?q?=E6=96=B9=E5=BC=8Fid=E7=9A=84=E6=90=9C=E7=B4=A2=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=EF=BC=9B=205.=E4=BC=98=E5=8C=96=E5=BA=97=E5=91=98?= =?UTF-8?q?=E7=BB=A9=E6=95=88=E6=8E=92=E5=BA=8F=E8=A7=84=E5=88=99=EF=BC=9A?= =?UTF-8?q?=E6=9C=88=E4=BB=BD=E6=97=B6=E9=97=B4=E8=B7=9D=E7=A6=BB=E8=BF=91?= =?UTF-8?q?=EF=BC=88date)=EF=BC=9E=E9=97=A8=E5=BA=97ID=E5=B0=8F=EF=BC=9B?= =?UTF-8?q?=206.=E6=AF=8F=E6=9C=881=E5=8F=B7=E6=96=B0=E5=A2=9E=E5=BA=97?= =?UTF-8?q?=E5=91=98=E6=9C=AC=E6=9C=88=E7=BB=A9=E6=95=88=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E7=9B=B8=E5=85=B3=E6=95=B0=E6=8D=AE=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E7=BD=AE=E4=B8=BA0=EF=BC=8C=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E4=B8=BAnull=E6=97=B6sql=E6=89=A7=E8=A1=8C+1=E4=B8=8D=E7=94=9F?= =?UTF-8?q?=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/inventorymanage/Inventory.go | 2 +- app/admin/models/commodity.go | 8 +- app/admin/models/erp_order.go | 108 ++++++++++++++++++-- app/admin/models/user.go | 44 +++++--- docs/docs.go | 17 ++- docs/swagger.json | 17 ++- docs/swagger.yaml | 13 ++- 7 files changed, 176 insertions(+), 33 deletions(-) diff --git a/app/admin/apis/inventorymanage/Inventory.go b/app/admin/apis/inventorymanage/Inventory.go index 7bbfd62..e2fbda7 100644 --- a/app/admin/apis/inventorymanage/Inventory.go +++ b/app/admin/apis/inventorymanage/Inventory.go @@ -308,7 +308,7 @@ func QueryName(c *gin.Context) { } var detailReq models.ErpStockCommodityListReq - detailReq.CommodityName = req.CommodityName + detailReq.CommodityName = append(detailReq.CommodityName, req.CommodityName) detailReq.PageIndex = req.PageIndex detailReq.PageSize = req.PageSize detailReq.StoreId = req.StoreId diff --git a/app/admin/models/commodity.go b/app/admin/models/commodity.go index 0058061..2abcfea 100644 --- a/app/admin/models/commodity.go +++ b/app/admin/models/commodity.go @@ -2261,7 +2261,7 @@ type ErpStockCommodityListReq struct { ErpStockId uint32 `json:"erp_stock_id"` // 库存id ErpCommodityId uint32 `json:"erp_commodity_id"` // 商品id SerialNumber string `json:"serial_number"` // 商品编号 - CommodityName string `json:"commodity_name"` // 商品名称 + CommodityName []string `json:"commodity_name"` // 商品名称 ErpCategoryId uint32 `json:"erp_category_id"` // 商品分类Id IsIMEI uint32 `json:"is_imei"` // 是否串码:0-查全部 1-查串码类 2-查非串码 IMEI string `json:"imei"` // 串码 @@ -2542,11 +2542,11 @@ func (m *ErpStockCommodityListReq) buildQueryConditions(qs *gorm.DB, nType uint3 qs = qs.Where("commodity_serial_number=?", m.SerialNumber) } - if m.CommodityName != "" { //商品名称 + if len(m.CommodityName) != 0 { //商品名称 if nType == 1 { - qs = qs.Where("erp_commodity_name = ?", m.CommodityName) + qs = qs.Where("erp_commodity_name IN (?)", m.CommodityName) } else { - qs = qs.Where("erp_commodity_name like ?", "%"+m.CommodityName+"%") + qs = qs.Where("erp_commodity_name like ?", "%"+m.CommodityName[0]+"%") } } diff --git a/app/admin/models/erp_order.go b/app/admin/models/erp_order.go index 0fdbfc7..423d594 100644 --- a/app/admin/models/erp_order.go +++ b/app/admin/models/erp_order.go @@ -83,6 +83,7 @@ type ErpOrder struct { RejectedTotalCount uint32 `json:"rejected_total_count" gorm:"-"` // 订单总退货数量 StorePer float64 `json:"store_per"` // 门店提成:订单总员工毛利X该门店设置好的提成比例,保留到小数后两位多余舍去 TotalDiscount float64 `json:"total_discount"` // 订单总优惠:订单所有商品零售优惠+会员优惠+会员积分抵扣之和 + BankTrxNo string `json:"bank_trx_no" gorm:"-"` // 银行流水号 Commodities []ErpOrderCommodity `json:"commodities" gorm:"-"` // 零售订单商品信息 Cashiers []ErpOrderCashier `json:"cashiers" gorm:"-"` // 收付款方式 Salesman []ErpOrderSales `json:"salesman" gorm:"-"` // 销售员信息 @@ -162,6 +163,7 @@ type ErpOrderRecord struct { OutOrderNo string `json:"out_order_no"` // 商户订单号 PlatTrxNo string `json:"plat_trx_no"` // 平台交易流水号 BankOrderNo string `json:"bank_order_no"` // 银行订单号 + BankTrxNo string `json:"bank_trx_no"` // 银行流水号 TotalAmount float64 `json:"total_amount"` // 订单总金额 PayWay string `json:"pay_way"` // 支付方式 Status string `json:"status"` // 支付状态 @@ -331,6 +333,8 @@ type ErpOrderRetailDetailReq struct { IMEI string `json:"imei"` // 串码 StartTime string `json:"start_time"` // 开始时间 EndTime string `json:"end_time"` // 结束时间 + BankTrxNo string `json:"bank_trx_no"` // 银联流水号 + CashierId uint32 `json:"cashier_id"` // 收付款方式id PageIndex int `json:"pageIndex"` // 页码 PageSize int `json:"pageSize"` // 页面条数 IsExport uint32 `json:"is_export"` // 1-导出 @@ -594,6 +598,7 @@ func (m *ErpOrderListReq) List(c *gin.Context) (*ErpOrderListResp, error) { erpOrderListSetCommodity(orders) erpOrderListSetCashier(orders) erpOrderListSetSalesman(orders) + erpOrderSetBankTrxNo(orders) resp.List = orders @@ -1186,6 +1191,23 @@ func NewErpBillSn() string { } } +// 添加零售订单的银行流水号 +func erpOrderSetBankTrxNo(list []ErpOrder) { + for i, _ := range list { + list[i].SetBankTrxNo() + } +} + +func (m *ErpOrder) SetBankTrxNo() { + var orderPayWay ErpOrderRecord + err := orm.Eloquent.Table("erp_order_record").Where("bill_sn = ? and status = ?", m.BillSn, PayOk).Find(&orderPayWay).Error + if err != nil { + logger.Error("SetBankTrxNo query erp_order_record err:", logger.Field("err", err)) + } + + m.BankTrxNo = orderPayWay.BankTrxNo +} + // ErpOrderRetailDetailSetCommodity 添加零售明细中订单的商品信息 func ErpOrderRetailDetailSetCommodity(list []ErpOrder) { for i, _ := range list { @@ -1939,6 +1961,7 @@ func ErpOrderPay(req *ErpOrderPayReq, c *gin.Context) (*ErpOrderPayResp, error) updateInfo := map[string]interface{}{ "bank_order_no": hmPayResp.BankOrderNo, "plat_trx_no": hmPayResp.PlatTrxNo, + "bank_trx_no": hmPayResp.BankTrxNo, "total_amount": hmPayResp.TotalAmount, "pay_way": hmPayResp.PayWay, "status": payStatus, @@ -2030,6 +2053,7 @@ func QueryErpOrderPayStatus(billSn string) (*ErpOrderPayResp, error) { updateInfo := map[string]interface{}{ "bank_order_no": hmQueryResp.BankOrderNo, "plat_trx_no": hmQueryResp.PlatTrxNo, + "bank_trx_no": hmQueryResp.BankTrxNo, "total_amount": hmQueryResp.TotalAmount, "pay_way": hmQueryResp.PayWayCode, "status": payStatus, @@ -2737,6 +2761,18 @@ func float64ToPercentage(value float64) string { func QueryRetailDetail(req *ErpOrderRetailDetailReq, c *gin.Context) (*ErpOrderRetailDetailResp, error) { resp := &ErpOrderRetailDetailResp{} + // 通过银行流水号查询 + if req.BankTrxNo != "" { + var orderPayWay ErpOrderRecord + err := orm.Eloquent.Table("erp_order_record").Where("bank_trx_no = ? and status = ?", + req.BankTrxNo, PayOk).Find(&orderPayWay).Error + if err != nil { + logger.Error("query erp_order_record err:", logger.Field("err", err)) + return nil, err + } + req.BillSn = orderPayWay.BillSn + } + var err error if (req.ErpCategoryId != 0 || req.ErpCommodityName != "" || req.IMEI != "") && req.BillSn == "" { // 商品分类or商品名称不为空且订单编号为空 // 联表查询 @@ -3027,7 +3063,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string, fileName := time.Now().Format(TimeFormat) + "零售明细" + ".xlsx" fmt.Println("url fileName:", url+fileName) - title := []interface{}{"订单编号", "订单类型", "用户ID", "客户手机号", "审核时间", "店铺", "销售员", "商品分类", "商品名称", + title := []interface{}{"订单编号", "订单类型", "用户ID", "客户手机号", "审核时间", "店铺", "银联流水号", "销售员", "商品分类", "商品名称", "供应商", "是否串码", "商品串码", "是否赠送", "销售数量", "指导零售价", "零售价", "零售优惠", "会员优惠", "实际零售价/退货价", "采购单价", "员工成本价", "销售毛利", "员工毛利", "订单总指导零售价", "订单总优惠", "订单实收", "【扫码付", "现金收款", "pos机收款", "商场积分抵扣", "其他付款方式】", "订单总销售毛利", "订单总员工毛利", "销售毛利提成", "员工毛利提成", "销售员提成", "门店提成", "备注"} @@ -3115,6 +3151,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string, list[i].Tel, list[i].AuditTime, list[i].StoreName, + list[i].BankTrxNo, salesMan, //销售员 list[i].Commodities[rowId].ErpCategoryName, list[i].Commodities[rowId].ErpCommodityName, @@ -3157,6 +3194,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string, "", "", "", + "", list[i].Salesman[1].Name, //销售员 list[i].Commodities[rowId].ErpCategoryName, list[i].Commodities[rowId].ErpCommodityName, @@ -3198,6 +3236,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string, "", "", "", + "", "", //销售员 list[i].Commodities[rowId].ErpCategoryName, list[i].Commodities[rowId].ErpCommodityName, @@ -3251,6 +3290,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string, "", "", "", + "", list[i].Salesman[1].Name, //销售员 "", "", @@ -3298,7 +3338,7 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string, } totalData := "订单数:" + strconv.FormatInt(int64(len(list)), 10) - end := []interface{}{totalData, "", "", "", "", "", "", "", "", "", "", "", "", + end := []interface{}{totalData, "", "", "", "", "", "", "", "", "", "", "", "", "", sumData.Count, sumData.RetailPrice, sumData.SalePrice, @@ -3343,15 +3383,15 @@ func retailDetailExport(list []ErpOrder, sumData RetailDetailTotalData) (string, _ = file.SetCellStyle("Sheet1", "A1", endRow, style) //需要自动换行的列 - endRow1 := fmt.Sprintf("G%d", nExcelStartRow+2) - endRow2 := fmt.Sprintf("AH%d", nExcelStartRow+2) - endRow3 := fmt.Sprintf("AI%d", nExcelStartRow+2) - endRow4 := fmt.Sprintf("AJ%d", nExcelStartRow+2) - _ = file.SetCellStyle("Sheet1", "A1", "AL1", style1) - _ = file.SetCellStyle("Sheet1", "G2", endRow1, style1) - _ = file.SetCellStyle("Sheet1", "AH2", endRow2, style1) - _ = file.SetCellStyle("Sheet1", "AI2", endRow3, style1) - _ = file.SetCellStyle("Sheet1", "AJ2", endRow4, style1) + endRow1 := fmt.Sprintf("H%d", nExcelStartRow+2) + endRow2 := fmt.Sprintf("AI%d", nExcelStartRow+2) + endRow3 := fmt.Sprintf("AJ%d", nExcelStartRow+2) + endRow4 := fmt.Sprintf("AK%d", nExcelStartRow+2) + _ = file.SetCellStyle("Sheet1", "A1", "AM1", style1) + _ = file.SetCellStyle("Sheet1", "H2", endRow1, style1) + _ = file.SetCellStyle("Sheet1", "AI2", endRow2, style1) + _ = file.SetCellStyle("Sheet1", "AJ2", endRow3, style1) + _ = file.SetCellStyle("Sheet1", "AK2", endRow4, style1) fmt.Println("save fileName:", config.ExportConfig.Path+fileName) if err := file.SaveAs(config.ExportConfig.Path + fileName); err != nil { @@ -3554,6 +3594,25 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp logger.Error("query erp_order_pay_way sum data err:", logger.Field("err", err)) return resp, err } + + // 支付方式筛选 + if req.CashierId != 0 { + var tempCashier TotalCashierData + switch req.CashierId { + case 1: + tempCashier.ScanAmount = cashier.ScanAmount + case 2: + tempCashier.CashAmount = cashier.CashAmount + case 3: + tempCashier.PosAmount = cashier.PosAmount + case 4: + tempCashier.StoreVmAmount = cashier.StoreVmAmount + default: + tempCashier = cashier + } + cashier = tempCashier + } + // 退货订单支付汇总:目前零售退货订单暂时不展示各个方式的付款金额 var rejectedCashier TotalCashierData //rejectedCashierQs := qs @@ -3604,6 +3663,7 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp } orders := packData(result) + erpOrderSetBankTrxNo(orders) fileUrl, err := retailDetailExport(orders, sumData) if err != nil { logger.Error("retailDetailExport err:", logger.Field("err", err)) @@ -3628,6 +3688,7 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp orders := packData(result) erpOrderListSetCashier(orders) erpOrderListSetSalesman(orders) + erpOrderSetBankTrxNo(orders) pagedOrders := paginate(orders, page, req.PageSize) resp.List = pagedOrders @@ -3850,6 +3911,10 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp qs = qs.Where("JSON_CONTAINS(salesman_list, ?)", fmt.Sprintf(`{"userId":%d}`, req.Salesman)) totalPerQs = totalPerQs.Where("erp_order_sales.uid = ?", req.Salesman) } + if req.CashierId != 0 { // 支付方式 + qs = qs.Where("JSON_CONTAINS(cashier_list, ?)", fmt.Sprintf(`{"cashier_id":%d}`, req.CashierId)) + //totalPerQs = totalPerQs.Where("erp_order_pay_way.cashier_id = ?", req.CashierId) + } if req.StartTime != "" { // 审核开始时间 parse, err := time.Parse(QueryTimeFormat, req.StartTime) if err != nil { @@ -3919,6 +3984,25 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp logger.Error("query erp_order_pay_way sum data err:", logger.Field("err", err)) return resp, err } + + // 支付方式筛选 + if req.CashierId != 0 { + var tempCashier TotalCashierData + switch req.CashierId { + case 1: + tempCashier.ScanAmount = cashier.ScanAmount + case 2: + tempCashier.CashAmount = cashier.CashAmount + case 3: + tempCashier.PosAmount = cashier.PosAmount + case 4: + tempCashier.StoreVmAmount = cashier.StoreVmAmount + default: + tempCashier = cashier + } + cashier = tempCashier + } + // 退货订单支付汇总:目前零售退货订单暂时不展示各个方式的付款金额 var rejectedCashier TotalCashierData //rejectedCashierQs := qs @@ -3950,6 +4034,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp } ErpOrderRetailDetailSetCommodity(orders) erpOrderListSetSalesman(orders) + erpOrderSetBankTrxNo(orders) fileUrl, err := retailDetailExport(orders, sumData) if err != nil { @@ -3976,6 +4061,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp ErpOrderRetailDetailSetCommodity(orders) erpOrderListSetSalesman(orders) erpOrderListSetCashier(orders) + erpOrderSetBankTrxNo(orders) //erpOrderListSetSalesmanByRetailDetail(req.Salesman, orders) resp.List = orders diff --git a/app/admin/models/user.go b/app/admin/models/user.go index ef39dbb..528c14b 100644 --- a/app/admin/models/user.go +++ b/app/admin/models/user.go @@ -2773,18 +2773,34 @@ func (m *CooperativeBusiness) UserInviteReport(userInfo UserInfo) { return } report := &InviteMemberReport{ - Uid: userInfo.Uid, - StoreId: uint32(userInfo.StoreId), - GoldCount: 0, - PlatinumCount: 0, - BlackGoldCount: 0, - Date: reportTime, - DeductAmount: 0, - CooperativeBusinessId: userInfo.CooperativeBusinessId, - CooperativeName: userInfo.CooperativeName, - //GoldDeduct: m.CooperativeAssistantMemberDeduct.GoldDeduct, - //PlatinumDeduct: m.CooperativeAssistantMemberDeduct.PlatinumDeduct, - //BlackGoldDeduct: m.CooperativeAssistantMemberDeduct.BlackGoldDeduct, + Uid: userInfo.Uid, + StoreId: uint32(userInfo.StoreId), + GoldCount: 0, + GoldCountHalf: 0, + GoldCountQuarter: 0, + PlatinumCount: 0, + BlackGoldCount: 0, + Date: reportTime, + DeductAmount: 0, + CooperativeBusinessId: userInfo.CooperativeBusinessId, + CooperativeName: userInfo.CooperativeName, + GoldDeduct: m.CooperativeAssistantMemberDeduct.GoldDeduct, + PlatinumDeduct: m.CooperativeAssistantMemberDeduct.PlatinumDeduct, + BlackGoldDeduct: m.CooperativeAssistantMemberDeduct.BlackGoldDeduct, + RenewalGoldCount: 0, + RenewalGoldCountHalf: 0, + RenewalGoldCountQuarter: 0, + RenewalPlatinumCount: 0, + RenewalBlackGoldCount: 0, + UpgradeGoldToPlatinumCount: 0, + UpgradeGoldToBlackCount: 0, + UpgradePlatinumToBlackCount: 0, + InviteRenewalGoldCount: 0, + InviteRenewalPlatinumCount: 0, + InviteRenewalBlackGoldCount: 0, + InviteUpgradeGoldToPlatinumCount: 0, + InviteUpgradeGoldToBlackCount: 0, + InviteUpgradePlatinumToBlackCount: 0, } //for i, _ := range userInvites { @@ -2928,13 +2944,13 @@ func (m *AssistantInviteMemberReportReq) List(c *gin.Context) (*AssistantInviteM //totalPage := int(count)/m.PageSize + 1 if m.IsExport == 1 { // 导出excel - err = qs.Order("store_id DESC,id DESC").Find(&memberReport).Error + err = qs.Order("STR_TO_DATE(date, '%Y-%m-%d') DESC, store_id ASC").Find(&memberReport).Error if err != nil && err != RecordNotFound { logger.Error("err:", logger.Field("err", err)) return nil, err } } else { - err = qs.Order("store_id DESC,id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&memberReport).Error + err = qs.Order("STR_TO_DATE(date, '%Y-%m-%d') DESC, store_id ASC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&memberReport).Error if err != nil && err != RecordNotFound { logger.Error("err:", logger.Field("err", err)) return nil, err diff --git a/docs/docs.go b/docs/docs.go index 16b1103..dbc9163 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -8789,6 +8789,10 @@ const docTemplate = `{ "description": "审核人姓名", "type": "string" }, + "bank_trx_no": { + "description": "银行流水号", + "type": "string" + }, "bill_sn": { "description": "单据编号", "type": "string" @@ -9436,10 +9440,18 @@ const docTemplate = `{ "models.ErpOrderRetailDetailReq": { "type": "object", "properties": { + "bank_trx_no": { + "description": "银行流水号", + "type": "string" + }, "bill_sn": { "description": "单据编号", "type": "string" }, + "cashier_id": { + "description": "收付款方式id", + "type": "integer" + }, "end_time": { "description": "结束时间", "type": "string" @@ -11110,7 +11122,10 @@ const docTemplate = `{ }, "commodity_name": { "description": "商品名称", - "type": "string" + "type": "array", + "items": { + "type": "string" + } }, "erp_category_id": { "description": "商品分类Id", diff --git a/docs/swagger.json b/docs/swagger.json index 66fd6d0..fce32c9 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -8778,6 +8778,10 @@ "description": "审核人姓名", "type": "string" }, + "bank_trx_no": { + "description": "银行流水号", + "type": "string" + }, "bill_sn": { "description": "单据编号", "type": "string" @@ -9425,10 +9429,18 @@ "models.ErpOrderRetailDetailReq": { "type": "object", "properties": { + "bank_trx_no": { + "description": "银行流水号", + "type": "string" + }, "bill_sn": { "description": "单据编号", "type": "string" }, + "cashier_id": { + "description": "收付款方式id", + "type": "integer" + }, "end_time": { "description": "结束时间", "type": "string" @@ -11099,7 +11111,10 @@ }, "commodity_name": { "description": "商品名称", - "type": "string" + "type": "array", + "items": { + "type": "string" + } }, "erp_category_id": { "description": "商品分类Id", diff --git a/docs/swagger.yaml b/docs/swagger.yaml index bc933a3..6db57ee 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1934,6 +1934,9 @@ definitions: auditor_name: description: 审核人姓名 type: string + bank_trx_no: + description: 银行流水号 + type: string bill_sn: description: 单据编号 type: string @@ -2409,9 +2412,15 @@ definitions: type: object models.ErpOrderRetailDetailReq: properties: + bank_trx_no: + description: 银行流水号 + type: string bill_sn: description: 单据编号 type: string + cashier_id: + description: 收付款方式id + type: integer end_time: description: 结束时间 type: string @@ -3629,7 +3638,9 @@ definitions: type: integer commodity_name: description: 商品名称 - type: string + items: + type: string + type: array erp_category_id: description: 商品分类Id type: integer