作者 陈志颖

feat:分红订单整合订单号生成功能,增加订单号唯一校验

@@ -9,6 +9,7 @@ import ( @@ -9,6 +9,7 @@ import (
9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/factory" 9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/factory"
10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain" 10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service" 11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service"
  12 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/dao"
12 "strconv" 13 "strconv"
13 "time" 14 "time"
14 ) 15 )
@@ -90,6 +91,29 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -90,6 +91,29 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
90 salesman = data 91 salesman = data
91 } 92 }
92 93
  94 + // 分红订单DAO初始化
  95 + var dividendsOrderDao *dao.DividendsOrderDao
  96 + if value, err := factory.CreateDividendsOrderDao(map[string]interface{}{
  97 + "transactionContext": transactionContext,
  98 + }); err != nil {
  99 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  100 + } else {
  101 + dividendsOrderDao = value
  102 + }
  103 + // 生成分红订单号
  104 + dividendsOrderNumber, err := dividendsOrderDao.GenerateDividendsOrderNumber()
  105 + if err != nil {
  106 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  107 + }
  108 + // 校验分红订单编号是否唯一
  109 + numberAvailable, _ := dividendsOrderDao.CheckDividendsOrderNumberAvailable(map[string]interface{}{
  110 + "companyId": createDividendsOrderCommand.CompanyId,
  111 + "orgId": createDividendsOrderCommand.OrgId,
  112 + "dividendsOrderNumber": dividendsOrderNumber,
  113 + })
  114 + if !numberAvailable {
  115 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增分红订单异常")
  116 + }
93 // 获取订单产品 117 // 获取订单产品
94 var orderGoods []*domain.OrderGood 118 var orderGoods []*domain.OrderGood
95 for _, orderGood := range createDividendsOrderCommand.OrderGoods { 119 for _, orderGood := range createDividendsOrderCommand.OrderGoods {
@@ -99,7 +123,7 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -99,7 +123,7 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
99 OrderGoodName: orderGood.OrderGoodName, 123 OrderGoodName: orderGood.OrderGoodName,
100 OrderGoodPrice: orderGood.OrderGoodPrice, 124 OrderGoodPrice: orderGood.OrderGoodPrice,
101 OrderGoodQuantity: orderGood.OrderGoodQuantity, 125 OrderGoodQuantity: orderGood.OrderGoodQuantity,
102 - DividendsOrderNumber: "", //TODO 分红订单号,规则生成 126 + DividendsOrderNumber: dividendsOrderNumber,
103 DividendsReturnedOrderNumber: "", 127 DividendsReturnedOrderNumber: "",
104 CooperationContractNumber: orderGood.CooperationContractNumber, 128 CooperationContractNumber: orderGood.CooperationContractNumber,
105 OrderGoodExpense: 0, 129 OrderGoodExpense: 0,
@@ -113,7 +137,7 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -113,7 +137,7 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
113 137
114 newDividendsOrder := &domain.DividendsOrder{ 138 newDividendsOrder := &domain.DividendsOrder{
115 DividendsOrderId: 0, 139 DividendsOrderId: 0,
116 - DividendsOrderNumber: "", // TODO 分红订单号,规则生成 140 + DividendsOrderNumber: dividendsOrderNumber,
117 DividendsOriginalOrderNum: createDividendsOrderCommand.DividendsOriginalOrderNum, 141 DividendsOriginalOrderNum: createDividendsOrderCommand.DividendsOriginalOrderNum,
118 DividendsOrderAmount: createDividendsOrderCommand.DividendsOrderAmount, 142 DividendsOrderAmount: createDividendsOrderCommand.DividendsOrderAmount,
119 OrderSalesman: salesman, 143 OrderSalesman: salesman,
@@ -35,6 +35,24 @@ func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) { @@ -35,6 +35,24 @@ func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) {
35 } 35 }
36 } 36 }
37 37
  38 +// CheckDividendsOrderNumberAvailable 校验分红订单是否唯一
  39 +func (dao *DividendsOrderDao) CheckDividendsOrderNumberAvailable(queryOptions map[string]interface{}) (bool, error) {
  40 + tx := dao.transactionContext.PgTx
  41 + var dividendsOrderModels []*models.DividendsOrder
  42 + query := tx.Model(&dividendsOrderModels)
  43 + if dividendsOrderNumber, ok := queryOptions["dividendsOrderNumber"]; ok && dividendsOrderNumber != "" {
  44 + query = query.Where("dividends_order_number = ?", dividendsOrderNumber)
  45 + }
  46 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  47 + query = query.Where(`cooperation_contract.company @> '{"companyId":"?"}'`, companyId)
  48 + }
  49 + if orgId, ok := queryOptions["orgId"]; ok && orgId.(int64) != 0 {
  50 + query = query.Where(`cooperation_contract.org @> '{"orgId":"?"}'`, orgId)
  51 + }
  52 + ok, err := query.Exists()
  53 + return !ok, err
  54 +}
  55 +
38 func NewDividendsOrderDao(transactionContext *pgTransaction.TransactionContext) (*DividendsOrderDao, error) { 56 func NewDividendsOrderDao(transactionContext *pgTransaction.TransactionContext) (*DividendsOrderDao, error) {
39 if transactionContext == nil { 57 if transactionContext == nil {
40 return nil, fmt.Errorf("transactionContext参数不能未") 58 return nil, fmt.Errorf("transactionContext参数不能未")
@@ -184,7 +184,7 @@ func (repository *CooperationApplicationRepository) Find(queryOptions map[string @@ -184,7 +184,7 @@ func (repository *CooperationApplicationRepository) Find(queryOptions map[string
184 if cooperationProjectNumber, ok := queryOptions["cooperationProjectNumber"]; ok && cooperationProjectNumber != "" { 184 if cooperationProjectNumber, ok := queryOptions["cooperationProjectNumber"]; ok && cooperationProjectNumber != "" {
185 query.Where("cooperation_project_number like ?", fmt.Sprintf("%%%s%%", cooperationProjectNumber)) 185 query.Where("cooperation_project_number like ?", fmt.Sprintf("%%%s%%", cooperationProjectNumber))
186 } 186 }
187 - //TODO 共创项目名称查询 187 + // 共创项目名称查询
188 if cooperationProjectName, ok := queryOptions["cooperationProjectName"]; ok && cooperationProjectName != "" { 188 if cooperationProjectName, ok := queryOptions["cooperationProjectName"]; ok && cooperationProjectName != "" {
189 query.Join("LEFT JOIN cooperation_projects AS a"). 189 query.Join("LEFT JOIN cooperation_projects AS a").
190 JoinOn("a.cooperation_project_number = cooperation_application.cooperation_project_number"). 190 JoinOn("a.cooperation_project_number = cooperation_application.cooperation_project_number").