完善供应商和客户功能
This commit is contained in:
+20
-17
@@ -2,15 +2,17 @@ package services
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"server/models"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"server/models"
|
||||
)
|
||||
|
||||
func ListContacts(tenantId string, relatedType int, relatedId string) ([]models.Contact, error) {
|
||||
o := orm.NewOrm()
|
||||
var list []models.Contact
|
||||
qs := o.QueryTable(new(models.Contact)).Filter("tenant_id", tenantId).Filter("related_type", relatedType).Filter("related_id", relatedId).Filter("is_deleted", 0)
|
||||
qs := o.QueryTable(new(models.Contact)).Filter("tenant_id", tenantId).Filter("related_type", relatedType).Filter("related_id", relatedId).Filter("delete_time__isnull", true)
|
||||
_, err := qs.All(&list)
|
||||
return list, err
|
||||
}
|
||||
@@ -20,10 +22,6 @@ func CreateContact(m *models.Contact) error {
|
||||
return errors.New("缺少必填参数")
|
||||
}
|
||||
o := orm.NewOrm()
|
||||
// 若设为主联系人,则先清理同归属其他主联系人
|
||||
if m.IsPrimary == 1 {
|
||||
_, _ = o.QueryTable(new(models.Contact)).Filter("tenant_id", m.TenantId).Filter("related_type", m.RelatedType).Filter("related_id", m.RelatedId).Filter("is_deleted", 0).Update(orm.Params{"is_primary": 0})
|
||||
}
|
||||
_, err := o.Insert(m)
|
||||
return err
|
||||
}
|
||||
@@ -33,16 +31,17 @@ func UpdateContact(m *models.Contact) error {
|
||||
return errors.New("id不能为空")
|
||||
}
|
||||
o := orm.NewOrm()
|
||||
// 若设为主联系人,则先清理同归属其他主联系人
|
||||
if m.IsPrimary == 1 {
|
||||
// 需要获取原始记录以得到 tenant/related
|
||||
var origin models.Contact
|
||||
origin.Id = m.Id
|
||||
if err := o.Read(&origin); err == nil {
|
||||
_, _ = o.QueryTable(new(models.Contact)).Filter("tenant_id", origin.TenantId).Filter("related_type", origin.RelatedType).Filter("related_id", origin.RelatedId).Filter("id__ne", m.Id).Filter("is_deleted", 0).Update(orm.Params{"is_primary": 0})
|
||||
}
|
||||
existing := models.Contact{Id: m.Id}
|
||||
if err := o.Read(&existing); err != nil {
|
||||
return err
|
||||
}
|
||||
_, err := o.Update(m, "contact_name", "gender", "mobile", "phone", "email", "position", "department", "is_primary", "remark")
|
||||
if existing.TenantId != m.TenantId {
|
||||
return errors.New("租户不匹配")
|
||||
}
|
||||
if existing.DeleteTime != nil {
|
||||
return errors.New("记录已删除")
|
||||
}
|
||||
_, err := o.Update(m, "contact_name", "gender", "phone1", "phone2", "phone3", "qq", "wechat", "email", "position", "department", "home_address", "remark", "is_primary")
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -58,7 +57,11 @@ func DeleteContact(id int64, tenantId string) error {
|
||||
if m.TenantId != tenantId {
|
||||
return errors.New("租户不匹配")
|
||||
}
|
||||
m.IsDeleted = 1
|
||||
_, err := o.Update(&m, "is_primary", "is_deleted")
|
||||
if m.DeleteTime != nil {
|
||||
return errors.New("记录已删除")
|
||||
}
|
||||
now := time.Now()
|
||||
m.DeleteTime = &now
|
||||
_, err := o.Update(&m, "delete_time")
|
||||
return err
|
||||
}
|
||||
|
||||
+62
-52
@@ -1,79 +1,89 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"time"
|
||||
"time"
|
||||
|
||||
"server/models"
|
||||
"server/models"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
)
|
||||
|
||||
// ListCustomers 获取客户列表(可选租户过滤、关键词搜索、状态筛选、分页)
|
||||
func ListCustomers(tenantId, keyword, status string, page, pageSize int) (list []*models.Customer, total int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
qs := o.QueryTable(new(models.Customer)).Filter("delete_time__isnull", true)
|
||||
if tenantId != "" {
|
||||
qs = qs.Filter("tenant_id", tenantId)
|
||||
}
|
||||
if keyword != "" {
|
||||
cond := orm.NewCondition()
|
||||
cond1 := cond.Or("customer_name__icontains", keyword).
|
||||
Or("contact_person__icontains", keyword).
|
||||
Or("contact_phone__icontains", keyword)
|
||||
qs = qs.SetCond(cond1)
|
||||
}
|
||||
if status != "" {
|
||||
qs = qs.Filter("status", status)
|
||||
}
|
||||
o := orm.NewOrm()
|
||||
qs := o.QueryTable(new(models.Customer)).Filter("delete_time__isnull", true)
|
||||
if tenantId != "" {
|
||||
qs = qs.Filter("tenant_id", tenantId)
|
||||
}
|
||||
if keyword != "" {
|
||||
cond := orm.NewCondition()
|
||||
cond1 := cond.Or("customer_name__icontains", keyword).
|
||||
Or("contact_person__icontains", keyword).
|
||||
Or("contact_phone__icontains", keyword)
|
||||
qs = qs.SetCond(cond1)
|
||||
}
|
||||
if status != "" {
|
||||
qs = qs.Filter("status", status)
|
||||
}
|
||||
|
||||
total, err = qs.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if page <= 0 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize <= 0 {
|
||||
pageSize = 10
|
||||
}
|
||||
offset := (page - 1) * pageSize
|
||||
_, err = qs.OrderBy("-create_time").Limit(pageSize, offset).All(&list)
|
||||
return
|
||||
total, err = qs.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if page <= 0 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize <= 0 {
|
||||
pageSize = 10
|
||||
}
|
||||
offset := (page - 1) * pageSize
|
||||
_, err = qs.OrderBy("-create_time").Limit(pageSize, offset).All(&list)
|
||||
return
|
||||
}
|
||||
|
||||
// GetCustomer 通过ID获取客户
|
||||
func GetCustomer(id string) (*models.Customer, error) {
|
||||
o := orm.NewOrm()
|
||||
m := models.Customer{Id: id}
|
||||
if err := o.Read(&m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &m, nil
|
||||
o := orm.NewOrm()
|
||||
m := models.Customer{Id: id}
|
||||
if err := o.Read(&m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &m, nil
|
||||
}
|
||||
|
||||
// CreateCustomer 新增客户
|
||||
func CreateCustomer(m *models.Customer) error {
|
||||
o := orm.NewOrm()
|
||||
_, err := o.Insert(m)
|
||||
return err
|
||||
o := orm.NewOrm()
|
||||
_, err := o.Insert(m)
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateCustomer 更新客户(全量更新)
|
||||
func UpdateCustomer(m *models.Customer, cols ...string) error {
|
||||
o := orm.NewOrm()
|
||||
if len(cols) == 0 {
|
||||
_, err := o.Update(m)
|
||||
return err
|
||||
}
|
||||
_, err := o.Update(m, cols...)
|
||||
return err
|
||||
o := orm.NewOrm()
|
||||
if len(cols) == 0 {
|
||||
_, err := o.Update(m)
|
||||
return err
|
||||
}
|
||||
_, err := o.Update(m, cols...)
|
||||
return err
|
||||
}
|
||||
|
||||
// SoftDeleteCustomer 软删除客户
|
||||
func SoftDeleteCustomer(id string) error {
|
||||
o := orm.NewOrm()
|
||||
now := time.Now()
|
||||
m := models.Customer{Id: id, DeleteTime: &now}
|
||||
_, err := o.Update(&m, "delete_time")
|
||||
return err
|
||||
o := orm.NewOrm()
|
||||
now := time.Now()
|
||||
m := models.Customer{Id: id, DeleteTime: &now}
|
||||
_, err := o.Update(&m, "delete_time")
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新客户开票信息
|
||||
func UpdateInvoice(id string, params orm.Params) error {
|
||||
o := orm.NewOrm()
|
||||
m := &models.Customer{Id: id}
|
||||
if _, err := o.QueryTable(m).Filter("id", id).Update(params); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
+91
-54
@@ -1,79 +1,116 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"time"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"server/models"
|
||||
"server/models"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
)
|
||||
|
||||
// ListSuppliers 获取供应商列表(可选租户过滤、关键词搜索、状态筛选、分页)
|
||||
func ListSuppliers(tenantId, keyword, status string, page, pageSize int) (list []*models.Supplier, total int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
qs := o.QueryTable(new(models.Supplier)).Filter("delete_time__isnull", true)
|
||||
if tenantId != "" {
|
||||
qs = qs.Filter("tenant_id", tenantId)
|
||||
}
|
||||
if keyword != "" {
|
||||
cond := orm.NewCondition()
|
||||
cond1 := cond.Or("supplier_name__icontains", keyword).
|
||||
Or("contact_person__icontains", keyword).
|
||||
Or("contact_phone__icontains", keyword)
|
||||
qs = qs.SetCond(cond1)
|
||||
}
|
||||
if status != "" {
|
||||
qs = qs.Filter("status", status)
|
||||
}
|
||||
o := orm.NewOrm()
|
||||
qs := o.QueryTable(new(models.Supplier)).Filter("delete_time__isnull", true)
|
||||
if tenantId != "" {
|
||||
qs = qs.Filter("tenant_id", tenantId)
|
||||
}
|
||||
if keyword != "" {
|
||||
cond := orm.NewCondition()
|
||||
cond1 := cond.Or("supplier_name__icontains", keyword).
|
||||
Or("contact_person__icontains", keyword).
|
||||
Or("contact_phone__icontains", keyword)
|
||||
qs = qs.SetCond(cond1)
|
||||
}
|
||||
if status != "" {
|
||||
qs = qs.Filter("status", status)
|
||||
}
|
||||
|
||||
total, err = qs.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if page <= 0 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize <= 0 {
|
||||
pageSize = 10
|
||||
}
|
||||
offset := (page - 1) * pageSize
|
||||
_, err = qs.OrderBy("-create_time").Limit(pageSize, offset).All(&list)
|
||||
return
|
||||
total, err = qs.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if page <= 0 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize <= 0 {
|
||||
pageSize = 10
|
||||
}
|
||||
offset := (page - 1) * pageSize
|
||||
_, err = qs.OrderBy("-create_time").Limit(pageSize, offset).All(&list)
|
||||
return
|
||||
}
|
||||
|
||||
// GetSupplier 通过ID获取供应商
|
||||
func GetSupplier(id string) (*models.Supplier, error) {
|
||||
o := orm.NewOrm()
|
||||
m := models.Supplier{Id: id}
|
||||
if err := o.Read(&m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &m, nil
|
||||
func GetSupplier(id int64) (*models.Supplier, error) {
|
||||
o := orm.NewOrm()
|
||||
m := models.Supplier{Id: id}
|
||||
if err := o.Read(&m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &m, nil
|
||||
}
|
||||
|
||||
// CreateSupplier 新增供应商
|
||||
func CreateSupplier(m *models.Supplier) error {
|
||||
o := orm.NewOrm()
|
||||
_, err := o.Insert(m)
|
||||
return err
|
||||
o := orm.NewOrm()
|
||||
_, err := o.Insert(m)
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateSupplier 更新供应商(全量更新)
|
||||
func UpdateSupplier(m *models.Supplier, cols ...string) error {
|
||||
o := orm.NewOrm()
|
||||
if len(cols) == 0 {
|
||||
_, err := o.Update(m)
|
||||
return err
|
||||
}
|
||||
_, err := o.Update(m, cols...)
|
||||
return err
|
||||
o := orm.NewOrm()
|
||||
if len(cols) == 0 {
|
||||
_, err := o.Update(m)
|
||||
return err
|
||||
}
|
||||
_, err := o.Update(m, cols...)
|
||||
return err
|
||||
}
|
||||
|
||||
// SoftDeleteSupplier 软删除供应商
|
||||
func SoftDeleteSupplier(id string) error {
|
||||
o := orm.NewOrm()
|
||||
now := time.Now()
|
||||
m := models.Supplier{Id: id, DeleteTime: &now}
|
||||
_, err := o.Update(&m, "delete_time")
|
||||
return err
|
||||
func SoftDeleteSupplier(id int64) error {
|
||||
o := orm.NewOrm()
|
||||
now := time.Now()
|
||||
m := models.Supplier{Id: id, DeleteTime: &now}
|
||||
_, err := o.Update(&m, "delete_time")
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新供应商开票信息
|
||||
func UpdateSupplierInvoice(params orm.Params) error {
|
||||
o := orm.NewOrm()
|
||||
// Extract id from params
|
||||
idVal, ok := params["id"]
|
||||
if !ok || idVal == "" {
|
||||
return fmt.Errorf("id is required")
|
||||
}
|
||||
var id int64
|
||||
switch v := idVal.(type) {
|
||||
case int64:
|
||||
id = v
|
||||
case int:
|
||||
id = int64(v)
|
||||
case float64:
|
||||
id = int64(v)
|
||||
case string:
|
||||
if v == "" {
|
||||
return fmt.Errorf("id is required")
|
||||
}
|
||||
n, err := strconv.ParseInt(v, 10, 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid id: %v", err)
|
||||
}
|
||||
id = n
|
||||
default:
|
||||
return fmt.Errorf("invalid id type")
|
||||
}
|
||||
delete(params, "id") // remove id from update fields
|
||||
if _, err := o.QueryTable(new(models.Supplier)).Filter("id", id).Update(params); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user