cooperation_projects.go 14.4 KB
package service

import (
	"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/constant"
	"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"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway/allied_creation_user"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/log"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/util/blur"
	"strconv"
	"strings"
)

// 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)
	result, err := creationCooperationGateway.CooperationProjectAdd(allied_creation_cooperation.ReqCooperationProjectAdd{
		CooperationProjectDescription:     createCooperationProjectCommand.CooperationProjectDescription,
		CooperationModeNumber:             createCooperationProjectCommand.CooperationModeNumber,
		CooperationProjectName:            createCooperationProjectCommand.CooperationProjectName,
		PublisherUid:                      int(createCooperationProjectCommand.Operator.UserId),
		SponsorUid:                        createCooperationProjectCommand.CooperationProjectSponsor,
		CooperationProjectUndertakerTypes: createCooperationProjectCommand.CooperationProjectUndertakerType,
		Attachment:                        createCooperationProjectCommand.Attachment,
		DepartmentId:                      createCooperationProjectCommand.OrgId,
	})

	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return dto.ToCooperationProjectInfo(&result.CooperationProject), 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)
	data, err := creationCooperationGateway.CooperationProjectUpdate(allied_creation_cooperation.ReqCooperationProjectUpdate{
		CooperationProjectId:              updateCooperationProjectCommand.CooperationProjectId,
		CooperationProjectName:            updateCooperationProjectCommand.CooperationProjectName,
		CooperationModeNumber:             updateCooperationProjectCommand.CooperationModeNumber,
		CooperationProjectUndertakerTypes: updateCooperationProjectCommand.CooperationProjectUndertakerType,
		SponsorUid:                        strconv.Itoa(int(updateCooperationProjectCommand.CooperationProjectSponsor)),
		PublisherUid:                      strconv.Itoa(int(updateCooperationProjectCommand.Operator.UserId)),
		CooperationProjectDescription:     updateCooperationProjectCommand.CooperationProjectDescription,
		Attachment:                        updateCooperationProjectCommand.Attachment,
		DepartmentId:                      updateCooperationProjectCommand.OrgId,
	})
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return data, nil
}

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

// 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 + 1, //手机序号从0开始的
		PageSize:   projectQuery.PageSize,
		Status:     int(projectQuery.Status),
		OrgId:      projectQuery.Operator.OrgId,
	})
	var projects []dto.CooperationProjectSearchItem
	if err != nil {
		return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}

	for i := range result.List {
		projects = append(projects, dto.CooperationProjectSearchItem{
			result.List[i],
		})
	}
	return int(result.Total), projects, nil
}

// SearchCooperationProject  企业获取共创项目列表
func (srv CooperationProjectService) SearchCooperationProjectContracts(projectQuery *command.SearchCooperationProjectContractQuery) (int, interface{}, error) {
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(
		projectQuery.Operator)
	result, err := creationCooperationGateway.CooperationStatistics(
		allied_creation_cooperation.CompanyCooperationProjectContracts,
		map[string]interface{}{
			"offset":    projectQuery.PageSize * projectQuery.PageNumber,
			"limit":     projectQuery.PageSize,
			"projectId": projectQuery.CooperationProjectId,
		},
	)
	if err != nil {
		return 0, nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
	}
	return int(0), result, nil
}

