277 lines
7.4 KiB
Go
277 lines
7.4 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|