myServiceBase.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765
  1. // 业务逻辑服务基类,提供基本的添删改查功能
  2. //
  3. // 修改纪录
  4. // 2016.06.06 版本:1.0 yy 新建账户分表结构的处理
  5. package mydb
  6. import (
  7. "encoding/json"
  8. "fmt"
  9. "reflect"
  10. "strconv"
  11. "strings"
  12. "dashoo.cn/utils"
  13. . "dashoo.cn/utils/db"
  14. // "github.com/go-xorm/xorm"
  15. )
  16. type MyServiceBase struct {
  17. ServiceBase
  18. }
  19. type String_Id struct {
  20. Id string
  21. }
  22. type MyInt_Id struct {
  23. Id int
  24. }
  25. type Templatedata struct {
  26. Templdata string
  27. }
  28. //
  29. func (s *MyServiceBase) GetPagingEntitiesWithOrderBytbl(AccCode string, pageIndex, itemsPerPage int64, order string, asc bool, entitiesPtr interface{}, where ...string) (total int64) {
  30. var err error
  31. var resultsSlice []map[string][]byte
  32. //获取表名
  33. tableName := AccCode + GetTableName(entitiesPtr)
  34. if len(where) == 0 {
  35. if asc {
  36. err = s.DBE.Table(tableName).Limit(int(itemsPerPage), (int(pageIndex)-1)*int(itemsPerPage)).Asc(order).Find(entitiesPtr)
  37. } else {
  38. err = s.DBE.Table(tableName).Limit(int(itemsPerPage), (int(pageIndex)-1)*int(itemsPerPage)).Desc(order).Find(entitiesPtr)
  39. }
  40. //获取总记录数
  41. sql := "SELECT COUNT(*) AS total FROM " + tableName
  42. resultsSlice, err = s.DBE.Query(sql)
  43. LogError(err)
  44. } else {
  45. if asc {
  46. err = s.DBE.Table(tableName).Where(where[0]).Limit(int(itemsPerPage), (int(pageIndex)-1)*int(itemsPerPage)).Asc(order).Find(entitiesPtr)
  47. } else {
  48. err = s.DBE.Table(tableName).Where(where[0]).Limit(int(itemsPerPage), (int(pageIndex)-1)*int(itemsPerPage)).Desc(order).Find(entitiesPtr)
  49. }
  50. sql := "SELECT COUNT(*) AS total FROM " + tableName + " where " + where[0]
  51. resultsSlice, err = s.DBE.Query(sql)
  52. }
  53. LogError(err)
  54. if len(resultsSlice) > 0 {
  55. results := resultsSlice[0]
  56. for _, value := range results {
  57. total, err = strconv.ParseInt(string(value), 10, 64)
  58. LogError(err)
  59. break
  60. }
  61. }
  62. return total
  63. }
  64. //样本库分表
  65. func (s *MyServiceBase) InsertEntityBytbl(tablename string, entity interface{}) (affected int64, err error) {
  66. affected, err = s.DBE.Table(tablename).Insert(entity)
  67. LogError(err)
  68. return
  69. }
  70. func (s *MyServiceBase) GetEntityByIdBytbl(tablename string, id interface{}, entityPtr interface{}) (has bool) {
  71. has, err := s.DBE.Table(tablename).Id(id).Get(entityPtr)
  72. LogError(err)
  73. return
  74. }
  75. func (s *MyServiceBase) GetEntityByWhere(tablename string, where string, entityPtr interface{}) (has bool) {
  76. has, err := s.DBE.Table(tablename).Where(where).Get(entityPtr)
  77. LogError(err)
  78. return
  79. }
  80. func (s *MyServiceBase) GetEntitysByWhere(tablename string, where string, entityPtr interface{}) {
  81. err := s.DBE.Table(tablename).Where(where).Find(entityPtr)
  82. LogError(err)
  83. return
  84. }
  85. func (s *MyServiceBase) GetEntitysByOrderbyWhere(tablename, where, orderby string, entityPtr interface{}) {
  86. err := s.DBE.Table(tablename).Where(where).OrderBy(orderby).Find(entityPtr)
  87. LogError(err)
  88. return
  89. }
  90. //更新实体写入日志,会自动备份数据
  91. func (s *MyServiceBase) UpdateEntityBytbl(tablename string, id interface{}, entity interface{}, cols []string) (err error) {
  92. session := s.DBE.NewSession()
  93. defer session.Close()
  94. err = session.Begin()
  95. LogError(err)
  96. if err != nil {
  97. session.Rollback()
  98. return err
  99. }
  100. _, err = s.DBE.Table(tablename).Id(id).Cols(cols...).Update(entity) //执行更新
  101. LogError(err)
  102. if err != nil {
  103. session.Rollback()
  104. return err
  105. }
  106. err = session.Commit()
  107. if err != nil {
  108. return err
  109. }
  110. return
  111. }
  112. //根据条件修改数据,不记录日志
  113. func (s *MyServiceBase) UpdateEntityBywheretbl(tablename string, entity interface{}, cols []string, where string) (err error) {
  114. _, err = s.DBE.Table(tablename).Where(where).Cols(cols...).Update(entity) //执行更新
  115. return err
  116. }
  117. //更新实体写入日志,会自动备份数据
  118. func (s *MyServiceBase) UpdateDonorAndWriteLogBytbl(tablename string, tablelogname string, id interface{}, entity interface{}, entityEmpty interface{}, cols []string, userid, username, opdesc, acccode, sourcename string) (err error) {
  119. s.GetEntityByIdBytbl(tablename, id, entityEmpty)
  120. session := s.DBE.NewSession()
  121. defer session.Close()
  122. err = session.Begin()
  123. json, err := json.Marshal(entityEmpty)
  124. LogError(err)
  125. updatem := new(DonorsLog)
  126. //获取表名
  127. objT := reflect.TypeOf(entity)
  128. objT = objT.Elem()
  129. tableName := objT.Name()
  130. updatem.TableName = tableName
  131. updatem.AccCode = acccode
  132. updatem.OpDesc = opdesc
  133. updatem.OpType = 1
  134. updatem.SourceName = sourcename
  135. updatem.RecordId = fmt.Sprintf("%v", id)
  136. updatem.RecordData = string(json)
  137. updatem.CreateUserId = userid
  138. updatem.CreateBy = username
  139. _, err = s.DBE.Table(tablelogname).Insert(updatem) //保存到更新历史表
  140. LogError(err)
  141. if err != nil {
  142. session.Rollback()
  143. return err
  144. }
  145. _, err = s.DBE.Table(tablename).Id(id).Cols(cols...).Update(entity) //执行更新
  146. LogError(err)
  147. if err != nil {
  148. session.Rollback()
  149. return err
  150. }
  151. err = session.Commit()
  152. if err != nil {
  153. return err
  154. }
  155. return
  156. }
  157. //删除实体并写入日志,会自动备份数据,entity为空的表结构
  158. func (s *MyServiceBase) DeleteDonorAndWriteLogBytbl(tablename string, tablelogname string, id interface{}, entity interface{}, entityEmpty interface{}, userid, username, opdesc, acccode, sourcename string) (err error) {
  159. has := s.GetEntityByIdBytbl(tablename, id, entity)
  160. if has {
  161. session := s.DBE.NewSession()
  162. defer session.Close()
  163. err := session.Begin()
  164. json, err := json.Marshal(entity)
  165. LogError(err)
  166. deleted := new(DonorsLog)
  167. //获取表名
  168. objT := reflect.TypeOf(entity)
  169. objT = objT.Elem()
  170. tableName := objT.Name()
  171. deleted.TableName = tableName
  172. deleted.AccCode = acccode
  173. deleted.OpDesc = opdesc
  174. deleted.OpType = 2
  175. deleted.SourceName = sourcename
  176. deleted.RecordId = fmt.Sprintf("%v", id)
  177. deleted.RecordData = string(json)
  178. deleted.CreateUserId = userid
  179. deleted.CreateBy = username
  180. _, err = s.DBE.Table(tablelogname).Insert(deleted) //保存到更新历史表
  181. LogError(err)
  182. if err != nil {
  183. session.Rollback()
  184. return err
  185. }
  186. _, err = s.DBE.Table(tablename).Id(id).Delete(entityEmpty) //执行删除
  187. LogError(err)
  188. if err != nil {
  189. session.Rollback()
  190. return err
  191. }
  192. err = session.Commit()
  193. if err != nil {
  194. return err
  195. }
  196. }
  197. return
  198. }
  199. //主信息不存在,首次添加样本
  200. func (s *MyServiceBase) InsertSampleAndBuss(tblmain, tbldetail, tblbuss string, entitymain, entitydetail, entitybuss interface{}) (affected int64, err error) {
  201. session := s.DBE.NewSession()
  202. defer session.Close()
  203. err = session.Begin()
  204. affected, err = s.DBE.Table(tblmain).Insert(entitymain)
  205. LogError(err)
  206. if err != nil {
  207. session.Rollback()
  208. return 0, err
  209. }
  210. affected, err = s.DBE.Table(tbldetail).Insert(entitydetail)
  211. if err != nil {
  212. session.Rollback()
  213. return 0, err
  214. }
  215. affected, err = s.DBE.Table(tblbuss).Insert(entitybuss)
  216. if err != nil {
  217. session.Rollback()
  218. return 0, err
  219. }
  220. err = session.Commit()
  221. if err != nil {
  222. return 0, err
  223. }
  224. return
  225. }
  226. //主信息已存在,添加分管信息
  227. func (s *MyServiceBase) InsertOtherSampleAndBuss(tblmain, tbldetail, tblbuss string, entitymain, entitydetail, entitybuss interface{},
  228. cols []string, id interface{}, mainentityEmpty interface{}, tablelogname, acccode, userid, username, samplecode string, sampletype int) (affected int64, err error) {
  229. s.GetEntityByIdBytbl(tblmain, id, mainentityEmpty)
  230. session := s.DBE.NewSession()
  231. defer session.Close()
  232. err = session.Begin()
  233. json, err := json.Marshal(mainentityEmpty)
  234. LogError(err)
  235. updatem := new(SamplesLog)
  236. //获取表名
  237. objT := reflect.TypeOf(entitymain)
  238. objT = objT.Elem()
  239. tableName := objT.Name()
  240. updatem.TableName = tableName
  241. updatem.AccCode = acccode
  242. updatem.OpType = 3
  243. updatem.SampleCode = samplecode
  244. updatem.SampleType = sampletype
  245. updatem.MId = fmt.Sprintf("%v", id)
  246. updatem.RecordData = string(json)
  247. updatem.CreateUserId = userid
  248. updatem.CreateBy = username
  249. _, err = s.DBE.Table(tablelogname).Insert(updatem) //保存到更新历史表
  250. LogError(err)
  251. if err != nil {
  252. session.Rollback()
  253. return 0, err
  254. }
  255. _, err = s.DBE.Table(tblmain).Id(id).Cols(cols...).Update(entitymain) //执行更新
  256. LogError(err)
  257. if err != nil {
  258. session.Rollback()
  259. return 0, err
  260. }
  261. affected, err = s.DBE.Table(tbldetail).Insert(entitydetail)
  262. if err != nil {
  263. session.Rollback()
  264. return 0, err
  265. }
  266. affected, err = s.DBE.Table(tblbuss).Insert(entitybuss)
  267. if err != nil {
  268. session.Rollback()
  269. return 0, err
  270. }
  271. err = session.Commit()
  272. if err != nil {
  273. return 0, err
  274. }
  275. return
  276. }
  277. //主信息不存在,首次添加样本 预录入新增,不写入buss
  278. func (s *MyServiceBase) InsertSamplePre(tblmain, tbldetail string, entitymain, entitydetail interface{}) (affected int64, err error) {
  279. session := s.DBE.NewSession()
  280. defer session.Close()
  281. err = session.Begin()
  282. affected, err = s.DBE.Table(tblmain).Insert(entitymain)
  283. LogError(err)
  284. if err != nil {
  285. session.Rollback()
  286. return 0, err
  287. }
  288. affected, err = s.DBE.Table(tbldetail).Insert(entitydetail)
  289. if err != nil {
  290. session.Rollback()
  291. return 0, err
  292. }
  293. err = session.Commit()
  294. if err != nil {
  295. return 0, err
  296. }
  297. return
  298. }
  299. //主信息已存在,添加分管信息 预录入新增,不写入buss
  300. func (s *MyServiceBase) InsertOtherSamplePre(tblmain, tbldetail string, entitymain, entitydetail interface{},
  301. cols []string, id interface{}, mainentityEmpty interface{}, tablelogname, acccode, userid, username, samplecode string, sampletype int) (affected int64, err error) {
  302. s.GetEntityByIdBytbl(tblmain, id, mainentityEmpty)
  303. session := s.DBE.NewSession()
  304. defer session.Close()
  305. err = session.Begin()
  306. json, err := json.Marshal(mainentityEmpty)
  307. LogError(err)
  308. updatem := new(SamplesLog)
  309. //获取表名
  310. objT := reflect.TypeOf(entitymain)
  311. objT = objT.Elem()
  312. tableName := objT.Name()
  313. updatem.TableName = tableName
  314. updatem.AccCode = acccode
  315. updatem.OpType = 3
  316. updatem.SampleCode = samplecode
  317. updatem.SampleType = sampletype
  318. updatem.MId = fmt.Sprintf("%v", id)
  319. updatem.RecordData = string(json)
  320. updatem.CreateUserId = userid
  321. updatem.CreateBy = username
  322. _, err = s.DBE.Table(tablelogname).Insert(updatem) //保存到更新历史表
  323. LogError(err)
  324. if err != nil {
  325. session.Rollback()
  326. return 0, err
  327. }
  328. _, err = s.DBE.Table(tblmain).Id(id).Cols(cols...).Update(entitymain) //执行更新
  329. LogError(err)
  330. if err != nil {
  331. session.Rollback()
  332. return 0, err
  333. }
  334. affected, err = s.DBE.Table(tbldetail).Insert(entitydetail)
  335. if err != nil {
  336. session.Rollback()
  337. return 0, err
  338. }
  339. err = session.Commit()
  340. if err != nil {
  341. return 0, err
  342. }
  343. return
  344. }
  345. //出入库信息。修改主表和从表,添加buss表
  346. func (s *MyServiceBase) UpdateOtherSampleAndBuss(tblmain, tbldetail, tblbuss string, entitymain, entitydetail, entitybuss interface{},
  347. cols, colsdetail []string, id interface{}, mainentityEmpty, detailentityEmpty interface{}, tablelogname, acccode, userid, username, samplecode string) (affected int64, err error) {
  348. s.GetEntityByIdBytbl(tblmain, id, mainentityEmpty)
  349. session := s.DBE.NewSession()
  350. defer session.Close()
  351. err = session.Begin()
  352. json, err := json.Marshal(mainentityEmpty)
  353. LogError(err)
  354. updatem := new(SamplesLog)
  355. //获取表名
  356. objT := reflect.TypeOf(entitymain)
  357. objT = objT.Elem()
  358. tableName := objT.Name()
  359. updatem.TableName = tableName
  360. updatem.AccCode = acccode
  361. updatem.OpType = 1
  362. updatem.SampleCode = samplecode
  363. updatem.BarCode = samplecode
  364. updatem.RecordId = fmt.Sprintf("%v", id)
  365. updatem.RecordData = string(json)
  366. updatem.CreateUserId = userid
  367. updatem.CreateBy = username
  368. _, err = s.DBE.Table(tablelogname).Insert(updatem) //保存到更新历史表
  369. LogError(err)
  370. if err != nil {
  371. session.Rollback()
  372. return 0, err
  373. }
  374. _, err = s.DBE.Table(tblmain).Id(id).Cols(cols...).Update(entitymain) //执行更新
  375. LogError(err)
  376. if err != nil {
  377. session.Rollback()
  378. return 0, err
  379. }
  380. s.GetEntityByIdBytbl(tbldetail, id, detailentityEmpty)
  381. affected, err = s.DBE.Table(tbldetail).Insert(entitydetail)
  382. if err != nil {
  383. session.Rollback()
  384. return 0, err
  385. }
  386. affected, err = s.DBE.Table(tblbuss).Insert(entitybuss)
  387. if err != nil {
  388. session.Rollback()
  389. return 0, err
  390. }
  391. err = session.Commit()
  392. if err != nil {
  393. return 0, err
  394. }
  395. return
  396. }
  397. //更改样本表
  398. func (s *MyServiceBase) UpdateSample(tablename string, id interface{}, entity interface{}, cols []string) (err error) {
  399. // fmt.Println("=====")
  400. session := s.DBE.NewSession()
  401. defer session.Close()
  402. err = session.Begin()
  403. _, err = s.DBE.Table(tablename).Id(id).Cols(cols...).Update(entity) //执行更新
  404. LogError(err)
  405. if err != nil {
  406. session.Rollback()
  407. return err
  408. }
  409. err = session.Commit()
  410. if err != nil {
  411. return err
  412. }
  413. return
  414. }
  415. //复苏分装提取信息。修改从表,添加buss表
  416. func (s *MyServiceBase) UpdateDetailAndBuss(tbldetail, tblbuss string, id interface{}, entitydetail, entitybuss interface{}, colsdetail []string) (err error) {
  417. session := s.DBE.NewSession()
  418. defer session.Close()
  419. err = session.Begin()
  420. _, err = s.DBE.Table(tbldetail).Id(id).Cols(colsdetail...).Update(entitydetail) //执行更新
  421. LogError(err)
  422. if err != nil {
  423. session.Rollback()
  424. return err
  425. }
  426. _, err = s.DBE.Table(tblbuss).Insert(entitybuss)
  427. if err != nil {
  428. session.Rollback()
  429. return err
  430. }
  431. err = session.Commit()
  432. if err != nil {
  433. return err
  434. }
  435. return
  436. }
  437. //更改样本表并写入日志
  438. func (s *MyServiceBase) WriteSampleLog(tablelogname string, id interface{}, mid interface{}, entity interface{}, userid, username, acccode, samplecode, barcode string, sampletype int) (err error) {
  439. session := s.DBE.NewSession()
  440. defer session.Close()
  441. err = session.Begin()
  442. json, err := json.Marshal(entity)
  443. LogError(err)
  444. updatem := new(SamplesLog)
  445. //获取表名
  446. updatem.TableName = "SamplesInfoShow"
  447. updatem.AccCode = acccode
  448. updatem.OpType = 1
  449. updatem.SampleCode = samplecode
  450. updatem.BarCode = barcode
  451. updatem.RecordId = fmt.Sprintf("%v", id)
  452. updatem.MId = fmt.Sprintf("%v", mid)
  453. updatem.RecordData = string(json)
  454. updatem.CreateUserId = userid
  455. updatem.CreateBy = username
  456. updatem.SampleType = sampletype
  457. _, err = s.DBE.Table(tablelogname).Insert(updatem) //保存到更新历史表
  458. LogError(err)
  459. if err != nil {
  460. session.Rollback()
  461. return err
  462. }
  463. err = session.Commit()
  464. if err != nil {
  465. return err
  466. }
  467. return
  468. }
  469. //写入样本删除日志
  470. func (s *MyServiceBase) WriteDeleteSampleLog(tablelogname string, id interface{}, mid interface{}, entity interface{}, userid, username, acccode, samplecode, barcode string, sampletype int) (err error) {
  471. session := s.DBE.NewSession()
  472. defer session.Close()
  473. err = session.Begin()
  474. json, err := json.Marshal(entity)
  475. LogError(err)
  476. updatem := new(SamplesLog)
  477. //获取表名
  478. updatem.TableName = "SamplesInfoShow"
  479. updatem.AccCode = acccode
  480. updatem.OpType = 2
  481. updatem.SampleCode = samplecode
  482. updatem.BarCode = barcode
  483. updatem.RecordId = fmt.Sprintf("%v", id)
  484. updatem.MId = fmt.Sprintf("%v", mid)
  485. updatem.RecordData = string(json)
  486. updatem.CreateUserId = userid
  487. updatem.CreateBy = username
  488. updatem.SampleType = sampletype
  489. _, err = s.DBE.Table(tablelogname).Insert(updatem) //保存到更新历史表
  490. LogError(err)
  491. if err != nil {
  492. session.Rollback()
  493. return err
  494. }
  495. err = session.Commit()
  496. if err != nil {
  497. return err
  498. }
  499. return
  500. }
  501. func StrSplit(s, sep string) []string {
  502. return strings.Split(s, sep)
  503. }
  504. func GetKuoZhan(entity interface{}, filedname string) string {
  505. sfiledtype, _ := reflect.TypeOf(entity).FieldByName(filedname)
  506. objV := reflect.ValueOf(entity).FieldByName(filedname)
  507. switch sfiledtype.Type.Kind() {
  508. case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  509. return utils.ToStr(objV.Int())
  510. case reflect.Float32, reflect.Float64:
  511. return utils.ToStr(utils.FloatPoint(objV.Float(), 2))
  512. case reflect.String:
  513. return objV.String()
  514. case reflect.Struct:
  515. switch sfiledtype.Type.String() {
  516. case "time.Time":
  517. rfvalue := fmt.Sprintf("%v", objV)
  518. return rfvalue[0:19]
  519. }
  520. }
  521. return ""
  522. }
  523. func Boxlinename(x int) string {
  524. switch x {
  525. case 1:
  526. return "A"
  527. case 2:
  528. return "B"
  529. case 3:
  530. return "C"
  531. case 4:
  532. return "D"
  533. case 5:
  534. return "E"
  535. case 6:
  536. return "F"
  537. case 7:
  538. return "G"
  539. case 8:
  540. return "H"
  541. case 9:
  542. return "I"
  543. case 10:
  544. return "J"
  545. case 11:
  546. return "K"
  547. case 12:
  548. return "L"
  549. case 13:
  550. return "M"
  551. case 14:
  552. return "N"
  553. case 15:
  554. return "O"
  555. case 16:
  556. return "P"
  557. case 17:
  558. return "Q"
  559. case 18:
  560. return "R"
  561. case 19:
  562. return "S"
  563. case 20:
  564. return "T"
  565. default:
  566. return "A"
  567. }
  568. }
  569. func Boxlineumber(x string) int {
  570. switch x {
  571. case "A":
  572. return 1
  573. case "B":
  574. return 2
  575. case "C":
  576. return 3
  577. case "D":
  578. return 4
  579. case "E":
  580. return 5
  581. case "F":
  582. return 6
  583. case "G":
  584. return 7
  585. case "H":
  586. return 8
  587. case "I":
  588. return 9
  589. case "J":
  590. return 10
  591. case "K":
  592. return 11
  593. case "L":
  594. return 12
  595. case "M":
  596. return 13
  597. case "N":
  598. return 14
  599. case "O":
  600. return 15
  601. case "P":
  602. return 16
  603. case "Q":
  604. return 17
  605. case "R":
  606. return 18
  607. case "S":
  608. return 19
  609. case "T":
  610. return 20
  611. default:
  612. return 1
  613. }
  614. }
  615. //更新实体写入日志,会自动备份数据
  616. func (s *MyServiceBase) UpdateOperationAndWriteLogBytbl(tablename string, tablelogname string, id interface{}, entity interface{}, entityEmpty interface{}, cols []string, userid, username, opdesc, acccode, tabledesc string) (err error) {
  617. s.GetEntityByIdBytbl(tablename, id, entityEmpty)
  618. session := s.DBE.NewSession()
  619. defer session.Close()
  620. err = session.Begin()
  621. json, err := json.Marshal(entityEmpty)
  622. LogError(err)
  623. updatem := new(Base_OperationLog)
  624. //获取表名
  625. objT := reflect.TypeOf(entity)
  626. objT = objT.Elem()
  627. tableName := objT.Name()
  628. updatem.TableName = tableName
  629. updatem.AccCode = acccode
  630. updatem.OpDesc = opdesc
  631. updatem.OpTage = 1
  632. updatem.TableDesc = tabledesc
  633. updatem.RecordId = fmt.Sprintf("%v", id)
  634. updatem.RecordData = string(json)
  635. updatem.Createuserid = userid
  636. updatem.Createby = username
  637. _, err = s.DBE.Table(tablelogname).Insert(updatem) //保存到更新历史表
  638. LogError(err)
  639. if err != nil {
  640. session.Rollback()
  641. return err
  642. }
  643. _, err = s.DBE.Table(tablename).Id(id).Cols(cols...).Update(entity) //执行更新
  644. LogError(err)
  645. if err != nil {
  646. session.Rollback()
  647. return err
  648. }
  649. err = session.Commit()
  650. if err != nil {
  651. return err
  652. }
  653. return
  654. }
  655. //删除实体并写入日志,会自动备份数据,entity为空的表结构
  656. func (s *MyServiceBase) DeleteOperationAndWriteLogBytbl(tablename string, tablelogname string, id interface{}, entity interface{}, entityEmpty interface{}, userid, username, opdesc, acccode, tabledesc string) (err error) {
  657. has := s.GetEntityByIdBytbl(tablename, id, entity)
  658. if has {
  659. session := s.DBE.NewSession()
  660. defer session.Close()
  661. err := session.Begin()
  662. json, err := json.Marshal(entity)
  663. LogError(err)
  664. deleted := new(Base_OperationLog)
  665. //获取表名
  666. objT := reflect.TypeOf(entity)
  667. objT = objT.Elem()
  668. tableName := objT.Name()
  669. deleted.TableName = tableName
  670. deleted.AccCode = acccode
  671. deleted.OpDesc = opdesc
  672. deleted.OpTage = 2
  673. deleted.TableDesc = tabledesc
  674. deleted.RecordId = fmt.Sprintf("%v", id)
  675. deleted.RecordData = string(json)
  676. deleted.Createuserid = userid
  677. deleted.Createby = username
  678. _, err = s.DBE.Table(tablelogname).Insert(deleted) //保存到更新历史表
  679. LogError(err)
  680. if err != nil {
  681. session.Rollback()
  682. return err
  683. }
  684. _, err = s.DBE.Table(tablename).Id(id).Delete(entityEmpty) //执行删除
  685. LogError(err)
  686. if err != nil {
  687. session.Rollback()
  688. return err
  689. }
  690. err = session.Commit()
  691. if err != nil {
  692. return err
  693. }
  694. }
  695. return
  696. }
  697. //根据条件删除数据,不记录日志
  698. func (s *MyServiceBase) DeleteEntityBytbl(tablename string, where string) (err error) {
  699. if where == "" {
  700. where = "1=2"
  701. }
  702. sql := `delete from ` + tablename + ` where ` + where
  703. _, err = s.DBE.Exec(sql)
  704. return
  705. }
  706. func (s *MyServiceBase) GetTopNEntities(tablename string, topN int, where string, entitiesPtr interface{}) {
  707. err := s.DBE.Table(tablename).Where(where).Limit(topN, 0).Find(entitiesPtr)
  708. LogError(err)
  709. return
  710. }