sale_order.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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_sale_order_to_routes(e *echo.Echo) {
  14. group := e.Group("/saleOrder")
  15. group.Use(middleware.AuthMiddleware)
  16. group.POST("/getPage", saleOrderGetPage)
  17. group.POST("/save", saleOrderSave)
  18. group.POST("/update", saleOrderUpdate)
  19. group.POST("/remove", saleOrderRemove)
  20. }
  21. func saleOrderGetPage(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.SaleOrder{})
  27. if err != nil {
  28. utils.PrintSqlErr(err)
  29. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  30. }
  31. list := utils.ConvertInterface[[]models.SaleOrder](result.Records)
  32. if len(list) == 0 {
  33. list = []models.SaleOrder{}
  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. detailParam := new(models.SaleOrderDetail)
  43. detailParam.OrderId = model.ID
  44. result, err := services.JdbcClient.GetJdbcListByObject(detailParam)
  45. if err != nil {
  46. utils.PrintSqlErr(err)
  47. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  48. }
  49. detail_list := utils.ConvertInterface[[]models.SaleOrderDetail](result)
  50. for j := range detail_list {
  51. detail := detail_list[j]
  52. material := new(models.ProductMaterial)
  53. material.Code = detail.MaterialCode
  54. err = services.JdbcClient.GetJdbcModel(material)
  55. if err != nil {
  56. utils.PrintSqlErr(err)
  57. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  58. }
  59. detail.Material = material
  60. detail_list[j] = detail
  61. }
  62. model.ChildrenList = &detail_list
  63. if model.ManagerId != nil && *model.ManagerId != 0 {
  64. manager := new(models.SysUser)
  65. manager.ID = model.ManagerId
  66. err = services.JdbcClient.GetJdbcModelById(manager)
  67. if err != nil {
  68. utils.PrintSqlErr(err)
  69. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  70. }
  71. model.ManagerName = manager.NickName
  72. }
  73. if model.CustomerId != nil && *model.CustomerId != "" {
  74. customer := new(models.Customer)
  75. customer.ID = model.CustomerId
  76. err = services.JdbcClient.GetJdbcModelById(customer)
  77. if err != nil {
  78. utils.PrintSqlErr(err)
  79. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", err.Error()))
  80. }
  81. model.CustomerName = customer.Name
  82. }
  83. list[i] = model
  84. }
  85. result.Records = list
  86. return c.JSON(http.StatusOK, result)
  87. }
  88. func saleOrderSave(c echo.Context) error {
  89. tx, _ := services.MYSQL_DB.Beginx()
  90. order := new(models.SaleOrder)
  91. if err := c.Bind(order); err != nil {
  92. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  93. }
  94. sess, _ := session.Get("auth_session", c)
  95. err_msg := saleOrder_generateCode(order, tx)
  96. if err_msg != "" {
  97. tx.Rollback()
  98. return c.JSON(http.StatusBadRequest, utils.ErrorResponse(err_msg, ""))
  99. }
  100. user_id, ok := sess.Values["user_id"].(int64)
  101. if !ok {
  102. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("用户请先登录", ""))
  103. }
  104. order.CreateId = &user_id
  105. status := models.Sale_Order_Status_Pending
  106. order.Status = &status
  107. services.JdbcClient.JdbcInsert(order, tx)
  108. detail_list := *order.ChildrenList
  109. for _, detail := range detail_list {
  110. detail.OrderId = order.ID
  111. err := services.JdbcClient.JdbcInsert(&detail, tx)
  112. if err != nil {
  113. utils.PrintSqlErr(err)
  114. tx.Rollback()
  115. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  116. }
  117. }
  118. if order.FileList == nil {
  119. tx.Commit()
  120. return c.JSON(http.StatusOK, order)
  121. }
  122. fileList := *order.FileList
  123. for _, file := range fileList {
  124. file.RefId = order.ID
  125. refType := models.File_Ref_Type_Sale_Order
  126. file.RefType = &refType
  127. err := services.JdbcClient.JdbcInsert(&file, tx)
  128. if err != nil {
  129. utils.PrintSqlErr(err)
  130. tx.Rollback()
  131. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  132. }
  133. }
  134. tx.Commit()
  135. return c.JSON(http.StatusOK, order)
  136. }
  137. func saleOrderUpdate(c echo.Context) error {
  138. tx, _ := services.MYSQL_DB.Beginx()
  139. order := new(models.SaleOrder)
  140. if err := c.Bind(order); err != nil {
  141. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  142. }
  143. sess, _ := session.Get("auth_session", c)
  144. user_id, ok := sess.Values["user_id"].(int64)
  145. if !ok {
  146. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("用户请先登录", ""))
  147. }
  148. order.UpdateId = &user_id
  149. err := services.JdbcClient.JdbcUpdateById(order, tx)
  150. if err != nil {
  151. utils.PrintSqlErr(err)
  152. tx.Rollback()
  153. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  154. }
  155. order_detial := new(models.SaleOrderDetail)
  156. order_detial.OrderId = order.ID
  157. err = services.JdbcClient.JdbcRemove(order_detial, tx)
  158. if err != nil {
  159. utils.PrintSqlErr(err)
  160. tx.Rollback()
  161. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  162. }
  163. detail_list := *order.ChildrenList
  164. for _, detail := range detail_list {
  165. detail.OrderId = order.ID
  166. err := services.JdbcClient.JdbcInsert(&detail, tx)
  167. if err != nil {
  168. utils.PrintSqlErr(err)
  169. tx.Rollback()
  170. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  171. }
  172. }
  173. if order.FileList == nil {
  174. tx.Commit()
  175. return c.JSON(http.StatusOK, order)
  176. }
  177. fileList := *order.FileList
  178. for _, file := range fileList {
  179. file.RefId = order.ID
  180. refType := models.File_Ref_Type_Sale_Order
  181. file.RefType = &refType
  182. err := services.JdbcClient.JdbcInsert(&file, tx)
  183. if err != nil {
  184. utils.PrintSqlErr(err)
  185. tx.Rollback()
  186. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  187. }
  188. }
  189. tx.Commit()
  190. return c.JSON(http.StatusOK, order)
  191. }
  192. func saleOrderRemove(c echo.Context) error {
  193. tx, _ := services.MYSQL_DB.Beginx()
  194. order := new(models.SaleOrder)
  195. if err := c.Bind(order); err != nil {
  196. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("参数解析失败", err.Error()))
  197. }
  198. err := services.JdbcClient.JdbcRemoveById(order, tx)
  199. if err != nil {
  200. utils.PrintSqlErr(err)
  201. tx.Rollback()
  202. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  203. }
  204. minio_file := new(models.MinioFile)
  205. minio_file.RefId = order.ID
  206. refType := models.File_Ref_Type_Sale_Order
  207. minio_file.RefType = &refType
  208. err = services.JdbcClient.JdbcRemove(minio_file, tx)
  209. if err != nil {
  210. utils.PrintSqlErr(err)
  211. tx.Rollback()
  212. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  213. }
  214. order_detial := new(models.SaleOrderDetail)
  215. order_detial.OrderId = order.ID
  216. err = services.JdbcClient.JdbcRemove(order_detial, tx)
  217. if err != nil {
  218. utils.PrintSqlErr(err)
  219. tx.Rollback()
  220. return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
  221. }
  222. tx.Commit()
  223. return c.JSON(http.StatusOK, order)
  224. }
  225. func saleOrder_generateCode(model *models.SaleOrder, tx *sqlx.Tx) string {
  226. sync := new(models.Synchronized)
  227. sync.Sync.Lock()
  228. defer sync.Sync.Unlock()
  229. if model.Code != nil && len(*model.Code) > 0 {
  230. modelParam := new(models.SaleOrder)
  231. modelParam.Code = model.Code
  232. modelParam.TenantId = model.TenantId
  233. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  234. if err != nil {
  235. utils.PrintSqlErr(err)
  236. return "SQL执行失败"
  237. }
  238. if count > 0 {
  239. return "编号已存在,请重新填写"
  240. }
  241. } else {
  242. for {
  243. code, err := services.GetFlowNo(models.Flow_No_Type_Sale_Order, *model.TenantId, tx)
  244. if err != nil {
  245. return "自动生成编码失败"
  246. }
  247. modelParam := new(models.SaleOrder)
  248. modelParam.Code = &code
  249. modelParam.TenantId = model.TenantId
  250. count, err := services.JdbcClient.GetJdbcCount(modelParam, tx)
  251. if err != nil {
  252. utils.PrintSqlErr(err)
  253. return "SQL执行失败"
  254. }
  255. if count == 0 {
  256. model.Code = &code
  257. break
  258. }
  259. }
  260. }
  261. return ""
  262. }