作者 yangfu

fix: decimal problem

@@ -110,7 +110,7 @@ func (tableService *TableService) FieldOptionalValues(ctx *domain.Context, cmd * @@ -110,7 +110,7 @@ func (tableService *TableService) FieldOptionalValues(ctx *domain.Context, cmd *
110 if err := transactionContext.CommitTransaction(); err != nil { 110 if err := transactionContext.CommitTransaction(); err != nil {
111 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 111 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
112 } 112 }
113 - values := dataTable.OptionalValue(cmd.Match) 113 + values := dataTable.OptionalValue(cmd.Match, field.SQLType)
114 return map[string]interface{}{ 114 return map[string]interface{}{
115 "values": values, 115 "values": values,
116 "total": len(values), 116 "total": len(values),
@@ -55,16 +55,24 @@ type Condition struct { @@ -55,16 +55,24 @@ type Condition struct {
55 55
56 func (t *DataTable) OptionalValue(args ...string) []string { 56 func (t *DataTable) OptionalValue(args ...string) []string {
57 var values = make([]string, 0) 57 var values = make([]string, 0)
58 - match:=""  
59 - if len(args)>0{ 58 + match := ""
  59 + filedType := ""
  60 + if len(args) > 0 {
60 match = args[0] 61 match = args[0]
61 } 62 }
  63 + if len(args) > 1 {
  64 + filedType = args[1]
  65 + }
62 if len(t.Data) > 0 && len(t.Data[0]) == 1 { 66 if len(t.Data) > 0 && len(t.Data[0]) == 1 {
63 for i := range t.Data { 67 for i := range t.Data {
64 if len(t.Data[i]) == 0 { 68 if len(t.Data[i]) == 0 {
65 continue 69 continue
66 } 70 }
67 - if len(match)>0 && !strings.Contains(t.Data[i][0],match){ 71 + if len(match) > 0 && !strings.Contains(t.Data[i][0], match) {
  72 + continue
  73 + }
  74 + if filedType == Float.ToString() {
  75 + values = append(values, RoundFieldValue(&Field{SQLType: filedType}, t.Data[i][0]))
68 continue 76 continue
69 } 77 }
70 values = append(values, t.Data[i][0]) 78 values = append(values, t.Data[i][0])
@@ -125,8 +125,8 @@ var ( @@ -125,8 +125,8 @@ var (
125 Int SQLType = "INT" 125 Int SQLType = "INT"
126 BigInt SQLType = "BIGINT" 126 BigInt SQLType = "BIGINT"
127 Float SQLType = "FLOAT" 127 Float SQLType = "FLOAT"
128 - DECIMALV2 SQLType = "DECIMALV2"  
129 - DECIMAL279 SQLType = "DECIMAL(27,9)" 128 + DECIMALV2 SQLType = "DECIMAL(20,15)" //"DECIMALV2"
  129 + DECIMAL279 SQLType = "DECIMAL(20,15)"
130 Date SQLType = "DATE" 130 Date SQLType = "DATE"
131 Datetime SQLType = "DATETIME" 131 Datetime SQLType = "DATETIME"
132 ) 132 )
@@ -4,6 +4,7 @@ import ( @@ -4,6 +4,7 @@ import (
4 "fmt" 4 "fmt"
5 "github.com/linmadan/egglib-go/utils/xtime" 5 "github.com/linmadan/egglib-go/utils/xtime"
6 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/utils" 6 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/utils"
  7 + "strconv"
7 "strings" 8 "strings"
8 ) 9 )
9 10
@@ -244,6 +245,13 @@ func ToFieldData(fields []*Field, data [][]string, byName bool, configs ...bool) @@ -244,6 +245,13 @@ func ToFieldData(fields []*Field, data [][]string, byName bool, configs ...bool)
244 245
245 // RoundFieldValue 字段值精度处理 246 // RoundFieldValue 字段值精度处理
246 func RoundFieldValue(f *Field, v string) string { 247 func RoundFieldValue(f *Field, v string) string {
  248 + if f.SQLType == Float.ToString() {
  249 + fv, err := strconv.ParseFloat(v, 64)
  250 + if err != nil {
  251 + return v
  252 + }
  253 + return fmt.Sprintf("%v", fv)
  254 + }
247 return v 255 return v
248 //if f.SQLType != DECIMALV2.ToString() { 256 //if f.SQLType != DECIMALV2.ToString() {
249 // return v 257 // return v