cooperation_projects.go 6.9 KB
package service

import (
	"strconv"

	"github.com/linmadan/egglib-go/core/application"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/mobile/cooperation/command"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/mobile/cooperation/dto"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/domain"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway/allied_creation_cooperation"
)

// CooperationProjectService 共创项目服务
type CooperationProjectService struct {
}

// CreateCooperationProject  创建共创项目
func (srv CooperationProjectService) CreateCooperationProject(createCooperationProjectCommand *command.CreateCooperationProjectCommand) (interface{}, error) {
	if err := createCooperationProjectCommand.ValidateCommand(); err != nil {
		return nil, application.ThrowError(application.ARG_ERROR, err.Error())
	}
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(createCooperationProjectCommand.Operator)
	var images []domain.Attachment
	for _, v := range createCooperationProjectCommand.Images {
		images = append(images, domain.Attachment{
			Url: v,
		})
	}
	result, err := creationCooperationGateway.CooperationProjectAdd(allied_creation_cooperation.ReqCooperationProjectAdd{
		CooperationProjectDescription:    createCooperationProjectCommand.CooperationProjectDescription,
		CooperationProjectName:           createCooperationProjectCommand.CooperationProjectName,
		PublisherUid:                     int(createCooperationProjectCommand.Operator.UserId),
		SponsorUid:                       createCooperationProjectCommand.CooperationProjectSponsor,
		CooperationProjectUndertakerType: createCooperationProjectCommand.CooperationProjectUndertakerType,
		Attachment:                       images,
	})

	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	data := struct {
		CooperationProjectId int `json:"cooperationProjectId"`
		command.CreateCooperationProjectCommand
	}{
		CooperationProjectId:            result.CooperationProjectId,
		CreateCooperationProjectCommand: *createCooperationProjectCommand,
	}
	return data, nil
}

// GetCooperationProject  返回共创项目明细
func (srv CooperationProjectService) GetCooperationProject(projectQuery *command.GetCooperationProjectQuery) (interface{}, error) {
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(
		projectQuery.Operator)
	result, err := creationCooperationGateway.CooperationProjectGet(allied_creation_cooperation.ReqCooperationProjectGet{
		CooperationProjectId: projectQuery.CooperationProjectId,
	})
	if err != nil {
		return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
	}

	return dto.ToCooperationProjectInfo(&result.CooperationProject), nil
}

// UpdateCooperationProject
func (srv CooperationProjectService) UpdateCooperationProject(updateCooperationProjectCommand *command.UpdateCooperationProjectCommand) (interface{}, error) {
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(updateCooperationProjectCommand.Operator)
	var images []domain.Attachment
	for _, v := range updateCooperationProjectCommand.Images {
		images = append(images, domain.Attachment{
			Url: v,
		})
	}
	_, err := creationCooperationGateway.CooperationProjectUpdate(allied_creation_cooperation.ReqCooperationProjectUpdate{
		CooperationProjectId:             updateCooperationProjectCommand.CooperationProjectId,
		CooperationProjectName:           updateCooperationProjectCommand.CooperationProjectName,
		CooperationModeNumber:            updateCooperationProjectCommand.CooperationModeNumber,
		CooperationProjectUndertakerType: updateCooperationProjectCommand.CooperationProjectUndertakerType,
		SponsorUid:                       updateCooperationProjectCommand.CooperationProjectSponsor,
		PublisherUid:                     strconv.Itoa(int(updateCooperationProjectCommand.Operator.UserId)),
		CooperationProjectDescription:    updateCooperationProjectCommand.CooperationProjectDescription,
		Attachment:                       images,
	})
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return updateCooperationProjectCommand, nil
}

// EndCooperationProject 企业结束共创项目
func (srv CooperationProjectService) EndCooperationProject(endCooperationProjectCommand *command.EndCooperationProjectCommand) (interface{}, error) {
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(endCooperationProjectCommand.Operator)
	var projectIds []string
	for _, v := range endCooperationProjectCommand.CooperationProjectId {
		idStr := strconv.Itoa(v)
		projectIds = append(projectIds, idStr)
	}
	_, err := creationCooperationGateway.CooperationProjectBatchEnd(allied_creation_cooperation.ReqCooperationProjectBatchEnd{
		CooperationProjectIds: projectIds,
	})
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return endCooperationProjectCommand, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}

// SearchCooperationProject  企业获取共创项目列表
func (srv CooperationProjectService) SearchCooperationProject(projectQuery *command.ListCooperationProjectQuery) (int, interface{}, error) {
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(
		projectQuery.Operator)
	result, err := creationCooperationGateway.CooperationProjectsSearch(allied_creation_cooperation.ReqCooperationProjectSearch{
		PageNumber: projectQuery.PageNumber,
		PageSize:   projectQuery.PageSize,
		Status:     int(projectQuery.Status),
	})
	if err != nil {
		return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	var dataList []dto.CooperationProjectItem
	for i := range result.List {
		item := dto.ToCooperationProjectItem(&result.List[i])
		dataList = append(dataList, *item)
	}
	return int(result.Total), dataList, nil
}

// PersonSearchCooperationProject  共创用户获取共创项目列表
func (srv CooperationProjectService) PersonSearchCooperationProject(projectQuery *command.PersonSearchCooperationProjectQuery) (int, interface{}, error) {
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(
		projectQuery.Operator)
	orgidStr := strconv.Itoa(projectQuery.OrgId)
	result, err := creationCooperationGateway.CooperationProjectsSearch(allied_creation_cooperation.ReqCooperationProjectSearch{
		PageNumber: projectQuery.PageNumber,
		PageSize:   projectQuery.PageSize,
		OrgIds:     []string{orgidStr},
	})
	if err != nil {
		return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	var dataList []dto.CooperationProjectItem
	for i := range result.List {
		item := dto.ToCooperationProjectItem(&result.List[i])
		dataList = append(dataList, *item)
	}
	return int(result.Total), dataList, nil
}