purchase_plan.go 8.9 KB

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