作者 陈志颖

refactor:优化订单导入

@@ -336,6 +336,10 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -336,6 +336,10 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
336 } 336 }
337 } 337 }
338 338
  339 + log.Logger.Info("查找合约数据", map[string]interface{}{
  340 + "cooperationContractsMap": cooperationContractsMap,
  341 + })
  342 +
339 // 分红订单DAO初始化 343 // 分红订单DAO初始化
340 var dividendsOrderDao *dao.DividendsOrderDao 344 var dividendsOrderDao *dao.DividendsOrderDao
341 if value, err := factory.CreateDividendsOrderDao(map[string]interface{}{ 345 if value, err := factory.CreateDividendsOrderDao(map[string]interface{}{
@@ -609,6 +613,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -609,6 +613,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
609 DividendsOrderNumber: "", 613 DividendsOrderNumber: "",
610 CooperationContractNumber: dividendsOrder.CooperationContractNumber, 614 CooperationContractNumber: dividendsOrder.CooperationContractNumber,
611 OrderGoodExpense: expense, 615 OrderGoodExpense: expense,
  616 + LineNumber: i,
612 }, 617 },
613 }, 618 },
614 CompanyId: importDividendsOrderCommand.CompanyId, 619 CompanyId: importDividendsOrderCommand.CompanyId,
@@ -660,6 +665,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -660,6 +665,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
660 DividendsOrderNumber: "", 665 DividendsOrderNumber: "",
661 CooperationContractNumber: dividendsOrder.CooperationContractNumber, 666 CooperationContractNumber: dividendsOrder.CooperationContractNumber,
662 OrderGoodExpense: expense, 667 OrderGoodExpense: expense,
  668 + LineNumber: i, // 记录订单产品行号
663 }) 669 })
664 670
665 // 记录聚合行号 671 // 记录聚合行号
@@ -667,6 +673,10 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -667,6 +673,10 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
667 } 673 }
668 } 674 }
669 675
  676 + log.Logger.Info("聚合订单", map[string]interface{}{
  677 + "dividendsOrderCommands": dividendsOrderCommands,
  678 + })
  679 +
670 // 聚合订单错误返回 680 // 聚合订单错误返回
671 if len(aggregateErrorList) > 0 { 681 if len(aggregateErrorList) > 0 {
672 return map[string]interface{}{ 682 return map[string]interface{}{
@@ -698,7 +708,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -698,7 +708,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
698 row := &domain.ImportInfo{ 708 row := &domain.ImportInfo{
699 Error: application.ThrowError(application.BUSINESS_ERROR, err.Error()), // 错误信息 709 Error: application.ThrowError(application.BUSINESS_ERROR, err.Error()), // 错误信息
700 LineNumbers: cmd.LineNumbers, // 错误影响的行 710 LineNumbers: cmd.LineNumbers, // 错误影响的行
701 - GoodLine: map[int]interface{}{}, 711 + GoodLine: map[int]string{},
702 } 712 }
703 errorDataList = append(errorDataList, row) 713 errorDataList = append(errorDataList, row)
704 continue 714 continue
@@ -758,7 +768,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -758,7 +768,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
758 row := &domain.ImportInfo{ 768 row := &domain.ImportInfo{
759 Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("分红订单号生成错误:%s", err)), 769 Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("分红订单号生成错误:%s", err)),
760 LineNumbers: dividendsOrder.LineNumbers, // 错误影响的行 770 LineNumbers: dividendsOrder.LineNumbers, // 错误影响的行
761 - GoodLine: map[int]interface{}{}, 771 + GoodLine: map[int]string{},
762 } 772 }
763 errorDataList = append(errorDataList, row) 773 errorDataList = append(errorDataList, row)
764 continue 774 continue
@@ -770,18 +780,19 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -770,18 +780,19 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
770 row := &domain.ImportInfo{ 780 row := &domain.ImportInfo{
771 Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("订单日期转换错误:%s", err)), 781 Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("订单日期转换错误:%s", err)),
772 LineNumbers: dividendsOrder.LineNumbers, // 错误影响的行 782 LineNumbers: dividendsOrder.LineNumbers, // 错误影响的行
773 - GoodLine: map[int]interface{}{}, 783 + GoodLine: map[int]string{},
774 } 784 }
775 errorDataList = append(errorDataList, row) 785 errorDataList = append(errorDataList, row)
776 continue 786 continue
777 } 787 }
  788 +
