stock.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package service
  2. import (
  3. "github.com/360EntSecGroup-Skylar/excelize"
  4. "github.com/astaxie/beego/logs"
  5. "github.com/gin-gonic/gin"
  6. "kpt.xdmy/apiserver/model"
  7. "strings"
  8. "time"
  9. )
  10. func (s *Service) GetStockList(req *model.GetStockListReq) (*model.GetStockListResp, error) {
  11. resp := new(model.GetStockListResp)
  12. tx := s.d.DB.Table("stock")
  13. tx.Joins("JOIN pasture ON pasture.id = stock.pastureId")
  14. tx.Joins("JOIN department ON department.id = stock.departmentId")
  15. tx.Joins("JOIN equipment ON equipment.id = stock.eqId")
  16. tx.Joins(" left JOIN emp ON emp.id = stock.checkTaker")
  17. tx.Select("stock.id, stock.pastureId, stock.departmentId, stock.eqId, date_format(stock.rzdate ,'%Y-%m-%d') rzdate , stock.unit, " +
  18. "stock.specification, stock.quantity, stock.yuanzhi, stock.count, stock.profit, stock.tag, " +
  19. "date_format(stock.importdate ,'%Y-%m-%d %H:%i:%s') importdate, date_format(stock.inventorydate ,'%Y-%m-%d %H:%i:%s') inventorydate, stock.checktaker, stock.remark,pasture.name,department.name departmentName ," +
  20. "equipment.eqCode,equipment.eqName,equipment.assetCode,emp.empname empname")
  21. if req.PastureId != "" && req.PastureId != "18" {
  22. tx.Where(" stock.pastureId = ? ", req.PastureId)
  23. }
  24. if req.DepartmentId != "" {
  25. tx.Where(" stock.departmentId = ? ", req.DepartmentId)
  26. }
  27. if req.StartDate != "" {
  28. tx.Where(" stock.inventorydate between ? and ? ", req.StartDate, req.EndDate)
  29. }
  30. stockAndPastureList := make([]*model.StockAndPasture, 0)
  31. //tx.Limit(req.PageCount).Offset(req.Offset)
  32. err := tx.Debug().Order(" importdate desc,id asc ").Limit(req.Pagecount).Offset(req.Offset * 10).Find(&stockAndPastureList).Error
  33. if err != nil {
  34. logs.Error(err)
  35. return resp, err
  36. }
  37. tx1 := s.d.DB.Table("stock")
  38. tx1.Joins("JOIN pasture ON pasture.id = stock.pastureId")
  39. tx1.Joins("JOIN department ON department.id = stock.departmentId")
  40. tx1.Joins("JOIN equipment ON equipment.id = stock.eqId")
  41. tx1.Joins(" left JOIN emp ON emp.id = stock.checkTaker")
  42. tx1.Select("stock.id, stock.pastureId, stock.departmentId, stock.eqId, date_format(stock.rzdate ,'%Y-%m-%d') rzdate , stock.unit, " +
  43. "stock.specification, stock.quantity, stock.yuanzhi, stock.count, stock.profit, stock.tag, " +
  44. "date_format(stock.importdate ,'%Y-%m-%d %H:%i:%s') importdate, date_format(stock.inventorydate ,'%Y-%m-%d %H:%i:%s') inventorydate, stock.checktaker, stock.remark,pasture.name,department.name departmentName ," +
  45. "equipment.eqCode,equipment.eqName,equipment.assetCode,emp.empname empname")
  46. if req.PastureId != "" && req.PastureId != "18" {
  47. tx1.Where(" stock.pastureId = ? ", req.PastureId)
  48. }
  49. if req.DepartmentId != "" {
  50. tx1.Where(" stock.departmentId = ? ", req.DepartmentId)
  51. }
  52. if req.StartDate != "" {
  53. tx1.Where(" stock.inventorydate between ? and ? ", req.StartDate, req.EndDate)
  54. }
  55. var count int64
  56. err = tx1.Count(&count).Error
  57. if err != nil {
  58. logs.Error(err)
  59. return resp, err
  60. }
  61. stockList := make([]*model.StockInfo, 0)
  62. for _, item := range stockAndPastureList {
  63. s := new(model.StockInfo)
  64. s.ID = item.Stock.ID
  65. s.PastureId = item.Stock.PastureId
  66. s.PastureName = item.Pasture.Name
  67. s.DepartmentId = item.Stock.DepartmentId
  68. s.DepartmentName = item.DepartmentName
  69. s.EqId = item.EqId
  70. s.EqCode = item.EqCode
  71. s.EqName = item.EqName
  72. s.AssetCode = item.AssetCode
  73. s.RzDate = item.RzDate
  74. s.Unit = item.Stock.Unit
  75. s.Specification = item.Stock.Specification
  76. s.Quantity = item.Stock.Quantity
  77. s.Yuanzhi = item.Stock.Yuanzhi
  78. s.Count = item.Count
  79. s.Profit = item.Profit
  80. s.Tag = item.Tag
  81. s.ImportDate = item.ImportDate
  82. s.InventoryDate = item.InventoryDate
  83. s.CheckTaker = item.CheckTaker
  84. s.CheckTakerName = item.Empname
  85. s.Remark = item.Stock.Remark
  86. if item.CheckTaker != "" {
  87. s.Status = 1
  88. }
  89. stockList = append(stockList, s)
  90. }
  91. resp.StockList = stockList
  92. resp.Count = count
  93. return resp, nil
  94. }
  95. func (s *Service) StockExcel(c *gin.Context) map[string]interface{} {
  96. if err := c.Request.ParseForm(); err != nil {
  97. return nil
  98. }
  99. fileHeader, err := c.FormFile("file")
  100. file, err := fileHeader.Open()
  101. if err != nil {
  102. return nil
  103. }
  104. xlsx1, err := excelize.OpenReader(file)
  105. if err != nil {
  106. return nil
  107. }
  108. rows := xlsx1.GetRows("资产盘点模板")
  109. if len(rows) > 10000 {
  110. rows = rows[:10000]
  111. }
  112. paramslist := []string{"牧场", "部门", "资产编号", "资产名称", "设备内部编号", "实物入账日期", "计量单位", "规格",
  113. "资产数量", "资产原值", "实际盘点数", "盈亏量", "有无标签", "备注"}
  114. ok := 0
  115. error := 0
  116. queryData := make([]interface{}, 0)
  117. createdate := time.Now().Format("2006-01-02 15:04:05")
  118. for i, row := range rows {
  119. if i > 0 {
  120. //s_params := make([]interface{}, 0)
  121. //entry := make(map[string]string)
  122. outentry := make(map[string]string)
  123. for _, value := range paramslist {
  124. for j, colCell := range rows[0] {
  125. if strings.Trim(value, " ") == colCell {
  126. for k, colCell1 := range row {
  127. if j == k {
  128. outentry[colCell] = colCell1
  129. //entry[colCell] = colCell1
  130. //inputdata = inputdata + colCell + ":" + colCell1 + ";"
  131. }
  132. }
  133. }
  134. }
  135. }
  136. sw, err := time.Parse("2006-01-02", outentry["实物入账日期"])
  137. if err != nil {
  138. logs.Error(err)
  139. outentry["error_msg"] = err.Error()
  140. error++
  141. queryData = append(queryData, outentry)
  142. continue
  143. }
  144. pasture := new(model.Pasture)
  145. s.d.DB.Table("pasture").Where("name = ?", outentry["牧场"]).First(&pasture)
  146. if pasture.ID == 0 {
  147. outentry["error_msg"] = "牧场不存在!"
  148. error++
  149. queryData = append(queryData, outentry)
  150. continue
  151. }
  152. department := new(model.Department)
  153. s.d.DB.Table("department").Where("name = ?", outentry["部门"]).Where("pastureId = ? ", pasture.ID).First(&department)
  154. if department.ID == 0 {
  155. outentry["error_msg"] = "部门不存在!"
  156. error++
  157. queryData = append(queryData, outentry)
  158. continue
  159. }
  160. equipment := new(model.Equipment)
  161. s.d.DB.Table("equipment").Where("eqCode = ? ", outentry["设备内部编号"]).First(&equipment)
  162. if department.ID == 0 {
  163. outentry["error_msg"] = "资产不存在!"
  164. error++
  165. queryData = append(queryData, outentry)
  166. continue
  167. }
  168. //paramslist := []string{"牧场", "部门", "资产编号", "资产名称", "设备内部编号", "实物入账日期", "计量单位", "规格",
  169. // "资产数量", "资产原值", "实际盘点数", "盈亏量", "有无标签", "备注"}
  170. err = s.d.DB.Debug().Omit("inventorydate,checktaker").Create(&model.Stock{PastureId: pasture.ID,
  171. DepartmentId: department.ID,
  172. EqId: equipment.Id,
  173. RzDate: sw.Format("2006-01-02"),
  174. Unit: outentry["计量单位"],
  175. Specification: outentry["规格"],
  176. Quantity: outentry["资产数量"],
  177. Yuanzhi: outentry["资产原值"],
  178. Count: outentry["实际盘点数"],
  179. Profit: outentry["盈亏量"],
  180. Tag: outentry["有无标签"],
  181. ImportDate: createdate,
  182. Remark: outentry["备注"],
  183. CreateDate: time.Now().Format("2006-01-02")}).Error
  184. if err != nil {
  185. logs.Error(err)
  186. outentry["error_msg"] = err.Error()
  187. error++
  188. queryData = append(queryData, outentry)
  189. continue
  190. }
  191. }
  192. }
  193. data := make(map[string]interface{})
  194. data["result"] = queryData
  195. data["success"] = ok
  196. data["err_count"] = error
  197. return data
  198. }
  199. func (s *Service) DelStockList(idList []string) error {
  200. err := s.d.DB.Debug().Exec(`delete from stock where id in(?) `, idList).Error
  201. if err != nil {
  202. logs.Error(err)
  203. return err
  204. }
  205. return nil
  206. }