flow_no.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package services
  2. import (
  3. "easydo-echo_win7/models"
  4. "fmt"
  5. "time"
  6. "github.com/jmoiron/sqlx"
  7. )
  8. func GetFlowNo(flow_type string, tenant_id string, conn ...*sqlx.Tx) (string, error) {
  9. flow_no := new(models.FlowNo)
  10. flow_no.Type = &flow_type
  11. flow_no.TenantId = &tenant_id
  12. if len(conn) > 0 {
  13. tx := conn[0]
  14. err := JdbcClient.GetJdbcModel(flow_no, tx)
  15. if err != nil {
  16. return "", fmt.Errorf("SQL执行失败: %v", err)
  17. }
  18. } else {
  19. err := JdbcClient.GetJdbcModel(flow_no)
  20. if err != nil {
  21. return "", fmt.Errorf("SQL执行失败: %v", err)
  22. }
  23. }
  24. // 获取当前时间
  25. now := time.Now()
  26. // 格式化日期
  27. currDate := now.Format("2006-01-02")
  28. currDate2 := now.Format("20060102")
  29. var no string
  30. // 判断是否需要重置序列号(新的一天)
  31. if flow_no.CurrDate == nil || len(*flow_no.CurrDate) == 0 || (len(*flow_no.CurrDate) > 0 && *flow_no.CurrDate != currDate) {
  32. flow_no.CurrDate = &currDate
  33. *flow_no.CurrSeq = 1
  34. } else {
  35. *flow_no.CurrSeq = *flow_no.CurrSeq + 1
  36. }
  37. // 生成流水号
  38. if len(*flow_no.CurrDate) == 0 {
  39. // 没有日期的情况,使用6位序列号
  40. currSeq := fmt.Sprintf("%06d", *flow_no.CurrSeq)
  41. no = *flow_no.Prefix + currSeq
  42. } else {
  43. // 有日期的情况,使用5位序列号
  44. currSeq := fmt.Sprintf("%05d", *flow_no.CurrSeq)
  45. no = *flow_no.Prefix + currDate2 + currSeq
  46. }
  47. flow_no.CurrNo = &no
  48. paramMap := map[string]interface{}{
  49. "type": flow_type,
  50. }
  51. if len(conn) > 0 {
  52. tx := conn[0]
  53. err := JdbcClient.JdbcUpdate(flow_no, paramMap, tx)
  54. if err != nil {
  55. return "", fmt.Errorf("SQL执行失败: %v", err)
  56. }
  57. } else {
  58. err := JdbcClient.JdbcUpdate(flow_no, paramMap)
  59. if err != nil {
  60. return "", fmt.Errorf("SQL执行失败: %v", err)
  61. }
  62. }
  63. return no, nil
  64. }