GAAS GFrame项目web后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

416 lines
13 KiB

3 years ago
3 years ago
3 years ago
  1. // Copyright (c) Shenyang Leading Edge Intelligent Technology Co., Ltd. All rights reserved.
  2. package implments
  3. import (
  4. "LAPP_GAAS_GFrame_BACKEND/grmi"
  5. meta "LAPP_GAAS_GFrame_BACKEND/meta/base"
  6. model "LAPP_GAAS_GFrame_BACKEND/models/base"
  7. "LAPP_GAAS_GFrame_BACKEND/utils"
  8. "fmt"
  9. "github.com/go-xorm/xorm"
  10. "strconv"
  11. "strings"
  12. "time"
  13. "xorm.io/core"
  14. )
  15. /******************************************************************************
  16. *
  17. * @Struct Name : SnrDAOImplement
  18. *-----------------------------------------------------------------------------
  19. *
  20. * @Description : Snr的数据访问对象实现
  21. *
  22. * @Author : 代码生成器创建
  23. *
  24. * @Date : 2021-04-19 12:11:47
  25. *
  26. ******************************************************************************/
  27. type SnrDAOImplement struct {
  28. session *xorm.Session
  29. meta *grmi.Entity
  30. plantNr int
  31. userid string
  32. }
  33. /******************************************************************************
  34. *
  35. * @Function Name : NewSnrDAOImplement
  36. *-----------------------------------------------------------------------------
  37. *
  38. * @Description : 创建一个SnrDAOImplement实例
  39. *
  40. * @Function Parameters : xorm会话
  41. *
  42. * @Function Parameters : 基本主键
  43. *
  44. * @Return Value : SnrDAOImplement实例
  45. *
  46. * @Author : 代码生成器创建
  47. *
  48. * @Date : 2021-04-19 12:11:47
  49. *
  50. ******************************************************************************/
  51. func NewSnrDAOImplement(session *xorm.Session, plantNr int, userid string) *SnrDAOImplement {
  52. return &SnrDAOImplement{session, &meta.Snr, plantNr, userid}
  53. }
  54. /******************************************************************************
  55. *
  56. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.InsertOne
  57. *
  58. ******************************************************************************/
  59. func (impl *SnrDAOImplement) InsertOne(entity *model.Snr) error {
  60. entity.PlantNr = impl.plantNr
  61. entity.LastUser = impl.userid
  62. _, err := impl.session.Table(impl.meta.TableName).Insert(entity)
  63. if err != nil {
  64. return grmi.NewDataBaseError(err)
  65. }
  66. return nil
  67. }
  68. /******************************************************************************
  69. *
  70. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.DeleteOne
  71. *
  72. ******************************************************************************/
  73. func (impl *SnrDAOImplement) DeleteOne(snrId string) error {
  74. _, err := impl.session.Table(impl.meta.TableName).ID(core.PK{impl.plantNr, snrId}).Delete(impl.meta.Indicator)
  75. if err != nil {
  76. return grmi.NewDataBaseError(err)
  77. }
  78. return nil
  79. }
  80. /******************************************************************************
  81. *
  82. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.SelectOne
  83. *
  84. ******************************************************************************/
  85. func (impl *SnrDAOImplement) SelectOne(snrId string) (*model.Snr, error) {
  86. var data model.Snr
  87. ok, err := impl.session.Table(impl.meta.TableName).ID(core.PK{impl.plantNr, snrId}).Get(&data)
  88. if err != nil {
  89. return nil, grmi.NewDataBaseError(err)
  90. }
  91. if !ok {
  92. return nil, nil
  93. }
  94. return &data, nil
  95. }
  96. /******************************************************************************
  97. *
  98. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.UpdateOne
  99. *
  100. ******************************************************************************/
  101. func (impl *SnrDAOImplement) UpdateOne(entity *model.Snr) error {
  102. entity.PlantNr = impl.plantNr
  103. entity.LastUser = impl.userid
  104. _, err := impl.session.Table(impl.meta.TableName).Cols(impl.meta.UpdatingMembers...).ID(entity.GetKey()).Update(entity)
  105. if err != nil {
  106. return grmi.NewDataBaseError(err)
  107. }
  108. return nil
  109. }
  110. /******************************************************************************
  111. *
  112. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.Insert
  113. *
  114. ******************************************************************************/
  115. func (impl *SnrDAOImplement) Insert(entities *[]model.Snr) error {
  116. for i := 0; i < len(*entities); i++ {
  117. entity := &(*entities)[i]
  118. entity.PlantNr = impl.plantNr
  119. entity.LastUser = impl.userid
  120. }
  121. _, err := impl.session.Table(impl.meta.TableName).Insert(entities)
  122. if err != nil {
  123. return grmi.NewDataBaseError(err)
  124. }
  125. return nil
  126. }
  127. /******************************************************************************
  128. *
  129. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.Delete
  130. *
  131. ******************************************************************************/
  132. func (impl *SnrDAOImplement) Delete(entities *[]model.Snr) error {
  133. for _, entity := range *entities {
  134. entity.PlantNr = impl.plantNr
  135. _, err := impl.session.Table(impl.meta.TableName).ID(entity.GetKey()).Delete(impl.meta.Indicator)
  136. if err != nil {
  137. return grmi.NewDataBaseError(err)
  138. }
  139. }
  140. return nil
  141. }
  142. /******************************************************************************
  143. *
  144. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.DeleteWhere
  145. *
  146. ******************************************************************************/
  147. func (impl *SnrDAOImplement) DeleteWhere(predicates []grmi.Predicate) error {
  148. parameters := []interface{}{impl.plantNr}
  149. where := fmt.Sprintf("%s = ?", meta.Snr_PlantNr.ColumnName)
  150. session := impl.session.Table(impl.meta.TableName)
  151. if predicates != nil {
  152. for _, predicate := range predicates {
  153. where += predicate.Build()
  154. parameters = append(parameters, predicate.Values...)
  155. }
  156. session = session.Where(where, parameters...)
  157. } else {
  158. session = session.Where(where, parameters...)
  159. }
  160. _, err := session.Delete(impl.meta.Indicator)
  161. if err != nil {
  162. return grmi.NewDataBaseError(err)
  163. }
  164. return nil
  165. }
  166. /******************************************************************************
  167. *
  168. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.Select
  169. *
  170. ******************************************************************************/
  171. func (impl *SnrDAOImplement) Select(predicates []grmi.Predicate, orderByFields []grmi.Field) ([]model.Snr, error) {
  172. parameters := []interface{}{impl.plantNr}
  173. where := fmt.Sprintf("%s = ?", meta.Snr_PlantNr.ColumnName)
  174. session := impl.session.Table(impl.meta.TableName)
  175. if predicates != nil {
  176. for _, predicate := range predicates {
  177. where += predicate.Build()
  178. parameters = append(parameters, predicate.Values...)
  179. }
  180. session = session.Where(where, parameters...)
  181. } else {
  182. session = session.Where(where, parameters...)
  183. }
  184. session = session.OrderBy(meta.Snr_PlantNr.ColumnName)
  185. if orderByFields != nil {
  186. for _, field := range orderByFields {
  187. session = session.OrderBy(field.ColumnName)
  188. }
  189. }
  190. data := make([]model.Snr, 0, 10)
  191. err := session.Find(&data)
  192. if err != nil {
  193. return nil, grmi.NewDataBaseError(err)
  194. }
  195. return data, nil
  196. }
  197. /******************************************************************************
  198. *
  199. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.SelectAndPaging
  200. *
  201. ******************************************************************************/
  202. func (impl *SnrDAOImplement) SelectAndPaging(paging *grmi.Paging, predicates []grmi.Predicate, orderByFields []grmi.Field) (grmi.PagingResult, error) {
  203. parameters := []interface{}{impl.plantNr}
  204. where := fmt.Sprintf("%s = ?", meta.Snr_PlantNr.ColumnName)
  205. session := impl.session.Table(impl.meta.TableName)
  206. if predicates != nil {
  207. for _, predicate := range predicates {
  208. where += predicate.Build()
  209. parameters = append(parameters, predicate.Values...)
  210. }
  211. session = session.Where(where, parameters...)
  212. } else {
  213. session = session.Where(where, parameters...)
  214. }
  215. count, err := session.Count(impl.meta.Indicator)
  216. if err != nil {
  217. return grmi.EmptyPagingResult, err
  218. }
  219. orderBy := " order by " + meta.Snr_PlantNr.ColumnName
  220. if orderByFields != nil {
  221. for _, field := range orderByFields {
  222. orderBy += ", " + field.ColumnName
  223. }
  224. }
  225. parameters = append(parameters, paging.Offset(), paging.Size)
  226. data := make([]model.Snr, 0, 10)
  227. if where != "" {
  228. where = " where " + where
  229. }
  230. err = impl.session.Table(impl.meta.TableName).SQL("select * from "+impl.meta.TableName+where+orderBy+" offset ? row fetch next ? row only", parameters...).Find(&data)
  231. if err != nil {
  232. return grmi.EmptyPagingResult, err
  233. }
  234. return grmi.PagingResult{Records: data, Count: count, PageNumber: paging.Number, PageSize: paging.Size}, nil
  235. }
  236. /******************************************************************************
  237. *
  238. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.Update
  239. *
  240. ******************************************************************************/
  241. func (impl *SnrDAOImplement) Update(entities *[]model.Snr) error {
  242. for i := 0; i < len(*entities); i++ {
  243. entity := &(*entities)[i]
  244. entity.PlantNr = impl.plantNr
  245. entity.LastUser = impl.userid
  246. _, err := impl.session.Table(impl.meta.TableName).Cols(impl.meta.UpdatingMembers...).ID(entity.GetKey()).Update(entity)
  247. if err != nil {
  248. return grmi.NewDataBaseError(err)
  249. }
  250. }
  251. return nil
  252. }
  253. /******************************************************************************
  254. *
  255. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.UpdateWhere
  256. *
  257. ******************************************************************************/
  258. func (impl *SnrDAOImplement) UpdateWhere(predicates []grmi.Predicate, entity *model.Snr, columns ...string) error {
  259. parameters := []interface{}{impl.plantNr}
  260. where := fmt.Sprintf("%s = ?", meta.Snr_PlantNr.ColumnName)
  261. session := impl.session.Table(impl.meta.TableName)
  262. if predicates != nil {
  263. for _, predicate := range predicates {
  264. where += predicate.Build()
  265. parameters = append(parameters, predicate.Values...)
  266. }
  267. session = session.Where(where, parameters...)
  268. } else {
  269. session = session.Where(where, parameters...)
  270. }
  271. columns = append(columns, meta.Snr_LastUser.ColumnName)
  272. entity.LastUser = impl.userid
  273. _, err := impl.session.Table(impl.meta.TableName).Cols(columns...).Update(entity)
  274. if err != nil {
  275. return grmi.NewDataBaseError(err)
  276. }
  277. return nil
  278. }
  279. /******************************************************************************
  280. *
  281. * @Reference LAPP_GAAS_GFrame_BACKEND/dao/base/SnrDAO.GetNextSnr
  282. *
  283. ******************************************************************************/
  284. func (impl *SnrDAOImplement)GetNextSnr(snr string) (retsnr string, err error) {
  285. var (
  286. snrtab model.Snr
  287. lastupdtime time.Time
  288. y, l_y, d, l_d, wk, l_wk int
  289. m, l_m time.Month
  290. layout []byte
  291. i, nextsnr int
  292. sql string
  293. )
  294. snrtab = model.Snr{}
  295. session := impl.session.Table(impl.meta.TableName)
  296. if _, err = session.ID(core.PK{impl.plantNr, snr}).Get(&snrtab); err != nil {
  297. return
  298. }
  299. if snrtab.LastNrCreate == "" {
  300. nextsnr = snrtab.NextNr
  301. } else {
  302. if lastupdtime, err = utils.DateParse(snrtab.LastNrCreate, "YmdHis"); err != nil {
  303. return
  304. }
  305. // 获取下一序列值
  306. y = time.Now().Year()
  307. m = time.Now().Month()
  308. d = time.Now().Day()
  309. _, wk = time.Now().ISOWeek()
  310. l_y = lastupdtime.Year()
  311. l_m = lastupdtime.Month()
  312. l_d = lastupdtime.Day()
  313. _, l_wk = lastupdtime.ISOWeek()
  314. switch strings.ToUpper(snrtab.ResetNrRule) {
  315. case "DAILY":
  316. if y == l_y && m == l_m && wk == l_wk && d == l_d {
  317. nextsnr = snrtab.NextNr
  318. } else {
  319. nextsnr = snrtab.StartNr
  320. }
  321. case "WEEKLY":
  322. if y == l_y && m == l_m && wk == l_wk {
  323. nextsnr = snrtab.NextNr
  324. } else {
  325. nextsnr = snrtab.StartNr
  326. }
  327. case "MONTHLY":
  328. if y == l_y && m == l_m {
  329. nextsnr = snrtab.NextNr
  330. } else {
  331. nextsnr = snrtab.StartNr
  332. }
  333. case "YEARLY":
  334. if y == l_y {
  335. nextsnr = snrtab.NextNr
  336. } else {
  337. nextsnr = snrtab.StartNr
  338. }
  339. case "NEVER":
  340. nextsnr = snrtab.NextNr
  341. default:
  342. nextsnr = snrtab.NextNr
  343. }
  344. }
  345. // 组合返回值
  346. layout = []byte(snrtab.Identifierlayout)
  347. for i = 0; i < len(layout); i++ {
  348. switch string(layout[i]) {
  349. case "1": //前缀
  350. retsnr = retsnr + snrtab.Prefix
  351. case "2": //日期变量
  352. retsnr = retsnr + utils.Date(time.Now().Unix(), snrtab.DateFormat)
  353. case "3": //中缀
  354. retsnr = retsnr + snrtab.Infix
  355. case "4": //流水号
  356. if snrtab.IdentifierFormat == "CHAR" {
  357. retsnr = retsnr + utils.ConvInt2FormatString(nextsnr, snrtab.Length)
  358. } else {
  359. retsnr = retsnr + strconv.Itoa(nextsnr)
  360. }
  361. case "5": //后缀
  362. retsnr = retsnr + snrtab.Postfix
  363. }
  364. }
  365. //更新下一序列值
  366. // 处理数值超限
  367. snrtab.NextNr = nextsnr + snrtab.Step
  368. snrtab.LastNrCreate = utils.Date(time.Now().Unix(), "YYYYMMDDHHmmss")
  369. snrtab.LastModify = grmi.DateTime(time.Now())
  370. if snrtab.NextNr > snrtab.EndNr {
  371. switch strings.ToUpper(snrtab.OverflowHandling) {
  372. case "NO":
  373. case "RESET":
  374. snrtab.NextNr = snrtab.StartNr
  375. }
  376. }
  377. sql = "update `Snr` set NextNr = ?, LastNrCreate = ?, LastModify = ? where PlantNr = ? AND SnrId = ?"
  378. if _, err = session.Exec(sql, snrtab.NextNr, snrtab.LastNrCreate, snrtab.LastModify, impl.plantNr, snrtab.SnrId); err != nil {
  379. return
  380. }
  381. return
  382. }