process_stage.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package handlers
  2. import (
  3. "net/http"
  4. "easydo-echo_win7/models"
  5. "easydo-echo_win7/services"
  6. "easydo-echo_win7/utils"
  7. "easydo-echo_win7/middleware"
  8. "github.com/jmoiron/sqlx"
  9. "github.com/labstack/echo-contrib/session"
  10. "github.com/labstack/echo/v4"
  11. )
  12. func Add_process_stage_to_routes(e *echo.Echo) {
  13. group := e.Group("/processStage")
  14. group.Use(middleware.AuthMiddleware)
  15. group.POST("/getPage", processStageGetPage)
  16. group.POST("/getList", processStageGetList)
  17. group.POST("/save", processStageSave)
  18. group.POST("/update", processStageUpdate)
  19. group.POST("/remove", processStageRemove)
  20. }
  21. func processStageGetPage(c echo.Context) error {
  22. var paramMap map[string]interface{}
  23. if err := c.Bind(&paramMap); err != nil {
  24. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  25. }
  26. result, err := services.JdbcClient.GetJdbcPage(paramMap, models.ProcessStage{})
  27. if err != nil {
  28. utils.PrintSqlErr(err)
  29. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  30. }
  31. list := utils.ConvertInterface[[]models.ProcessStage](result.Records)
  32. if len(list) == 0 {
  33. list = []models.ProcessStage{}
  34. }
  35. for i := range list {
  36. model := list[i]
  37. minioList, err := services.JdbcClient.GetMinioFile(model)
  38. if err != nil {
  39. utils.PrintSearchFileErr(err)
  40. }
  41. model.FileList = &minioList
  42. list[i] = model
  43. }
  44. result.Records = list
  45. return c.JSON(http.StatusOK, result)
  46. }
  47. func processStageGetList(c echo.Context) error {
  48. var paramMap map[string]interface{}
  49. if err := c.Bind(&paramMap); err != nil {
  50. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  51. }
  52. result, err := services.JdbcClient.GetJdbcList(paramMap, models.ProcessStage{})
  53. if err != nil {
  54. utils.PrintSqlErr(err)
  55. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  56. }
  57. list := utils.ConvertInterface[[]models.ProcessStage](result)
  58. if len(list) == 0 {
  59. return c.JSON(http.StatusOK, []string{})
  60. }
  61. return c.JSON(http.StatusOK, list)
  62. }
  63. func processStageSave(c echo.Context) error {
  64. tx, _ := services.MYSQL_DB.Beginx()
  65. sess, _ := session.Get("auth_session", c)
  66. user_id, ok := sess.Values["user_id"].(int64)
  67. if !ok {
  68. return c.JSON(http.StatusBadRequest, utils.ErrorResponse("用户请先登录", ""))
  69. }
  70. stage := new(models.ProcessStage)
  71. if err := c.Bind(stage); err != nil {
  72. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  73. }
  74. err_msg := processStage_generateCode(stage, tx)
  75. if err_msg != "" {
  76. tx.Rollback()
  77. return c.JSON(http.StatusBadRequest, utils.ErrorResponse(err_msg, ""))
  78. }
  79. status := models.Status_Enable
  80. stage.Status = &status
  81. stage.CreateId = &user_id
  82. err := services.JdbcClient.JdbcInsert(stage, tx)
  83. if err != nil {
  84. utils.PrintSqlErr(err)
  85. tx.Rollback()
  86. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  87. }
  88. if stage.FileList == nil {
  89. tx.Commit()
  90. return c.JSON(http.StatusOK, stage)
  91. }
  92. fileList := *stage.FileList
  93. for _, file := range fileList {
  94. file.RefId = stage.ID
  95. refType := models.File_Ref_Type_Process_Stage
  96. file.RefType = &refType
  97. err := services.JdbcClient.JdbcInsert(&file, tx)
  98. if err != nil {
  99. utils.PrintSqlErr(err)
  100. tx.Rollback()
  101. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  102. }
  103. }
  104. tx.Commit()
  105. return c.JSON(http.StatusOK, stage)
  106. }
  107. func processStageUpdate(c echo.Context) error {
  108. tx, _ := services.MYSQL_DB.Beginx()
  109. stage := new(models.ProcessStage)
  110. if err := c.Bind(stage); err != nil {
  111. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  112. }
  113. sess, _ := session.Get("auth_session", c)
  114. user_id, ok := sess.Values["user_id"].(int64)
  115. if !ok {
  116. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("用户请先登录", ""))
  117. }
  118. stage.UpdateId = &user_id
  119. err := services.JdbcClient.JdbcUpdateById(stage, tx)
  120. if err != nil {
  121. utils.PrintSqlErr(err)
  122. tx.Rollback()
  123. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  124. }
  125. if stage.FileList == nil {
  126. tx.Commit()
  127. return c.JSON(http.StatusOK, stage)
  128. }
  129. fileList := *stage.FileList
  130. for _, file := range fileList {
  131. file.RefId = stage.ID
  132. refType := models.File_Ref_Type_Process_Stage
  133. file.RefType = &refType
  134. err := services.JdbcClient.JdbcInsert(&file, tx)
  135. if err != nil {
  136. utils.PrintSqlErr(err)
  137. tx.Rollback()
  138. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  139. }
  140. }
  141. tx.Commit()
  142. return c.JSON(http.StatusOK, stage)
  143. }
  144. func processStageRemove(c echo.Context) error {
  145. tx, _ := services.MYSQL_DB.Beginx()
  146. stage := new(models.ProcessStage)
  147. if err := c.Bind(stage); err != nil {
  148. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  149. }
  150. route_detail := new(models.ProcessRouteDetail)
  151. route_detail.StageId = stage.ID
  152. count, err := services.JdbcClient.GetJdbcCount(route_detail, tx)
  153. if err != nil {
  154. utils.PrintSqlErr(err)
  155. tx.Rollback()
  156. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  157. }
  158. if count > 0 {
  159. tx.Rollback()
  160. return c.JSON(http.StatusBadRequest, utils.ErrorResponse("当前工序已被绑定到工艺路线,请勿删除", ""))
  161. }
  162. err = services.JdbcClient.JdbcRemoveById(stage, tx)
  163. if err != nil {
  164. utils.PrintSqlErr(err)
  165. tx.Rollback()
  166. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  167. }
  168. minio_file := new(models.MinioFile)
  169. minio_file.RefId = stage.ID
  170. refType := models.File_Ref_Type_Process_Stage
  171. minio_file.RefType = &refType
  172. err = services.JdbcClient.JdbcRemove(minio_file, tx)
  173. if err != nil {
  174. utils.PrintSqlErr(err)
  175. tx.Rollback()
  176. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  177. }
  178. tx.Commit()
  179. return c.JSON(http.StatusOK, stage)
  180. }
  181. func processStage_generateCode(model *models.ProcessStage, tx *sqlx.Tx) string {
  182. sync := new(models.Synchronized)
  183. sync.Sync.Lock()
  184. defer sync.Sync.Unlock()
  185. if model.Code != nil && len(*model.Code) > 0 {
  186. modelParam := new(models.ProcessStage)
  187. modelParam.Code = model.Code
  188. modelParam.TenantId = model.TenantId
  189. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  190. if err != nil {
  191. utils.PrintSqlErr(err)
  192. return "SQL执行失败"
  193. }
  194. if count > 0 {
  195. return "编号已存在,请重新填写"
  196. }
  197. } else {
  198. for {
  199. code, err := services.GetFlowNo(models.Flow_No_Type_Process_Stage, *model.TenantId, tx)
  200. if err != nil {
  201. return "自动生成编码失败"
  202. }
  203. modelParam := new(models.ProcessStage)
  204. modelParam.Code = &code
  205. modelParam.TenantId = model.TenantId
  206. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  207. if err != nil {
  208. utils.PrintSqlErr(err)
  209. return "SQL执行失败"
  210. }
  211. if count == 0 {
  212. model.Code = &code
  213. break
  214. }
  215. }
  216. }
  217. return ""
  218. }