浏览代码

Merge branch 'master' of https://app.yhyue.com/moapp/jybase

wangshan 3 年之前
父节点
当前提交
f406279ff7
共有 2 个文件被更改,包括 44 次插入4 次删除
  1. 38 3
      common/common.go
  2. 6 1
      mysql/mysql.go

+ 38 - 3
common/common.go

@@ -672,16 +672,25 @@ func RetainDecimal(v float64, n int) float64 {
 
 
 //序列化成想要的类型,再断言
 //序列化成想要的类型,再断言
 func JsonUnmarshal(m interface{}, s interface{}) interface{} {
 func JsonUnmarshal(m interface{}, s interface{}) interface{} {
+	JsonUnmarshalByErr(m, s)
+	return s
+}
+
+//序列化成想要的类型,再断言
+func JsonUnmarshalByErr(m interface{}, s interface{}) (interface{}, error) {
 	var b []byte
 	var b []byte
+	var err error
 	if v, ok := m.(string); ok {
 	if v, ok := m.(string); ok {
 		b = []byte(v)
 		b = []byte(v)
 	} else if v, ok := m.([]byte); ok {
 	} else if v, ok := m.([]byte); ok {
 		b = v
 		b = v
 	} else {
 	} else {
-		b, _ = json.Marshal(m)
+		b, err = json.Marshal(m)
 	}
 	}
-	json.Unmarshal(b, &s)
-	return s
+	if err == nil {
+		err = json.Unmarshal(b, &s)
+	}
+	return s, err
 }
 }
 
 
 func MapToJson(param map[string]interface{}) string {
 func MapToJson(param map[string]interface{}) string {
@@ -721,6 +730,32 @@ func MathFloor(x float64) int {
 	return int(math.Floor(x + 0/5))
 	return int(math.Floor(x + 0/5))
 }
 }
 
 
+// data 转换成ret
+func Bind(data interface{}, ret interface{}) error {
+	v := reflect.ValueOf(ret)
+	if v.Kind() != reflect.Ptr {
+		return fmt.Errorf("ptr input ret needed as type as input type %s", v.Kind())
+	}
+	havdata := false
+	var bk interface{}
+	if v.Elem().Kind() == reflect.Slice {
+		t := reflect.Zero(reflect.TypeOf(v.Elem().Interface()))
+		bk = v.Elem().Interface()
+		v.Elem().Set(t)
+		havdata = true
+	}
+	_data, _ := json.MarshalIndent(data, "", "    ")
+	err := json.Unmarshal(_data, ret)
+	if err != nil {
+		fmt.Println(err)
+		if havdata {
+			v.Elem().Set(reflect.ValueOf(bk))
+		}
+		return err
+	}
+	return nil
+}
+
 //string
 //string
 func InterfaceToStr(x interface{}) string {
 func InterfaceToStr(x interface{}) string {
 	switch st := reflect.ValueOf(x); st.Kind() {
 	switch st := reflect.ValueOf(x); st.Kind() {

+ 6 - 1
mysql/mysql.go

@@ -356,6 +356,11 @@ func (m *Mysql) UpdateByTx(tx *sql.Tx, tableName string, query, update map[strin
 
 
 //批量更新
 //批量更新
 func (m *Mysql) UpdateBath(tableName string, fields []string, array [][]interface{}) {
 func (m *Mysql) UpdateBath(tableName string, fields []string, array [][]interface{}) {
+	m.UpdateBathByTx(nil, tableName, fields, array)
+}
+
+//带事务的批量更新
+func (m *Mysql) UpdateBathByTx(tx *sql.Tx, tableName string, fields []string, array [][]interface{}) int64 {
 	ws := []string{}
 	ws := []string{}
 	args := []interface{}{}
 	args := []interface{}{}
 	ids := []interface{}{}
 	ids := []interface{}{}
@@ -381,7 +386,7 @@ func (m *Mysql) UpdateBath(tableName string, fields []string, array [][]interfac
 	}
 	}
 	args = append(args, ids...)
 	args = append(args, ids...)
 	sql := fmt.Sprintf(`update %s set %s where %s in (%s)`, tableName, strings.Join(sql_appends, ","), fields[0], strings.Join(ws, ","))
 	sql := fmt.Sprintf(`update %s set %s where %s in (%s)`, tableName, strings.Join(sql_appends, ","), fields[0], strings.Join(ws, ","))
-	m.UpdateOrDeleteBySql(sql, args...)
+	return m.UpdateOrDeleteBySqlByTx(tx, sql, args...)
 }
 }
 
 
 //删除
 //删除