作者 陈志颖

refactor:优化分红订单导入

@@ -446,6 +446,7 @@ func (cooperationContractService *CooperationContractService) ListCooperationCon @@ -446,6 +446,7 @@ func (cooperationContractService *CooperationContractService) ListCooperationCon
446 defer func() { 446 defer func() {
447 _ = transactionContext.RollbackTransaction() 447 _ = transactionContext.RollbackTransaction()
448 }() 448 }()
  449 + // 合约仓储初始化
449 var cooperationContractRepository domain.CooperationContractRepository 450 var cooperationContractRepository domain.CooperationContractRepository
450 if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{ 451 if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
451 "transactionContext": transactionContext, 452 "transactionContext": transactionContext,
@@ -454,6 +455,7 @@ func (cooperationContractService *CooperationContractService) ListCooperationCon @@ -454,6 +455,7 @@ func (cooperationContractService *CooperationContractService) ListCooperationCon
454 } else { 455 } else {
455 cooperationContractRepository = value 456 cooperationContractRepository = value
456 } 457 }
  458 + // 查找合约
457 if count, cooperationContracts, err := cooperationContractRepository.Find(tool_funs.SimpleStructToMap(listCooperationContractQuery)); err != nil { 459 if count, cooperationContracts, err := cooperationContractRepository.Find(tool_funs.SimpleStructToMap(listCooperationContractQuery)); err != nil {
458 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 460 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
459 } else { 461 } else {
@@ -5,6 +5,7 @@ import ( @@ -5,6 +5,7 @@ import (
5 "github.com/beego/beego/v2/core/validation" 5 "github.com/beego/beego/v2/core/validation"
6 "reflect" 6 "reflect"
7 "strings" 7 "strings"
  8 + "time"
8 ) 9 )
9 10
10 type OrderGoods struct { 11 type OrderGoods struct {
@@ -55,6 +56,28 @@ type CreateDividendsOrderCommand struct { @@ -55,6 +56,28 @@ type CreateDividendsOrderCommand struct {
55 LineNumbers []int `cname:"记录行号" json:"lineNumbers"` 56 LineNumbers []int `cname:"记录行号" json:"lineNumbers"`
56 } 57 }
57 58
  59 +// GenerateSpecificDividendsOrderNumber 生成自定义分红订单
  60 +func (createDividendsOrderCommand *CreateDividendsOrderCommand) GenerateSpecificDividendsOrderNumber(count int64, orderTime time.Time, index int64) (string, error) {
  61 + currentTime := time.Now()
  62 + if count+index < 1000 {
  63 + countStr := fmt.Sprintf("%03d", count+index+1)
  64 + timestamp := currentTime.Unix()
  65 + timeNow := time.Unix(timestamp, 0)
  66 + timeString := timeNow.Format("20060102")
  67 + timeString = timeString[2:len(timeString)]
  68 + dividendsOrderNumber := "SL" + timeString + "#" + countStr
  69 + return dividendsOrderNumber, nil
  70 + } else {
  71 + countStr := fmt.Sprintf("%d", count+index+1)
  72 + timestamp := currentTime.Unix()
  73 + timeNow := time.Unix(timestamp, 0)
  74 + timeString := timeNow.Format("20060102")
  75 + timeString = timeString[2:len(timeString)]
  76 + dividendsOrderNumber := "SL" + timeString + "#" + countStr
  77 + return dividendsOrderNumber, nil
  78 + }
  79 +}
  80 +
58 func (createDividendsOrderCommand *CreateDividendsOrderCommand) Valid(validation *validation.Validation) { 81 func (createDividendsOrderCommand *CreateDividendsOrderCommand) Valid(validation *validation.Validation) {
59 } 82 }
60 83
@@ -153,7 +153,6 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -153,7 +153,6 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
153 153
154 // 新增分红订单 154 // 新增分红订单
155 newDividendsOrder := &domain.DividendsOrder{ 155 newDividendsOrder := &domain.DividendsOrder{
156 - DividendsOrderId: 0,  
157 DividendsOrderNumber: dividendsOrderNumber, 156 DividendsOrderNumber: dividendsOrderNumber,
158 DividendsOriginalOrderNum: createDividendsOrderCommand.DividendsOriginalOrderNum, 157 DividendsOriginalOrderNum: createDividendsOrderCommand.DividendsOriginalOrderNum,
159 DividendsOrderAmount: dividendsOrderAmount, 158 DividendsOrderAmount: dividendsOrderAmount,
@@ -259,6 +258,26 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -259,6 +258,26 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
259 operator = data 258 operator = data
260 } 259 }
261 260
  261 + // 合约仓储初始化
  262 + var cooperationContractRepository domain.CooperationContractRepository
  263 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  264 + "transactionContext": transactionContext,
  265 + }); err != nil {
  266 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  267 + } else {
  268 + cooperationContractRepository = value
  269 + }
  270 +
  271 + // 查找合约
  272 + _, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  273 + "offsetLimit": false,
  274 + "companyId": importDividendsOrderCommand.CompanyId,
  275 + "orgId": importDividendsOrderCommand.OrgId,
  276 + })
  277 + if err != nil {
  278 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  279 + }
  280 +