778 orderTime := utils.TransformTimestampToTime(orderTimeInt) 789 orderTime := utils.TransformTimestampToTime(orderTimeInt)
779 790
780 // 新增订单产品 791 // 新增订单产品
781 var orderGoods []*domain.OrderGood 792 var orderGoods []*domain.OrderGood
782 var dividendsOrderAmount float64 793 var dividendsOrderAmount float64
783 - orderGoodErrMap := make(map[int]interface{}, 0)  
784 - for i, orderGood := range dividendsOrder.OrderGoods { 794 + orderGoodErrMap := make(map[int]string, 0)
  795 + for j, orderGood := range dividendsOrder.OrderGoods {
785 // 校验共创合约是否合法 796 // 校验共创合约是否合法
786 contractNumberExist := false 797 contractNumberExist := false
787 for _, cooperationContract := range cooperationContracts { 798 for _, cooperationContract := range cooperationContracts {
@@ -791,18 +802,24 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -791,18 +802,24 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
791 } 802 }
792 } 803 }
793 if !contractNumberExist { 804 if !contractNumberExist {
794 - orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("共创合约编号不存在:%s", err)) 805 + orderGoodErrMap[dividendsOrder.OrderGoods[j].LineNumber] = "订单产品关联的共创合约不存在"
  806 + continue
795 } 807 }
796 808
797 // 计算产品金额 809 // 计算产品金额
798 orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense)).Float64() 810 orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense)).Float64()
799 811
800 - // 校验共创合约激励类型是否正确  
801 ruleMatchedFlag := false 812 ruleMatchedFlag := false
802 if orderGood.CooperationContractNumber != "" { 813 if orderGood.CooperationContractNumber != "" {
  814 + // 校验共创合约激励类型是否正确
  815 + log.Logger.Info("订单产品匹配的合约", map[string]interface{}{
  816 + "contractMatched": cooperationContractsMap[orderGood.CooperationContractNumber],
  817 + })
803 if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 { 818 if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
804 - orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货单产品不能关联金额激励规则") 819 + orderGoodErrMap[dividendsOrder.OrderGoods[j].LineNumber] = "分红订单不能关联金额激励规则"
  820 + continue
805 } 821 }
  822 +
806 // 校验产品关联合约的激励规则是否匹配订单时间 823 // 校验产品关联合约的激励规则是否匹配订单时间
807 if cooperationContractsMap[orderGood.CooperationContractNumber] != nil { 824 if cooperationContractsMap[orderGood.CooperationContractNumber] != nil {
808 for _, incentivesRule := range cooperationContractsMap[orderGood.CooperationContractNumber].DividendsIncentivesRules { 825 for _, incentivesRule := range cooperationContractsMap[orderGood.CooperationContractNumber].DividendsIncentivesRules {
@@ -814,7 +831,8 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -814,7 +831,8 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
814 } 831 }
815 } 832 }
816 if !ruleMatchedFlag { 833 if !ruleMatchedFlag {
817 - orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, "订单时间无法匹配分红激励规则,请重新选择") 834 + orderGoodErrMap[dividendsOrder.OrderGoods[j].LineNumber] = "订单时间无法匹配分红激励规则"
  835 + continue
818 } 836 }
819 } 837 }
820 838
@@ -838,9 +856,13 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -838,9 +856,13 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
838 // 计算分红订单金额 856 // 计算分红订单金额
839 dividendsOrderAmount, _ = decimal.NewFromFloat(dividendsOrderAmount).Add(decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense)))).Float64() 857 dividendsOrderAmount, _ = decimal.NewFromFloat(dividendsOrderAmount).Add(decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense)))).Float64()
840 } 858 }
  859 +
841 if len(orderGoodErrMap) > 0 { 860 if len(orderGoodErrMap) > 0 {
  861 + log.Logger.Info("校验订单产品", map[string]interface{}{
  862 + "orderGoodErrMap": orderGoodErrMap,
  863 + })
842 row := &domain.ImportInfo{ 864 row := &domain.ImportInfo{
843 - Error: application.ThrowError(application.BUSINESS_ERROR, "共创合约不存在"), 865 + Error: nil,
844 LineNumbers: dividendsOrder.LineNumbers, // 错误影响的行 866 LineNumbers: dividendsOrder.LineNumbers, // 错误影响的行
845 GoodLine: orderGoodErrMap, // 错误产品行号记录 867 GoodLine: orderGoodErrMap, // 错误产品行号记录
846 } 868 }
@@ -874,8 +896,9 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -874,8 +896,9 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
874 896
875 creatDividendsOrder = append(creatDividendsOrder, newDividendsOrder) 897 creatDividendsOrder = append(creatDividendsOrder, newDividendsOrder)
876 } 898 }
  899 + /******************************************************************************************************************/
