api.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package api
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
  6. "gitee.com/xuyiping_admin/pkg/apierr"
  7. "gitee.com/xuyiping_admin/pkg/ginutil"
  8. "gitee.com/xuyiping_admin/pkg/valid"
  9. "gitee.com/xuyiping_admin/pkg/xerr"
  10. "github.com/gin-gonic/gin"
  11. "github.com/jmoiron/sqlx"
  12. "github.com/pkg/errors"
  13. "kpt.xdmy/apiserver/model"
  14. modelHttp "kpt.xdmy/apiserver/model/http"
  15. "kpt.xdmy/apiserver/service"
  16. "kpt.xdmy/pkg/log"
  17. "net/http"
  18. modernPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/xdmy"
  19. )
  20. var svc *service.Service
  21. func Init(s *service.Service) {
  22. svc = s
  23. }
  24. type nextServiceInfo struct {
  25. laidType int64
  26. useType int64
  27. }
  28. func NextService(p []map[string]interface{}, tx *sqlx.Tx, vendor int64) error {
  29. isTransfer := false
  30. for _, v := range p {
  31. if v["name"] == nil || v["parammaps"] == nil {
  32. continue
  33. }
  34. sqlname := v["name"].(string)
  35. if sqlname == "updateBigPartTransfer" {
  36. isTransfer = true
  37. } else if sqlname == "insertBigPartUse" {
  38. pf := v["parammaps"].(map[string]interface{})
  39. if pf["useType"].(float64) < 5 {
  40. if _, ok := pf["oddCode"]; !ok {
  41. return errors.New("oddCode 不能为空 !!!")
  42. }
  43. }
  44. }
  45. }
  46. if isTransfer {
  47. var bigPartTransferid float64
  48. insertBigPartlaid := false
  49. for _, v := range p {
  50. if v["name"] == nil || v["parammaps"] == nil {
  51. continue
  52. }
  53. pf := v["parammaps"].(map[string]interface{})
  54. sqlname := v["name"].(string)
  55. if sqlname == "updateBigPartTransfer" {
  56. bigPartTransferid = pf["id"].(float64)
  57. } else if sqlname == "insertBigPartlaid" {
  58. insertBigPartlaid = true
  59. }
  60. }
  61. if bigPartTransferid > 0 && insertBigPartlaid {
  62. //if laidType == 2 {
  63. partTransfer := make([]*model.PartTransferStr, 0)
  64. partsByte, err := service.GetDataList(tx, `select * from parttransfer where bigid = ? `, []interface{}{bigPartTransferid})
  65. if err != nil {
  66. return errors.New("无调拨信息!!!")
  67. }
  68. if partsByte != nil {
  69. err := json.Unmarshal(partsByte, &partTransfer)
  70. if err != nil {
  71. return errors.New("调拨信息转码出错!!!")
  72. }
  73. }
  74. for _, part := range partTransfer {
  75. prByte, err := service.MapStr(tx, `select * from part_repertory where id = ? and reportery >= ? `, part.PartRepID, part.Amount)
  76. if err != nil {
  77. return errors.New("库存信息出错!!!")
  78. }
  79. if prByte != nil {
  80. data := make(map[string]interface{})
  81. err := json.Unmarshal(prByte, &data)
  82. if err != nil {
  83. return errors.New("库存信息出错!!!")
  84. }
  85. if _, ok := data["id"]; !ok {
  86. return errors.New("库存信息出错!!!")
  87. }
  88. } else {
  89. return errors.New("库存信息出错!!!")
  90. }
  91. _, err = tx.Exec(` update part_repertory set reportery = reportery - ? where id = ? `, part.Amount, part.PartRepID)
  92. if err != nil {
  93. return errors.New("库存调整出错!!!")
  94. }
  95. }
  96. if vendor == 1 {
  97. err = service.ManualTransfer(bigPartTransferid, tx)
  98. if err != nil {
  99. return err
  100. }
  101. }
  102. }
  103. } else if vendor == 1 {
  104. for _, v := range p {
  105. if v["name"] == nil || v["parammaps"] == nil {
  106. continue
  107. }
  108. pf := v["parammaps"].(map[string]interface{})
  109. sqlname := v["name"].(string)
  110. fmt.Println(sqlname)
  111. switch sqlname {
  112. case "insertBigPartlaid":
  113. laidType := pf["laidType"].(float64)
  114. log.Info(v)
  115. //b, _ := json.Marshal(p)
  116. //pnext := new(nextServiceInfo)
  117. //json.Unmarshal(b, &pnext)
  118. //switch pnext.laidType {
  119. //手动出库没有采购单号,所以不能传SAP
  120. //case 0:
  121. // 入库-申购、采购(申购、线上、寄售)
  122. if laidType != 2 {
  123. pr := new(modelHttp.ProofPartReq)
  124. pr.LaidCode = pf["laidCode"].(string)
  125. pr.StorageTime = pf["storageTime"].(string)
  126. err := svc.LaidProof(pr, tx)
  127. if err != nil {
  128. return err
  129. }
  130. }
  131. case "insertBigPartUse":
  132. //b, _ := json.Marshal(p)
  133. //pnext := new(nextServiceInfo)
  134. //json.Unmarshal(b, &pnext)
  135. log.Info(v)
  136. pr := new(modelHttp.ProofPartReq)
  137. pr.UseForm = pf["useForm"].(string)
  138. pr.StorageTime = pf["receiveTime"].(string)
  139. err := svc.UseProof(pf, tx)
  140. if err != nil {
  141. return err
  142. }
  143. //}
  144. case "updatePartRepertoryTHS":
  145. log.Info(v)
  146. // 退货
  147. err := svc.RefundProof(pf, tx)
  148. if err != nil {
  149. return err
  150. }
  151. case "insertBigPartquit":
  152. log.Info(v)
  153. // 退库
  154. err := svc.QuitProof(pf, tx)
  155. if err != nil {
  156. return err
  157. }
  158. }
  159. }
  160. }
  161. return nil
  162. }
  163. // SparePartsRequisitions 备件申购-特殊申购
  164. func SparePartsRequisitions(c *gin.Context) {
  165. var req modernPb.SparePartsRequisitionsRequest
  166. if err := ginutil.BindProto(c, &req); err != nil {
  167. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  168. return
  169. }
  170. if err := valid.ValidateStruct(&req,
  171. valid.Field(&req.OrderNumber, valid.Required, valid.Length(1, 100)),
  172. valid.Field(&req.PastureId, valid.Required),
  173. valid.Field(&req.DepartmentId, valid.Required),
  174. valid.Field(&req.EmployeId, valid.Required),
  175. valid.Field(&req.CreateTime, valid.Required),
  176. valid.Field(&req.ProviderId, valid.Required),
  177. valid.Field(&req.PurchaseType, valid.Required),
  178. ); err != nil {
  179. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  180. return
  181. }
  182. if len(req.SpotList) <= 0 {
  183. apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.Custom("备件列表不能为空"))
  184. return
  185. }
  186. if err := service.CreateSpecialtyPurchase(c, &req); err != nil {
  187. apierr.ClassifiedAbort(c, err)
  188. return
  189. }
  190. ginutil.JSONResp(c, &operationPb.CommonOK{
  191. Code: http.StatusOK,
  192. Msg: "ok",
  193. Data: &operationPb.Success{Success: true},
  194. })
  195. }
  196. func GetDieselTypeList(c *gin.Context) {
  197. res := &modernPb.DieselTypeListResponse{
  198. Code: http.StatusOK,
  199. Msg: "ok",
  200. Data: &modernPb.DieselTypeList{
  201. DieselType: make([]*modernPb.DieselTypeEnum, 0),
  202. },
  203. }
  204. res.Data.DieselType = append(res.Data.DieselType, &modernPb.DieselTypeEnum{
  205. Value: modernPb.DieselType_Zero,
  206. Label: "0#",
  207. }, &modernPb.DieselTypeEnum{
  208. Value: modernPb.DieselType_Ten,
  209. Label: "-10#",
  210. }, &modernPb.DieselTypeEnum{
  211. Value: modernPb.DieselType_Twenty,
  212. Label: "-20#",
  213. }, &modernPb.DieselTypeEnum{
  214. Value: modernPb.DieselType_Thirty,
  215. Label: "-30#",
  216. }, &modernPb.DieselTypeEnum{
  217. Value: modernPb.DieselType_Thirty_Five,
  218. Label: "-35#",
  219. })
  220. ginutil.JSONResp(c, res)
  221. }