262 // 分红订单DAO初始化 281 // 分红订单DAO初始化
263 var dividendsOrderDao *dao.DividendsOrderDao 282 var dividendsOrderDao *dao.DividendsOrderDao
264 if value, err := factory.CreateDividendsOrderDao(map[string]interface{}{ 283 if value, err := factory.CreateDividendsOrderDao(map[string]interface{}{
@@ -619,56 +638,38 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -619,56 +638,38 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
619 }, nil 638 }, nil
620 } 639 }
621 640
  641 + // 创建分红订单领域模型
622 var creatDividendsOrder []*domain.DividendsOrder 642 var creatDividendsOrder []*domain.DividendsOrder
623 643
  644 + // 统计当前分红订单数
  645 + count, err := dividendsOrderDao.CountDividendsOrder(map[string]interface{}{})
  646 +
624 // 批量创建分红订单 647 // 批量创建分红订单
625 - for _, dividendsOrder := range createDividendsOrderCommands {  
626 - // TODO 表为空时生成分红订单号  
627 - dividendsOrderNumber, err := dividendsOrderDao.GenerateDividendsOrderNumber() 648 + for i, dividendsOrder := range createDividendsOrderCommands {
  649 + // 生成分红订单号
  650 + dividendsOrderNumber, err := dividendsOrder.GenerateSpecificDividendsOrderNumber(int64(count), time.Time{}, int64(i))
628 if err != nil { 651 if err != nil {
629 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 652 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
630 } 653 }
631 654
632 - // 校验分红订单编号是否唯一  
633 - numberAvailable, err3 := dividendsOrderDao.CheckDividendsOrderNumberAvailable(map[string]interface{}{  
634 - "companyId": importDividendsOrderCommand.CompanyId,  
635 - "orgId": importDividendsOrderCommand.OrgId,  
636 - "dividendsOrderNumber": dividendsOrderNumber,  
637 - })  
638 - if err3 != nil {  
639 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err3.Error())  
640 - }  
641 - if !numberAvailable {  
642 - return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增分红订单异常")  
643 - }  
644 -  
645 - // 共创合约DAO初始化  
646 - var cooperationContractDao *dao.CooperationContractDao  
647 - if value, err := factory.CreateCooperationContractDao(map[string]interface{}{  
648 - "transactionContext": transactionContext,  
649 - }); err != nil {  
650 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
651 - } else {  
652 - cooperationContractDao = value  
653 - }  
654 -  
655 // 新增订单产品 655 // 新增订单产品
656 var orderGoods []*domain.OrderGood 656 var orderGoods []*domain.OrderGood
657 var dividendsOrderAmount float64 657 var dividendsOrderAmount float64
658 orderGoodErrMap := make(map[int]interface{}, 0) 658 orderGoodErrMap := make(map[int]interface{}, 0)
659 for i, orderGood := range dividendsOrder.OrderGoods { 659 for i, orderGood := range dividendsOrder.OrderGoods {
660 // 校验共创合约是否合法 660 // 校验共创合约是否合法
661 - if orderGood.CooperationContractNumber != "" {  
662 - contractNumberExist, _ := cooperationContractDao.CheckContractNumberExist(map[string]interface{}{  
663 - "companyId": importDividendsOrderCommand.CompanyId,  
664 - "orgId": importDividendsOrderCommand.OrgId,  
665 - "cooperationContractNumber": orderGood.CooperationContractNumber,  
666 - })  
667 - if !contractNumberExist {  
668 - orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("共创合约编号不存在:%s", err)) 661 + contractNumberExist := false
  662 + for _, cooperationContract := range cooperationContracts {
  663 + if orderGood.CooperationContractNumber == cooperationContract.CooperationContractNumber {
  664 + contractNumberExist = true
  665 + break
669 } 666 }
670 } 667 }
  668 + if !contractNumberExist {
  669 + orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("共创合约编号不存在:%s", err))
  670 + }
671 671
  672 + // 计算产品金额
672 orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(float64(orderGood.OrderGoodQuantity))).Float64() 673 orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(float64(orderGood.OrderGoodQuantity))).Float64()
673 674
674 orderGoods = append(orderGoods, &domain.OrderGood{ 675 orderGoods = append(orderGoods, &domain.OrderGood{
@@ -927,7 +928,10 @@ func (dividendsOrderService *DividendsOrderService) BatchRemoveDividendsOrder(ba @@ -927,7 +928,10 @@ func (dividendsOrderService *DividendsOrderService) BatchRemoveDividendsOrder(ba
927 dividendsOrderRepository = value 928 dividendsOrderRepository = value
928 } 929 }
929 930
930 - dividendsOrderIds, _ := utils.SliceAtoi(batchRemoveDividendsOrderCommand.DividendsOrderIds) 931 + dividendsOrderIds, err := utils.SliceAtoi(batchRemoveDividendsOrderCommand.DividendsOrderIds)
  932 + if err != nil {
  933 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单ID类型错误")
  934 + }
931 if count, dividendsOrders, err := dividendsOrderRepository.Find(map[string]interface{}{ 935 if count, dividendsOrders, err := dividendsOrderRepository.Find(map[string]interface{}{
932 "dividendsOrderIds": dividendsOrderIds, 936 "dividendsOrderIds": dividendsOrderIds,
933 }); err != nil { 937 }); err != nil {
@@ -57,6 +57,7 @@ type FailReturnedInfo struct { @@ -57,6 +57,7 @@ type FailReturnedInfo struct {
57 57
58 type DividendsReturnedOrderRepository interface { 58 type DividendsReturnedOrderRepository interface {
59 Save(dividendsReturnedOrder *DividendsReturnedOrder) (*DividendsReturnedOrder, error) 59 Save(dividendsReturnedOrder *DividendsReturnedOrder) (*DividendsReturnedOrder, error)
  60 + SaveMany(dividendsReturnedOrders []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error)
60 UpdateMany(dividendsReturnedOrder []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error) 61 UpdateMany(dividendsReturnedOrder []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error)
61 Remove(dividendsReturnedOrder *DividendsReturnedOrder) (*DividendsReturnedOrder, error) 62 Remove(dividendsReturnedOrder *DividendsReturnedOrder) (*DividendsReturnedOrder, error)
62 BatchRemove(dividendsReturnedOrders []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error) 63 BatchRemove(dividendsReturnedOrders []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error)
@@ -25,13 +25,23 @@ func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) { @@ -25,13 +25,23 @@ func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) {
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 26 return "", err
27 } else { 27 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - dividendsOrderNumber := "SL" + timeString + "#" + countStr  
34 - return dividendsOrderNumber, nil 28 + if count < 1000 {
  29 + countStr := fmt.Sprintf("%03d", count+1)
  30 + timestamp := currentTime.Unix()
  31 + timeNow := time.Unix(timestamp, 0)
  32 + timeString := timeNow.Format("20060102")
  33 + timeString = timeString[2:len(timeString)]
  34 + dividendsOrderNumber := "SL" + timeString + "#" + countStr
  35 + return dividendsOrderNumber, nil
  36 + } else {
  37 + countStr := fmt.Sprintf("%d", count+1)
  38 + timestamp := currentTime.Unix()
  39 + timeNow := time.Unix(timestamp, 0)
  40 + timeString := timeNow.Format("20060102")
  41 + timeString = timeString[2:len(timeString)]
  42 + dividendsOrderNumber := "SL" + timeString + "#" + countStr
  43 + return dividendsOrderNumber, nil
  44 + }
35 } 45 }
36 } 46 }
37 47
@@ -78,6 +88,23 @@ func (dao *DividendsOrderDao) CalculateDividendsOrderAmount(queryOptions map[str @@ -78,6 +88,23 @@ func (dao *DividendsOrderDao) CalculateDividendsOrderAmount(queryOptions map[str
78 return dividendsOrderModel.DividendsOrderAmount, nil 88 return dividendsOrderModel.DividendsOrderAmount, nil
79 } 89 }
80 90
  91 +// CountDividendsOrder 统计当前订单总数
  92 +func (dao *DividendsOrderDao) CountDividendsOrder(queryOptions map[string]interface{}) (int, error) {
  93 + tx := dao.transactionContext.PgTx
  94 + var dividendsOrderModels []*models.DividendsOrder
  95 + query := tx.Model(&dividendsOrderModels)
  96 + currentTime := time.Now()
  97 + todayZeroTime := utils.GetZeroTime(currentTime)
  98 + nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
  99 + query.Where("dividends_order.created_at >= ?", todayZeroTime)
  100 + query.Where("dividends_order.created_at < ?", nextDayZeroTime)
  101 + if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
  102 + return 0, err
  103 + } else {
  104 + return count, nil
  105 + }
  106 +}
  107 +
81 func NewDividendsOrderDao(transactionContext *pgTransaction.TransactionContext) (*DividendsOrderDao, error) { 108 func NewDividendsOrderDao(transactionContext *pgTransaction.TransactionContext) (*DividendsOrderDao, error) {
82 if transactionContext == nil { 109 if transactionContext == nil {
83 return nil, fmt.Errorf("transactionContext参数不能为空") 110 return nil, fmt.Errorf("transactionContext参数不能为空")
@@ -10,7 +10,7 @@ type DividendsOrder struct { @@ -10,7 +10,7 @@ type DividendsOrder struct {
10 // 分红订单ID 10 // 分红订单ID
11 DividendsOrderId int64 `comment:"分红订单ID" pg:",pk"` 11 DividendsOrderId int64 `comment:"分红订单ID" pg:",pk"`
12 // 分红订单号 12 // 分红订单号
13 - DividendsOrderNumber string `comment:"分红订单号"` 13 + DividendsOrderNumber string `comment:"分红订单号" pg:",unique"`
14 // 分红订单原单号 14 // 分红订单原单号
15 DividendsOriginalOrderNum string `comment:"分红订单原单号"` 15 DividendsOriginalOrderNum string `comment:"分红订单原单号"`
16 // 分红订单金额 16 // 分红订单金额
@@ -17,14 +17,11 @@ import ( @@ -17,14 +17,11 @@ import (
17 17
18 type DividendsOrderRepository struct { 18 type DividendsOrderRepository struct {
19 transactionContext *pgTransaction.TransactionContext 19 transactionContext *pgTransaction.TransactionContext
  20 + IdWorker *snowflake.IdWorker
20 } 21 }
21 22
22 func (repository *DividendsOrderRepository) nextIdentify() (int64, error) { 23 func (repository *DividendsOrderRepository) nextIdentify() (int64, error) {
23 - IdWorker, err := snowflake.NewIdWorker(1)  
24 - if err != nil {  
25 - return 0, err  
26 - }  
27 - id, err := IdWorker.NextId() 24 + id, err := repository.IdWorker.NextId()
28 return id, err 25 return id, err
29 } 26 }
30 27
@@ -55,12 +52,12 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend @@ -55,12 +52,12 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend
55 updateFieldsSnippet := sqlbuilder.SqlUpdateFieldsSnippet(updateFields) 52 updateFieldsSnippet := sqlbuilder.SqlUpdateFieldsSnippet(updateFields)
56 tx := repository.transactionContext.PgTx 53 tx := repository.transactionContext.PgTx
57 if dividendsOrder.Identify() == nil { 54 if dividendsOrder.Identify() == nil {
58 - //dividendsOrderId, err := repository.nextIdentify()  
59 - //if err != nil {  
60 - // return dividendsOrder, err  
61 - //} else {  
62 - // dividendsOrder.DividendsOrderId = dividendsOrderId  
63 - //} 55 + dividendsOrderId, err := repository.nextIdentify()
  56 + if err != nil {
  57 + return dividendsOrder, err
  58 + } else {
  59 + dividendsOrder.DividendsOrderId = dividendsOrderId
  60 + }
64 if _, err := tx.QueryOne( 61 if _, err := tx.QueryOne(
65 pg.Scan( 62 pg.Scan(
66 &dividendsOrder.DividendsOrderId, 63 &dividendsOrder.DividendsOrderId,
@@ -105,7 +102,16 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend @@ -105,7 +102,16 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend
105 // 新增分红订单产品 102 // 新增分红订单产品
106 var orderGoodsModel []*models.OrderGood 103 var orderGoodsModel []*models.OrderGood
107 for _, good := range dividendsOrder.Goods { 104 for _, good := range dividendsOrder.Goods {
  105 + if good.Identify() == nil {
  106 + orderGoodId, err := repository.nextIdentify()
  107 + if err != nil {
  108 + return nil, err
  109 + } else {
  110 + good.OrderGoodId = orderGoodId
  111 + }
  112 + }
108 orderGoodsModel = append(orderGoodsModel, &models.OrderGood{ 113 orderGoodsModel = append(orderGoodsModel, &models.OrderGood{
  114 + OrderGoodId: good.OrderGoodId,
109 OrderGoodAmount: good.OrderGoodAmount, 115 OrderGoodAmount: good.OrderGoodAmount,
110 OrderGoodName: good.OrderGoodName, 116 OrderGoodName: good.OrderGoodName,
111 OrderGoodPrice: good.OrderGoodPrice, 117 OrderGoodPrice: good.OrderGoodPrice,
@@ -197,7 +203,16 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend @@ -197,7 +203,16 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend
197 // 将待添加的分红订单产品领域模型转换为数据模型 203 // 将待添加的分红订单产品领域模型转换为数据模型
198 var orderGoodsToAddModels []*models.OrderGood 204 var orderGoodsToAddModels []*models.OrderGood
199 for _, goodDomain := range orderGoodsToAdd { 205 for _, goodDomain := range orderGoodsToAdd {
  206 + if goodDomain.Identify() == nil {
  207 + orderGoodId, err := repository.nextIdentify()
  208 + if err != nil {
  209 + return nil, err
  210 + } else {
  211 + goodDomain.OrderGoodId = orderGoodId
  212 + }
  213 + }
200 orderGoodsToAddModels = append(orderGoodsToAddModels, &models.OrderGood{ 214 orderGoodsToAddModels = append(orderGoodsToAddModels, &models.OrderGood{
  215 + OrderGoodId: goodDomain.OrderGoodId,
201 OrderGoodAmount: goodDomain.OrderGoodAmount, 216 OrderGoodAmount: goodDomain.OrderGoodAmount,
202 OrderGoodName: goodDomain.OrderGoodName, 217 OrderGoodName: goodDomain.OrderGoodName,
203 OrderGoodPrice: goodDomain.OrderGoodPrice, 218 OrderGoodPrice: goodDomain.OrderGoodPrice,
@@ -240,9 +255,6 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend @@ -240,9 +255,6 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend
240 } 255 }
241 } 256 }
242 } 257 }
243 - log.Logger.Info("待更新的分红订单产品", map[string]interface{}{  
244 - "orderGoodModelsToUpdate": orderGoodModelsToUpdate,  
245 - })  
246 258
247 if len(orderGoodModelsToUpdate) > 0 { 259 if len(orderGoodModelsToUpdate) > 0 {
248 for i, orderGoodModelToUpdate := range orderGoodModelsToUpdate { 260 for i, orderGoodModelToUpdate := range orderGoodModelsToUpdate {
@@ -268,8 +280,14 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend @@ -268,8 +280,14 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend
268 } 280 }
269 } 281 }
270 } 282 }
271 - if _, err := tx.Model(&orderGoodModelsToUpdate).WherePK().Update(); err != nil {  
272 - return nil, err 283 +
  284 + if len(orderGoodModelsToUpdate) > 0 {
  285 + log.Logger.Info("待更新的分红订单产品", map[string]interface{}{
  286 + "orderGoodModelsToUpdate": orderGoodModelsToUpdate,
  287 + })
  288 + if _, err := tx.Model(&orderGoodModelsToUpdate).WherePK().Update(); err != nil {
  289 + return nil, err
  290 + }
273 } 291 }
274 } 292 }
275 293
@@ -283,10 +301,11 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend @@ -283,10 +301,11 @@ func (repository *DividendsOrderRepository) Save(dividendsOrder *domain.Dividend
283 } 301 }
284 } 302 }
285 } 303 }
286 - log.Logger.Info("待删除的订单产品", map[string]interface{}{  
287 - "orderGoodModelsToDelete": orderGoodModelsToDelete,  
288 - }) 304 +
289 if len(orderGoodModelsToDelete) > 0 { 305 if len(orderGoodModelsToDelete) > 0 {
  306 + log.Logger.Info("待删除的订单产品", map[string]interface{}{
  307 + "orderGoodModelsToDelete": orderGoodModelsToDelete,
  308 + })
290 if _, err := tx.Model(&orderGoodModelsToDelete).Delete(); err != nil { 309 if _, err := tx.Model(&orderGoodModelsToDelete).Delete(); err != nil {
291 return nil, err 310 return nil, err
292 } 311 }
@@ -300,7 +319,16 @@ func (repository *DividendsOrderRepository) SaveMany(dividendsOrders []*domain.D @@ -300,7 +319,16 @@ func (repository *DividendsOrderRepository) SaveMany(dividendsOrders []*domain.D
300 var dividendsOrderModels []*models.DividendsOrder 319 var dividendsOrderModels []*models.DividendsOrder
301 var orderGoodsModel []*models.OrderGood 320 var orderGoodsModel []*models.OrderGood
302 for _, dividendsOrder := range dividendsOrders { 321 for _, dividendsOrder := range dividendsOrders {
  322 + if dividendsOrder.Identify() == nil {
  323 + dividendsOrderId, err := repository.nextIdentify()
  324 + if err != nil {
  325 + return nil, err
  326 + } else {
  327 + dividendsOrder.DividendsOrderId = dividendsOrderId
  328 + }
  329 + }
303 dividendsOrderModels = append(dividendsOrderModels, &models.DividendsOrder{ 330 dividendsOrderModels = append(dividendsOrderModels, &models.DividendsOrder{
  331 + DividendsOrderId: dividendsOrder.DividendsOrderId,
304 DividendsOrderNumber: dividendsOrder.DividendsOrderNumber, 332 DividendsOrderNumber: dividendsOrder.DividendsOrderNumber,
305 DividendsOriginalOrderNum: dividendsOrder.DividendsOriginalOrderNum, 333 DividendsOriginalOrderNum: dividendsOrder.DividendsOriginalOrderNum,
306 DividendsOrderAmount: dividendsOrder.DividendsOrderAmount, 334 DividendsOrderAmount: dividendsOrder.DividendsOrderAmount,
@@ -319,7 +347,16 @@ func (repository *DividendsOrderRepository) SaveMany(dividendsOrders []*domain.D @@ -319,7 +347,16 @@ func (repository *DividendsOrderRepository) SaveMany(dividendsOrders []*domain.D
319 Remarks: dividendsOrder.Remarks, 347 Remarks: dividendsOrder.Remarks,
320 }) 348 })
321 for _, good := range dividendsOrder.Goods { 349 for _, good := range dividendsOrder.Goods {
  350 + if good.Identify() == nil {
  351 + orderGoodId, err := repository.nextIdentify()
  352 + if err != nil {
  353 + return nil, err
  354 + } else {
  355 + good.OrderGoodId = orderGoodId
  356 + }
  357 + }
322 orderGoodsModel = append(orderGoodsModel, &models.OrderGood{ 358 orderGoodsModel = append(orderGoodsModel, &models.OrderGood{
  359 + OrderGoodId: good.OrderGoodId,
323 OrderGoodAmount: good.OrderGoodAmount, 360 OrderGoodAmount: good.OrderGoodAmount,
324 OrderGoodName: good.OrderGoodName, 361 OrderGoodName: good.OrderGoodName,
325 OrderGoodPrice: good.OrderGoodPrice, 362 OrderGoodPrice: good.OrderGoodPrice,
@@ -544,8 +581,13 @@ func NewDividendsOrderRepository(transactionContext *pgTransaction.TransactionCo @@ -544,8 +581,13 @@ func NewDividendsOrderRepository(transactionContext *pgTransaction.TransactionCo
544 if transactionContext == nil { 581 if transactionContext == nil {
545 return nil, fmt.Errorf("transactionContext参数不能为nil") 582 return nil, fmt.Errorf("transactionContext参数不能为nil")
546 } else { 583 } else {
  584 + idWorker, err := snowflake.NewIdWorker(1)
  585 + if err != nil {
  586 + return nil, err
  587 + }
547 return &DividendsOrderRepository{ 588 return &DividendsOrderRepository{
548 transactionContext: transactionContext, 589 transactionContext: transactionContext,
  590 + IdWorker: idWorker,
549 }, nil 591 }, nil
550 } 592 }
551 } 593 }
@@ -17,14 +17,11 @@ import ( @@ -17,14 +17,11 @@ import (
17 17
18 type DividendsReturnedOrderRepository struct { 18 type DividendsReturnedOrderRepository struct {
19 transactionContext *pgTransaction.TransactionContext 19 transactionContext *pgTransaction.TransactionContext
  20 + IdWorker *snowflake.IdWorker
20 } 21 }
21 22
22 func (repository *DividendsReturnedOrderRepository) nextIdentify() (int64, error) { 23 func (repository *DividendsReturnedOrderRepository) nextIdentify() (int64, error) {
23 - IdWorker, err := snowflake.NewIdWorker(1)  
24 - if err != nil {  
25 - return 0, err  
26 - }  
27 - id, err := IdWorker.NextId() 24 + id, err := repository.IdWorker.NextId()
28 return id, err 25 return id, err
29 } 26 }
30 27
@@ -111,7 +108,16 @@ func (repository *DividendsReturnedOrderRepository) Save(dividendsReturnedOrder @@ -111,7 +108,16 @@ func (repository *DividendsReturnedOrderRepository) Save(dividendsReturnedOrder
111 // 新增退货单产品 108 // 新增退货单产品
112 var orderGoodsModel []*models.OrderGood 109 var orderGoodsModel []*models.OrderGood
113 for _, good := range dividendsReturnedOrder.Goods { 110 for _, good := range dividendsReturnedOrder.Goods {
  111 + if good.Identify() == nil {
  112 + goodId, err := repository.nextIdentify()
  113 + if err != nil {
  114 + return nil, err
  115 + } else {
  116 + good.OrderGoodId = goodId
  117 + }
  118 + }
114 orderGoodsModel = append(orderGoodsModel, &models.OrderGood{ 119 orderGoodsModel = append(orderGoodsModel, &models.OrderGood{
  120 + OrderGoodId: good.OrderGoodId,
115 OrderGoodAmount: good.OrderGoodAmount, 121 OrderGoodAmount: good.OrderGoodAmount,
116 OrderGoodName: good.OrderGoodName, 122 OrderGoodName: good.OrderGoodName,
117 OrderGoodPrice: good.OrderGoodPrice, 123 OrderGoodPrice: good.OrderGoodPrice,
@@ -207,7 +213,16 @@ func (repository *DividendsReturnedOrderRepository) Save(dividendsReturnedOrder @@ -207,7 +213,16 @@ func (repository *DividendsReturnedOrderRepository) Save(dividendsReturnedOrder
207 // 将待添加的分红退户订单产品领域模型转换为数据模型 213 // 将待添加的分红退户订单产品领域模型转换为数据模型
208 var orderGoodsToAddModels []*models.OrderGood 214 var orderGoodsToAddModels []*models.OrderGood
209 for _, goodDomain := range orderGoodsToAdd { 215 for _, goodDomain := range orderGoodsToAdd {
  216 + if goodDomain.Identify() == nil {
  217 + goodId, err := repository.nextIdentify()
  218 + if err != nil {
  219 + return nil, err
  220 + } else {
  221 + goodDomain.OrderGoodId = goodId
  222 + }
  223 + }
210 orderGoodsToAddModels = append(orderGoodsToAddModels, &models.OrderGood{ 224 orderGoodsToAddModels = append(orderGoodsToAddModels, &models.OrderGood{
  225 + OrderGoodId: goodDomain.OrderGoodId,
211 OrderGoodAmount: goodDomain.OrderGoodAmount, 226 OrderGoodAmount: goodDomain.OrderGoodAmount,
212 OrderGoodName: goodDomain.OrderGoodName, 227 OrderGoodName: goodDomain.OrderGoodName,
213 OrderGoodPrice: goodDomain.OrderGoodPrice, 228 OrderGoodPrice: goodDomain.OrderGoodPrice,
@@ -298,6 +313,100 @@ func (repository *DividendsReturnedOrderRepository) Save(dividendsReturnedOrder @@ -298,6 +313,100 @@ func (repository *DividendsReturnedOrderRepository) Save(dividendsReturnedOrder
298 return dividendsReturnedOrder, nil 313 return dividendsReturnedOrder, nil
299 } 314 }
300 315
  316 +func (repository *DividendsReturnedOrderRepository) SaveMany(dividendsReturnedOrders []*domain.DividendsReturnedOrder) ([]*domain.DividendsReturnedOrder, error) {
  317 + tx := repository.transactionContext.PgTx
  318 + var dividendsReturnedOrderModels []*models.DividendsReturnedOrder
  319 + var orderGoodsModel []*models.OrderGood
  320 + for _, dividendsReturnedOrder := range dividendsReturnedOrders {
  321 + if dividendsReturnedOrder.Identify() == nil {
  322 + dividendsReturnedOrderId, err := repository.nextIdentify()
  323 + if err != nil {
  324 + return nil, err
  325 + } else {
  326 + dividendsReturnedOrder.DividendsReturnedOrderId = dividendsReturnedOrderId
  327 + }
  328 + }
  329 + dividendsReturnedOrderModels = append(dividendsReturnedOrderModels, &models.DividendsReturnedOrder{
  330 + DividendsReturnedOrderId: dividendsReturnedOrder.DividendsReturnedOrderId,
  331 + DividendsReturnedOrderNumber: dividendsReturnedOrder.DividendsReturnedOrderNumber,
  332 + DividendsReturnedOrderRefund: dividendsReturnedOrder.DividendsReturnedOrderRefund,
  333 + OriginalOrderNum: dividendsReturnedOrder.OriginalOrderNum,
  334 + DividendsOrderNumber: dividendsReturnedOrder.DividendsOrderNumber,
  335 + DividendsReturnedCustomerName: dividendsReturnedOrder.DividendsReturnedCustomerName,
  336 + OrderTime: dividendsReturnedOrder.OrderTime,
  337 + DividendsReturnedDate: dividendsReturnedOrder.DividendsReturnedDate,
  338 + Region: dividendsReturnedOrder.Region,
  339 + Remarks: dividendsReturnedOrder.Remarks,
  340 + DividendStatus: dividendsReturnedOrder.DividendStatus,
  341 + DividendTime: time.Time{},
  342 + Org: dividendsReturnedOrder.Org,
  343 + Company: dividendsReturnedOrder.Company,
  344 + CreatedAt: time.Now(),
  345 + DeletedAt: dividendsReturnedOrder.DeletedAt,
  346 + UpdatedAt: dividendsReturnedOrder.UpdatedAt,
  347 + Operator: dividendsReturnedOrder.Operator,
  348 + OperateTime: time.Now(),
  349 + })
  350 + for _, good := range dividendsReturnedOrder.Goods {
  351 + if good.Identify() == nil {
  352 + orderGoodId, err := repository.nextIdentify()
  353 + if err != nil {
  354 + return nil, err
  355 + } else {
  356 + good.OrderGoodId = orderGoodId
  357 + }
  358 + }
  359 + orderGoodsModel = append(orderGoodsModel, &models.OrderGood{
  360 + OrderGoodId: good.OrderGoodId,
  361 + OrderGoodAmount: good.OrderGoodAmount,
  362 + OrderGoodName: good.OrderGoodName,
  363 + OrderGoodPrice: good.OrderGoodPrice,
  364 + OrderGoodQuantity: good.OrderGoodQuantity,
  365 + DividendsOrderNumber: "",
  366 + DividendsReturnedOrderNumber: dividendsReturnedOrder.DividendsReturnedOrderNumber,
  367 + CooperationContractNumber: good.CooperationContractNumber,
  368 + CompanyId: good.CompanyId,
  369 + OrgId: good.OrgId,
  370 + OrderGoodExpense: good.OrderGoodExpense,
  371 + OrderGoodDividendsStatus: good.OrderGoodDividendsStatus,
  372 + CreatedAt: time.Now(),
  373 + DeletedAt: time.Time{},
  374 + UpdatedAt: time.Time{},
  375 + })
  376 + }
  377 + }
  378 + if _, err := tx.Model(&dividendsReturnedOrderModels).Insert(); err != nil { // 新增分红订单
  379 + return nil, err
  380 + } else { // 新增分红订单产品
  381 + if _, err := tx.Model(&orderGoodsModel).Insert(); err != nil {
  382 + return nil, err
  383 + }
  384 + }
  385 + var dividendsReturnedOrdersSaved []*domain.DividendsReturnedOrder
  386 + for _, dividendsReturnedOrderModel := range dividendsReturnedOrderModels {
  387 + //获取订单产品
  388 + var orderGoodModels []*models.OrderGood
  389 + orderGoodModelQuery := tx.Model(&orderGoodModels)
  390 + if err := orderGoodModelQuery.
  391 + Where("company_id = ?", dividendsReturnedOrderModel.Company.CompanyId).
  392 + Where("org_id = ?", dividendsReturnedOrderModel.Org.OrgId).
  393 + Where("dividends_returned_order_number = ?", dividendsReturnedOrderModel.DividendsReturnedOrderNumber).
  394 + Select(); err != nil {
  395 + log.Logger.Error("分红退货单关联的产品不存在", map[string]interface{}{
  396 + "dividendsReturnedOrderModel": dividendsReturnedOrderModel,
  397 + })
  398 + return nil, fmt.Errorf("分红退货单关联的产品不存在")
  399 + }
  400 + // 聚合分红退货单
  401 + if dividendsReturnedOrder, err := transform.TransformToDividendsReturnedOrderDomainModelFromPgModels(dividendsReturnedOrderModel, orderGoodModels); err != nil {
  402 + return dividendsReturnedOrders, err
  403 + } else {
  404 + dividendsReturnedOrders = append(dividendsReturnedOrders, dividendsReturnedOrder)
  405 + }
  406 + }
  407 + return dividendsReturnedOrdersSaved, nil
  408 +}
  409 +
301 func (repository *DividendsReturnedOrderRepository) UpdateMany(dividendsReturnedOrders []*domain.DividendsReturnedOrder) ([]*domain.DividendsReturnedOrder, error) { 410 func (repository *DividendsReturnedOrderRepository) UpdateMany(dividendsReturnedOrders []*domain.DividendsReturnedOrder) ([]*domain.DividendsReturnedOrder, error) {
302 tx := repository.transactionContext.PgTx 411 tx := repository.transactionContext.PgTx
303 var dividendsReturnedOrderModels []*models.DividendsReturnedOrder 412 var dividendsReturnedOrderModels []*models.DividendsReturnedOrder
@@ -469,8 +578,13 @@ func NewDividendsReturnedOrderRepository(transactionContext *pgTransaction.Trans @@ -469,8 +578,13 @@ func NewDividendsReturnedOrderRepository(transactionContext *pgTransaction.Trans
469 if transactionContext == nil { 578 if transactionContext == nil {
470 return nil, fmt.Errorf("transactionContext参数不能为nil") 579 return nil, fmt.Errorf("transactionContext参数不能为nil")
471 } else { 580 } else {
  581 + idWorker, err := snowflake.NewIdWorker(1)
  582 + if err != nil {
  583 + return nil, err
  584 + }
472 return &DividendsReturnedOrderRepository{ 585 return &DividendsReturnedOrderRepository{
473 transactionContext: transactionContext, 586 transactionContext: transactionContext,
  587 + IdWorker: idWorker,
474 }, nil 588 }, nil
475 } 589 }
476 } 590 }
@@ -16,14 +16,11 @@ import ( @@ -16,14 +16,11 @@ import (
16 16
17 type OrderGoodRepository struct { 17 type OrderGoodRepository struct {
18 transactionContext *pgTransaction.TransactionContext 18 transactionContext *pgTransaction.TransactionContext
  19 + IdWorker *snowflake.IdWorker
19 } 20 }
20 21
21 func (repository *OrderGoodRepository) nextIdentify() (int64, error) { 22 func (repository *OrderGoodRepository) nextIdentify() (int64, error) {
22 - IdWorker, err := snowflake.NewIdWorker(1)  
23 - if err != nil {  
24 - return 0, err  
25 - }  
26 - id, err := IdWorker.NextId() 23 + id, err := repository.IdWorker.NextId()
27 return id, err 24 return id, err
28 } 25 }
29 26
@@ -216,8 +213,13 @@ func NewOrderGoodRepository(transactionContext *pgTransaction.TransactionContext @@ -216,8 +213,13 @@ func NewOrderGoodRepository(transactionContext *pgTransaction.TransactionContext
216 if transactionContext == nil { 213 if transactionContext == nil {
217 return nil, fmt.Errorf("transactionContext参数不能为nil") 214 return nil, fmt.Errorf("transactionContext参数不能为nil")
218 } else { 215 } else {
  216 + idWorker, err := snowflake.NewIdWorker(1)
  217 + if err != nil {
  218 + return nil, err
  219 + }
219 return &OrderGoodRepository{ 220 return &OrderGoodRepository{
220 transactionContext: transactionContext, 221 transactionContext: transactionContext,
  222 + IdWorker: idWorker,
221 }, nil 223 }, nil
222 } 224 }
223 } 225 }