purchase_order.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  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_purchase_order_to_routes(e *echo.Echo) {
  13. group := e.Group("/purchaseOrder")
  14. group.Use(middleware.AuthMiddleware)
  15. group.POST("/getPage", purchaseOrderGetPage)
  16. group.POST("/getList", purchaseOrderGetList)
  17. group.POST("/save", purchaseOrderSave)
  18. group.POST("/update", purchaseOrderUpdate)
  19. group.POST("/remove", purchaseOrderRemove)
  20. }
  21. func purchaseOrderGetPage(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.PurchaseOrder{})
  27. if err != nil {
  28. utils.PrintSqlErr(err)
  29. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  30. }
  31. list := utils.ConvertInterface[[]models.PurchaseOrder](result.Records)
  32. if len(list) == 0 {
  33. list = []models.PurchaseOrder{}
  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. purchase_plan := new(models.PurchasePlan)
  51. purchase_plan.ID = model.PurchasePlanId
  52. err = services.JdbcClient.GetJdbcModelById(purchase_plan)
  53. if err != nil {
  54. utils.PrintSqlErr(err)
  55. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  56. }
  57. model.PurchasePlan = purchase_plan
  58. customer := new(models.Customer)
  59. customer.ID = model.CustomerId
  60. err = services.JdbcClient.GetJdbcModelById(customer)
  61. if err != nil {
  62. utils.PrintSqlErr(err)
  63. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  64. }
  65. model.Customer = customer
  66. detailParam := new(models.PurchaseOrderDetail)
  67. detailParam.OrderId = model.ID
  68. result, err := services.JdbcClient.GetJdbcListByObject(detailParam)
  69. if err != nil {
  70. utils.PrintSqlErr(err)
  71. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  72. }
  73. detail_list := utils.ConvertInterface[[]models.PurchaseOrderDetail](result)
  74. for j := range detail_list {
  75. detail := detail_list[j]
  76. material := new(models.ProductMaterial)
  77. material.Code = detail.MaterialCode
  78. err = services.JdbcClient.GetJdbcModel(material)
  79. if err != nil {
  80. utils.PrintSqlErr(err)
  81. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  82. }
  83. detail.ProductMaterial = material
  84. detail_list[j] = detail
  85. }
  86. model.ChildrenList = &detail_list
  87. list[i] = model
  88. }
  89. result.Records = list
  90. return c.JSON(http.StatusOK, result)
  91. }
  92. func purchaseOrderGetList(c echo.Context) error {
  93. var paramMap map[string]interface{}
  94. if err := c.Bind(&paramMap); err != nil {
  95. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  96. }
  97. result, err := services.JdbcClient.GetJdbcList(paramMap, models.PurchaseOrder{})
  98. if err != nil {
  99. utils.PrintSqlErr(err)
  100. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  101. }
  102. list := utils.ConvertInterface[[]models.PurchaseOrder](result)
  103. if len(list) == 0 {
  104. return c.JSON(http.StatusOK, []string{})
  105. }
  106. return c.JSON(http.StatusOK, list)
  107. }
  108. func purchaseOrderSave(c echo.Context) error {
  109. tx, _ := services.MYSQL_DB.Beginx()
  110. sess, _ := session.Get("auth_session", c)
  111. user_id, ok := sess.Values["user_id"].(int64)
  112. if !ok {
  113. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("用户请先登录", ""))
  114. }
  115. order := new(models.PurchaseOrder)
  116. if err := c.Bind(order); err != nil {
  117. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  118. }
  119. err_msg := purchaseOrder_generateCode(order, tx)
  120. if err_msg != "" {
  121. tx.Rollback()
  122. return c.JSON(http.StatusBadRequest, utils.ErrorResponse(err_msg, ""))
  123. }
  124. status := models.Purchase_Order_Status_Pending
  125. order.Status = &status
  126. order.CreateId = &user_id
  127. services.JdbcClient.JdbcInsert(order, tx)
  128. detail_list := *order.ChildrenList
  129. for _, detail := range detail_list {
  130. detail.OrderId = order.ID
  131. err := services.JdbcClient.JdbcInsert(&detail, tx)
  132. if err != nil {
  133. utils.PrintSqlErr(err)
  134. tx.Rollback()
  135. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  136. }
  137. }
  138. purchase_plan := new(models.PurchasePlan)
  139. purchase_plan.ID = order.PurchasePlanId
  140. plan_status := models.Purchase_Plan_Status_Processing
  141. purchase_plan.Status = &plan_status
  142. err := services.JdbcClient.JdbcUpdateById(purchase_plan, tx)
  143. if err != nil {
  144. utils.PrintSqlErr(err)
  145. tx.Rollback()
  146. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  147. }
  148. if order.FileList == nil {
  149. tx.Commit()
  150. return c.JSON(http.StatusOK, order)
  151. }
  152. fileList := *order.FileList
  153. for _, file := range fileList {
  154. file.RefId = order.ID
  155. refType := models.File_Ref_Type_Purchase_Order
  156. file.RefType = &refType
  157. err := services.JdbcClient.JdbcInsert(&file, tx)
  158. if err != nil {
  159. utils.PrintSqlErr(err)
  160. tx.Rollback()
  161. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  162. }
  163. }
  164. tx.Commit()
  165. return c.JSON(http.StatusOK, order)
  166. }
  167. func purchaseOrderUpdate(c echo.Context) error {
  168. tx, _ := services.MYSQL_DB.Beginx()
  169. order := new(models.PurchaseOrder)
  170. if err := c.Bind(order); err != nil {
  171. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  172. }
  173. sess, _ := session.Get("auth_session", c)
  174. user_id, ok := sess.Values["user_id"].(int64)
  175. if !ok {
  176. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("用户请先登录", ""))
  177. }
  178. order.UpdateId = &user_id
  179. if order.ExpressNo != nil && *order.ExpressNo != "" {
  180. status := models.Purchase_Order_Status_Shipped
  181. order.Status = &status
  182. }
  183. err := services.JdbcClient.JdbcUpdateById(order, tx)
  184. if err != nil {
  185. utils.PrintSqlErr(err)
  186. tx.Rollback()
  187. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  188. }
  189. detail := new(models.PurchaseOrderDetail)
  190. detail.OrderId = order.ID
  191. err = services.JdbcClient.JdbcRemove(detail, tx)
  192. if err != nil {
  193. utils.PrintSqlErr(err)
  194. tx.Rollback()
  195. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  196. }
  197. detail_list := *order.ChildrenList
  198. for _, detail := range detail_list {
  199. detail.OrderId = order.ID
  200. err := services.JdbcClient.JdbcInsert(&detail, tx)
  201. if err != nil {
  202. utils.PrintSqlErr(err)
  203. tx.Rollback()
  204. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  205. }
  206. }
  207. if order.Status != nil && *order.Status == models.Purchase_Order_Status_Complete {
  208. err = services.JdbcClient.GetJdbcModel(order, tx)
  209. if err != nil {
  210. utils.PrintSqlErr(err)
  211. tx.Rollback()
  212. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  213. }
  214. purchase_plan := new(models.PurchasePlan)
  215. purchase_plan.ID = order.PurchasePlanId
  216. plan_status := models.Purchase_Plan_Status_Complete
  217. purchase_plan.Status = &plan_status
  218. err = services.JdbcClient.JdbcUpdateById(purchase_plan, tx)
  219. if err != nil {
  220. utils.PrintSqlErr(err)
  221. tx.Rollback()
  222. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  223. }
  224. }
  225. if order.FileList == nil {
  226. tx.Commit()
  227. return c.JSON(http.StatusOK, order)
  228. }
  229. fileList := *order.FileList
  230. for _, file := range fileList {
  231. file.RefId = order.ID
  232. refType := models.File_Ref_Type_Purchase_Order
  233. file.RefType = &refType
  234. err := services.JdbcClient.JdbcInsert(&file, tx)
  235. if err != nil {
  236. utils.PrintSqlErr(err)
  237. tx.Rollback()
  238. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  239. }
  240. }
  241. tx.Commit()
  242. return c.JSON(http.StatusOK, order)
  243. }
  244. func purchaseOrderRemove(c echo.Context) error {
  245. tx, _ := services.MYSQL_DB.Beginx()
  246. order := new(models.PurchaseOrder)
  247. if err := c.Bind(order); err != nil {
  248. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  249. }
  250. err := services.JdbcClient.JdbcRemoveById(order, tx)
  251. if err != nil {
  252. utils.PrintSqlErr(err)
  253. tx.Rollback()
  254. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  255. }
  256. minio_file := new(models.MinioFile)
  257. minio_file.RefId = order.ID
  258. refType := models.File_Ref_Type_Purchase_Order
  259. minio_file.RefType = &refType
  260. err = services.JdbcClient.JdbcRemove(minio_file, tx)
  261. if err != nil {
  262. utils.PrintSqlErr(err)
  263. tx.Rollback()
  264. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  265. }
  266. detail := new(models.PurchaseOrderDetail)
  267. detail.OrderId = order.ID
  268. err = services.JdbcClient.JdbcRemove(detail, tx)
  269. if err != nil {
  270. utils.PrintSqlErr(err)
  271. tx.Rollback()
  272. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  273. }
  274. tx.Commit()
  275. return c.JSON(http.StatusOK, order)
  276. }
  277. func purchaseOrder_generateCode(model *models.PurchaseOrder, tx *sqlx.Tx) string {
  278. sync := new(models.Synchronized)
  279. sync.Sync.Lock()
  280. defer sync.Sync.Unlock()
  281. if model.Code != nil && len(*model.Code) > 0 {
  282. modelParam := new(models.PurchaseOrder)
  283. modelParam.Code = model.Code
  284. modelParam.TenantId = model.TenantId
  285. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  286. if err != nil {
  287. utils.PrintSqlErr(err)
  288. return "SQL执行失败"
  289. }
  290. if count > 0 {
  291. return "编号已存在,请重新填写"
  292. }
  293. } else {
  294. for {
  295. code, err := services.GetFlowNo(models.Flow_No_Type_Purchase_Order, *model.TenantId, tx)
  296. if err != nil {
  297. return "自动生成编码失败"
  298. }
  299. modelParam := new(models.PurchaseOrder)
  300. modelParam.Code = &code
  301. modelParam.TenantId = model.TenantId
  302. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  303. if err != nil {
  304. utils.PrintSqlErr(err)
  305. return "SQL执行失败"
  306. }
  307. if count == 0 {
  308. model.Code = &code
  309. break
  310. }
  311. }
  312. }
  313. return ""
  314. }