作者 yangfu

共创项目详情功能 - 附件获取

@@ -65,6 +65,8 @@ func (svr *CooperationStatisticsService) CooperationContractStatistics(contractS @@ -65,6 +65,8 @@ func (svr *CooperationStatisticsService) CooperationContractStatistics(contractS
65 res, err = statisticsService.PersonCompanyPaymentHistoryStatistics(contractStatisticsQuery.QueryOptions) 65 res, err = statisticsService.PersonCompanyPaymentHistoryStatistics(contractStatisticsQuery.QueryOptions)
66 case domain_service.PersonCooperationProjectSharedInfo: 66 case domain_service.PersonCooperationProjectSharedInfo:
67 res, err = statisticsService.PersonCooperationProjectSharedInfo(contractStatisticsQuery.QueryOptions) 67 res, err = statisticsService.PersonCooperationProjectSharedInfo(contractStatisticsQuery.QueryOptions)
  68 + case domain_service.PersonCooperationProjectSharedInfoAttachment:
  69 + res, err = statisticsService.PersonCooperationProjectSharedInfoAttachment(contractStatisticsQuery.QueryOptions)
68 case domain_service.CreditAccountStatistics: 70 case domain_service.CreditAccountStatistics:
69 res, err = statisticsService.CreditAccountStatistics(contractStatisticsQuery.QueryOptions) 71 res, err = statisticsService.CreditAccountStatistics(contractStatisticsQuery.QueryOptions)
70 case domain_service.RelevantCooperationContractNumbers: 72 case domain_service.RelevantCooperationContractNumbers:
@@ -107,3 +107,15 @@ func ConditionInContractNumbers(numbers []string) string { @@ -107,3 +107,15 @@ func ConditionInContractNumbers(numbers []string) string {
107 //} 107 //}
108 //return fmt.Sprintf("account_detail <@'%v'", json.MarshalToString(response)) 108 //return fmt.Sprintf("account_detail <@'%v'", json.MarshalToString(response))
109 } 109 }
  110 +
  111 +func ConditionInDividendsEstimateOrderIds(ids []int64) string {
  112 + var sqlBuilder = bytes.NewBuffer(nil)
  113 + l := len(ids)
  114 + for i := range ids {
  115 + sqlBuilder.WriteString(fmt.Sprintf(`account_detail @> '[{"dividendsEstimateOrderId":%v}]' `, ids[i]))
  116 + if i < (l - 1) {
  117 + sqlBuilder.WriteString(" OR ")
  118 + }
  119 + }
  120 + return sqlBuilder.String()
  121 +}
@@ -395,6 +395,7 @@ func (ptr *CooperationStatisticsService) CompanyCooperationProjectContracts(quer @@ -395,6 +395,7 @@ func (ptr *CooperationStatisticsService) CompanyCooperationProjectContracts(quer
395 // func(ptr *CooperationStatisticsService) 395 // func(ptr *CooperationStatisticsService)
396 396
397 // 个人 - 共创浏览 详情页 - 附件数据 397 // 个人 - 共创浏览 详情页 - 附件数据
  398 +// response,error 有可能同时为空,返回需要判断
398 func (ptr *CooperationStatisticsService) PersonCooperationProjectSharedInfoAttachment(queryOptions map[string]interface{}) (interface{}, error) { 399 func (ptr *CooperationStatisticsService) PersonCooperationProjectSharedInfoAttachment(queryOptions map[string]interface{}) (interface{}, error) {
399 // 参数验证 400 // 参数验证
400 var request = struct { 401 var request = struct {
@@ -402,16 +403,96 @@ func (ptr *CooperationStatisticsService) PersonCooperationProjectSharedInfoAttac @@ -402,16 +403,96 @@ func (ptr *CooperationStatisticsService) PersonCooperationProjectSharedInfoAttac
402 // 用户 403 // 用户
403 UserId int64 `json:"userId" valid:"Required"` 404 UserId int64 `json:"userId" valid:"Required"`
404 // 项目ID 405 // 项目ID
405 - ProjectId int64 `json:"projectId" valid:"Required"` 406 + ProjectId int64 `json:"cooperationProjectId" valid:"Required"`
406 // 合约ID 407 // 合约ID
407 - ContractId int64 `json:"contractId" valid:"Required"` 408 + ContractId int64 `json:"cooperationContractId" valid:"Required"`
408 // 附件类型 1:合约附件 2:支付凭证 409 // 附件类型 1:合约附件 2:支付凭证
409 - AttachType int `json:"attachType" valid:"Required"` 410 + AttachmentType int `json:"attachmentType" valid:"Required"`
410 }{} 411 }{}
411 if err := LoadQueryObject(queryOptions, &request); err != nil { 412 if err := LoadQueryObject(queryOptions, &request); err != nil {
412 return nil, err 413 return nil, err
413 } 414 }
414 - queryOptions = tool_funs.SimpleStructToMap(&request)  
415 - var response = domain.CooperationProjectSharedInfoDto{} 415 + var response = struct {
  416 + Attachment *domain.Attachment `json:"attachment"`
  417 + UserBaseId int64 `json:"userBaseId"`
  418 + }{}
  419 + userServiceGateway := service_gateway.NewHttplibUserServiceGateway()
  420 + userDetail, e := userServiceGateway.GetUser(0, 0, request.UserId)
  421 + if e != nil {
  422 + return nil, e
  423 + }
  424 + request.UserBaseId = userDetail.UserBaseId
  425 + response.UserBaseId = userDetail.UserBaseId
  426 + switch request.AttachmentType {
  427 + case 1:
  428 + contractRepository, _ := dao.NewCooperationContractDao(ptr.transactionContext) // repository.NewCooperationContractRepository(ptr.transactionContext)
  429 + contracts, err := contractRepository.FindOne(map[string]interface{}{"cooperationContractId": request.ContractId})
  430 + if err != nil {
  431 + return nil, fmt.Errorf("合约不存在")
  432 + }
  433 + undertakerRepository, _ := dao.NewCooperationContractUndertakerDao(ptr.transactionContext)
  434 + _, undertakers, err := undertakerRepository.Find(map[string]interface{}{
  435 + "userBaseId": request.UserBaseId,
  436 + "cooperationContractIds": []int64{contracts.CooperationContractId},
  437 + })
  438 + if err != nil {
  439 + return nil, err
  440 + }
  441 + for i := range undertakers {
  442 + if len(undertakers[i].Undertaker.ContractAttachment) == 0 {
  443 + continue
  444 + }
  445 + response.Attachment = undertakers[i].Undertaker.ContractAttachment[0]
  446 + break
  447 + }
  448 + case 2:
  449 + // 0.2 合约数据
  450 + contractRepository, _ := dao.NewCooperationContractDao(ptr.transactionContext) // repository.NewCooperationContractRepository(ptr.transactionContext)
  451 + contracts, err := contractRepository.FindOne(map[string]interface{}{"cooperationContractId": request.ContractId})
  452 + if err != nil {
  453 + return nil, fmt.Errorf("合约不存在")
  454 + }
  455 + dividendsEstimateRepository, _ := repository.NewDividendsEstimateRepository(ptr.transactionContext)
  456 + _, dividendsEstimates, err := dividendsEstimateRepository.Find(map[string]interface{}{
  457 + "orgId": contracts.Org.OrgId,
  458 + "companyId": contracts.Company.CompanyId,
  459 + "cooperationContractNumber": contracts.CooperationContractNumber,
  460 + "isCanceled": false,
  461 + "paymentStatus": int32(2),
  462 + })
  463 + if err != nil {
  464 + return nil, err
  465 + }
  466 + var estimateIds []int64
  467 + if len(dividendsEstimates) == 0 {
  468 + return response, nil
  469 + }
  470 + for i := range dividendsEstimates {
  471 + estimateIds = append(estimateIds, dividendsEstimates[i].DividendsEstimateId)
  472 + }
  473 + creditAccountRepository, _ := repository.NewCreditAccountRepository(ptr.transactionContext)
  474 + _, creditAccount, err := creditAccountRepository.Find(map[string]interface{}{
  475 + "userBaseId": request.UserBaseId,
  476 + "orgId": contracts.Org.OrgId,
  477 + "companyId": contracts.Company.CompanyId,
  478 + "dividendsEstimateOrderIds": estimateIds,
  479 + })
  480 + if err != nil {
  481 + return nil, err
  482 + }
  483 + if len(creditAccount) == 0 {
  484 + return response, nil
  485 + }
  486 + for i := range creditAccount {
  487 + if len(creditAccount[i].PaymentDocumentAttachments) == 0 {
  488 + continue
  489 + }
  490 + response.Attachment = creditAccount[i].PaymentDocumentAttachments[0] // 获取第一个
  491 + break
  492 + }
  493 + default:
  494 + return nil, fmt.Errorf("unkown attachment type %v", request.AttachmentType)
  495 + }
  496 +
416 return response, nil 497 return response, nil
417 } 498 }
@@ -45,6 +45,8 @@ const ( @@ -45,6 +45,8 @@ const (
45 PersonCompanyPaymentHistoryStatistics = "PersonCompanyPaymentHistoryStatistics" 45 PersonCompanyPaymentHistoryStatistics = "PersonCompanyPaymentHistoryStatistics"
46 // 个人 - 共创项目共享信息数据 46 // 个人 - 共创项目共享信息数据
47 PersonCooperationProjectSharedInfo = "PersonCooperationProjectSharedInfo" 47 PersonCooperationProjectSharedInfo = "PersonCooperationProjectSharedInfo"
  48 + // 个人 - 共创项目共享信息数据 - 附件
  49 + PersonCooperationProjectSharedInfoAttachment = "PersonCooperationProjectSharedInfoAttachment"
48 50
49 // 账期结算单统计 51 // 账期结算单统计
50 CreditAccountStatistics = "CreditAccountStatistics" 52 CreditAccountStatistics = "CreditAccountStatistics"
@@ -247,6 +247,10 @@ func (repository *CreditAccountRepository) Find(queryOptions map[string]interfac @@ -247,6 +247,10 @@ func (repository *CreditAccountRepository) Find(queryOptions map[string]interfac
247 if offsetLimitFlag { 247 if offsetLimitFlag {
248 query.SetOffsetAndLimit(20) 248 query.SetOffsetAndLimit(20)
249 } 249 }
  250 + if v, ok := queryOptions["dividendsEstimateOrderIds"]; ok && len(v.([]int64)) > 0 {
  251 + //query.Where("cooperation_contract_number in (?)", pg.In(v))
  252 + query.Where(domain.ConditionInDividendsEstimateOrderIds(v.([]int64)))
  253 + }
250 query.SetOrderDirect("credit_account_id", "DESC") 254 query.SetOrderDirect("credit_account_id", "DESC")
251 if count, err := query.SelectAndCount(); err != nil { 255 if count, err := query.SelectAndCount(); err != nil {
252 return 0, creditAccounts, err 256 return 0, creditAccounts, err