product_plan.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  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_product_plan_to_routes(e *echo.Echo) {
  13. group := e.Group("/productPlan")
  14. group.Use(middleware.AuthMiddleware)
  15. group.POST("/getPage", productPlanGetPage)
  16. group.POST("/getList", productPlanGetList)
  17. group.POST("/save", productPlanSave)
  18. group.POST("/update", productPlanUpdate)
  19. group.POST("/remove", productPlanRemove)
  20. }
  21. func productPlanGetPage(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.ProductPlan{})
  27. if err != nil {
  28. utils.PrintSqlErr(err)
  29. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  30. }
  31. list := utils.ConvertInterface[[]models.ProductPlan](result.Records)
  32. if len(list) == 0 {
  33. list = []models.ProductPlan{}
  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. sale_order := new(models.SaleOrder)
  43. sale_order.ID = model.SaleOrderId
  44. err = services.JdbcClient.GetJdbcModelById(sale_order)
  45. if err != nil {
  46. utils.PrintSqlErr(err)
  47. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  48. }
  49. model.SaleOrder = sale_order
  50. saleOrder_minioList, err := services.JdbcClient.GetMinioFile(sale_order)
  51. if err != nil {
  52. utils.PrintSearchFileErr(err)
  53. }
  54. sale_order.FileList = &saleOrder_minioList
  55. saleOrder_detailParam := new(models.SaleOrderDetail)
  56. saleOrder_detailParam.OrderId = sale_order.ID
  57. saleOrder_result, err := services.JdbcClient.GetJdbcListByObject(saleOrder_detailParam)
  58. if err != nil {
  59. utils.PrintSqlErr(err)
  60. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  61. }
  62. saleOrder_detailList := utils.ConvertInterface[[]models.SaleOrderDetail](saleOrder_result)
  63. for j := range saleOrder_detailList {
  64. detail := saleOrder_detailList[j]
  65. material := new(models.ProductMaterial)
  66. material.Code = detail.MaterialCode
  67. err = services.JdbcClient.GetJdbcModel(material)
  68. if err != nil {
  69. utils.PrintSqlErr(err)
  70. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  71. }
  72. detail.Material = material
  73. saleOrder_detailList[j] = detail
  74. }
  75. sale_order.ChildrenList = &saleOrder_detailList
  76. bomParam := new(models.ProductPlanBom)
  77. bomParam.PlanId = model.ID
  78. result, err := services.JdbcClient.GetJdbcListByObject(bomParam)
  79. if err != nil {
  80. utils.PrintSqlErr(err)
  81. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  82. }
  83. bom_list := utils.ConvertInterface[[]models.ProductPlanBom](result)
  84. for j := range bom_list {
  85. plan_bom := bom_list[j]
  86. route := new(models.ProcessRoute)
  87. route.ID = plan_bom.RouteId
  88. err = services.JdbcClient.GetJdbcModelById(route)
  89. if err != nil {
  90. utils.PrintSqlErr(err)
  91. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  92. }
  93. plan_bom.ProcessRoute = route
  94. inspect_program := new(models.QualityInspectProgram)
  95. inspect_program.ID = plan_bom.InspectProgramId
  96. err = services.JdbcClient.GetJdbcModelById(inspect_program)
  97. if err != nil {
  98. utils.PrintSqlErr(err)
  99. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  100. }
  101. plan_bom.QualityInspectProgram = inspect_program
  102. bom := new(models.ProductBom)
  103. bom.ID = plan_bom.BomId
  104. err = services.JdbcClient.GetJdbcModelById(bom)
  105. if err != nil {
  106. utils.PrintSqlErr(err)
  107. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  108. }
  109. plan_bom.ProductBom = bom
  110. bom_list[j] = plan_bom
  111. }
  112. model.BomList = &bom_list
  113. deviceParam := new(models.ProductPlanDevice)
  114. deviceParam.PlanId = model.ID
  115. device_result, err := services.JdbcClient.GetJdbcListByObject(deviceParam)
  116. if err != nil {
  117. utils.PrintSqlErr(err)
  118. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  119. }
  120. device_list := utils.ConvertInterface[[]models.ProductPlanDevice](device_result)
  121. for j := range device_list {
  122. plan_device := device_list[j]
  123. device := new(models.Device)
  124. device.ID = plan_device.DeviceId
  125. err = services.JdbcClient.GetJdbcModelById(device)
  126. if err != nil {
  127. utils.PrintSqlErr(err)
  128. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  129. }
  130. plan_device.Device = device
  131. device_list[j] = plan_device
  132. }
  133. userParam := new(models.ProductPlanUser)
  134. userParam.PlanId = model.ID
  135. user_result, err := services.JdbcClient.GetJdbcListByObject(userParam)
  136. if err != nil {
  137. utils.PrintSqlErr(err)
  138. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  139. }
  140. user_list := utils.ConvertInterface[[]models.ProductPlanUser](user_result)
  141. for j := range user_list {
  142. plan_user := user_list[j]
  143. user := new(models.SysUser)
  144. user.ID = plan_user.UserId
  145. err = services.JdbcClient.GetJdbcModelById(user)
  146. if err != nil {
  147. utils.PrintSqlErr(err)
  148. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  149. }
  150. plan_user.User = user
  151. user_list[j] = plan_user
  152. }
  153. list[i] = model
  154. }
  155. result.Records = list
  156. return c.JSON(http.StatusOK, result)
  157. }
  158. func productPlanGetList(c echo.Context) error {
  159. var paramMap map[string]interface{}
  160. if err := c.Bind(&paramMap); err != nil {
  161. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  162. }
  163. result, err := services.JdbcClient.GetJdbcList(paramMap, models.ProductPlan{})
  164. if err != nil {
  165. utils.PrintSqlErr(err)
  166. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  167. }
  168. list := utils.ConvertInterface[[]models.ProductPlan](result)
  169. if len(list) == 0 {
  170. return c.JSON(http.StatusOK, []string{})
  171. }
  172. return c.JSON(http.StatusOK, list)
  173. }
  174. func productPlanSave(c echo.Context) error {
  175. tx, _ := services.MYSQL_DB.Beginx()
  176. sess, _ := session.Get("auth_session", c)
  177. user_id, ok := sess.Values["user_id"].(int64)
  178. if !ok {
  179. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("用户请先登录", ""))
  180. }
  181. plan := new(models.ProductPlan)
  182. if err := c.Bind(plan); err != nil {
  183. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  184. }
  185. err_msg := productPlan_generateCode(plan, tx)
  186. if err_msg != "" {
  187. tx.Rollback()
  188. return c.JSON(http.StatusBadRequest, utils.ErrorResponse(err_msg, ""))
  189. }
  190. status := models.Product_Plan_Status_Pending
  191. plan.Status = &status
  192. plan.CreateId = &user_id
  193. err := services.JdbcClient.JdbcInsert(plan, tx)
  194. if err != nil {
  195. utils.PrintSqlErr(err)
  196. tx.Rollback()
  197. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  198. }
  199. bom_list := *plan.BomList
  200. for _, detail := range bom_list {
  201. detail.PlanId = plan.ID
  202. err := services.JdbcClient.JdbcInsert(&detail, tx)
  203. if err != nil {
  204. utils.PrintSqlErr(err)
  205. tx.Rollback()
  206. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  207. }
  208. }
  209. device_list := *plan.DeviceList
  210. for _, detail := range device_list {
  211. detail.PlanId = plan.ID
  212. err := services.JdbcClient.JdbcInsert(&detail, tx)
  213. if err != nil {
  214. utils.PrintSqlErr(err)
  215. tx.Rollback()
  216. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  217. }
  218. }
  219. user_list := *plan.UserList
  220. for _, detail := range user_list {
  221. detail.PlanId = plan.ID
  222. err := services.JdbcClient.JdbcInsert(&detail, tx)
  223. if err != nil {
  224. utils.PrintSqlErr(err)
  225. tx.Rollback()
  226. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  227. }
  228. }
  229. if plan.FileList == nil {
  230. tx.Commit()
  231. return c.JSON(http.StatusOK, plan)
  232. }
  233. fileList := *plan.FileList
  234. for _, file := range fileList {
  235. file.RefId = plan.ID
  236. refType := models.File_Ref_Type_Product_Plan
  237. file.RefType = &refType
  238. err := services.JdbcClient.JdbcInsert(&file, tx)
  239. if err != nil {
  240. utils.PrintSqlErr(err)
  241. tx.Rollback()
  242. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  243. }
  244. }
  245. tx.Commit()
  246. return c.JSON(http.StatusOK, plan)
  247. }
  248. func productPlanUpdate(c echo.Context) error {
  249. tx, _ := services.MYSQL_DB.Beginx()
  250. plan := new(models.ProductPlan)
  251. if err := c.Bind(plan); err != nil {
  252. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  253. }
  254. sess, _ := session.Get("auth_session", c)
  255. user_id, ok := sess.Values["user_id"].(int64)
  256. if !ok {
  257. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("用户请先登录", ""))
  258. }
  259. plan.UpdateId = &user_id
  260. err := services.JdbcClient.JdbcUpdateById(plan, tx)
  261. if err != nil {
  262. utils.PrintSqlErr(err)
  263. tx.Rollback()
  264. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  265. }
  266. plan_bom := new(models.ProductPlanBom)
  267. plan_bom.PlanId = plan.ID
  268. err = services.JdbcClient.JdbcRemove(plan_bom, tx)
  269. if err != nil {
  270. utils.PrintSqlErr(err)
  271. tx.Rollback()
  272. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  273. }
  274. bom_list := *plan.BomList
  275. for _, detail := range bom_list {
  276. detail.PlanId = plan.ID
  277. err := services.JdbcClient.JdbcInsert(&detail, tx)
  278. if err != nil {
  279. utils.PrintSqlErr(err)
  280. tx.Rollback()
  281. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  282. }
  283. }
  284. plan_device := new(models.ProductPlanDevice)
  285. plan_device.PlanId = plan.ID
  286. err = services.JdbcClient.JdbcRemove(plan_device, tx)
  287. if err != nil {
  288. utils.PrintSqlErr(err)
  289. tx.Rollback()
  290. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  291. }
  292. device_list := *plan.DeviceList
  293. for _, detail := range device_list {
  294. detail.PlanId = plan.ID
  295. err := services.JdbcClient.JdbcInsert(&detail, tx)
  296. if err != nil {
  297. utils.PrintSqlErr(err)
  298. tx.Rollback()
  299. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  300. }
  301. }
  302. plan_user := new(models.ProductPlanUser)
  303. plan_user.PlanId = plan.ID
  304. err = services.JdbcClient.JdbcRemove(plan_user, tx)
  305. if err != nil {
  306. utils.PrintSqlErr(err)
  307. tx.Rollback()
  308. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  309. }
  310. user_list := *plan.UserList
  311. for _, detail := range user_list {
  312. detail.PlanId = plan.ID
  313. err := services.JdbcClient.JdbcInsert(&detail, tx)
  314. if err != nil {
  315. utils.PrintSqlErr(err)
  316. tx.Rollback()
  317. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  318. }
  319. }
  320. if plan.FileList == nil {
  321. tx.Commit()
  322. return c.JSON(http.StatusOK, plan)
  323. }
  324. fileList := *plan.FileList
  325. for _, file := range fileList {
  326. file.RefId = plan.ID
  327. refType := models.File_Ref_Type_Product_Plan
  328. file.RefType = &refType
  329. err := services.JdbcClient.JdbcInsert(&file, tx)
  330. if err != nil {
  331. utils.PrintSqlErr(err)
  332. tx.Rollback()
  333. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  334. }
  335. }
  336. tx.Commit()
  337. return c.JSON(http.StatusOK, plan)
  338. }
  339. func productPlanRemove(c echo.Context) error {
  340. tx, _ := services.MYSQL_DB.Beginx()
  341. plan := new(models.ProductPlan)
  342. if err := c.Bind(plan); err != nil {
  343. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  344. }
  345. err := services.JdbcClient.JdbcRemoveById(plan, tx)
  346. if err != nil {
  347. utils.PrintSqlErr(err)
  348. tx.Rollback()
  349. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  350. }
  351. minio_file := new(models.MinioFile)
  352. minio_file.RefId = plan.ID
  353. refType := models.File_Ref_Type_Product_Plan
  354. minio_file.RefType = &refType
  355. err = services.JdbcClient.JdbcRemove(minio_file, tx)
  356. if err != nil {
  357. utils.PrintSqlErr(err)
  358. tx.Rollback()
  359. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  360. }
  361. plan_bom := new(models.ProductPlanBom)
  362. plan_bom.PlanId = plan.ID
  363. err = services.JdbcClient.JdbcRemove(plan_bom, tx)
  364. if err != nil {
  365. utils.PrintSqlErr(err)
  366. tx.Rollback()
  367. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  368. }
  369. plan_device := new(models.ProductPlanDevice)
  370. plan_device.PlanId = plan.ID
  371. err = services.JdbcClient.JdbcRemove(plan_device, tx)
  372. if err != nil {
  373. utils.PrintSqlErr(err)
  374. tx.Rollback()
  375. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  376. }
  377. plan_user := new(models.ProductPlanUser)
  378. plan_user.PlanId = plan.ID
  379. err = services.JdbcClient.JdbcRemove(plan_user, tx)
  380. if err != nil {
  381. utils.PrintSqlErr(err)
  382. tx.Rollback()
  383. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  384. }
  385. tx.Commit()
  386. return c.JSON(http.StatusOK, plan)
  387. }
  388. func productPlan_generateCode(model *models.ProductPlan, tx *sqlx.Tx) string {
  389. sync := new(models.Synchronized)
  390. sync.Sync.Lock()
  391. defer sync.Sync.Unlock()
  392. if model.Code != nil && len(*model.Code) > 0 {
  393. modelParam := new(models.ProductPlan)
  394. modelParam.Code = model.Code
  395. modelParam.TenantId = model.TenantId
  396. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  397. if err != nil {
  398. utils.PrintSqlErr(err)
  399. return "SQL执行失败"
  400. }
  401. if count > 0 {
  402. return "编号已存在,请重新填写"
  403. }
  404. } else {
  405. for {
  406. code, err := services.GetFlowNo(models.Flow_No_Type_Product_Plan, *model.TenantId, tx)
  407. if err != nil {
  408. return "自动生成编码失败"
  409. }
  410. modelParam := new(models.ProductPlan)
  411. modelParam.Code = &code
  412. modelParam.TenantId = model.TenantId
  413. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  414. if err != nil {
  415. utils.PrintSqlErr(err)
  416. return "SQL执行失败"
  417. }
  418. if count == 0 {
  419. model.Code = &code
  420. break
  421. }
  422. }
  423. }
  424. return ""
  425. }