SJA APS后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

356 lines
10 KiB

  1. package db
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/go-xorm/xorm"
  6. "leit.com/leit_seat_aps/common"
  7. "xorm.io/core"
  8. )
  9. //发运包装单表
  10. type Prod_packorder struct {
  11. Finr int `xorm:"pk" json:"prod_packorder.finr"`
  12. Packorderid string `xorm:"pk" json:"prod_packorder.packorderid"`
  13. Packtemplateid string `json:"prod_packorder.packtemplateid"`
  14. Status int `json:"prod_packorder.status"`
  15. Loadstatus int `json:"prod_packorder.loadstatus"` // 装车状态,0=未装车,1=已装车
  16. Shortpack int `json:"prod_packorder.shortpack"` // 是否短包
  17. Shortby string `json:"prod_packorder.shortby"`
  18. Shorttime string `json:"prod_packorder.shorttime"`
  19. Orderinfo string `json:"prod_packorder.orderinfo"`
  20. Projnr string `json:"prod_packorder.projnr"`
  21. Syncsn string `json:"prod_packorder.syncsn"`
  22. Boxsn string `json:"prod_packorder.boxsn"`
  23. Packtypeid string `json:"prod_packorder.packtypeid"`
  24. Printerid string `json:"prod_packorder.printerid"`
  25. Templatefile string `json:"prod_packorder.templatefile"`
  26. Planqty int `json:"prod_packorder.planqty"`
  27. Actqty int `json:"prod_packorder.actqty"`
  28. Opentime string `json:"prod_packorder.opentime"`
  29. Closetime string `json:"prod_packorder.closetime"`
  30. Operator string `json:"prod_packorder.operator"`
  31. Lastmodif string `json:"prod_packorder.lastmodif"`
  32. Lastuser string `json:"prod_packorder.lastuser"`
  33. Credatuz string `json:"prod_packorder.credatuz"`
  34. Itemlst []Prod_packorder_itemlst `json:"itemlst" xorm:"-"`
  35. }
  36. type VProdPackorder struct {
  37. Prod_packorder `xorm:"extends"`
  38. Prod_packorder_itemlst `xorm:"extends"`
  39. }
  40. func (t *Prod_packorder) Clipped() {
  41. common.TrimStruct(t, *t)
  42. }
  43. func (t *Prod_packorder) TableName() string {
  44. return "prod_packorder"
  45. }
  46. //增
  47. func (t *Prod_packorder) Add() (err error) {
  48. var (
  49. i int
  50. affw int64
  51. pkotab Prod_packorder
  52. )
  53. e := G_DbEngine
  54. pkotab = Prod_packorder{}
  55. affw, err = e.Table("prod_packorder").ID(core.PK{G_FINR, t.Packorderid}).Count(pkotab)
  56. if err != nil {
  57. return err
  58. }
  59. if affw > 0 {
  60. return errors.New("数据已经存在!")
  61. }
  62. _, err = e.Table("prod_packorder").Insert(t)
  63. if err != nil {
  64. return err
  65. }
  66. // 遍历子项并插入
  67. for i = 0; i < len(t.Itemlst); i++ {
  68. if err = t.Itemlst[i].Add(); err != nil {
  69. return
  70. }
  71. }
  72. return nil
  73. }
  74. //增
  75. func (t *Prod_packorder) Insert(session *xorm.Session) (err error) {
  76. var (
  77. i int
  78. affw int64
  79. pkotab Prod_packorder
  80. )
  81. pkotab = Prod_packorder{}
  82. affw, err = session.Table("prod_packorder").ID(core.PK{G_FINR, t.Packorderid}).Count(pkotab)
  83. if err != nil {
  84. return err
  85. }
  86. if affw > 0 {
  87. return errors.New("数据已经存在!")
  88. }
  89. _, err = session.Table("prod_packorder").Insert(t)
  90. if err != nil {
  91. return err
  92. }
  93. // 遍历子项并插入
  94. for i = 0; i < len(t.Itemlst); i++ {
  95. if err = t.Itemlst[i].Insert(session); err != nil {
  96. return
  97. }
  98. }
  99. return
  100. }
  101. //删
  102. func (t *Prod_packorder) Del() bool {
  103. e := G_DbEngine
  104. _, err := e.ID(core.PK{G_FINR, t.Packorderid}).Delete(&Prod_packorder{})
  105. if err != nil {
  106. return false
  107. }
  108. return true
  109. }
  110. //改
  111. func (t *Prod_packorder) Update() bool {
  112. e := G_DbEngine
  113. _, err := e.ID(core.PK{G_FINR, t.Packorderid}).Update(t)
  114. if err != nil {
  115. return false
  116. }
  117. return true
  118. }
  119. //更新指定字段
  120. func (t *Prod_packorder) UpdateFields(session *xorm.Session, fields string) (err error) {
  121. if _, err = session.Table("prod_packorder").ID(core.PK{G_FINR, t.Packorderid}).Cols(fields).Update(t); err != nil {
  122. return
  123. }
  124. return
  125. }
  126. //查
  127. func (t *Prod_packorder) SelectOne() (data Prod_packorder, err error) {
  128. var i int
  129. e := G_DbEngine
  130. _, err = e.ID(core.PK{G_FINR, t.Packorderid}).Get(&data)
  131. if err != nil {
  132. return data, err
  133. }
  134. data.Clipped()
  135. // 获取值列表
  136. if err = e.Where("finr = ? and packorderid = ? ",
  137. G_FINR, data.Packorderid).OrderBy("pos").Find(&data.Itemlst); err != nil {
  138. return
  139. }
  140. for i, _ = range data.Itemlst {
  141. data.Itemlst[i].Clipped()
  142. }
  143. return data, nil
  144. }
  145. //查
  146. func (t *Prod_packorder) SelectOneBySession(session *xorm.Session) (data Prod_packorder, err error) {
  147. var i int
  148. _, err = session.ID(core.PK{G_FINR, t.Packorderid}).Get(&data)
  149. if err != nil {
  150. return data, err
  151. }
  152. data.Clipped()
  153. // 获取值列表
  154. if err = session.Where("finr = ? and packorderid = ? ",
  155. G_FINR, data.Packorderid).OrderBy("pos").Find(&data.Itemlst); err != nil {
  156. return
  157. }
  158. for i, _ = range data.Itemlst {
  159. data.Itemlst[i].Clipped()
  160. }
  161. return data, nil
  162. }
  163. // 基于指定项目和供应组获取开口包装
  164. func (t *Prod_packorder) GetOpenOnesBySupplyGroup(projnr string, sgid string) (datalst []Prod_packorder, err error) {
  165. var (
  166. i int
  167. pakordict map[string]string
  168. ok bool
  169. pakord Prod_packorder
  170. vdatalst []VProdPackorder
  171. )
  172. e := G_DbEngine
  173. datalst = []Prod_packorder{}
  174. query := e.Table("prod_packorder")
  175. query = query.Join("INNER", "prod_packorder_itemlst", "prod_packorder.finr = prod_packorder_itemlst.finr and prod_packorder.packorderid = prod_packorder_itemlst.packorderid")
  176. query = query.Where("prod_packorder.finr = ? and prod_packorder.projnr = ? and prod_packorder.status < ? and prod_packorder_itemlst.supplygroupid = ?", G_FINR, projnr, common.PKO_STATUS_RELEASED, sgid )
  177. query = query.OrderBy("prod_packorder.packorderid")
  178. // 查询
  179. if err = query.Find(&vdatalst); err != nil {
  180. return
  181. }
  182. pakordict = make( map[string]string )
  183. for i = 0; i < len(vdatalst); i++ {
  184. vdatalst[i].Prod_packorder.Clipped()
  185. vdatalst[i].Prod_packorder_itemlst.Clipped()
  186. if _, ok = pakordict[vdatalst[i].Prod_packorder.Packorderid]; !ok {
  187. pakordict[vdatalst[i].Prod_packorder.Packorderid] = vdatalst[i].Prod_packorder.Packorderid
  188. // 查询包装单
  189. pakord = Prod_packorder{Packorderid: vdatalst[i].Prod_packorder.Packorderid}
  190. if pakord, err = pakord.SelectOne(); err != nil {
  191. return
  192. }
  193. datalst = append(datalst, pakord)
  194. }
  195. }
  196. return
  197. }
  198. // 基于指定项目、oemseq和供应组获取包装
  199. func (t *Prod_packorder) GetByOemSeqSupplyGroup(projnr string, oemseq int, sgid string) (datalst []Prod_packorder, err error) {
  200. var (
  201. i int
  202. pakordict map[string]string
  203. ok bool
  204. pakord Prod_packorder
  205. vdatalst []VProdPackorder
  206. )
  207. e := G_DbEngine
  208. datalst = []Prod_packorder{}
  209. query := e.Table("prod_packorder")
  210. query = query.Join("INNER", "prod_packorder_itemlst", "prod_packorder.finr = prod_packorder_itemlst.finr and prod_packorder.packorderid = prod_packorder_itemlst.packorderid")
  211. query = query.Where("prod_packorder.finr = ? and prod_packorder.projnr = ? and prod_packorder_itemlst.oemseq = ? and prod_packorder_itemlst.supplygroupid = ?", G_FINR, projnr, oemseq, sgid )
  212. // 查询
  213. if err = query.Find(&vdatalst); err != nil {
  214. return
  215. }
  216. pakordict = make( map[string]string )
  217. for i = 0; i < len(vdatalst); i++ {
  218. vdatalst[i].Prod_packorder.Clipped()
  219. vdatalst[i].Prod_packorder_itemlst.Clipped()
  220. if _, ok = pakordict[vdatalst[i].Prod_packorder.Packorderid]; !ok {
  221. fmt.Println(" 基于OEMSEQ获取包装单:",vdatalst[i].Prod_packorder.Packorderid)
  222. pakordict[vdatalst[i].Prod_packorder.Packorderid] = vdatalst[i].Prod_packorder.Packorderid
  223. // 查询包装单
  224. pakord = Prod_packorder{Packorderid: vdatalst[i].Prod_packorder.Packorderid}
  225. if pakord, err = pakord.SelectOne(); err != nil {
  226. return
  227. }
  228. datalst = append(datalst, pakord)
  229. }
  230. }
  231. return
  232. }
  233. // 基于指定项目、schedseq 获取包装
  234. func (t *Prod_packorder) GetByCheckSeq(session *xorm.Session, projnr string, schedseq int ) (datalst []Prod_packorder, err error) {
  235. var (
  236. i int
  237. pakordict map[string]string
  238. ok bool
  239. pakord Prod_packorder
  240. vdatalst []VProdPackorder
  241. )
  242. datalst = []Prod_packorder{}
  243. query := session.Table("prod_packorder")
  244. query = query.Join("INNER", "prod_packorder_itemlst", "prod_packorder.finr = prod_packorder_itemlst.finr and prod_packorder.packorderid = prod_packorder_itemlst.packorderid")
  245. query = query.Where("prod_packorder.finr = ? and prod_packorder.projnr = ? and prod_packorder_itemlst.seq = ?", G_FINR, projnr, schedseq )
  246. // 查询
  247. if err = query.Find(&vdatalst); err != nil {
  248. return
  249. }
  250. pakordict = make( map[string]string )
  251. for i = 0; i < len(vdatalst); i++ {
  252. vdatalst[i].Prod_packorder.Clipped()
  253. vdatalst[i].Prod_packorder_itemlst.Clipped()
  254. if _, ok = pakordict[vdatalst[i].Prod_packorder.Packorderid]; !ok {
  255. pakordict[vdatalst[i].Prod_packorder.Packorderid] = vdatalst[i].Prod_packorder.Packorderid
  256. // 查询包装单
  257. pakord = Prod_packorder{Packorderid: vdatalst[i].Prod_packorder.Packorderid}
  258. if pakord, err = pakord.SelectOneBySession(session); err != nil {
  259. return
  260. }
  261. datalst = append(datalst, pakord)
  262. }
  263. }
  264. return
  265. }
  266. // 获取项目未装车的包装订单,status >= 26, loadstatus = 0
  267. func (t *Prod_packorder) GetUnloadedPackOrders(projnr string) (datalst []Prod_packorder, err error) {
  268. var i, j int
  269. e := G_DbEngine
  270. if err = e.Where("finr = ? and projnr = ? and status >= ? and loadstatus = ?",
  271. G_FINR, projnr, common.PKO_STATUS_PLANNED, common.PKO_STATUS_UNLOADED).OrderBy("packorderid").Find(&datalst); err != nil {
  272. return
  273. }
  274. // 获取值列表
  275. for i = 0; i < len(datalst); i++ {
  276. datalst[i].Clipped()
  277. if err = e.Where("finr = ? and packorderid = ? ",
  278. G_FINR, datalst[i].Packorderid).OrderBy("pos").Find(&datalst[i].Itemlst); err != nil {
  279. return
  280. }
  281. for j, _ = range datalst[i].Itemlst {
  282. datalst[i].Itemlst[j].Clipped()
  283. }
  284. }
  285. return
  286. }
  287. // 基于syncid数组获取相关包装单
  288. func (t *Prod_packorder) GetListBySyncidList(session *xorm.Session, projnr string, syncidlst []string) (datalst []Prod_packorder, err error) {
  289. var i, j int
  290. if err = session.Where("finr = ? and projnr = ?",G_FINR, projnr).In("syncsn", syncidlst).OrderBy("packorderid").Find(&datalst); err != nil {
  291. return
  292. }
  293. // 获取值列表
  294. for i = 0; i < len(datalst); i++ {
  295. datalst[i].Clipped()
  296. if err = session.Where("finr = ? and packorderid = ? ",
  297. G_FINR, datalst[i].Packorderid).OrderBy("pos").Find(&datalst[i].Itemlst); err != nil {
  298. return
  299. }
  300. for j, _ = range datalst[i].Itemlst {
  301. datalst[i].Itemlst[j].Clipped()
  302. }
  303. }
  304. return
  305. }