// PersonSearchCooperationProject  共创用户获取共创项目列表
func (srv CooperationProjectService) PersonSearchCooperationProject(projectQuery *command.PersonSearchCooperationProjectQuery) (int, interface{}, error) {
	extQueries := extQuires(projectQuery.Operator)
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(
		projectQuery.Operator)
	result, err := creationCooperationGateway.CooperationProjectsSearch(allied_creation_cooperation.ReqCooperationProjectSearch{
		PageNumber: projectQuery.PageNumber + 1, //手机序号从0开始的
		PageSize:   projectQuery.PageSize,
		OrgId:      projectQuery.OrgId,
		//Status:                                 1, //搜索状态为“招标中”项目
		Keyword:                                projectQuery.Keyword,
		SearchCooperationProjectExtQueriesFlag: 1,
		SearchCooperationProjectExtQueries:     extQueries,
		SortByStatus:                           1,
		IsSkipFetchProjectModel:                true,
	})
	if err != nil {
		return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return int(result.Total), result.List, nil
}

func extQuires(operator domain.Operator) []*allied_creation_cooperation.SearchCooperationProjectExtQuery {
	var extQueries = make([]*allied_creation_cooperation.SearchCooperationProjectExtQuery, 0)
	if operator.UserBaseId > 0 {
		gatewayUser := allied_creation_user.NewHttplibAlliedCreationUser(
			operator)
		users, err := gatewayUser.UserSearch(allied_creation_user.ReqUserSearch{
			Limit:        100,
			Offset:       0,
			UserBaseId:   operator.UserBaseId,
			EnableStatus: domain.UserStatusEnable,
		})
		if err != nil {
			return extQueries
		}
		for i := range users.Users {
			u := users.Users[i]
			if u.UserType == domain.UserTypeVisitor {
				continue
			}
			q := &allied_creation_cooperation.SearchCooperationProjectExtQuery{
				ExtCompanyId: int64(u.Company.CompanyId),
				//ExtOrgId:     int64(u.Org.OrgId),
				//ExtOrgIds: int64(u.UserOrg),
				ExtUserId:                            int64(u.UserId),
				ExtUserBaseId:                        int64(u.UserBaseId),
				ExtCooperationProjectUndertakerTypes: []int32{int32(u.UserType & 3), 3},
			}
			for j := range u.UserOrg {
				org := u.UserOrg[j]
				q.ExtOrgIds = append(q.ExtOrgIds, int64(org.OrgID))
			}
			extQueries = append(extQueries, q)
		}
	}
	return extQueries
}

// PersonSearchCooperationProject  共创用户获取共创项目列表
//func (srv CooperationProjectService) PersonRecommendCooperationProject(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 + 1, //手机序号从0开始的
//		PageSize:   projectQuery.PageSize,
//		OrgId:      projectQuery.OrgId,
//		Status:     1, //搜索状态为“招标中”项目
//		Keyword:    projectQuery.Keyword,
//		//UserBaseId: projectQuery.Operator.UserBaseId,
//	})
//	if err != nil {
//		return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
//	}
//	return int(result.Total), result.List, nil
//}

func (srv CooperationProjectService) PersonSearchCooperationProjectShareInfo(projectQuery *command.GetCooperationProjectQuery) (interface{}, error) {
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(
		projectQuery.Operator)
	result, err := creationCooperationGateway.CooperationStatistics(
		allied_creation_cooperation.PersonCooperationProjectSharedInfo,
		map[string]interface{}{
			"projectId":  projectQuery.CooperationProjectId,
			"userBaseId": projectQuery.Operator.UserBaseId,
			"sensitive":  true,
		},
	)
	if err != nil {
		return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
	}
	return result, nil
}

func (srv CooperationProjectService) PersonSearchCooperationProjectShareInfoAttachment(projectQuery *command.PersonCooperationProjectSharedInfoAttachmentQuery) (interface{}, error) {
	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(
		projectQuery.Operator)
	response := struct {
		Attachment *domain.Attachment `json:"attachment"`
		UserBaseId int64              `json:"userBaseId"`
	}{}
	err := creationCooperationGateway.CooperationStatisticsWithObject(
		allied_creation_cooperation.PersonCooperationProjectSharedInfoAttachment,
		map[string]interface{}{
			"userId":                projectQuery.UserId,
			"cooperationContractId": projectQuery.ContractId,
			"cooperationProjectId":  projectQuery.ProjectId,
			"attachmentType":        projectQuery.AttachmentType,
		}, &response,
	)
	if err != nil {
		return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
	}
	// 不是本人查看需要做模糊处理
	if response.Attachment != nil && len(response.Attachment.Url) > 0 {
		if response.UserBaseId != projectQuery.Operator.UserBaseId {
			// 大文件报错
			if response.Attachment.FileSize != 0 && response.Attachment.FileSize > 10*1024*1024 {
				return nil, application.ThrowError(application.BUSINESS_ERROR, "文件过大,不可查看")
			}
			file, err := blur.FileBlur(response.Attachment.Url, true)
			if err != nil { // || len(file)==0
				log.Logger.Error(err.Error())
				return nil, application.ThrowError(application.BUSINESS_ERROR, "文件加载错误,请重试")
			}
			if !(strings.HasPrefix(file, "http") || strings.HasPrefix(file, "https")) {
				file = constant.ALLIED_CREATION_GATEWAY_HOST + "/" + file
			}
			response.Attachment.Url = file
		}
	}

	return map[string]interface{}{
		"attachment": response.Attachment,
	}, nil
}

// PersonSearchCooperationProject  共创用户获取共创项目列表
func (srv CooperationProjectService) PersonSearchCooperationProjectStarred(projectQuery *command.PersonSearchCooperationProjectQuery) (int, interface{}, error) {
	extQueries := extQuires(projectQuery.Operator)
	if projectQuery.Operator.UserBaseId == 0 {
		return 0, []struct{}{}, nil
	}
	creationUserGateway := allied_creation_user.NewHttplibAlliedCreationUser(projectQuery.Operator)
	userInfo, err := creationUserGateway.AuthUserBaseInfo(allied_creation_user.ReqAuthUserBase{
		UserBaseId: projectQuery.Operator.UserBaseId,
	})
	if err != nil {
		return 0, nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
	}
	if len(userInfo.FavoriteOrg()) == 0 {
		return 0, []struct{}{}, nil
	}

	creationCooperationGateway := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(
		projectQuery.Operator)
	result, err := creationCooperationGateway.CooperationProjectsSearch(allied_creation_cooperation.ReqCooperationProjectSearch{
		PageNumber: projectQuery.PageNumber + 1, //手机序号从0开始的
		PageSize:   projectQuery.PageSize,
		//Status:                  1, //搜索状态为“招标中”项目
		Keyword:                                projectQuery.Keyword,
		OrgIds:                                 userInfo.FavoriteOrg(),
		IsSkipFetchProjectModel:                true,
		SortByStatus:                           1,
		SearchCooperationProjectExtQueriesFlag: 1,
		SearchCooperationProjectExtQueries:     extQueries,
	})
	if err != nil {
		return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return int(result.Total), result.List, nil
}