cooperation_project.go 10.8 KB
package service

import (
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/constant"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/domain"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/broker"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway/allied_creation_user"
	"strconv"

	"github.com/linmadan/egglib-go/core/application"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/web/cooperationProject/command"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/web/cooperationProject/dto"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/web/cooperationProject/query"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway/allied_creation_cooperation"
)

// 共创项目管理
type CooperationProjectService struct {
}

// 创建共创项目管理
func (cooperationProjectService *CooperationProjectService) CreateCooperationProject(createCooperationProjectCommand *command.CreateCooperationProjectCommand) (interface{}, error) {

	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(createCooperationProjectCommand.Operator)

	result, err := creationCooperationGateway.CooperationProjectAdd(allied_creation_cooperation.ReqCooperationProjectAdd{
		CooperationProjectDescription:     createCooperationProjectCommand.CooperationProjectDescription,
		CooperationProjectName:            createCooperationProjectCommand.CooperationProjectName,
		CooperationModeNumber:             createCooperationProjectCommand.CooperationModeNumber,
		PublisherUid:                      int(createCooperationProjectCommand.Operator.UserId),
		SponsorUid:                        createCooperationProjectCommand.CooperationProjectSponsor,
		DepartmentId:                      int(createCooperationProjectCommand.DepartmentId),
		CooperationProjectUndertakerTypes: createCooperationProjectCommand.CooperationProjectUndertakerType,
		Attachment:                        createCooperationProjectCommand.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,
	}
	if err = broker.Push(constant.TOPIC_UP_BLOCK_CHAIN, broker.NewPushObject(
		domain.BlockChainSourceCooperationProject,
		strconv.Itoa(result.CooperationProject.CooperationProjectId),
		strconv.Itoa(result.CooperationProject.CooperationProjectId),
		result,
	)); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, "消息服务异常"+err.Error())
	}
	return data, nil
}

// 结束共创项目管理
func (cooperationProjectService *CooperationProjectService) EndCooperationProject(endCooperationProjectCommand *command.EndCooperationProjectCommand) (interface{}, error) {

	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(endCooperationProjectCommand.Operator)
	_, err := creationCooperationGateway.CooperationProjectBatchEnd(allied_creation_cooperation.ReqCooperationProjectBatchEnd{
		CooperationProjectIds: endCooperationProjectCommand.CooperationProjectId,
	})
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return endCooperationProjectCommand, nil
}

// 返回共创项目管理
func (cooperationProjectService *CooperationProjectService) GetCooperationProject(getCooperationProjectQuery *query.GetCooperationProjectQuery) (interface{}, error) {

	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(getCooperationProjectQuery.Operator)
	resultProject, err := creationCooperationGateway.CooperationProjectGet(allied_creation_cooperation.ReqCooperationProjectGet{
		CooperationProjectId:     getCooperationProjectQuery.CooperationProjectId,
		CooperationProjectNumber: getCooperationProjectQuery.CooperationProjectNumber,
		OrgId:                    getCooperationProjectQuery.OrgId,
		CompanyId:                int(getCooperationProjectQuery.Operator.CompanyId),
	})
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	resultApplication, err := creationCooperationGateway.CooperationApplicationsSearch(allied_creation_cooperation.ReqCooperationApplicationSearch{
		CooperationProjectNumber: resultProject.CooperationProject.CooperationProjectNumber,
		PageNumber:               0,
		PageSize:                 0,
		CompanyId:                resultProject.Company.CompanyId,
		OrgId:                    int64(resultProject.Org.OrgId),
		//CooperationApplicationStatus: 2, //审核通过的
	})
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	var (
		applications = []dto.CooperationApplicationItem{}
	)
	for i := range resultApplication.Grid.List {
		item := dto.ToCooperationApplicationItem(&resultApplication.Grid.List[i])
		applications = append(applications, *item)
	}
	data := map[string]interface{}{
		"cooperationProject": dto.ToCooperationProjectInfo(&resultProject.CooperationProject),
		"application":        applications,
	}
	return data, nil
}

