Forráskód Böngészése

mySessionBase添加

huahaiyan 6 éve
szülő
commit
64360f0a2c
1 módosított fájl, 634 hozzáadás és 0 törlés
  1. 634 0
      src/dashoo.cn/backend/api/mydb/mySessionBase.go

+ 634 - 0
src/dashoo.cn/backend/api/mydb/mySessionBase.go

@@ -0,0 +1,634 @@
+// 业务逻辑服务基类,提供基本的添删改查功能
+//
+// 修改纪录
+// 2016.06.06 版本:1.0 yy 新建账户分表结构的处理
+
+package mydb
+
+import (
+	"encoding/json"
+	"fmt"
+	"reflect"
+	"strconv"
+
+	. "dashoo.cn/utils/db"
+	//	"github.com/go-xorm/xorm"
+)
+
+type MySessionBase struct {
+	SessionBase
+}
+
+//
+func (s *MySessionBase) GetPagingEntitiesWithOrderBytbl(AccCode string, pageIndex, itemsPerPage int64, order string, asc bool, entitiesPtr interface{}, where ...string) (total int64) {
+	var err error
+	var resultsSlice []map[string][]byte
+	//获取表名
+	tableName := AccCode + GetTableName(entitiesPtr)
+	if len(where) == 0 {
+		if asc {
+			err = s.Session.Table(tableName).Limit(int(itemsPerPage), (int(pageIndex)-1)*int(itemsPerPage)).Asc(order).Find(entitiesPtr)
+		} else {
+			err = s.Session.Table(tableName).Limit(int(itemsPerPage), (int(pageIndex)-1)*int(itemsPerPage)).Desc(order).Find(entitiesPtr)
+		}
+		//获取总记录数
+		sql := "SELECT COUNT(*) AS total FROM " + tableName
+		resultsSlice, err = s.Session.Query(sql)
+		LogError(err)
+
+	} else {
+		if asc {
+			err = s.Session.Table(tableName).Where(where[0]).Limit(int(itemsPerPage), (int(pageIndex)-1)*int(itemsPerPage)).Asc(order).Find(entitiesPtr)
+		} else {
+			err = s.Session.Table(tableName).Where(where[0]).Limit(int(itemsPerPage), (int(pageIndex)-1)*int(itemsPerPage)).Desc(order).Find(entitiesPtr)
+		}
+		sql := "SELECT COUNT(*) AS total FROM " + tableName + " where " + where[0]
+		resultsSlice, err = s.Session.Query(sql)
+	}
+	LogError(err)
+	if len(resultsSlice) > 0 {
+		results := resultsSlice[0]
+		for _, value := range results {
+			total, err = strconv.ParseInt(string(value), 10, 64)
+			LogError(err)
+			break
+		}
+	}
+	return total
+}
+
+//样本库分表
+func (s *MySessionBase) InsertEntityBytbl(tablename string, entity interface{}) (affected int64, err error) {
+	affected, err = s.Session.Table(tablename).Insert(entity)
+	LogError(err)
+	return
+}
+
+func (s *MySessionBase) GetEntityByIdBytbl(tablename string, id interface{}, entityPtr interface{}) (has bool) {
+	has, err := s.Session.Table(tablename).Id(id).Get(entityPtr)
+	LogError(err)
+	return
+}
+
+func (s *MySessionBase) GetEntityByWhere(tablename string, where string, entityPtr interface{}) (has bool) {
+	has, err := s.Session.Table(tablename).Where(where).Get(entityPtr)
+	LogError(err)
+	return
+}
+
+func (s *MySessionBase) GetEntitysByWhere(tablename string, where string, entityPtr interface{}) {
+	err := s.Session.Table(tablename).Where(where).Find(entityPtr)
+	LogError(err)
+	return
+}
+
+func (s *MySessionBase) GetEntitysByOrderbyWhere(tablename, where, orderby string, entityPtr interface{}) {
+	err := s.Session.Table(tablename).Where(where).OrderBy(orderby).Find(entityPtr)
+	LogError(err)
+	return
+}
+
+//更新实体写入日志,会自动备份数据
+func (s *MySessionBase) UpdateEntityBytbl(tablename string, id interface{}, entity interface{}, cols []string) (err error) {
+	//session := s.DBE.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+	LogError(err)
+	if err != nil {
+		//s.Session.Rollback()
+		return err
+	}
+	_, err = s.Session.Table(tablename).Id(id).Cols(cols...).Update(entity) //执行更新
+	LogError(err)
+	if err != nil {
+		//s.Session.Rollback()
+		return err
+	}
+	//err = s.Session.Commit()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+//根据条件修改数据,不记录日志
+func (s *MySessionBase) UpdateEntityBywheretbl(tablename string, entity interface{}, cols []string, where string) (err error) {
+	_, err = s.Session.Table(tablename).Where(where).Cols(cols...).Update(entity) //执行更新
+	return err
+}
+
+//更新实体写入日志,会自动备份数据
+func (s *MySessionBase) UpdateDonorAndWriteLogBytbl(tablename string, tablelogname string, id interface{}, entity interface{}, entityEmpty interface{}, cols []string, userid, username, opdesc, acccode, sourcename string) (err error) {
+	s.GetEntityByIdBytbl(tablename, id, entityEmpty)
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+	json, err := json.Marshal(entityEmpty)
+	LogError(err)
+	updatem := new(DonorsLog)
+	//获取表名
+	objT := reflect.TypeOf(entity)
+	objT = objT.Elem()
+	tableName := objT.Name()
+	updatem.TableName = tableName
+	updatem.AccCode = acccode
+	updatem.OpDesc = opdesc
+	updatem.OpType = 1
+	updatem.SourceName = sourcename
+	updatem.RecordId = fmt.Sprintf("%v", id)
+	updatem.RecordData = string(json)
+	updatem.CreateUserId = userid
+	updatem.CreateBy = username
+	_, err = s.Session.Table(tablelogname).Insert(updatem) //保存到更新历史表
+
+	LogError(err)
+	if err != nil {
+		//s.Session.Rollback()
+		return err
+	}
+	_, err = s.Session.Table(tablename).Id(id).Cols(cols...).Update(entity) //执行更新
+	LogError(err)
+	if err != nil {
+		//s.Session.Rollback()
+		return err
+	}
+	err = s.Session.Commit()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+//删除实体并写入日志,会自动备份数据,entity为空的表结构
+func (s *MySessionBase) DeleteDonorAndWriteLogBytbl(tablename string, tablelogname string, id interface{}, entity interface{}, entityEmpty interface{}, userid, username, opdesc, acccode, sourcename string) (err error) {
+	has := s.GetEntityByIdBytbl(tablename, id, entity)
+	if has {
+		//session := s.Session.NewSession()
+		//defer session.Close()
+		//err := session.Begin()
+		json, err := json.Marshal(entity)
+		LogError(err)
+		deleted := new(DonorsLog)
+		//获取表名
+		objT := reflect.TypeOf(entity)
+		objT = objT.Elem()
+		tableName := objT.Name()
+
+		deleted.TableName = tableName
+		deleted.AccCode = acccode
+		deleted.OpDesc = opdesc
+		deleted.OpType = 2
+		deleted.SourceName = sourcename
+		deleted.RecordId = fmt.Sprintf("%v", id)
+		deleted.RecordData = string(json)
+		deleted.CreateUserId = userid
+		deleted.CreateBy = username
+
+		_, err = s.Session.Table(tablelogname).Insert(deleted) //保存到更新历史表
+
+		LogError(err)
+		if err != nil {
+			//session.Rollback()
+			return err
+		}
+		_, err = s.Session.Table(tablename).Id(id).Delete(entityEmpty) //执行删除
+		LogError(err)
+		if err != nil {
+			//session.Rollback()
+			return err
+		}
+		//err = session.Commit()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}
+
+//主信息不存在,首次添加样本
+func (s *MySessionBase) InsertSampleAndBuss(tblmain, tbldetail, tblbuss string, entitymain, entitydetail, entitybuss interface{}) (affected int64, err error) {
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+	affected, err = s.Session.Table(tblmain).Insert(entitymain)
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	affected, err = s.Session.Table(tbldetail).Insert(entitydetail)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	affected, err = s.Session.Table(tblbuss).Insert(entitybuss)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return 0, err
+	}
+	return
+}
+
+//主信息已存在,添加分管信息
+func (s *MySessionBase) InsertOtherSampleAndBuss(tblmain, tbldetail, tblbuss string, entitymain, entitydetail, entitybuss interface{},
+	cols []string, id interface{}, mainentityEmpty interface{}, tablelogname, acccode, userid, username, samplecode string, sampletype int) (affected int64, err error) {
+	s.GetEntityByIdBytbl(tblmain, id, mainentityEmpty)
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+
+	json, err := json.Marshal(mainentityEmpty)
+	LogError(err)
+	updatem := new(SamplesLog)
+	//获取表名
+	objT := reflect.TypeOf(entitymain)
+	objT = objT.Elem()
+	tableName := objT.Name()
+	updatem.TableName = tableName
+	updatem.AccCode = acccode
+	updatem.OpType = 3
+	updatem.SampleCode = samplecode
+	updatem.SampleType = sampletype
+	updatem.MId = fmt.Sprintf("%v", id)
+	updatem.RecordData = string(json)
+	updatem.CreateUserId = userid
+	updatem.CreateBy = username
+	_, err = s.Session.Table(tablelogname).Insert(updatem) //保存到更新历史表
+
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+
+	_, err = s.Session.Table(tblmain).Id(id).Cols(cols...).Update(entitymain) //执行更新
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	affected, err = s.Session.Table(tbldetail).Insert(entitydetail)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	affected, err = s.Session.Table(tblbuss).Insert(entitybuss)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return 0, err
+	}
+	return
+}
+
+//主信息不存在,首次添加样本 预录入新增,不写入buss
+func (s *MySessionBase) InsertSamplePre(tblmain, tbldetail string, entitymain, entitydetail interface{}) (affected int64, err error) {
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+	affected, err = s.Session.Table(tblmain).Insert(entitymain)
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	affected, err = s.Session.Table(tbldetail).Insert(entitydetail)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return 0, err
+	}
+	return
+}
+
+//主信息已存在,添加分管信息 预录入新增,不写入buss
+func (s *MySessionBase) InsertOtherSamplePre(tblmain, tbldetail string, entitymain, entitydetail interface{},
+	cols []string, id interface{}, mainentityEmpty interface{}, tablelogname, acccode, userid, username, samplecode string, sampletype int) (affected int64, err error) {
+	s.GetEntityByIdBytbl(tblmain, id, mainentityEmpty)
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+
+	json, err := json.Marshal(mainentityEmpty)
+	LogError(err)
+	updatem := new(SamplesLog)
+	//获取表名
+	objT := reflect.TypeOf(entitymain)
+	objT = objT.Elem()
+	tableName := objT.Name()
+	updatem.TableName = tableName
+	updatem.AccCode = acccode
+	updatem.OpType = 3
+	updatem.SampleCode = samplecode
+	updatem.SampleType = sampletype
+	updatem.MId = fmt.Sprintf("%v", id)
+	updatem.RecordData = string(json)
+	updatem.CreateUserId = userid
+	updatem.CreateBy = username
+	_, err = s.Session.Table(tablelogname).Insert(updatem) //保存到更新历史表
+
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+
+	_, err = s.Session.Table(tblmain).Id(id).Cols(cols...).Update(entitymain) //执行更新
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	affected, err = s.Session.Table(tbldetail).Insert(entitydetail)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return 0, err
+	}
+	return
+}
+
+//出入库信息。修改主表和从表,添加buss表
+func (s *MySessionBase) UpdateOtherSampleAndBuss(tblmain, tbldetail, tblbuss string, entitymain, entitydetail, entitybuss interface{},
+	cols, colsdetail []string, id interface{}, mainentityEmpty, detailentityEmpty interface{}, tablelogname, acccode, userid, username, samplecode string) (affected int64, err error) {
+	s.GetEntityByIdBytbl(tblmain, id, mainentityEmpty)
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+
+	json, err := json.Marshal(mainentityEmpty)
+	LogError(err)
+	updatem := new(SamplesLog)
+	//获取表名
+	objT := reflect.TypeOf(entitymain)
+	objT = objT.Elem()
+	tableName := objT.Name()
+	updatem.TableName = tableName
+	updatem.AccCode = acccode
+	updatem.OpType = 1
+	updatem.SampleCode = samplecode
+	updatem.BarCode = samplecode
+	updatem.RecordId = fmt.Sprintf("%v", id)
+	updatem.RecordData = string(json)
+	updatem.CreateUserId = userid
+	updatem.CreateBy = username
+	_, err = s.Session.Table(tablelogname).Insert(updatem) //保存到更新历史表
+
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+
+	_, err = s.Session.Table(tblmain).Id(id).Cols(cols...).Update(entitymain) //执行更新
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+
+	s.GetEntityByIdBytbl(tbldetail, id, detailentityEmpty)
+
+	affected, err = s.Session.Table(tbldetail).Insert(entitydetail)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	affected, err = s.Session.Table(tblbuss).Insert(entitybuss)
+	if err != nil {
+		//session.Rollback()
+		return 0, err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return 0, err
+	}
+	return
+}
+
+//更改样本表
+func (s *MySessionBase) UpdateSample(tablename string, id interface{}, entity interface{}, cols []string) (err error) {
+	//	fmt.Println("=====")
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+	_, err = s.Session.Table(tablename).Id(id).Cols(cols...).Update(entity) //执行更新
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+//复苏分装提取信息。修改从表,添加buss表
+func (s *MySessionBase) UpdateDetailAndBuss(tbldetail, tblbuss string, id interface{}, entitydetail, entitybuss interface{}, colsdetail []string) (err error) {
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+	_, err = s.Session.Table(tbldetail).Id(id).Cols(colsdetail...).Update(entitydetail) //执行更新
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return err
+	}
+	_, err = s.Session.Table(tblbuss).Insert(entitybuss)
+	if err != nil {
+		//session.Rollback()
+		return err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+//更改样本表并写入日志
+func (s *MySessionBase) WriteSampleLog(tablelogname string, id interface{}, mid interface{}, entity interface{}, userid, username, acccode, samplecode, barcode string, sampletype int) (err error) {
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+	json, err := json.Marshal(entity)
+	LogError(err)
+	updatem := new(SamplesLog)
+	//获取表名
+	updatem.TableName = "SamplesInfoShow"
+	updatem.AccCode = acccode
+	updatem.OpType = 1
+	updatem.SampleCode = samplecode
+	updatem.BarCode = barcode
+	updatem.RecordId = fmt.Sprintf("%v", id)
+	updatem.MId = fmt.Sprintf("%v", mid)
+	updatem.RecordData = string(json)
+	updatem.CreateUserId = userid
+	updatem.CreateBy = username
+	updatem.SampleType = sampletype
+	_, err = s.Session.Table(tablelogname).Insert(updatem) //保存到更新历史表
+
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+//写入样本删除日志
+func (s *MySessionBase) WriteDeleteSampleLog(tablelogname string, id interface{}, mid interface{}, entity interface{}, userid, username, acccode, samplecode, barcode string, sampletype int) (err error) {
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+	json, err := json.Marshal(entity)
+	LogError(err)
+	updatem := new(SamplesLog)
+	//获取表名
+	updatem.TableName = "SamplesInfoShow"
+	updatem.AccCode = acccode
+	updatem.OpType = 2
+	updatem.SampleCode = samplecode
+	updatem.BarCode = barcode
+	updatem.RecordId = fmt.Sprintf("%v", id)
+	updatem.MId = fmt.Sprintf("%v", mid)
+	updatem.RecordData = string(json)
+	updatem.CreateUserId = userid
+	updatem.CreateBy = username
+	updatem.SampleType = sampletype
+	_, err = s.Session.Table(tablelogname).Insert(updatem) //保存到更新历史表
+
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+//更新实体写入日志,会自动备份数据
+func (s *MySessionBase) UpdateOperationAndWriteLogBytbl(tablename string, tablelogname string, id interface{}, entity interface{}, entityEmpty interface{}, cols []string, userid, username, opdesc, acccode, tabledesc string) (err error) {
+	s.GetEntityByIdBytbl(tablename, id, entityEmpty)
+	//session := s.Session.NewSession()
+	//defer session.Close()
+	//err = session.Begin()
+	json, err := json.Marshal(entityEmpty)
+	LogError(err)
+	updatem := new(Base_OperationLog)
+	//获取表名
+	objT := reflect.TypeOf(entity)
+	objT = objT.Elem()
+	tableName := objT.Name()
+	updatem.TableName = tableName
+	updatem.AccCode = acccode
+	updatem.OpDesc = opdesc
+	updatem.OpTage = 1
+	updatem.TableDesc = tabledesc
+	updatem.RecordId = fmt.Sprintf("%v", id)
+	updatem.RecordData = string(json)
+	updatem.Createuserid = userid
+	updatem.Createby = username
+	_, err = s.Session.Table(tablelogname).Insert(updatem) //保存到更新历史表
+
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return err
+	}
+	_, err = s.Session.Table(tablename).Id(id).Cols(cols...).Update(entity) //执行更新
+	LogError(err)
+	if err != nil {
+		//session.Rollback()
+		return err
+	}
+	//err = session.Commit()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+//删除实体并写入日志,会自动备份数据,entity为空的表结构
+func (s *MySessionBase) DeleteOperationAndWriteLogBytbl(tablename string, tablelogname string, id interface{}, entity interface{}, entityEmpty interface{}, userid, username, opdesc, acccode, tabledesc string) (err error) {
+	has := s.GetEntityByIdBytbl(tablename, id, entity)
+	if has {
+		//session := s.Session.NewSession()
+		//defer session.Close()
+		//err := session.Begin()
+		json, err := json.Marshal(entity)
+		LogError(err)
+		deleted := new(Base_OperationLog)
+		//获取表名
+		objT := reflect.TypeOf(entity)
+		objT = objT.Elem()
+		tableName := objT.Name()
+
+		deleted.TableName = tableName
+		deleted.AccCode = acccode
+		deleted.OpDesc = opdesc
+		deleted.OpTage = 2
+		deleted.TableDesc = tabledesc
+		deleted.RecordId = fmt.Sprintf("%v", id)
+		deleted.RecordData = string(json)
+		deleted.Createuserid = userid
+		deleted.Createby = username
+
+		_, err = s.Session.Table(tablelogname).Insert(deleted) //保存到更新历史表
+
+		LogError(err)
+		if err != nil {
+			//session.Rollback()
+			return err
+		}
+		_, err = s.Session.Table(tablename).Id(id).Delete(entityEmpty) //执行删除
+		LogError(err)
+		if err != nil {
+			//session.Rollback()
+			return err
+		}
+		//err = session.Commit()
+		if err != nil {
+			return err
+		}
+	}
+	return
+}
+
+//根据条件删除数据,不记录日志
+func (s *MySessionBase) DeleteEntityBytbl(tablename string, where string) (err error) {
+	if where == "" {
+		where = "1=2"
+	}
+	sql := `delete from ` + tablename + ` where ` + where
+	_, err = s.Session.Exec(sql)
+	return
+}
+
+func (s *MySessionBase) GetTopNEntities(tablename string, topN int, where string, entitiesPtr interface{}) {
+	err := s.Session.Table(tablename).Where(where).Limit(topN, 0).Find(entitiesPtr)
+	LogError(err)
+	return
+}