sysProductModel_gen.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. // Code generated by goctl. DO NOT EDIT.
  2. // versions:
  3. // goctl version: 1.10.0
  4. package product
  5. import (
  6. "context"
  7. "database/sql"
  8. "fmt"
  9. "strings"
  10. "github.com/zeromicro/go-zero/core/stores/builder"
  11. "github.com/zeromicro/go-zero/core/stores/cache"
  12. "github.com/zeromicro/go-zero/core/stores/sqlc"
  13. "github.com/zeromicro/go-zero/core/stores/sqlx"
  14. "github.com/zeromicro/go-zero/core/stringx"
  15. )
  16. var (
  17. sysProductFieldNames = builder.RawFieldNames(&SysProduct{})
  18. sysProductRows = strings.Join(sysProductFieldNames, ",")
  19. sysProductRowsExpectAutoSet = strings.Join(stringx.Remove(sysProductFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
  20. sysProductRowsWithPlaceHolder = strings.Join(stringx.Remove(sysProductFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
  21. cacheSysProductIdPrefix = "cache:sysProduct:id:"
  22. cacheSysProductAppKeyPrefix = "cache:sysProduct:appKey:"
  23. cacheSysProductCodePrefix = "cache:sysProduct:code:"
  24. )
  25. type (
  26. sysProductModel interface {
  27. Insert(ctx context.Context, data *SysProduct) (sql.Result, error)
  28. InsertWithTx(ctx context.Context, session sqlx.Session, data *SysProduct) (sql.Result, error)
  29. BatchInsert(ctx context.Context, dataList []*SysProduct) error
  30. BatchInsertWithTx(ctx context.Context, session sqlx.Session, dataList []*SysProduct) error
  31. TransactCtx(ctx context.Context, fn func(context.Context, sqlx.Session) error) error
  32. FindOne(ctx context.Context, id int64) (*SysProduct, error)
  33. FindOneWithTx(ctx context.Context, session sqlx.Session, id int64) (*SysProduct, error)
  34. FindOneByAppKey(ctx context.Context, appKey string) (*SysProduct, error)
  35. FindOneByAppKeyWithTx(ctx context.Context, session sqlx.Session, appKey string) (*SysProduct, error)
  36. FindOneByCode(ctx context.Context, code string) (*SysProduct, error)
  37. FindOneByCodeWithTx(ctx context.Context, session sqlx.Session, code string) (*SysProduct, error)
  38. Update(ctx context.Context, data *SysProduct) error
  39. UpdateWithTx(ctx context.Context, session sqlx.Session, data *SysProduct) error
  40. BatchUpdate(ctx context.Context, dataList []*SysProduct) error
  41. BatchUpdateWithTx(ctx context.Context, session sqlx.Session, dataList []*SysProduct) error
  42. Delete(ctx context.Context, id int64) error
  43. DeleteWithTx(ctx context.Context, session sqlx.Session, id int64) error
  44. BatchDelete(ctx context.Context, ids []int64) error
  45. BatchDeleteWithTx(ctx context.Context, session sqlx.Session, ids []int64) error
  46. TableName() string
  47. }
  48. defaultSysProductModel struct {
  49. sqlc.CachedConn
  50. table string
  51. }
  52. SysProduct struct {
  53. Id int64 `db:"id"` // ID
  54. Code string `db:"code"` // 产品编码(唯一标识)
  55. Name string `db:"name"` // 产品名称
  56. AppKey string `db:"appKey"` // 产品接入密钥
  57. AppSecret string `db:"appSecret"` // 产品接入签名密钥
  58. Remark string `db:"remark"` // 备注
  59. Status int64 `db:"status"` // 状态 1启用 2禁用
  60. CreateTime int64 `db:"createTime"` // 创建时间
  61. UpdateTime int64 `db:"updateTime"` // 修改时间
  62. }
  63. )
  64. func newSysProductModel(conn sqlx.SqlConn, c cache.CacheConf, cachePrefix string, opts ...cache.Option) *defaultSysProductModel {
  65. if cachePrefix != "" {
  66. cacheSysProductIdPrefix = cachePrefix + ":" + "cache:sysProduct:id:"
  67. cacheSysProductAppKeyPrefix = cachePrefix + ":" + "cache:sysProduct:appKey:"
  68. cacheSysProductCodePrefix = cachePrefix + ":" + "cache:sysProduct:code:"
  69. }
  70. return &defaultSysProductModel{
  71. CachedConn: sqlc.NewConn(conn, c, opts...),
  72. table: "`sys_product`",
  73. }
  74. }
  75. func (m *defaultSysProductModel) Delete(ctx context.Context, id int64) error {
  76. data, err := m.FindOne(ctx, id)
  77. if err != nil {
  78. return err
  79. }
  80. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  81. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  82. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id)
  83. _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  84. query := fmt.Sprintf("DELETE FROM %s WHERE `id` = ?", m.table)
  85. return conn.ExecCtx(ctx, query, id)
  86. }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  87. return err
  88. }
  89. func (m *defaultSysProductModel) DeleteWithTx(ctx context.Context, session sqlx.Session, id int64) error {
  90. data, err := m.FindOne(ctx, id)
  91. if err != nil {
  92. return err
  93. }
  94. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  95. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  96. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id)
  97. _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  98. query := fmt.Sprintf("DELETE FROM %s WHERE `id` = ?", m.table)
  99. return session.ExecCtx(ctx, query, id)
  100. }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  101. return err
  102. }
  103. func (m *defaultSysProductModel) BatchDelete(ctx context.Context, ids []int64) error {
  104. if len(ids) == 0 {
  105. return nil
  106. }
  107. primaryKeys := make([]interface{}, 0, len(ids))
  108. for _, key := range ids {
  109. primaryKeys = append(primaryKeys, key)
  110. }
  111. oldDataList, err := m.findListByPrimaryKeys(ctx, primaryKeys)
  112. if err != nil {
  113. return err
  114. }
  115. keys := make([]string, 0)
  116. for _, data := range oldDataList {
  117. id := m.getPrimaryKeyValue(data)
  118. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  119. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  120. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id)
  121. keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  122. }
  123. placeholders := make([]string, 0, len(ids))
  124. args := make([]interface{}, 0, len(ids))
  125. for _, id := range ids {
  126. placeholders = append(placeholders, "?")
  127. args = append(args, id)
  128. }
  129. _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  130. query := fmt.Sprintf("DELETE FROM %s WHERE `id` IN (%s)", m.table, strings.Join(placeholders, ","))
  131. return conn.ExecCtx(ctx, query, args...)
  132. }, keys...)
  133. return err
  134. }
  135. func (m *defaultSysProductModel) BatchDeleteWithTx(ctx context.Context, session sqlx.Session, ids []int64) error {
  136. if len(ids) == 0 {
  137. return nil
  138. }
  139. primaryKeys := make([]interface{}, 0, len(ids))
  140. for _, key := range ids {
  141. primaryKeys = append(primaryKeys, key)
  142. }
  143. oldDataList, err := m.findListByPrimaryKeys(ctx, primaryKeys)
  144. if err != nil {
  145. return err
  146. }
  147. keys := make([]string, 0)
  148. for _, data := range oldDataList {
  149. id := m.getPrimaryKeyValue(data)
  150. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  151. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  152. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id)
  153. keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  154. }
  155. placeholders := make([]string, 0, len(ids))
  156. args := make([]interface{}, 0, len(ids))
  157. for _, id := range ids {
  158. placeholders = append(placeholders, "?")
  159. args = append(args, id)
  160. }
  161. query := fmt.Sprintf("DELETE FROM %s WHERE `id` IN (%s)", m.table, strings.Join(placeholders, ","))
  162. _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  163. return session.ExecCtx(ctx, query, args...)
  164. }, keys...)
  165. return err
  166. }
  167. func (m *defaultSysProductModel) FindOne(ctx context.Context, id int64) (*SysProduct, error) {
  168. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id)
  169. var resp SysProduct
  170. err := m.QueryRowCtx(ctx, &resp, sysProductIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
  171. query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? LIMIT 1", sysProductRows, m.table)
  172. return conn.QueryRowCtx(ctx, v, query, id)
  173. })
  174. switch err {
  175. case nil:
  176. return &resp, nil
  177. case sqlc.ErrNotFound:
  178. return nil, ErrNotFound
  179. default:
  180. return nil, err
  181. }
  182. }
  183. func (m *defaultSysProductModel) FindOneWithTx(ctx context.Context, session sqlx.Session, id int64) (*SysProduct, error) {
  184. var resp SysProduct
  185. query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? LIMIT 1", sysProductRows, m.table)
  186. err := session.QueryRowCtx(ctx, &resp, query, id)
  187. switch err {
  188. case nil:
  189. return &resp, nil
  190. case sqlx.ErrNotFound:
  191. return nil, ErrNotFound
  192. default:
  193. return nil, err
  194. }
  195. }
  196. func (m *defaultSysProductModel) FindOneByAppKey(ctx context.Context, appKey string) (*SysProduct, error) {
  197. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, appKey)
  198. var resp SysProduct
  199. err := m.QueryRowIndexCtx(ctx, &resp, sysProductAppKeyKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) {
  200. query := fmt.Sprintf("SELECT %s FROM %s WHERE `appKey` = ? LIMIT 1", sysProductRows, m.table)
  201. if err := conn.QueryRowCtx(ctx, &resp, query, appKey); err != nil {
  202. return nil, err
  203. }
  204. return resp.Id, nil
  205. }, m.queryPrimary)
  206. switch err {
  207. case nil:
  208. return &resp, nil
  209. case sqlc.ErrNotFound:
  210. return nil, ErrNotFound
  211. default:
  212. return nil, err
  213. }
  214. }
  215. func (m *defaultSysProductModel) FindOneByAppKeyWithTx(ctx context.Context, session sqlx.Session, appKey string) (*SysProduct, error) {
  216. var resp SysProduct
  217. query := fmt.Sprintf("SELECT %s FROM %s WHERE `appKey` = ? LIMIT 1", sysProductRows, m.table)
  218. err := session.QueryRowCtx(ctx, &resp, query, appKey)
  219. switch err {
  220. case nil:
  221. return &resp, nil
  222. case sqlx.ErrNotFound:
  223. return nil, ErrNotFound
  224. default:
  225. return nil, err
  226. }
  227. }
  228. func (m *defaultSysProductModel) FindOneByCode(ctx context.Context, code string) (*SysProduct, error) {
  229. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, code)
  230. var resp SysProduct
  231. err := m.QueryRowIndexCtx(ctx, &resp, sysProductCodeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) {
  232. query := fmt.Sprintf("SELECT %s FROM %s WHERE `code` = ? LIMIT 1", sysProductRows, m.table)
  233. if err := conn.QueryRowCtx(ctx, &resp, query, code); err != nil {
  234. return nil, err
  235. }
  236. return resp.Id, nil
  237. }, m.queryPrimary)
  238. switch err {
  239. case nil:
  240. return &resp, nil
  241. case sqlc.ErrNotFound:
  242. return nil, ErrNotFound
  243. default:
  244. return nil, err
  245. }
  246. }
  247. func (m *defaultSysProductModel) FindOneByCodeWithTx(ctx context.Context, session sqlx.Session, code string) (*SysProduct, error) {
  248. var resp SysProduct
  249. query := fmt.Sprintf("SELECT %s FROM %s WHERE `code` = ? LIMIT 1", sysProductRows, m.table)
  250. err := session.QueryRowCtx(ctx, &resp, query, code)
  251. switch err {
  252. case nil:
  253. return &resp, nil
  254. case sqlx.ErrNotFound:
  255. return nil, ErrNotFound
  256. default:
  257. return nil, err
  258. }
  259. }
  260. func (m *defaultSysProductModel) Insert(ctx context.Context, data *SysProduct) (sql.Result, error) {
  261. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  262. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  263. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id)
  264. ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  265. query := fmt.Sprintf("INSERT INTO %s (%s) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", m.table, sysProductRowsExpectAutoSet)
  266. return conn.ExecCtx(ctx, query, data.Code, data.Name, data.AppKey, data.AppSecret, data.Remark, data.Status, data.CreateTime, data.UpdateTime)
  267. }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  268. return ret, err
  269. }
  270. func (m *defaultSysProductModel) InsertWithTx(ctx context.Context, session sqlx.Session, data *SysProduct) (sql.Result, error) {
  271. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  272. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  273. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id)
  274. ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  275. query := fmt.Sprintf("INSERT INTO %s (%s) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", m.table, sysProductRowsExpectAutoSet)
  276. return session.ExecCtx(ctx, query, data.Code, data.Name, data.AppKey, data.AppSecret, data.Remark, data.Status, data.CreateTime, data.UpdateTime)
  277. }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  278. return ret, err
  279. }
  280. func (m *defaultSysProductModel) BatchInsert(ctx context.Context, dataList []*SysProduct) error {
  281. if len(dataList) == 0 {
  282. return nil
  283. }
  284. keys := make([]string, 0, len(dataList))
  285. valueSets := make([]string, 0, len(dataList))
  286. args := make([]interface{}, 0)
  287. for _, data := range dataList {
  288. valueSets = append(valueSets, "(?, ?, ?, ?, ?, ?, ?, ?)")
  289. args = append(args, data.Code, data.Name, data.AppKey, data.AppSecret, data.Remark, data.Status, data.CreateTime, data.UpdateTime)
  290. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  291. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  292. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id)
  293. keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  294. }
  295. query := fmt.Sprintf("INSERT INTO %s (%s) VALUES %s", m.table, sysProductRowsExpectAutoSet, strings.Join(valueSets, ","))
  296. _, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  297. return conn.ExecCtx(ctx, query, args...)
  298. }, keys...)
  299. return err
  300. }
  301. func (m *defaultSysProductModel) BatchInsertWithTx(ctx context.Context, session sqlx.Session, dataList []*SysProduct) error {
  302. if len(dataList) == 0 {
  303. return nil
  304. }
  305. keys := make([]string, 0, len(dataList))
  306. valueSets := make([]string, 0, len(dataList))
  307. args := make([]interface{}, 0)
  308. for _, data := range dataList {
  309. valueSets = append(valueSets, "(?, ?, ?, ?, ?, ?, ?, ?)")
  310. args = append(args, data.Code, data.Name, data.AppKey, data.AppSecret, data.Remark, data.Status, data.CreateTime, data.UpdateTime)
  311. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  312. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  313. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id)
  314. keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  315. }
  316. query := fmt.Sprintf("INSERT INTO %s (%s) VALUES %s", m.table, sysProductRowsExpectAutoSet, strings.Join(valueSets, ","))
  317. _, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  318. return session.ExecCtx(ctx, query, args...)
  319. }, keys...)
  320. return err
  321. }
  322. func (m *defaultSysProductModel) Update(ctx context.Context, newData *SysProduct) error {
  323. data, err := m.FindOne(ctx, newData.Id)
  324. if err != nil {
  325. return err
  326. }
  327. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  328. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  329. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id)
  330. _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  331. query := fmt.Sprintf("UPDATE %s SET %s WHERE `id` = ?", m.table, sysProductRowsWithPlaceHolder)
  332. return conn.ExecCtx(ctx, query, newData.Code, newData.Name, newData.AppKey, newData.AppSecret, newData.Remark, newData.Status, newData.CreateTime, newData.UpdateTime, newData.Id)
  333. }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  334. return err
  335. }
  336. func (m *defaultSysProductModel) UpdateWithTx(ctx context.Context, session sqlx.Session, newData *SysProduct) error {
  337. data, err := m.FindOne(ctx, newData.Id)
  338. if err != nil {
  339. return err
  340. }
  341. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  342. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  343. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id)
  344. _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  345. query := fmt.Sprintf("UPDATE %s SET %s WHERE `id` = ?", m.table, sysProductRowsWithPlaceHolder)
  346. return session.ExecCtx(ctx, query, newData.Code, newData.Name, newData.AppKey, newData.AppSecret, newData.Remark, newData.Status, newData.CreateTime, newData.UpdateTime, newData.Id)
  347. }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  348. return err
  349. }
  350. func (m *defaultSysProductModel) BatchUpdate(ctx context.Context, dataList []*SysProduct) error {
  351. if len(dataList) == 0 {
  352. return nil
  353. }
  354. keys := make([]string, 0)
  355. primaryKeys := make([]interface{}, 0, len(dataList))
  356. for _, item := range dataList {
  357. primaryKeys = append(primaryKeys, item.Id)
  358. }
  359. oldList, err := m.findListByPrimaryKeys(ctx, primaryKeys)
  360. if err != nil {
  361. return err
  362. }
  363. for _, data := range oldList {
  364. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  365. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  366. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id)
  367. keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  368. }
  369. query, vals := m.buildBatchUpdateQuery(dataList)
  370. _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  371. return conn.ExecCtx(ctx, query, vals...)
  372. }, keys...)
  373. return err
  374. }
  375. func (m *defaultSysProductModel) BatchUpdateWithTx(ctx context.Context, session sqlx.Session, dataList []*SysProduct) error {
  376. if len(dataList) == 0 {
  377. return nil
  378. }
  379. keys := make([]string, 0)
  380. primaryKeys := make([]interface{}, 0, len(dataList))
  381. for _, item := range dataList {
  382. primaryKeys = append(primaryKeys, item.Id)
  383. }
  384. oldList, err := m.findListByPrimaryKeys(ctx, primaryKeys)
  385. if err != nil {
  386. return err
  387. }
  388. for _, data := range oldList {
  389. sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey)
  390. sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code)
  391. sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id)
  392. keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey)
  393. }
  394. query, vals := m.buildBatchUpdateQuery(dataList)
  395. _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
  396. return session.ExecCtx(ctx, query, vals...)
  397. }, keys...)
  398. return err
  399. }
  400. func (m *defaultSysProductModel) buildBatchUpdateQuery(dataList []*SysProduct) (string, []interface{}) {
  401. fields := strings.Split(strings.ReplaceAll(sysProductRowsWithPlaceHolder, "=?", ""), ",")
  402. listValues := make([][]interface{}, 0, len(dataList))
  403. for _, newData := range dataList {
  404. values := make([]interface{}, 0, len(fields)+1)
  405. values = append(values, newData.Code, newData.Name, newData.AppKey, newData.AppSecret, newData.Remark, newData.Status, newData.CreateTime, newData.UpdateTime, newData.Id)
  406. listValues = append(listValues, values)
  407. }
  408. vals := make([]interface{}, 0, len(dataList)*(len(fields)*2+1))
  409. setClauses := make([]string, len(fields))
  410. for i, field := range fields {
  411. caseClauses := make([]string, len(dataList))
  412. for j, item := range dataList {
  413. caseClauses[j] = "WHEN `id` = ? THEN ?"
  414. vals = append(vals, item.Id, listValues[j][i])
  415. }
  416. setClauses[i] = fmt.Sprintf("%s = CASE %s ELSE %s END", field, strings.Join(caseClauses, " "), field)
  417. }
  418. wherePlaceholders := make([]string, len(dataList))
  419. for i, item := range dataList {
  420. wherePlaceholders[i] = "?"
  421. vals = append(vals, item.Id)
  422. }
  423. query := fmt.Sprintf("UPDATE %s SET %s WHERE `id` IN (%s)", m.table, strings.Join(setClauses, ", "), strings.Join(wherePlaceholders, ","))
  424. return query, vals
  425. }
  426. func (m *defaultSysProductModel) formatPrimary(primary any) string {
  427. return fmt.Sprintf("%s%v", cacheSysProductIdPrefix, primary)
  428. }
  429. func (m *defaultSysProductModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error {
  430. query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? LIMIT 1", sysProductRows, m.table)
  431. return conn.QueryRowCtx(ctx, v, query, primary)
  432. }
  433. func (m *defaultSysProductModel) TableName() string {
  434. return m.table
  435. }
  436. func (m *defaultSysProductModel) findListByPrimaryKeys(ctx context.Context, ids []interface{}) ([]*SysProduct, error) {
  437. if len(ids) == 0 {
  438. return []*SysProduct{}, nil
  439. }
  440. placeholders := make([]string, len(ids))
  441. args := make([]interface{}, len(ids))
  442. for i, id := range ids {
  443. placeholders[i] = "?"
  444. args[i] = id
  445. }
  446. var resp []*SysProduct
  447. query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` IN (%s)", sysProductRows, m.table, strings.Join(placeholders, ","))
  448. err := m.QueryRowsNoCacheCtx(ctx, &resp, query, args...)
  449. if err != nil {
  450. return nil, err
  451. }
  452. return resp, nil
  453. }
  454. func (m *defaultSysProductModel) getPrimaryKeyValue(data *SysProduct) interface{} {
  455. return data.Id
  456. }