// 返回共创项目管理列表
func (cooperationProjectService *CooperationProjectService) ListCooperationProject(listCooperationProjectQuery *query.ListCooperationProjectQuery) (int64, interface{}, error) {

	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(listCooperationProjectQuery.Operator)
	result, err := creationCooperationGateway.CooperationProjectsSearch(allied_creation_cooperation.ReqCooperationProjectSearch{
		PageNumber: listCooperationProjectQuery.PageNumber,
		PageSize:   listCooperationProjectQuery.PageSize,
		//发起部门名称
		DepartmentName: listCooperationProjectQuery.DepartmentName,
		//项目名
		CooperationProjectName: listCooperationProjectQuery.CooperationProjectName,
		CompanyId:              listCooperationProjectQuery.Operator.CompanyId,
		OrgIds:                 listCooperationProjectQuery.Operator.OrgIds,
	})
	if err != nil {
		return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	//
	//var (
	//	dataList = []dto.CooperationProjectInfo{}
	//)
	//for i := range result.List {
	//	item := dto.ToCooperationProjectInfo(&result.List[i])
	//	dataList = append(dataList, *item)
	//}
	if len(result.List) == 0 {
		result.List = []allied_creation_cooperation.DataCooperationProjectSearchItem{}
	}
	var primaryIdList = make([]string, 0)
	for i := range result.List {
		item := &result.List[i].CooperationProjectID
		primaryIdList = append(primaryIdList, *item)
	}
	creationUserGateway := allied_creation_user.NewHttplibAlliedCreationUser(
		listCooperationProjectQuery.Operator)
	resp, err := creationUserGateway.ListBlockChains(allied_creation_user.ReqListBlockChain{
		DisableLimit:            true,
		EnableDistinctPrimaryID: true,
		PrimaryIDList:           primaryIdList,
		Source:                  domain.BlockChainSourceCooperationProject,
	})
	if err != nil {
		return 0, nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
	}

	listData := dto.ToCooperationProjectSearchItem(result.List, int(listCooperationProjectQuery.Operator.OrgId), resp.ToMap())
	return int64(result.Total), listData, nil
}

// 更新共创项目管理
func (cooperationProjectService *CooperationProjectService) UpdateCooperationProject(updateCooperationProjectCommand *command.UpdateCooperationProjectCommand) (interface{}, error) {

	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(updateCooperationProjectCommand.Operator)
	result, err := creationCooperationGateway.CooperationProjectUpdate(allied_creation_cooperation.ReqCooperationProjectUpdate{
		CooperationProjectId:              updateCooperationProjectCommand.CooperationProjectId,
		CooperationProjectName:            updateCooperationProjectCommand.CooperationProjectName,
		CooperationModeNumber:             updateCooperationProjectCommand.CooperationModeNumber,
		CooperationProjectUndertakerTypes: updateCooperationProjectCommand.CooperationProjectUndertakerType,
		SponsorUid:                        updateCooperationProjectCommand.CooperationProjectSponsor,
		PublisherUid:                      strconv.Itoa(int(updateCooperationProjectCommand.Operator.UserId)),
		CooperationProjectDescription:     updateCooperationProjectCommand.CooperationProjectDescription,
		Attachment:                        updateCooperationProjectCommand.Images,
		DepartmentId:                      updateCooperationProjectCommand.DepartmentId,
	})
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}

	if err = broker.Push(constant.TOPIC_UP_BLOCK_CHAIN, broker.NewPushObject(
		domain.BlockChainSourceCooperationProject,
		strconv.Itoa(result.CooperationProject.CooperationProjectId),
		strconv.Itoa(result.CooperationProject.CooperationProjectId),
		result,
	)); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, "消息服务异常"+err.Error())
	}
	return updateCooperationProjectCommand, nil
}

// 返回共创项目管理列表下拉选择框
func (cooperationProjectService *CooperationProjectService) ListCooperationProjectSelector(listCooperationProjectQuery *query.CooperationProjectSelectorQuery) (int64, interface{}, error) {

	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(listCooperationProjectQuery.Operator)
	result, err := creationCooperationGateway.CooperationProjectsSearch(allied_creation_cooperation.ReqCooperationProjectSearch{
		PageSize:                 999,
		CooperationProjectNumber: listCooperationProjectQuery.MatchCooperationProjectNumber,
		Status:                   1,
		CompanyId:                listCooperationProjectQuery.Operator.CompanyId,
		OrgId:                    listCooperationProjectQuery.Operator.OrgId,
	})
	if err != nil {
		return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	//var items []interface{}
	//for i := range result.List {
	//	item := result.List[i]
	//	items = append(items, map[string]interface{}{
	//		"cooperationProjectId":     item.CooperationProjectID,
	//		"cooperationProjectNumber": item.CooperationProjectNumber,
	//		"cooperationProjectName":   item.CooperationProjectName,
	//	})
	//}
	for i := range result.List {
		result.List[i].CooperationProjectUndertakerType = result.List[i].CooperationProjectUndertakerTypes
	}
	return int64(result.Total), result.List, nil
}

func NewCooperationProjectService(options map[string]interface{}) *CooperationProjectService {
	newCooperationProjectService := &CooperationProjectService{}
	return newCooperationProjectService
}