149 lines
3.6 KiB
Go
149 lines
3.6 KiB
Go
package project
|
|
|
|
import (
|
|
"context"
|
|
"strconv"
|
|
|
|
db "management/internal/db/sqlc"
|
|
"management/internal/erpserver/model/view"
|
|
"management/internal/pkg/redis"
|
|
"management/internal/pkg/tpl/html"
|
|
)
|
|
|
|
type ProjectBiz interface {
|
|
Create(ctx context.Context, p *db.CreateProjectParams, pf []*db.CreateProjectFileParams) error
|
|
Update(ctx context.Context, p *db.UpdateProjectParams, pf []*db.CreateProjectFileParams) error
|
|
List(ctx context.Context, q *db.ListProjectConditionParam) ([]*db.ProjectView, int64, error)
|
|
Get(ctx context.Context, id int64) (*db.Project, error)
|
|
|
|
XmSelect(ctx context.Context) ([]*view.XmSelect, error)
|
|
ListHtml(ctx context.Context) ([]*html.SelectDict, error)
|
|
|
|
ProjectExpansion
|
|
}
|
|
|
|
type ProjectExpansion interface {
|
|
ListProjectFiles(ctx context.Context, projectID int64) ([]*db.ProjectFile, error)
|
|
|
|
Statistics(ctx context.Context) ([]*db.StatisticsProjectsRow, error)
|
|
StatisticsItem(ctx context.Context, id int64) (*db.StatisticsProjectItemRow, error)
|
|
}
|
|
|
|
type projectBiz struct {
|
|
store db.Store
|
|
redis redis.RedisCache
|
|
}
|
|
|
|
var _ ProjectBiz = (*projectBiz)(nil)
|
|
|
|
func New(store db.Store, redis redis.RedisCache) *projectBiz {
|
|
return &projectBiz{
|
|
store: store,
|
|
redis: redis,
|
|
}
|
|
}
|
|
|
|
func (b *projectBiz) Create(ctx context.Context, p *db.CreateProjectParams, pf []*db.CreateProjectFileParams) error {
|
|
return b.store.ExecTx(ctx, func(q *db.Queries) error {
|
|
_, err := q.CreateProject(ctx, p)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, item := range pf {
|
|
_, err = q.CreateProjectFile(ctx, item)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func (b *projectBiz) Update(ctx context.Context, p *db.UpdateProjectParams, pf []*db.CreateProjectFileParams) error {
|
|
return b.store.ExecTx(ctx, func(q *db.Queries) error {
|
|
_, err := q.UpdateProject(ctx, p)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = q.DeleteProjectFile(ctx, p.ID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, item := range pf {
|
|
_, err = q.CreateProjectFile(ctx, item)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func (b *projectBiz) List(ctx context.Context, q *db.ListProjectConditionParam) ([]*db.ProjectView, int64, error) {
|
|
res, total, err := b.store.ListProjectCondition(ctx, q)
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
return res, total, nil
|
|
}
|
|
|
|
func (b *projectBiz) Get(ctx context.Context, id int64) (*db.Project, error) {
|
|
return b.store.GetProject(ctx, id)
|
|
}
|
|
|
|
func (b *projectBiz) ListProjectFiles(ctx context.Context, projectID int64) ([]*db.ProjectFile, error) {
|
|
return b.store.ListProjectFiles(ctx, projectID)
|
|
}
|
|
|
|
func (b *projectBiz) XmSelect(ctx context.Context) ([]*view.XmSelect, error) {
|
|
all, err := b.store.AllProjects(ctx)
|
|
if err != nil || len(all) == 0 {
|
|
return nil, err
|
|
}
|
|
|
|
var res []*view.XmSelect
|
|
for _, item := range all {
|
|
res = append(res, &view.XmSelect{
|
|
Name: item.Name,
|
|
Value: strconv.FormatInt(item.ID, 10),
|
|
})
|
|
}
|
|
return res, nil
|
|
}
|
|
|
|
func (b *projectBiz) ListHtml(ctx context.Context) ([]*html.SelectDict, error) {
|
|
all, err := b.store.AllProjects(ctx)
|
|
if err != nil || len(all) == 0 {
|
|
return nil, err
|
|
}
|
|
|
|
var res []*html.SelectDict
|
|
res = append(res, &html.SelectDict{
|
|
Name: "请选择",
|
|
Value: "0",
|
|
})
|
|
for _, v := range all {
|
|
item := html.SelectDict{
|
|
Name: v.Name,
|
|
Value: strconv.Itoa(int(v.ID)),
|
|
}
|
|
res = append(res, &item)
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
func (b *projectBiz) Statistics(ctx context.Context) ([]*db.StatisticsProjectsRow, error) {
|
|
return b.store.StatisticsProjects(ctx)
|
|
}
|
|
|
|
func (b *projectBiz) StatisticsItem(ctx context.Context, id int64) (*db.StatisticsProjectItemRow, error) {
|
|
return b.store.StatisticsProjectItem(ctx, id)
|
|
}
|