877 900
878 - // 错误报告处理 901 + /*********************************************** 错误报告处理 *******************************************************/
879 if len(errorDataList) <= 0 { // 成功返回 902 if len(errorDataList) <= 0 { // 成功返回
880 if _, err2 := dividendsOrderRepository.SaveMany(creatDividendsOrder); err2 != nil { 903 if _, err2 := dividendsOrderRepository.SaveMany(creatDividendsOrder); err2 != nil {
881 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err2.Error()) 904 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err2.Error())
@@ -887,7 +910,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -887,7 +910,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
887 if successDataCount == int64(rowCnt) { 910 if successDataCount == int64(rowCnt) {
888 return map[string]interface{}{ 911 return map[string]interface{}{
889 "successCount": successDataCount, 912 "successCount": successDataCount,
890 - "fail": map[string]interface{}{}, 913 + "fail": make(map[string]interface{}),
891 }, nil 914 }, nil
892 } 915 }
893 } else { // 失败返回 916 } else { // 失败返回
@@ -897,7 +920,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -897,7 +920,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
897 if len(errorData.GoodLine) == 0 { // 订单错误 920 if len(errorData.GoodLine) == 0 { // 订单错误
898 for _, line := range errorData.LineNumbers { 921 for _, line := range errorData.LineNumbers {
899 tmpRow := &domain.FailInfo{ 922 tmpRow := &domain.FailInfo{
900 - FailReason: "订单数据新增错误:" + errorData.Error.Error(), 923 + FailReason: errorData.Error.Error(),
901 } 924 }
902 tmpRow.ImportDividendsOrderData = &importDividendsOrderCommand.DividendsOrderData[line] 925 tmpRow.ImportDividendsOrderData = &importDividendsOrderCommand.DividendsOrderData[line]
903 failureDataList = append(failureDataList, tmpRow) 926 failureDataList = append(failureDataList, tmpRow)
@@ -905,7 +928,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -905,7 +928,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
905 } else if len(errorData.GoodLine) > 0 { // 订单产品错误 928 } else if len(errorData.GoodLine) > 0 { // 订单产品错误
906 for line := range errorData.GoodLine { 929 for line := range errorData.GoodLine {
907 tmpRow := &domain.FailInfo{ 930 tmpRow := &domain.FailInfo{
908 - FailReason: "订单数据新增错误:" + errorData.Error.Error(), 931 + FailReason: errorData.GoodLine[line],
909 } 932 }
910 tmpRow.ImportDividendsOrderData = &importDividendsOrderCommand.DividendsOrderData[line] 933 tmpRow.ImportDividendsOrderData = &importDividendsOrderCommand.DividendsOrderData[line]
911 failureDataList = append(failureDataList, tmpRow) 934 failureDataList = append(failureDataList, tmpRow)
@@ -707,7 +707,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -707,7 +707,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
707 row := &domain.ImportInfo{ 707 row := &domain.ImportInfo{
708 Error: application.ThrowError(application.BUSINESS_ERROR, err.Error()), // 错误信息 708 Error: application.ThrowError(application.BUSINESS_ERROR, err.Error()), // 错误信息
709 LineNumbers: cmd.LineNumbers, // 错误影响的行 709 LineNumbers: cmd.LineNumbers, // 错误影响的行
710 - GoodLine: map[int]interface{}{}, 710 + GoodLine: map[int]string{},
711 } 711 }
712 errorDataList = append(errorDataList, row) 712 errorDataList = append(errorDataList, row)
713 continue 713 continue
@@ -862,7 +862,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -862,7 +862,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
862 row := &domain.ImportInfo{ 862 row := &domain.ImportInfo{
863 Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("保存退货单数据失败:%s", err)), 863 Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("保存退货单数据失败:%s", err)),
864 LineNumbers: dividendsReturnedOrder.LineNumbers, // 错误影响的行 864 LineNumbers: dividendsReturnedOrder.LineNumbers, // 错误影响的行
865 - GoodLine: map[int]interface{}{}, 865 + GoodLine: map[int]string{},
866 } 866 }
867 errorDataList = append(errorDataList, row) 867 errorDataList = append(errorDataList, row)
868 continue 868 continue
@@ -53,9 +53,9 @@ type DividendsOrder struct { @@ -53,9 +53,9 @@ type DividendsOrder struct {
53 53
54 // ImportInfo 导入错误信息 54 // ImportInfo 导入错误信息
55 type ImportInfo struct { 55 type ImportInfo struct {
56 - Error error `json:"error"`  
57 - LineNumbers []int `json:"lineNumbers"`  
58 - GoodLine map[int]interface{} `json:"goodLine"` 56 + Error error `json:"error"`
  57 + LineNumbers []int `json:"lineNumbers"`
  58 + GoodLine map[int]string `json:"goodLine"`
59 } 59 }
60 60
61 // FailInfo 返回的失败信息 61 // FailInfo 返回的失败信息