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.IRedis
 | |
| }
 | |
| 
 | |
| var _ ProjectBiz = (*projectBiz)(nil)
 | |
| 
 | |
| func New(store db.Store, redis redis.IRedis) *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)
 | |
| }
 |