| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634 |
- // 业务逻辑服务基类,提供基本的添删改查功能
- //
- // 修改纪录
- // 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
- }
|