| | |
| | | import ( |
| | | "aps_crm/constvar" |
| | | "aps_crm/pkg/mysqlx" |
| | | "fmt" |
| | | "github.com/shopspring/decimal" |
| | | "gorm.io/gorm" |
| | | "gorm.io/gorm/clause" |
| | | ) |
| | | |
| | | type ( |
| | |
| | | Client Client `json:"client" gorm:"foreignKey:ClientId"` |
| | | SourceType constvar.SalesReturnSourceType `gorm:"source_type" json:"sourceType"` // 源单类型(1销售明细) |
| | | SourceId int `gorm:"source_id" json:"sourceId"` // 源单id |
| | | Source SalesDetails `gorm:"foreignKey:SourceId" json:"source"` |
| | | Number string `json:"number" gorm:"column:number;type:varchar(255);comment:退货单号"` |
| | | Repository string `json:"repository" gorm:"column:repository;type:varchar(255);comment:仓库"` |
| | | MemberId int `json:"memberId" gorm:"column:member_id;type:int;comment:负责人id"` |
| | | Member User `json:"Member" gorm:"foreignKey:MemberId"` |
| | | ReturnDate string `json:"returnDate" gorm:"column:return_date;type:datetime(3);comment:退货日期"` //退货日期 |
| | | SalesReturnStatusId int `json:"salesReturnStatusId" gorm:"column:sales_return_status;type:int;comment:退货状态"` //退货状态id |
| | | SalesReturnStatus SalesReturnStatus `json:"SalesReturnStatus" gorm:"foreignKey:SalesReturnStatusId"` //退货状态 |
| | | CreatorId int `json:"-" gorm:"column:creator_id;type:int;comment:创建人id"` //创建人ID |
| | | Creator User `json:"-" gorm:"foreignKey:CreatorId"` //创建人信息 |
| | | Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:退货原因"` //退货原因 |
| | | Products []*Product `json:"products" gorm:"many2many:salesReturn_product;"` //退货产品 |
| | | ReturnDate string `json:"returnDate" gorm:"column:return_date;type:varchar(255);comment:退货日期"` //退货日期 |
| | | SalesReturnStatusId int `json:"salesReturnStatusId" gorm:"column:sales_return_status;type:int;comment:退货状态"` //退货状态id |
| | | SalesReturnStatus SalesReturnStatus `json:"SalesReturnStatus" gorm:"foreignKey:SalesReturnStatusId"` //退货状态 |
| | | CreatorId int `json:"-" gorm:"column:creator_id;type:int;comment:创建人id"` //创建人ID |
| | | Creator User `json:"-" gorm:"foreignKey:CreatorId"` //创建人信息 |
| | | Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:退货原因"` //退货原因 |
| | | Products []*Product `json:"products" gorm:"many2many:salesReturn_product;"` //退货产品 |
| | | AmountShouldRefund decimal.Decimal `gorm:"column:amount_should_refund;type:decimal(12,2);comment:应退款金额" json:"amountShouldRefund"` // 应退款金额 |
| | | AmountHasRefund decimal.Decimal `gorm:"column:amount_has_refund;type:decimal(12,2);comment:已退款金额" json:"amountHasRefund"` // 已退款金额 |
| | | AmountTotal decimal.Decimal `gorm:"column:amount_total;type:decimal(12,2);comment:退货产品总金额" json:"-"` |
| | | CodeStandID string `json:"codeStandID" gorm:"column:code_stand_id;type:varchar(255);comment:编码id"` |
| | | CrmModel |
| | | } |
| | | |
| | | SalesReturnSearch struct { |
| | | SalesReturn |
| | | |
| | | Orm *gorm.DB |
| | | Keyword string |
| | | OrderBy string |
| | | PageNum int |
| | | PageSize int |
| | | Orm *gorm.DB |
| | | KeywordType constvar.SalesReturnKeywordType |
| | | Keyword string |
| | | OrderBy string |
| | | PageNum int |
| | | PageSize int |
| | | Preload bool |
| | | Ids []int |
| | | MemberIds []int |
| | | } |
| | | ) |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetOrm(tx *gorm.DB) *SalesReturnSearch { |
| | | slf.Orm = tx |
| | | return slf |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) build() *gorm.DB { |
| | | var db = slf.Orm.Model(&SalesReturn{}) |
| | | if slf.Keyword != "" { |
| | | db = db.Where("name LIKE ?", "%"+slf.Keyword+"%") |
| | | } |
| | | if slf.Id != 0 { |
| | | db = db.Where("id = ?", slf.Id) |
| | | } |
| | | if len(slf.Ids) != 0 { |
| | | db = db.Where("id in ?", slf.Ids) |
| | | } |
| | | if slf.SourceType != 0 { |
| | | db = db.Where("source_type = ?", slf.SourceType) |
| | | } |
| | | if slf.SourceId != 0 { |
| | | db = db.Where("source_id = ?", slf.SourceId) |
| | | } |
| | | if slf.ClientId != 0 { |
| | | db = db.Where("client_id = ?", slf.ClientId) |
| | | } |
| | | if slf.Preload { |
| | | db = db.Preload("Client"). |
| | | Preload("Member"). |
| | | Preload("Source"). |
| | | Preload("SalesReturnStatus"). |
| | | Preload("Products") |
| | | } |
| | | |
| | | if slf.KeywordType != "" { |
| | | switch slf.KeywordType { |
| | | case constvar.SalesReturnKeywordReturnNumber: |
| | | db = db.Where("number like ?", fmt.Sprintf("%%%s%%", slf.Keyword)) |
| | | case constvar.SalesReturnKeywordClientName: |
| | | db = db.Joins("Client", clause.LeftJoin).Where("Client.name like ?", fmt.Sprintf("%%%s%%", slf.Keyword)) |
| | | case constvar.SalesReturnKeywordReturnDate: |
| | | db = db.Where("return_date like ?", fmt.Sprintf("%%%s%%", slf.Keyword)) |
| | | case constvar.SalesReturnKeywordStatus: |
| | | db = db.Joins("SalesReturnStatus").Where("SalesReturnStatus name like ?", fmt.Sprintf("%%%s%%", slf.Keyword)) |
| | | case constvar.SalesReturnKeywordRepository: |
| | | db = db.Where("repository like ?", fmt.Sprintf("%%%s%%", slf.Keyword)) |
| | | case constvar.SalesReturnKeywordAmountShouldRefund: |
| | | db = db.Where("amount_should_refund = ?", slf.Keyword) |
| | | case constvar.SalesReturnKeywordPrincipal: |
| | | db = db.Joins("left join user on user.id = sales_refund.member_id").Where("user.username like ?", fmt.Sprintf("%%%s%%", slf.Keyword)) |
| | | case constvar.SalesReturnKeywordAmountHasRefund: |
| | | db = db.Where("amount_has_refund = ?", slf.Keyword) |
| | | |
| | | } |
| | | } |
| | | |
| | | if len(slf.MemberIds) > 0 { |
| | | db = db.Where("sales_return.member_id in ?", slf.MemberIds) |
| | | } |
| | | if slf.Number != "" { |
| | | db = db.Where("number = ?", slf.Number) |
| | | } |
| | | |
| | | return db |
| | |
| | | return db.Updates(record).Error |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) Find() (*SalesReturn, error) { |
| | | func (slf *SalesReturnSearch) First() (*SalesReturn, error) { |
| | | var db = slf.build() |
| | | var record = new(SalesReturn) |
| | | err := db.First(record).Error |
| | |
| | | if slf.PageNum > 0 && slf.PageSize > 0 { |
| | | db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize) |
| | | } |
| | | |
| | | err := db.Preload("Member").Preload("Client").Preload("Products").Order("id desc").Find(&records).Error |
| | | return records, total, err |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) Find() ([]*SalesReturn, error) { |
| | | var db = slf.build() |
| | | var records = make([]*SalesReturn, 0) |
| | | |
| | | err := db.Find(&records).Error |
| | | return records, err |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) Count() (int64, error) { |
| | | var db = slf.build() |
| | | var total int64 |
| | | err := db.Count(&total).Error |
| | | return total, err |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) MaxAutoIncr() (int, error) { |
| | | type Result struct { |
| | | Max int |
| | | } |
| | | |
| | | var ( |
| | | result Result |
| | | db = slf.build() |
| | | ) |
| | | |
| | | err := db.Select("MAX(id) as max").Scan(&result).Error |
| | | if err != nil { |
| | | return result.Max, fmt.Errorf("max err: %v", err) |
| | | } |
| | | return result.Max, nil |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetId(id int) *SalesReturnSearch { |
| | |
| | | return slf |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetIds(id []int) *SalesReturnSearch { |
| | | slf.Ids = id |
| | | return slf |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetKeyword(keyword string) *SalesReturnSearch { |
| | | slf.Keyword = keyword |
| | | return slf |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetKeywordType(keywordType constvar.SalesReturnKeywordType) *SalesReturnSearch { |
| | | slf.KeywordType = keywordType |
| | | return slf |
| | | } |
| | | |
| | |
| | | slf.OrderBy = order |
| | | return slf |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetPreload(preload bool) *SalesReturnSearch { |
| | | slf.Preload = preload |
| | | return slf |
| | | } |
| | | func (slf *SalesReturnSearch) SetSourceType(sourceType constvar.SalesReturnSourceType) *SalesReturnSearch { |
| | | slf.SourceType = sourceType |
| | | return slf |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetSourceId(sourceId int) *SalesReturnSearch { |
| | | slf.SourceId = sourceId |
| | | return slf |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetClientId(clientId int) *SalesReturnSearch { |
| | | slf.ClientId = clientId |
| | | return slf |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetNumber(number string) *SalesReturnSearch { |
| | | slf.Number = number |
| | | return slf |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) UpdateByMap(data map[string]interface{}) error { |
| | | var db = slf.build() |
| | | return db.Updates(data).Error |
| | | } |
| | | |
| | | func (slf *SalesReturnSearch) SetMemberIds(memberIds []int) *SalesReturnSearch { |
| | | slf.MemberIds = memberIds |
| | | return slf |
| | | } |