package model import ( "encoding/json" "fmt" "github.com/codinl/go-logger" "math/rand" "time" ) const ( ErpOrderStateUnAudit = "un_audit" ErpOrderStateAudited = "audited" ) const ( ErpOrderMemberTypeGeneral = "general" ErpOrderMemberTypeMember = "member" ) const ( RetailTypeSale = "sale" RetailTypeRejected = "rejected" ) type ErpOrder struct { Model BillSn string `json:"bill_sn" gorm:"index"` RetailType string `json:"retail_type"` // 销售类型: Tel string `json:"tel" gorm:"index"` StoreId uint32 `json:"store_id" gorm:"index"` StoreName string `json:"store_name"` MakerId uint32 `json:"maker_id" gorm:"index"` MakerName string `json:"maker_name"` AuditTime time.Time `json:"audit_time"` AuditorId uint32 `json:"auditor_id" gorm:"index"` AuditorName string `json:"auditor_name"` //ErpCashierId uint32 `json:"erp_cashier_id" gorm:"index"` //ErpCashierName string `json:"erp_cashier_name"` CashierList string `json:"cashier_list" gorm:"type:text"` // 付款方式 Salesman1 uint32 `json:"salesman_1"` Salesman2 uint32 `json:"salesman_2"` MemberType string `json:"member_type"` // 会员类型: State string `json:"state" gorm:"index"` TotalAmount uint32 `json:"total_amount"` // 包含退货 TotalCount uint32 `json:"total_count"` // 包含退货 SaleOrderId uint32 `json:"sale_order_id"` // 销售订单id //RejectedTotalAmount uint32 `json:"rejected_total_amount"` //RejectedTotalCount uint32 `json:"rejected_total_count"` Commodities []ErpOrderCommodity `json:"commodities" gorm:"-"` Cashiers []ErpCashier `json:"cashiers" gorm:"-"` // erp_order } type ErpOrderCommodity struct { Model ErpOrderId uint32 `json:"erp_order_id"` ErpCategoryId uint32 `json:"erp_category_id"` ErpCategoryName string `json:"erp_category_name"` ErpCommodityId uint32 `json:"erp_commodity_id"` ErpCommodityName string `json:"erp_commodity_name"` IMEIType uint32 `json:"imei_type"` // 1-无串码 2-串码 IMEI string `json:"imei"` PresentType uint32 `json:"present_type"` // 赠送类型:1-非赠送 2-赠送 RetailPrice uint32 `json:"retail_price"` MemberPrice uint32 `json:"member_price"` Count uint32 `json:"count"` Amount uint32 `json:"amount"` Remark string `json:"remark"` Tel string `json:"tel" gorm:"index"` RejectedPrice uint32 `json:"rejected_price"` RejectedCount uint32 `json:"rejected_count"` RejectedAmount uint32 `json:"rejected_amount"` RejectedOrderCommodityId uint32 `json:"rejected_order_commodity_id"` // erp_order_commodity } type ErpOrderListReq struct { BillSn string `json:"bill_sn"` //Type string `json:"type"` RetailType string `json:"retail_type"` Tel string `json:"tel"` StoreId uint32 `json:"store_id"` State string `json:"state"` StartTime string `json:"start_time"` EndTime string `json:"end_time"` PageNum int `json:"page_num"` PageSize int `json:"page_size"` IsExport uint32 `json:"is_export"` // 1-导出 //StartTime time.Time `json:"start_time"` //EndTime time.Time `json:"end_time"` } type ErpOrderListResp struct { List []ErpOrder `json:"list"` Total int `json:"total"` PageNum int `json:"page_num"` PageSize int `json:"page_size"` } func (m *ErpOrderListReq) List() (*ErpOrderListResp, error) { resp := &ErpOrderListResp{ 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_order") if m.BillSn != "" { qs = qs.Where("bill_sn=?", m.BillSn) } //if m.Type != "" { // qs = qs.Where("type=?", m.Type) //} if m.RetailType != "" { qs = qs.Where("retail_type=?", m.RetailType) } if m.Tel != "" { qs = qs.Where("tel=?", m.Tel) } if m.StoreId != 0 { qs = qs.Where("store_id=?", m.StoreId) } if m.State != "" { qs = qs.Where("state=?", m.State) } if m.StartTime != "" { parse, err := time.Parse(DateTimeFormat, m.StartTime) if err != nil { logger.Error("err:", err) //return users, 0, err } qs = qs.Where("created_at > ?", parse) } if m.EndTime != "" { parse, err := time.Parse(DateTimeFormat, m.EndTime) if err != nil { logger.Error("err:", err) //return users, 0, err } parse = parse.AddDate(0, 0, 1) qs = qs.Where("created_at < ?", parse) } 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 orders []ErpOrder err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&orders).Error if err != nil && err != RecordNotFound { logger.Error("erp commodity list err:", err) return resp, err } ErpOrderListSetCashier(orders) resp.List = orders return resp, nil } func NewErpBillSn() string { nowTime := time.Now() rand.Seed(nowTime.UnixNano()) max := 1 for { if max > 5 { logger.Error("create sn err") return "" } random := rand.Int31n(9999) + 1000 sn := fmt.Sprintf("%s%d", nowTime.Format("060102"), random) exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM erp_order WHERE bill_sn='%s'", sn)) if err != nil { logger.Error("exist sn err") } if !exist { return sn } max++ } } //func NewErpPurchaseSn() string { // nowTime := time.Now() // rand.Seed(nowTime.UnixNano()) // max := 1 // for { // if max > 5 { // logger.Error("create sn err") // return "" // } // random := rand.Int31n(9999) + 1000 // sn := fmt.Sprintf("%s%d", nowTime.Format("060102"), random) // exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM erp_purchase_order WHERE serial_number='%s'", sn)) // if err != nil { // logger.Error("exist sn err") // } // if !exist { // return sn // } // // max++ // } //} func ErpOrderListSetCashier(list []ErpOrder) { for i, _ := range list { //if list[i].CashierList != "" { // var cashiers []ErpCashier // err := json.Unmarshal([]byte(list[i].CashierList), &cashiers) // if err != nil { // logger.Error("unmarshal err:", err) // } // list[i].Cashiers = cashiers // list[i].CashierList = "" //} list[i].SetErpCashier() } } func (m *ErpOrder) SetErpCashier() { if m.CashierList != "" { var cashiers []ErpCashier err := json.Unmarshal([]byte(m.CashierList), &cashiers) if err != nil { logger.Error("unmarshal err:", err) } m.Cashiers = cashiers m.CashierList = "" } } func GetErpOrderCommodityMap(ids []uint32) (map[uint32]ErpOrderCommodity, error) { commodityMap := make(map[uint32]ErpOrderCommodity, 0) if len(ids) == 0 { return commodityMap, nil } var commodities []ErpOrderCommodity err := DB.Table("erp_order_commodity").Where("id IN (?)", ids).Find(&commodities).Error if err != nil { logger.Error("commodities err:", err) return commodityMap, err } for i, _ := range commodities { commodityMap[commodities[i].ID] = commodities[i] } return commodityMap, nil } func SetUserInfo(tel string) { var user User err := DB.Table("user").Where("tel=?", tel).Find(&user).Error if err != nil { logger.Error("user err:", err) return } if user.FirstRetailOrder.IsZero() { err := DB.Table("user").Where("uid=?", user.Uid).Update("first_retail_order", time.Now()).Error if err != nil { logger.Error("update user err:", err) } } }