process_route.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. package handlers
  2. import (
  3. "net/http"
  4. "sort"
  5. "easydo-echo_win7/models"
  6. "easydo-echo_win7/services"
  7. "easydo-echo_win7/utils"
  8. "easydo-echo_win7/middleware"
  9. "github.com/jmoiron/sqlx"
  10. "github.com/labstack/echo-contrib/session"
  11. "github.com/labstack/echo/v4"
  12. )
  13. func Add_process_route_to_routes(e *echo.Echo) {
  14. group := e.Group("/processRoute")
  15. group.Use(middleware.AuthMiddleware)
  16. group.POST("/getPage", processRouteGetPage)
  17. group.POST("/getList", processRouteGetList)
  18. group.POST("/save", processRouteSave)
  19. group.POST("/update", processRouteUpdate)
  20. group.POST("/remove", processRouteRemove)
  21. group.POST("/upgrade", processRouteUpgrade)
  22. group.POST("/regrade", processRouteRegrade)
  23. }
  24. func processRouteGetPage(c echo.Context) error {
  25. var paramMap map[string]interface{}
  26. if err := c.Bind(&paramMap); err != nil {
  27. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  28. }
  29. result, err := services.JdbcClient.GetJdbcPage(paramMap, models.ProcessRoute{})
  30. if err != nil {
  31. utils.PrintSqlErr(err)
  32. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  33. }
  34. list := utils.ConvertInterface[[]models.ProcessRoute](result.Records)
  35. if len(list) == 0 {
  36. list = []models.ProcessRoute{}
  37. }
  38. for i := range list {
  39. model := list[i]
  40. minioList, err := services.JdbcClient.GetMinioFile(model)
  41. if err != nil {
  42. utils.PrintSearchFileErr(err)
  43. }
  44. model.FileList = &minioList
  45. detailParam := new(models.ProcessRouteDetail)
  46. detailParam.RouteId = model.ID
  47. result, err := services.JdbcClient.GetJdbcListByObject(detailParam)
  48. if err != nil {
  49. utils.PrintSqlErr(err)
  50. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  51. }
  52. detail_list := utils.ConvertInterface[[]models.ProcessRouteDetail](result)
  53. for j := range detail_list {
  54. detail := detail_list[j]
  55. stage := new(models.ProcessStage)
  56. stage.ID = detail.StageId
  57. err = services.JdbcClient.GetJdbcModelById(stage)
  58. if err != nil {
  59. utils.PrintSqlErr(err)
  60. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  61. }
  62. detail.ProcessStage = stage
  63. detail_list[j] = detail
  64. }
  65. model.DetailList = &detail_list
  66. routeParam := new(models.ProcessRoute)
  67. routeParam.ParentId = model.ID
  68. count, err := services.JdbcClient.GetJdbcCount(routeParam)
  69. if err != nil {
  70. utils.PrintSqlErr(err)
  71. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  72. }
  73. if count > 0 {
  74. isHaveHistory := models.Common_Value_True_Value
  75. model.IsHaveHistory = &isHaveHistory
  76. } else {
  77. isHaveHistory := models.Common_Value_False_Value
  78. model.IsHaveHistory = &isHaveHistory
  79. }
  80. if model.InspectProgramId != nil && len(*model.InspectProgramId) > 0 {
  81. inspectProgram := new(models.QualityInspectProgram)
  82. inspectProgram.ID = model.InspectProgramId
  83. err = services.JdbcClient.GetJdbcModelById(inspectProgram)
  84. if err != nil {
  85. utils.PrintSqlErr(err)
  86. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  87. }
  88. model.InspectProgram = inspectProgram
  89. }
  90. list[i] = model
  91. }
  92. result.Records = list
  93. return c.JSON(http.StatusOK, result)
  94. }
  95. func processRouteGetList(c echo.Context) error {
  96. var paramMap map[string]interface{}
  97. if err := c.Bind(&paramMap); err != nil {
  98. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  99. }
  100. result, err := services.JdbcClient.GetJdbcList(paramMap, models.ProcessRoute{})
  101. if err != nil {
  102. utils.PrintSqlErr(err)
  103. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  104. }
  105. list := utils.ConvertInterface[[]models.ProcessRoute](result)
  106. if len(list) == 0 {
  107. return c.JSON(http.StatusOK, []string{})
  108. }
  109. return c.JSON(http.StatusOK, list)
  110. }
  111. func processRouteSave(c echo.Context) error {
  112. tx, _ := services.MYSQL_DB.Beginx()
  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. route := new(models.ProcessRoute)
  119. if err := c.Bind(route); err != nil {
  120. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  121. }
  122. err_msg := processRoute_generateCode(route, tx)
  123. if err_msg != "" {
  124. tx.Rollback()
  125. return c.JSON(http.StatusBadRequest, utils.ErrorResponse(err_msg, ""))
  126. }
  127. status := models.Status_Enable
  128. route.Status = &status
  129. route.CreateId = &user_id
  130. parentId := models.Common_Value_Zero_String
  131. route.ParentId = &parentId
  132. services.JdbcClient.JdbcInsert(route, tx)
  133. detail_list := *route.DetailList
  134. for _, detail := range detail_list {
  135. detail.RouteId = route.ID
  136. err := services.JdbcClient.JdbcInsert(&detail, tx)
  137. if err != nil {
  138. utils.PrintSqlErr(err)
  139. tx.Rollback()
  140. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  141. }
  142. }
  143. if route.FileList == nil {
  144. tx.Commit()
  145. return c.JSON(http.StatusOK, route)
  146. }
  147. fileList := *route.FileList
  148. for _, file := range fileList {
  149. file.RefId = route.ID
  150. refType := models.File_Ref_Type_Process_Route
  151. file.RefType = &refType
  152. err := services.JdbcClient.JdbcInsert(&file, tx)
  153. if err != nil {
  154. utils.PrintSqlErr(err)
  155. tx.Rollback()
  156. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  157. }
  158. }
  159. tx.Commit()
  160. return c.JSON(http.StatusOK, route)
  161. }
  162. func processRouteUpdate(c echo.Context) error {
  163. tx, _ := services.MYSQL_DB.Beginx()
  164. route := new(models.ProcessRoute)
  165. if err := c.Bind(route); err != nil {
  166. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  167. }
  168. sess, _ := session.Get("auth_session", c)
  169. user_id, ok := sess.Values["user_id"].(int64)
  170. if !ok {
  171. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("用户请先登录", ""))
  172. }
  173. route.UpdateId = &user_id
  174. err := services.JdbcClient.JdbcUpdateById(route, tx)
  175. if err != nil {
  176. utils.PrintSqlErr(err)
  177. tx.Rollback()
  178. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  179. }
  180. route_detial := new(models.ProcessRouteDetail)
  181. route_detial.RouteId = route.ID
  182. err = services.JdbcClient.JdbcRemove(route_detial, tx)
  183. if err != nil {
  184. utils.PrintSqlErr(err)
  185. tx.Rollback()
  186. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  187. }
  188. detail_list := *route.DetailList
  189. for _, detail := range detail_list {
  190. detail.RouteId = route.ID
  191. err := services.JdbcClient.JdbcInsert(&detail, tx)
  192. if err != nil {
  193. utils.PrintSqlErr(err)
  194. tx.Rollback()
  195. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  196. }
  197. }
  198. if route.FileList == nil {
  199. tx.Commit()
  200. return c.JSON(http.StatusOK, route)
  201. }
  202. fileList := *route.FileList
  203. for _, file := range fileList {
  204. file.RefId = route.ID
  205. refType := models.File_Ref_Type_Process_Route
  206. file.RefType = &refType
  207. err := services.JdbcClient.JdbcInsert(&file, tx)
  208. if err != nil {
  209. utils.PrintSqlErr(err)
  210. tx.Rollback()
  211. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  212. }
  213. }
  214. tx.Commit()
  215. return c.JSON(http.StatusOK, route)
  216. }
  217. func processRouteRemove(c echo.Context) error {
  218. tx, _ := services.MYSQL_DB.Beginx()
  219. route := new(models.ProcessRoute)
  220. if err := c.Bind(route); err != nil {
  221. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  222. }
  223. err := services.JdbcClient.JdbcRemoveById(route, tx)
  224. if err != nil {
  225. utils.PrintSqlErr(err)
  226. tx.Rollback()
  227. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  228. }
  229. minio_file := new(models.MinioFile)
  230. minio_file.RefId = route.ID
  231. refType := models.File_Ref_Type_Process_Route
  232. minio_file.RefType = &refType
  233. err = services.JdbcClient.JdbcRemove(minio_file, tx)
  234. if err != nil {
  235. utils.PrintSqlErr(err)
  236. tx.Rollback()
  237. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  238. }
  239. route_detial := new(models.ProcessRouteDetail)
  240. route_detial.RouteId = route.ID
  241. err = services.JdbcClient.JdbcRemove(route_detial, tx)
  242. if err != nil {
  243. utils.PrintSqlErr(err)
  244. tx.Rollback()
  245. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  246. }
  247. history := new(models.ProcessRoute)
  248. history.ParentId = route.ID
  249. history_result, _ := services.JdbcClient.GetJdbcListByObject(history, tx)
  250. history_list := utils.ConvertInterface[[]models.ProcessRoute](history_result)
  251. for _, history := range history_list {
  252. err := services.JdbcClient.JdbcRemoveById(history, tx)
  253. if err != nil {
  254. utils.PrintSqlErr(err)
  255. tx.Rollback()
  256. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  257. }
  258. route_detial := new(models.ProcessRouteDetail)
  259. route_detial.RouteId = history.ID
  260. err = services.JdbcClient.JdbcRemove(route_detial, tx)
  261. if err != nil {
  262. utils.PrintSqlErr(err)
  263. tx.Rollback()
  264. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  265. }
  266. }
  267. tx.Commit()
  268. return c.JSON(http.StatusOK, route)
  269. }
  270. func processRouteUpgrade(c echo.Context) error {
  271. tx, _ := services.MYSQL_DB.Beginx()
  272. route := new(models.ProcessRoute)
  273. if err := c.Bind(route); err != nil {
  274. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  275. }
  276. old_uuid := route.ID
  277. sess, _ := session.Get("auth_session", c)
  278. user_id, ok := sess.Values["user_id"].(int64)
  279. if !ok {
  280. return c.JSON(http.StatusBadRequest, utils.ErrorResponse("用户请先登录", ""))
  281. }
  282. err_msg := processRoute_generateCode(route, tx)
  283. if err_msg != "" {
  284. tx.Rollback()
  285. return c.JSON(http.StatusBadRequest, utils.ErrorResponse(err_msg, ""))
  286. }
  287. route.ID = nil
  288. status := models.Status_Enable
  289. route.Status = &status
  290. route.CreateId = &user_id
  291. parentId := models.Common_Value_Zero_String
  292. route.ParentId = &parentId
  293. err := services.JdbcClient.JdbcInsert(route, tx)
  294. if err != nil {
  295. utils.PrintSqlErr(err)
  296. tx.Rollback()
  297. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  298. }
  299. exist_route := new(models.ProcessRoute)
  300. exist_route.ID = old_uuid
  301. exist_route.ParentId = route.ID
  302. status = models.Status_Disable
  303. exist_route.Status = &status
  304. exist_route.UpdateId = &user_id
  305. err = services.JdbcClient.JdbcUpdateById(exist_route, tx)
  306. if err != nil {
  307. utils.PrintSqlErr(err)
  308. tx.Rollback()
  309. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  310. }
  311. child_route := new(models.ProcessRoute)
  312. child_route.ParentId = route.ID
  313. child_route.UpdateId = &user_id
  314. var paramMap = map[string]interface{}{
  315. "parentId": old_uuid,
  316. }
  317. err = services.JdbcClient.JdbcUpdate(child_route, paramMap, tx)
  318. if err != nil {
  319. utils.PrintSqlErr(err)
  320. tx.Rollback()
  321. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  322. }
  323. detail_list := *route.DetailList
  324. for _, detail := range detail_list {
  325. detail.RouteId = route.ID
  326. err := services.JdbcClient.JdbcInsert(&detail, tx)
  327. if err != nil {
  328. utils.PrintSqlErr(err)
  329. tx.Rollback()
  330. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  331. }
  332. }
  333. if route.FileList == nil {
  334. tx.Commit()
  335. return c.JSON(http.StatusOK, route)
  336. }
  337. fileList := *route.FileList
  338. for _, file := range fileList {
  339. file.RefId = route.ID
  340. refType := models.File_Ref_Type_Process_Route
  341. file.RefType = &refType
  342. err := services.JdbcClient.JdbcInsert(&file, tx)
  343. if err != nil {
  344. utils.PrintSqlErr(err)
  345. tx.Rollback()
  346. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  347. }
  348. }
  349. tx.Commit()
  350. return c.JSON(http.StatusOK, route)
  351. }
  352. func processRouteRegrade(c echo.Context) error {
  353. tx, _ := services.MYSQL_DB.Beginx()
  354. route := new(models.ProcessRoute)
  355. if err := c.Bind(route); err != nil {
  356. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  357. }
  358. children := new(models.ProcessRoute)
  359. children.ParentId = route.ID
  360. result, err := services.JdbcClient.GetJdbcListByObject(children, tx)
  361. if err != nil {
  362. utils.PrintSqlErr(err)
  363. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  364. }
  365. children_list := utils.ConvertInterface[[]models.ProcessRoute](result)
  366. sess, _ := session.Get("auth_session", c)
  367. user_id, ok := sess.Values["user_id"].(int64)
  368. if !ok {
  369. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("用户请先登录", ""))
  370. }
  371. if len(children_list) > 0 {
  372. //倒序
  373. sort.Slice(children_list, func(i, j int) bool {
  374. return *children_list[i].CreateTime > *children_list[j].CreateTime
  375. })
  376. child := &children_list[0]
  377. parentId := models.Common_Value_Zero_String
  378. child.ParentId = &parentId
  379. status := models.Status_Enable
  380. child.Status = &status
  381. child.UpdateId = &user_id
  382. err := services.JdbcClient.JdbcUpdateById(child, tx)
  383. if err != nil {
  384. utils.PrintSqlErr(err)
  385. tx.Rollback()
  386. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  387. }
  388. children = new(models.ProcessRoute)
  389. children.ParentId = child.ID
  390. paramMap := map[string]interface{}{
  391. "parentId": route.ID,
  392. }
  393. children.UpdateId = &user_id
  394. err = services.JdbcClient.JdbcUpdate(children, paramMap, tx)
  395. if err != nil {
  396. utils.PrintSqlErr(err)
  397. tx.Rollback()
  398. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  399. }
  400. err = services.JdbcClient.JdbcRemoveById(route, tx)
  401. if err != nil {
  402. utils.PrintSqlErr(err)
  403. tx.Rollback()
  404. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  405. }
  406. route_detail := new(models.ProcessRouteDetail)
  407. route_detail.RouteId = route.ID
  408. err = services.JdbcClient.JdbcRemove(route_detail, tx)
  409. if err != nil {
  410. utils.PrintSqlErr(err)
  411. tx.Rollback()
  412. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  413. }
  414. }
  415. tx.Commit()
  416. return c.JSON(http.StatusOK, route)
  417. }
  418. func processRoute_generateCode(model *models.ProcessRoute, tx *sqlx.Tx) string {
  419. sync := new(models.Synchronized)
  420. sync.Sync.Lock()
  421. defer sync.Sync.Unlock()
  422. if model.Code != nil && len(*model.Code) > 0 {
  423. modelParam := new(models.ProcessRoute)
  424. modelParam.Code = model.Code
  425. modelParam.TenantId = model.TenantId
  426. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  427. if err != nil {
  428. utils.PrintSqlErr(err)
  429. return "SQL执行失败"
  430. }
  431. if count > 0 {
  432. return "编号已存在,请重新填写"
  433. }
  434. } else {
  435. for {
  436. code, err := services.GetFlowNo(models.Flow_No_Type_Process_Route, *model.TenantId, tx)
  437. if err != nil {
  438. return "自动生成编码失败"
  439. }
  440. modelParam := new(models.ProcessRoute)
  441. modelParam.Code = &code
  442. modelParam.TenantId = model.TenantId
  443. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  444. if err != nil {
  445. utils.PrintSqlErr(err)
  446. return "SQL执行失败"
  447. }
  448. if count == 0 {
  449. model.Code = &code
  450. break
  451. }
  452. }
  453. }
  454. return ""
  455. }