更新
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"server/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
@@ -215,3 +218,274 @@ func GetArticleStats() (map[string]int64, error) {
|
||||
|
||||
return stats, nil
|
||||
}
|
||||
|
||||
// GetArticleCategories 获取文章分类列表
|
||||
func GetArticleCategories(tenantId int, page, pageSize int, keyword string, status *int8) ([]*models.DictItem, int, error) {
|
||||
// 首先确保文章分类字典类型存在,如果不存在则创建并添加默认分类
|
||||
err := ensureDefaultArticleCategories(tenantId)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 调用字典服务获取文章分类(使用字典编码 "article_category")
|
||||
// 注意:这里传入true表示包含禁用的项目,然后我们在业务层进行状态过滤
|
||||
categories, err := GetDictItemsByCode("article_category", tenantId, true)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 过滤状态
|
||||
var filteredCategories []*models.DictItem
|
||||
if status != nil {
|
||||
for _, category := range categories {
|
||||
if category.Status == *status {
|
||||
filteredCategories = append(filteredCategories, category)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
filteredCategories = categories
|
||||
}
|
||||
|
||||
// 过滤关键词
|
||||
if keyword != "" {
|
||||
var keywordFiltered []*models.DictItem
|
||||
for _, category := range filteredCategories {
|
||||
if strings.Contains(category.DictLabel, keyword) {
|
||||
keywordFiltered = append(keywordFiltered, category)
|
||||
}
|
||||
}
|
||||
filteredCategories = keywordFiltered
|
||||
}
|
||||
|
||||
// 分页处理
|
||||
total := len(filteredCategories)
|
||||
start := (page - 1) * pageSize
|
||||
end := start + pageSize
|
||||
if start > total {
|
||||
start = total
|
||||
}
|
||||
if end > total {
|
||||
end = total
|
||||
}
|
||||
|
||||
if start >= end {
|
||||
return []*models.DictItem{}, total, nil
|
||||
}
|
||||
|
||||
return filteredCategories[start:end], total, nil
|
||||
}
|
||||
|
||||
// GetArticleCategoryById 根据ID获取文章分类详情
|
||||
func GetArticleCategoryById(id int) (*models.DictItem, error) {
|
||||
return GetDictItemById(id)
|
||||
}
|
||||
|
||||
// CreateArticleCategory 创建文章分类
|
||||
func CreateArticleCategory(tenantId, userId int, label, value string, status int8, sort int, color, icon, remark string) (int64, error) {
|
||||
// 先获取或创建文章分类字典类型
|
||||
dictType, err := getOrCreateArticleCategoryDictType(tenantId, userId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// 构建字典项对象
|
||||
var dictItem models.DictItem
|
||||
dictItem.DictTypeId = dictType.Id
|
||||
dictItem.DictLabel = label
|
||||
dictItem.DictValue = value
|
||||
dictItem.Status = status
|
||||
dictItem.Sort = sort
|
||||
dictItem.Color = color
|
||||
dictItem.Icon = icon
|
||||
dictItem.Remark = remark
|
||||
dictItem.CreateBy = strconv.Itoa(userId)
|
||||
dictItem.UpdateBy = strconv.Itoa(userId)
|
||||
|
||||
// 调用字典服务创建分类
|
||||
return AddDictItem(&dictItem)
|
||||
}
|
||||
|
||||
// UpdateArticleCategory 更新文章分类
|
||||
func UpdateArticleCategory(id, userId int, label, value string, status int8, sort int, color, icon, remark string) error {
|
||||
// 获取现有分类
|
||||
existingCategory, err := GetDictItemById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if existingCategory == nil {
|
||||
return fmt.Errorf("分类不存在")
|
||||
}
|
||||
|
||||
// 构建更新对象
|
||||
var dictItem models.DictItem
|
||||
dictItem.Id = id
|
||||
dictItem.DictTypeId = existingCategory.DictTypeId
|
||||
dictItem.DictLabel = label
|
||||
dictItem.DictValue = value
|
||||
dictItem.Status = status
|
||||
dictItem.Sort = sort
|
||||
dictItem.Color = color
|
||||
dictItem.Icon = icon
|
||||
dictItem.Remark = remark
|
||||
dictItem.UpdateBy = strconv.Itoa(userId)
|
||||
|
||||
// 调用字典服务更新分类
|
||||
return UpdateDictItem(&dictItem)
|
||||
}
|
||||
|
||||
// DeleteArticleCategory 删除文章分类
|
||||
func DeleteArticleCategory(id int) error {
|
||||
// 检查是否有文章使用此分类
|
||||
o := orm.NewOrm()
|
||||
var count int
|
||||
err := o.Raw("SELECT COUNT(*) FROM yz_articles WHERE cate = ? AND delete_time IS NULL", id).QueryRow(&count)
|
||||
if err == nil && count > 0 {
|
||||
return fmt.Errorf("该分类下存在文章,无法删除")
|
||||
}
|
||||
|
||||
// 调用字典服务删除分类
|
||||
return DeleteDictItem(id)
|
||||
}
|
||||
|
||||
// UpdateArticleCategoryStatus 更新文章分类状态
|
||||
func UpdateArticleCategoryStatus(id int, status int8) error {
|
||||
// 获取现有分类
|
||||
category, err := GetDictItemById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if category == nil {
|
||||
return fmt.Errorf("分类不存在")
|
||||
}
|
||||
|
||||
// 更新状态
|
||||
category.Status = status
|
||||
category.UpdateTime = time.Now()
|
||||
|
||||
// 调用字典服务更新分类
|
||||
return UpdateDictItem(category)
|
||||
}
|
||||
|
||||
// ensureDefaultArticleCategories 确保文章分类字典类型和默认分类项存在
|
||||
func ensureDefaultArticleCategories(tenantId int) error {
|
||||
o := orm.NewOrm()
|
||||
|
||||
// 检查文章分类字典类型是否存在
|
||||
dictType := &models.DictType{}
|
||||
err := o.Raw("SELECT * FROM sys_dict_type WHERE dict_code = ? AND tenant_id = ? AND is_deleted = 0",
|
||||
"article_category", tenantId).QueryRow(dictType)
|
||||
|
||||
if err != nil {
|
||||
// 字典类型不存在,创建它
|
||||
dictType = &models.DictType{
|
||||
TenantId: tenantId,
|
||||
DictCode: "article_category",
|
||||
DictName: "文章分类",
|
||||
ParentId: 0,
|
||||
Status: 1,
|
||||
IsGlobal: 0,
|
||||
Sort: 0,
|
||||
Remark: "文章分类字典",
|
||||
CreateBy: "system",
|
||||
UpdateBy: "system",
|
||||
IsDeleted: 0,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
|
||||
_, err = o.Insert(dictType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否已有分类项,如果没有则创建默认分类
|
||||
var count int
|
||||
err = o.Raw("SELECT COUNT(*) FROM sys_dict_item WHERE dict_type_id = ? AND is_deleted = 0", dictType.Id).QueryRow(&count)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if count == 0 {
|
||||
// 创建默认分类项
|
||||
defaultCategories := []struct {
|
||||
label string
|
||||
value string
|
||||
sort int
|
||||
color string
|
||||
remark string
|
||||
}{
|
||||
{"技术分享", "tech", 1, "#409EFF", "技术相关文章"},
|
||||
{"行业资讯", "news", 2, "#67C23A", "行业新闻资讯"},
|
||||
{"教程指南", "tutorial", 3, "#E6A23C", "使用教程和指南"},
|
||||
{"公告通知", "announcement", 4, "#F56C6C", "重要公告通知"},
|
||||
{"其他", "other", 5, "#909399", "其他类型文章"},
|
||||
}
|
||||
|
||||
for _, cat := range defaultCategories {
|
||||
dictItem := &models.DictItem{
|
||||
DictTypeId: dictType.Id,
|
||||
DictLabel: cat.label,
|
||||
DictValue: cat.value,
|
||||
ParentId: 0,
|
||||
Status: 1,
|
||||
Sort: cat.sort,
|
||||
Color: cat.color,
|
||||
Remark: cat.remark,
|
||||
CreateBy: "system",
|
||||
UpdateBy: "system",
|
||||
IsDeleted: 0,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
|
||||
_, err = o.Insert(dictItem)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// getOrCreateArticleCategoryDictType 获取或创建文章分类字典类型
|
||||
func getOrCreateArticleCategoryDictType(tenantId int, userId int) (*models.DictType, error) {
|
||||
o := orm.NewOrm()
|
||||
|
||||
// 尝试获取现有的文章分类字典类型
|
||||
dictType := &models.DictType{}
|
||||
err := o.Raw("SELECT * FROM sys_dict_type WHERE dict_code = ? AND tenant_id = ? AND is_deleted = 0",
|
||||
"article_category", tenantId).QueryRow(dictType)
|
||||
|
||||
if err == nil {
|
||||
// 已存在,直接返回
|
||||
return dictType, nil
|
||||
}
|
||||
|
||||
// 不存在,创建新的字典类型
|
||||
dictType = &models.DictType{
|
||||
TenantId: tenantId,
|
||||
DictCode: "article_category",
|
||||
DictName: "文章分类",
|
||||
ParentId: 0,
|
||||
Status: 1,
|
||||
IsGlobal: 0,
|
||||
Sort: 0,
|
||||
Remark: "文章分类字典",
|
||||
CreateBy: strconv.Itoa(userId),
|
||||
UpdateBy: strconv.Itoa(userId),
|
||||
IsDeleted: 0,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
|
||||
_, err = o.Insert(dictType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return dictType, nil
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"server/models"
|
||||
@@ -44,7 +45,11 @@ func ListCustomers(tenantId, keyword, status string, page, pageSize int) (list [
|
||||
// GetCustomer 通过ID获取客户
|
||||
func GetCustomer(id string) (*models.Customer, error) {
|
||||
o := orm.NewOrm()
|
||||
m := models.Customer{Id: id}
|
||||
var customerId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
customerId = int32(parsedId)
|
||||
}
|
||||
m := models.Customer{Id: customerId}
|
||||
if err := o.Read(&m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -73,16 +78,38 @@ func UpdateCustomer(m *models.Customer, cols ...string) error {
|
||||
func SoftDeleteCustomer(id string) error {
|
||||
o := orm.NewOrm()
|
||||
now := time.Now()
|
||||
m := models.Customer{Id: id, DeleteTime: &now}
|
||||
var customerId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
customerId = int32(parsedId)
|
||||
}
|
||||
m := models.Customer{Id: customerId, DeleteTime: &now}
|
||||
_, err := o.Update(&m, "delete_time")
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新客户字段(支持部分字段更新)
|
||||
func UpdateCustomerFields(id string, params orm.Params) error {
|
||||
o := orm.NewOrm()
|
||||
var customerId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
customerId = int32(parsedId)
|
||||
}
|
||||
m := &models.Customer{Id: customerId}
|
||||
if _, err := o.QueryTable(m).Filter("id", customerId).Update(params); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 更新客户开票信息
|
||||
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 {
|
||||
var customerId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
customerId = int32(parsedId)
|
||||
}
|
||||
m := &models.Customer{Id: customerId}
|
||||
if _, err := o.QueryTable(m).Filter("id", customerId).Update(params); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -46,7 +46,7 @@ func ListSuppliers(tenantId, keyword, status string, page, pageSize int) (list [
|
||||
// GetSupplier 通过ID获取供应商
|
||||
func GetSupplier(id int64) (*models.Supplier, error) {
|
||||
o := orm.NewOrm()
|
||||
m := models.Supplier{Id: id}
|
||||
m := models.Supplier{Id: int32(id)}
|
||||
if err := o.Read(&m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -75,11 +75,25 @@ func UpdateSupplier(m *models.Supplier, cols ...string) error {
|
||||
func SoftDeleteSupplier(id int64) error {
|
||||
o := orm.NewOrm()
|
||||
now := time.Now()
|
||||
m := models.Supplier{Id: id, DeleteTime: &now}
|
||||
m := models.Supplier{Id: int32(id), DeleteTime: &now}
|
||||
_, err := o.Update(&m, "delete_time")
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新供应商字段(支持部分字段更新)
|
||||
func UpdateSupplierFields(id string, params orm.Params) error {
|
||||
o := orm.NewOrm()
|
||||
var supplierId int32
|
||||
if parsedId, err := strconv.ParseInt(id, 10, 64); err == nil {
|
||||
supplierId = int32(parsedId)
|
||||
}
|
||||
m := &models.Supplier{Id: supplierId}
|
||||
if _, err := o.QueryTable(m).Filter("id", supplierId).Update(params); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 更新供应商开票信息
|
||||
func UpdateSupplierInvoice(params orm.Params) error {
|
||||
o := orm.NewOrm()
|
||||
|
||||
Reference in New Issue
Block a user