SJA工艺
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.

298 lines
10 KiB

3 years ago
  1. package models
  2. import (
  3. "LAPP_SJA_ME/db"
  4. "LAPP_SJA_ME/utils"
  5. "xorm.io/core"
  6. "errors"
  7. )
  8. //零件供应组
  9. type MeSupplyGroup struct {
  10. Finr int `xorm:"pk comment('工厂号') int(0)" json:"me_supplygroup-finr"`
  11. Supplygroupid string `xorm:"pk comment('供应组Id') VARCHAR(20)" json:"me_supplygroup-supplygroupid"`
  12. Descr string `xorm:"comment('描述') VARCHAR(40)" json:"me_supplygroup-descr"`
  13. Sgtype string `xorm:"comment('供应组类型') VARCHAR(20)" json:"me_supplygroup-sgtype"`
  14. Shippablesg int `xorm:"comment('用于包装发运') int(0)" json:"me_supplygroup-shippablesg"`
  15. Multioutput int `xorm:"comment('生成多个WD') int(0)" json:"me_supplygroup-multioutput"`
  16. Modfactor int `xorm:"comment('除余因子') int(0)" json:"me_supplygroup-modfactor"`
  17. Fsupplygroupid string `xorm:"comment('父零件族Id') VARCHAR(20)" json:"me_supplygroup-fsupplygroupid"`
  18. Partfamilyid string `xorm:"comment('零件族Id') VARCHAR(20)" json:"me_supplygroup-partfamilyid"`
  19. Worklineid string `xorm:"comment('生产线ID') Int" json:"me_supplygroup-worklineid"`
  20. SgCust1 string `xorm:"comment('生产提前期/秒') VARCHAR(40)" json:"me_supplygroup-sg_cust1"`
  21. SgCust2 string `xorm:"comment('供应组特性2') VARCHAR(40)" json:"me_supplygroup-sg_cust2"`
  22. SgCust3 string `xorm:"comment('供应组特性3') VARCHAR(40)" json:"me_supplygroup-sg_cust3"`
  23. SgCust4 string `xorm:"comment('供应组特性4') VARCHAR(40)" json:"me_supplygroup-sg_cust4"`
  24. Lastmodif string `xorm:"comment('最近一次更改时间') VARCHAR(14)" json:"me_supplygroup-lastmodif"`
  25. Lastuser string `xorm:"comment('最近一次更改人') VARCHAR(20)" json:"me_supplygroup-lastuser"`
  26. Credatuz string `xorm:"comment('创建时间') VARCHAR(14)" json:"me_supplygroup-credatuz"`
  27. Valst []MeAttribute `json:"valst" xorm:"-"`
  28. UnValst []MeAttribute `json:"unvalst" xorm:"-"`
  29. FValst []MeSupplyGroup `json:"f_valst" xorm:"-"`
  30. FUnvalst []MeSupplyGroup `json:"f_unvalst" xorm:"-"`
  31. Assignqty int `json:"assignqty" xorm:"-"`
  32. Assignfactor1 string `json:"assignfactor1" xorm:"-"`
  33. Assignfactor2 string `json:"assignfactor2" xorm:"-"`
  34. }
  35. func (t *MeSupplyGroup) TableName() string {
  36. return "me_supplygroup"
  37. }
  38. // 清除string字段的右侧空格
  39. func (t *MeSupplyGroup) Clipped() {
  40. utils.TrimStruct(t, *t)
  41. }
  42. //增
  43. func (t *MeSupplyGroup) Add() error {
  44. e := db.Eloquent.Master()
  45. countrole := new(MeSupplyGroup)
  46. affw, err := e.Table("me_supplygroup").ID(core.PK{t.Finr, t.Supplygroupid}).Count(countrole)
  47. if err != nil {
  48. return err
  49. }
  50. if affw > 0 {
  51. return errors.New("数据已经存在!")
  52. }
  53. _, err = e.Table("me_supplygroup").Insert(t)
  54. if err != nil {
  55. return err
  56. }
  57. //批量插入
  58. alldata := make([]MeSupplyGroupAtcodlst, 0)
  59. for _, v := range t.Valst {
  60. onedata := MeSupplyGroupAtcodlst{}
  61. onedata.Finr = t.Finr
  62. onedata.Supplygroupid = t.Supplygroupid
  63. onedata.Attrvalue1 = v.Attrvalue1
  64. onedata.Attrvalue2 = v.Attrvalue2
  65. onedata.Attrcode = v.Attrcode
  66. onedata.Mandatory = v.Mandatory
  67. onedata.Verifyrule = v.Verifyrule
  68. onedata.Credatuz = t.Credatuz
  69. onedata.Lastuser = t.Lastuser
  70. onedata.Lastmodif = t.Lastmodif
  71. alldata = append(alldata, onedata)
  72. }
  73. _, err = e.Table("me_supplygroup_atcodlst").Insert(&alldata)
  74. //判断是否是父供应组
  75. if t.Sgtype == "F" {
  76. //批量插入
  77. fdata := make([]MeSupplyGroupAssignment, 0)
  78. for k, v := range t.FValst {
  79. onedata := MeSupplyGroupAssignment{}
  80. onedata.Finr = t.Finr
  81. onedata.Supplygroupid = v.Supplygroupid
  82. onedata.Fsupplygroupid = t.Supplygroupid
  83. onedata.Pos = k + 1
  84. onedata.Assignfactor1 = v.Assignfactor1
  85. onedata.Assignfactor2 = v.Assignfactor2
  86. onedata.Credatuz = t.Credatuz
  87. onedata.Lastuser = t.Lastuser
  88. onedata.Lastmodif = t.Lastmodif
  89. fdata = append(fdata, onedata)
  90. }
  91. _, err = e.Table("me_supplygroup_assignment").Insert(&fdata)
  92. if err != nil {
  93. return err
  94. }
  95. }
  96. if err != nil {
  97. return err
  98. }
  99. return nil
  100. }
  101. //删
  102. func (t *MeSupplyGroup) Del() bool {
  103. e := db.Eloquent.Master()
  104. _, err := e.Table("me_supplygroup").Where("finr = ? and supplygroupid = ?", t.Finr, t.Supplygroupid).Delete(&MeSupplyGroup{})
  105. if err != nil {
  106. return false
  107. }
  108. countrole := new(MeSupplyGroupAtcodlst)
  109. affw, _ := e.Table("me_supplygroup_atcodlst").Where("finr = ? and supplygroupid = ?", t.Finr, t.Supplygroupid).Count(countrole)
  110. if affw > 0 {
  111. _, err = e.Table("me_supplygroup_atcodlst").Where("finr = ? and supplygroupid = ?", t.Finr, t.Supplygroupid).Delete(&MeSupplyGroupAtcodlst{})
  112. if err != nil {
  113. return false
  114. }
  115. }
  116. return true
  117. }
  118. //改
  119. func (t *MeSupplyGroup) Update() bool {
  120. e := db.Eloquent.Master()
  121. _, err := e.ID(core.PK{t.Finr, t.Supplygroupid}).Update(t)
  122. if err != nil {
  123. return false
  124. }
  125. //批量删除
  126. _, err = e.Table("me_supplygroup_atcodlst").Where("finr = ? and supplygroupid = ?", t.Finr, t.Supplygroupid).Delete(&MeSupplyGroupAtcodlst{})
  127. if err != nil {
  128. return false
  129. }
  130. //批量插入
  131. alldata := make([]MeSupplyGroupAtcodlst, 0)
  132. for _, v := range t.Valst {
  133. onedata := MeSupplyGroupAtcodlst{}
  134. onedata.Finr = t.Finr
  135. onedata.Supplygroupid = t.Supplygroupid
  136. onedata.Attrvalue1 = v.Attrvalue1
  137. onedata.Attrvalue2 = v.Attrvalue2
  138. onedata.Attrcode = v.Attrcode
  139. onedata.Mandatory = v.Mandatory
  140. onedata.Verifyrule = v.Verifyrule
  141. onedata.Credatuz = t.Credatuz
  142. onedata.Lastuser = t.Lastuser
  143. onedata.Lastmodif = t.Lastmodif
  144. alldata = append(alldata, onedata)
  145. }
  146. _, err = e.Table("me_supplygroup_atcodlst").Insert(&alldata)
  147. if err != nil {
  148. return false
  149. }
  150. //判断是否是父供应组
  151. if t.Sgtype == "F" {
  152. //批量删除
  153. _, err = e.Table("me_supplygroup_assignment").Where("finr = ? and fsupplygroupid = ?", t.Finr, t.Supplygroupid).Delete(&MeSupplyGroupAssignment{})
  154. if err != nil {
  155. return false
  156. }
  157. //批量插入
  158. fdata := make([]MeSupplyGroupAssignment, 0)
  159. for k, v := range t.FValst {
  160. onedata := MeSupplyGroupAssignment{}
  161. onedata.Finr = t.Finr
  162. onedata.Supplygroupid = v.Supplygroupid
  163. onedata.Fsupplygroupid = t.Supplygroupid
  164. onedata.Pos = k + 1
  165. onedata.Assignfactor1 = v.Assignfactor1
  166. onedata.Assignfactor2 = v.Assignfactor2
  167. onedata.Credatuz = t.Credatuz
  168. onedata.Lastuser = t.Lastuser
  169. onedata.Lastmodif = t.Lastmodif
  170. fdata = append(fdata, onedata)
  171. }
  172. _, err = e.Table("me_supplygroup_assignment").Insert(&fdata)
  173. if err != nil {
  174. return false
  175. }
  176. }
  177. return true
  178. }
  179. type MesupplygroupAttribute struct {
  180. MeAttribute `xorm:"extends"`
  181. MeSupplyGroupAtcodlst `xorm:"extends"`
  182. }
  183. type MesupplygroupAssignment struct {
  184. MeSupplyGroup `xorm:"extends"`
  185. MeSupplyGroupAssignment `xorm:"extends"`
  186. }
  187. //查
  188. func (t *MeSupplyGroup) SelectOne() (MeSupplyGroup, error) {
  189. e := db.Eloquent.Master()
  190. var data MeSupplyGroup
  191. _, err := e.ID(core.PK{t.Finr, t.Supplygroupid}).Get(&data)
  192. if err != nil {
  193. return data, err
  194. }
  195. data.Clipped()
  196. var datalist []MeAttribute
  197. var alllist []MesupplygroupAttribute
  198. e.Table("me_attribute").Join("LEFT", "me_supplygroup_atcodlst", "me_supplygroup_atcodlst.attrcode = me_attribute.attrcode").Where("me_attribute.finr = ? and me_supplygroup_atcodlst.supplygroupid = ?", t.Finr, t.Supplygroupid).Find(&alllist)
  199. var attrcodes []int
  200. for _, v := range alllist {
  201. v.MeAttribute.Clipped()
  202. v.MeSupplyGroupAtcodlst.Clipped()
  203. one := MeAttribute{}
  204. one = v.MeAttribute
  205. one.Mandatory = v.MeSupplyGroupAtcodlst.Mandatory
  206. one.Attrvalue1 = v.MeSupplyGroupAtcodlst.Attrvalue1
  207. one.Attrvalue2 = v.MeSupplyGroupAtcodlst.Attrvalue2
  208. one.Verifyrule = v.MeSupplyGroupAtcodlst.Verifyrule
  209. datalist = append(datalist, one)
  210. attrcodes = append(attrcodes, v.MeAttribute.Attrcode)
  211. }
  212. data.Valst = datalist
  213. var me MeAttribute
  214. me.Finr = t.Finr
  215. UnValst, _ := me.SelectUnArr(attrcodes)
  216. for k, _ := range UnValst {
  217. UnValst[k].Clipped()
  218. }
  219. data.UnValst = UnValst
  220. //判断是否是父供应组
  221. if data.Sgtype == "F" {
  222. fdatalist := make([]MeSupplyGroup, 0)
  223. falllist := make([]MesupplygroupAssignment, 0)
  224. err := e.Table("me_supplygroup").Join("LEFT", "me_supplygroup_assignment", "me_supplygroup_assignment.supplygroupid = me_supplygroup.supplygroupid and me_supplygroup_assignment.finr = me_supplygroup.finr").Where("me_supplygroup.finr = ? and me_supplygroup_assignment.fsupplygroupid = ?", t.Finr, t.Supplygroupid).Find(&falllist)
  225. if err != nil {
  226. return data, err
  227. }
  228. for _, v := range falllist {
  229. v.MeSupplyGroup.Clipped()
  230. v.MeSupplyGroupAssignment.Clipped()
  231. one := MeSupplyGroup{}
  232. one = v.MeSupplyGroup
  233. fdatalist = append(fdatalist, one)
  234. }
  235. data.FValst = fdatalist
  236. UnValst, _ := t.SelectUnArr()
  237. data.FUnvalst = UnValst
  238. }
  239. return data, nil
  240. }
  241. func (t *MeSupplyGroup) SelectUnArr() (data []MeSupplyGroup, err error) {
  242. e := db.Eloquent.Master()
  243. var groupids []string
  244. datalist := make([]MeSupplyGroupAssignment, 0)
  245. err = e.Table("me_supplygroup_assignment").Where("finr = ?", t.Finr).Find(&datalist)
  246. if err != nil {
  247. return data, err
  248. }
  249. for _, v := range datalist {
  250. groupids = append(groupids, v.Supplygroupid)
  251. }
  252. err = e.Where("finr = ? and sgtype = ?", t.Finr, "C").NotIn("supplygroupid", groupids).Find(&data)
  253. if err != nil {
  254. return data, err
  255. }
  256. for k, _ := range data {
  257. data[k].Clipped()
  258. }
  259. return data, nil
  260. }
  261. //分页
  262. func (t *MeSupplyGroup) GetPage(pageSize int, pageIndex int) ([]MeSupplyGroup, int, error) {
  263. data := make([]MeSupplyGroup, 0)
  264. e := db.Eloquent.Master()
  265. table := e.Table("me_supplygroup").Where("finr = ? ", t.Finr)
  266. where := "where finr = " + "'" + utils.ValueToString(t.Finr, "") + "'"
  267. if t.Supplygroupid != "" {
  268. table = table.And("supplygroupid = ?", t.Supplygroupid)
  269. where += " and supplygroupid = " + "'" + utils.ValueToString(t.Supplygroupid, "") + "'"
  270. }
  271. Offset := (pageIndex - 1) * pageSize
  272. err := e.SQL("SELECT TOP " + utils.ValueToString(pageSize, "") + " me_supplygroup.* FROM me_supplygroup " + where + " AND (convert(varchar(10),finr)+convert(varchar(40),supplygroupid) NOT IN (SELECT TOP " + utils.ValueToString(Offset, "") + " convert(varchar(10),finr)+convert(varchar(40),supplygroupid) FROM me_supplygroup " + where + " ORDER BY credatuz DESC)) ORDER BY credatuz DESC").Find(&data)
  273. pcount := new(MeSupplyGroup)
  274. count, err := table.Count(pcount)
  275. if err != nil {
  276. return nil, 0, err
  277. }
  278. for k, _ := range data {
  279. data[k].Clipped()
  280. }
  281. return data, int(count), nil
  282. }