2023-10-13 09:20:44 +00:00
|
|
|
package models
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2023-10-17 07:33:05 +00:00
|
|
|
"go-admin/app/admin/models/common"
|
2023-10-13 09:20:44 +00:00
|
|
|
orm "go-admin/common/global"
|
|
|
|
"go-admin/logger"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Supplier struct {
|
|
|
|
Model
|
|
|
|
|
2024-06-14 07:15:39 +00:00
|
|
|
Number string `json:"number" gorm:"index"` // 编号
|
|
|
|
Name string `json:"name"` // 供应商名称
|
|
|
|
Province string `json:"province"` // 省
|
|
|
|
City string `json:"city"` // 市
|
|
|
|
Area string `json:"area"` // 区
|
|
|
|
Address string `json:"address"` // 详细地址
|
|
|
|
Contact string `json:"contact"` // 联系人
|
|
|
|
Tel string `json:"tel"` // 手机号
|
|
|
|
Landline string `json:"landline"` // 座机电话
|
|
|
|
Email string `json:"email"` // 电子邮件
|
|
|
|
CompanyWebsite string `json:"company_website"` // 公司网址
|
|
|
|
PaymentCycle uint32 `json:"payment_cycle"` // 付款周期/天
|
|
|
|
TaxNumber string `json:"tax_number"` // 税号
|
|
|
|
CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id
|
|
|
|
AccountHolder string `json:"account_holder"` // 开户人
|
|
|
|
OpeningBank string `json:"opening_bank"` // 开户银行
|
|
|
|
BankAccount string `json:"bank_account"` // 银行账号
|
|
|
|
BankData string `gorm:"type:json" json:"bank_data,omitempty"` // 开户银行信息
|
|
|
|
BankList []SupplierBankInfo `json:"bank_list" gorm:"-" ` // 开户银行信息列表
|
|
|
|
}
|
|
|
|
|
|
|
|
// SupplierBankInfo 开户银行信息列表
|
|
|
|
type SupplierBankInfo struct {
|
|
|
|
AccountHolder string `json:"account_holder"` // 开户人
|
|
|
|
OpeningBank string `json:"opening_bank"` // 开户银行
|
|
|
|
BankAccount string `json:"bank_account"` // 银行账号
|
2023-10-13 09:20:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (s *Supplier) TableName() string {
|
|
|
|
return "erp_supplier"
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *Supplier) BeforeCreate(tx *gorm.DB) error {
|
|
|
|
if s.Number == "" {
|
2023-10-17 07:33:05 +00:00
|
|
|
var count int64
|
|
|
|
err := tx.Table(s.TableName()).
|
|
|
|
Unscoped().
|
2023-10-17 08:14:39 +00:00
|
|
|
Scopes(common.ScopeBusiness(s.CooperativeBusinessId)).
|
2023-10-17 07:33:05 +00:00
|
|
|
Count(&count).Error
|
2023-10-13 09:20:44 +00:00
|
|
|
if err != nil {
|
2023-10-14 08:19:04 +00:00
|
|
|
logger.Error("get supplier count failed", logger.Field("err", err), logger.Field("s", s))
|
2023-10-13 09:20:44 +00:00
|
|
|
return err
|
|
|
|
}
|
2023-11-16 10:09:11 +00:00
|
|
|
s.Number = fmt.Sprintf("%03d", count+1)
|
2023-10-13 09:20:44 +00:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type GetSupplierRequest struct {
|
2023-10-16 08:46:20 +00:00
|
|
|
Name string //供应商名称
|
|
|
|
Number string //供应商编号
|
|
|
|
CooperativeBusinessId uint32 //合作商id
|
2024-07-01 01:44:35 +00:00
|
|
|
PageIndex int `json:"pageIndex"` // 页码
|
|
|
|
PageSize int `json:"pageSize"` // 每页展示数据条数
|
2023-10-13 09:20:44 +00:00
|
|
|
}
|
|
|
|
|
2024-07-01 01:44:35 +00:00
|
|
|
type GetSupplierResp struct {
|
|
|
|
List []Supplier `json:"list"`
|
|
|
|
Total int `json:"total"` // 数据总条数
|
|
|
|
PageIndex int `json:"pageIndex"` // 页码
|
|
|
|
PageSize int `json:"pageSize"` // 每页展示条数
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetSupplier(req *GetSupplierRequest) (*GetSupplierResp, error) {
|
|
|
|
resp := &GetSupplierResp{
|
|
|
|
PageIndex: req.PageIndex,
|
|
|
|
PageSize: req.PageSize,
|
|
|
|
}
|
|
|
|
page := req.PageIndex - 1
|
|
|
|
if page < 0 {
|
|
|
|
page = 0
|
|
|
|
}
|
|
|
|
if req.PageSize == 0 {
|
|
|
|
req.PageSize = 10
|
|
|
|
}
|
|
|
|
|
|
|
|
var list []Supplier
|
2023-10-13 09:20:44 +00:00
|
|
|
m := orm.Eloquent.Model(Supplier{})
|
|
|
|
if req.Name != "" {
|
2023-10-18 03:37:45 +00:00
|
|
|
m = m.Where("name = ?", req.Name)
|
2023-10-13 09:20:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if req.Number != "" {
|
|
|
|
m = m.Where("number = ?", req.Number)
|
|
|
|
}
|
|
|
|
|
2023-10-17 08:14:39 +00:00
|
|
|
m = m.Scopes(common.ScopeBusiness(req.CooperativeBusinessId))
|
2023-10-16 08:46:20 +00:00
|
|
|
|
2024-07-01 01:44:35 +00:00
|
|
|
var count int64
|
|
|
|
err := m.Count(&count).Error
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("query count err:%v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
offset := page * req.PageSize
|
|
|
|
limit := req.PageSize
|
|
|
|
err = m.Order("created_at desc").Offset(offset).Limit(limit).Find(&list).Error
|
2023-10-13 09:20:44 +00:00
|
|
|
if err != nil {
|
2023-10-14 08:19:04 +00:00
|
|
|
logger.Error("get supplier list err", logger.Field("err", err), logger.Field("req", req))
|
2023-10-13 09:20:44 +00:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2024-06-14 07:15:39 +00:00
|
|
|
// 反序列化 BankData
|
|
|
|
for i, v := range list {
|
|
|
|
if list[i].BankData != "" {
|
|
|
|
list[i].BankList = DeserializeBankData(v.BankData)
|
|
|
|
list[i].BankData = ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-01 01:44:35 +00:00
|
|
|
resp.List = list
|
|
|
|
|
|
|
|
//跟之前保持一致
|
|
|
|
resp.Total = int(count)
|
|
|
|
resp.PageIndex = page + 1
|
|
|
|
resp.PageSize = req.PageSize
|
|
|
|
|
|
|
|
return resp, nil
|
2023-10-13 09:20:44 +00:00
|
|
|
}
|