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.

261 lines
7.1 KiB

3 years ago
3 years ago
  1. package models
  2. import (
  3. "LAPP_SJA_ME/db"
  4. "LAPP_SJA_ME/utils"
  5. "errors"
  6. "github.com/tealeg/xlsx"
  7. "xorm.io/core"
  8. )
  9. //零件主数据
  10. type MePart struct {
  11. Finr int `xorm:"pk comment('工厂号') int(0)" json:"me_part-finr"`
  12. Partid string `xorm:"pk comment('零件Id') VARCHAR(40)" json:"me_part-partid"`
  13. Projnr string `xorm:"pk comment('项目Id') VARCHAR(40)" json:"me_part-projnr"`
  14. Custpartid string `xorm:"comment('客户零件号') VARCHAR(30)" json:"me_part-custpartid"`
  15. Intpartid string `xorm:"comment('内部零件号') VARCHAR(30)" json:"me_part-intpartid"`
  16. Oripartid string `xorm:"comment('原零件号') VARCHAR(30)" json:"me_part-oripartid"`
  17. Ai string `xorm:"comment('零件版本号') VARCHAR(30)" json:"me_part-ai"`
  18. Status string `xorm:"comment('状态') VARCHAR(30)" json:"me_part-status"`
  19. Descr1 string `xorm:"comment('描述1(英文)') VARCHAR(60)" json:"me_part-descr1"`
  20. Descr2 string `xorm:"comment('描述2(中文)') VARCHAR(60)" json:"me_part-descr2"`
  21. Uom string `xorm:"comment('文本') VARCHAR(30)" json:"me_part-uom"`
  22. Lastmodif string `xorm:"comment('最近一次更改时间') VARCHAR(14)" json:"me_part-lastmodif"`
  23. Lastuser string `xorm:"comment('最近一次更改人') VARCHAR(14)" json:"me_part-lastuser"`
  24. Credatuz string `xorm:"comment('创建时间') VARCHAR(20)" json:"me_part-credatuz"`
  25. }
  26. func (t *MePart) TableName() string {
  27. return "me_part"
  28. }
  29. // 清除string字段的右侧空格
  30. func (t *MePart) Clipped() {
  31. utils.TrimStruct(t, *t)
  32. }
  33. //增
  34. func (t *MePart) Add() error {
  35. e := db.Eloquent.Master()
  36. countrole := new(MePart)
  37. affw, err := e.Table("me_part").ID(core.PK{t.Finr, t.Partid, t.Projnr}).Count(countrole)
  38. if err != nil {
  39. return err
  40. }
  41. if affw > 0 {
  42. return errors.New("数据已经存在!")
  43. }
  44. _, err = e.Table("me_part").Insert(t)
  45. if err != nil {
  46. return err
  47. }
  48. return nil
  49. }
  50. //删
  51. func (t *MePart) Del() bool {
  52. e := db.Eloquent.Master()
  53. _, err := e.ID(core.PK{t.Finr, t.Partid, t.Projnr}).Delete(&MePart{})
  54. if err != nil {
  55. return false
  56. }
  57. return true
  58. }
  59. //改
  60. func (t *MePart) Update() bool {
  61. e := db.Eloquent.Master()
  62. _, err := e.ID(core.PK{t.Finr, t.Partid, t.Projnr}).Update(t)
  63. if err != nil {
  64. return false
  65. }
  66. return true
  67. }
  68. //查
  69. func (t *MePart) SelectOne() (MePart, error) {
  70. e := db.Eloquent.Master()
  71. var data MePart
  72. _, err := e.ID(core.PK{t.Finr, t.Partid, t.Projnr}).Get(&data)
  73. if err != nil {
  74. return data, err
  75. }
  76. return data, nil
  77. }
  78. //分页
  79. func (t *MePart) GetPage(pageSize int, pageIndex int) ([]MePart, int, error) {
  80. data := make([]MePart, 0)
  81. e := db.Eloquent.Master()
  82. table := e.Table("me_part").Where("finr = ? ", t.Finr)
  83. where := "where finr = " + "'" + utils.ValueToString(t.Finr, "") + "'"
  84. if t.Partid != "" {
  85. table = table.And("partid = ?", t.Partid)
  86. where += " and partid = " + "'" + utils.ValueToString(t.Partid, "") + "'"
  87. }
  88. if t.Projnr != "" {
  89. table = table.And("projnr = ?", t.Projnr)
  90. where += " and projnr = " + "'" + utils.ValueToString(t.Projnr, "") + "'"
  91. }
  92. if t.Custpartid != "" {
  93. table = table.And("custpartid = ?", t.Custpartid)
  94. where += " and custpartid = " + "'" + utils.ValueToString(t.Custpartid, "") + "'"
  95. }
  96. Offset := (pageIndex - 1) * pageSize
  97. err := e.SQL("SELECT TOP " + utils.ValueToString(pageSize, "") + " me_part.* FROM me_part " + where + " AND (convert(varchar(10),finr)+convert(varchar(40),partid)+convert(varchar(40),projnr) NOT IN (SELECT TOP " + utils.ValueToString(Offset, "") + " convert(varchar(10),finr)+convert(varchar(40),partid)+convert(varchar(40),projnr) FROM me_part " + where + " ORDER BY credatuz DESC)) ORDER BY credatuz DESC").Find(&data)
  98. pcount := new(MePart)
  99. count, err := table.Count(pcount)
  100. if err != nil {
  101. return nil, 0, err
  102. }
  103. for k, _ := range data {
  104. data[k].Clipped()
  105. }
  106. return data, int(count), nil
  107. }
  108. //查
  109. func (t *MePart) SelectAll() ([]MePart, error) {
  110. e := db.Eloquent.Master()
  111. var data []MePart
  112. err := e.Where("finr = ? and projnr", t.Finr, t.Projnr).Find(&data)
  113. if err != nil {
  114. return data, err
  115. }
  116. for k, _ := range data {
  117. data[k].Clipped()
  118. }
  119. return data, nil
  120. }
  121. //导出报表
  122. func (t *MePart) ReadData() (string, string, error) {
  123. datalist := make([]MePart, 0)
  124. e := db.Eloquent.Master()
  125. table := e.Table("me_part").Where("finr = ? ", t.Finr)
  126. if t.Partid != "" {
  127. table = table.And("partid = ?", t.Partid)
  128. }
  129. if t.Projnr != "" {
  130. table = table.And("projnr = ?", t.Projnr)
  131. }
  132. if t.Custpartid != "" {
  133. table = table.And("custpartid = ?", t.Custpartid)
  134. }
  135. err := table.Find(&datalist)
  136. if err != nil {
  137. return "", "", err
  138. }
  139. for k, _ := range datalist {
  140. datalist[k].Clipped()
  141. }
  142. var file *xlsx.File
  143. var sheet *xlsx.Sheet
  144. var row *xlsx.Row
  145. var cell *xlsx.Cell
  146. file = xlsx.NewFile()
  147. sheet, err = file.AddSheet("Sheet1")
  148. if err != nil {
  149. return "", "", err
  150. }
  151. tableHead := true
  152. for _, val := range datalist {
  153. if tableHead {
  154. //添加表头
  155. row = sheet.AddRow()
  156. //零件Id
  157. cell = row.AddCell()
  158. cell.Value = "零件Id"
  159. //项目号
  160. cell = row.AddCell()
  161. cell.Value = "项目号"
  162. //描述1(英文)
  163. cell = row.AddCell()
  164. cell.Value = "描述1(英文)"
  165. //描述2(中文)
  166. cell = row.AddCell()
  167. cell.Value = "描述2(中文)"
  168. //状态
  169. cell = row.AddCell()
  170. cell.Value = "状态"
  171. //客户零件号
  172. cell = row.AddCell()
  173. cell.Value = "客户零件号"
  174. //内部零件号
  175. cell = row.AddCell()
  176. cell.Value = "内部零件号"
  177. //原零件号
  178. cell = row.AddCell()
  179. cell.Value = "原零件号"
  180. //文本
  181. cell = row.AddCell()
  182. cell.Value = "文本"
  183. //修改人
  184. cell = row.AddCell()
  185. cell.Value = "修改人"
  186. //更改时间
  187. cell = row.AddCell()
  188. cell.Value = "更改时间"
  189. //创建时间
  190. cell = row.AddCell()
  191. cell.Value = "创建时间"
  192. tableHead = false
  193. }
  194. row = sheet.AddRow()
  195. //零件Id
  196. cell = row.AddCell()
  197. cell.Value = utils.ValueToString(val.Partid, "")
  198. //项目号
  199. cell = row.AddCell()
  200. cell.Value = utils.ValueToString(val.Projnr, "")
  201. //描述1(英文)
  202. cell = row.AddCell()
  203. cell.Value = utils.ValueToString(val.Descr1, "")
  204. //描述2(中文)
  205. cell = row.AddCell()
  206. cell.Value = utils.ValueToString(val.Descr2, "")
  207. //状态
  208. cell = row.AddCell()
  209. cell.Value = utils.ValueToString(val.Status, "")
  210. //客户零件号
  211. cell = row.AddCell()
  212. cell.Value = utils.ValueToString(val.Custpartid, "")
  213. //内部零件号
  214. cell = row.AddCell()
  215. cell.Value = utils.ValueToString(val.Intpartid, "")
  216. //原零件号
  217. cell = row.AddCell()
  218. cell.Value = utils.ValueToString(val.Oripartid, "")
  219. //文本
  220. cell = row.AddCell()
  221. cell.Value = utils.ValueToString(val.Ai, "")
  222. //修改人
  223. cell = row.AddCell()
  224. cell.Value = utils.ValueToString(val.Lastuser, "")
  225. //更改时间
  226. cell = row.AddCell()
  227. cell.Value = utils.ValueToString(val.Lastmodif, "")
  228. //创建时间
  229. cell = row.AddCell()
  230. cell.Value = utils.ValueToString(val.Credatuz, "")
  231. }
  232. name := utils.MakeOrderSn("零件主数据")
  233. filename := name + ".xlsx" //文件名
  234. exceldir,_ := utils.GetCurrentPath("web/public/uploadxlsx") // 目录+文件名
  235. excelfile := exceldir + "/" + filename
  236. err = file.Save(excelfile)
  237. if err != nil {
  238. return "", "", err
  239. }
  240. return excelfile, filename, nil
  241. }