result.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package result
  2. import (
  3. "lims_adapter/dao"
  4. "dashoo.cn/common_definition/admin/result_def"
  5. "dashoo.cn/micro_libary/request"
  6. )
  7. type Service struct {
  8. ConsequentDao *dao.ConsequentDao
  9. ConsequentDetailDao *dao.ConsequentDetailDao
  10. Tenant string
  11. }
  12. // NewSrv 服务初始化
  13. func NewSrv(tenant string) Service {
  14. return Service{ConsequentDao: dao.NewConsequentDao(tenant), ConsequentDetailDao: dao.NewConsequentDetailDao(tenant), Tenant: tenant}
  15. }
  16. func (s Service) BatchInsertPapers(insertList []result_def.BatchInsertPapersReq, userInfo request.UserInfo) (int, int, []interface{}, error) {
  17. failCount := 0
  18. failList := []interface{}{}
  19. successCount := 0
  20. for _, p := range insertList {
  21. p.Detail.CreatedBy = userInfo.RealName
  22. p.Detail.CreatedById = int(userInfo.Id)
  23. p.Detail.UpdatedBy = userInfo.RealName
  24. p.Detail.UpdatedById = int(userInfo.Id)
  25. p.Entity.CreatedBy = userInfo.RealName
  26. // 由于使用string接收,应该对时间字符串校验,无法解析直接nil
  27. if *p.Entity.PublishTime == "" {
  28. p.Entity.PublishTime = nil
  29. }
  30. // FIXME 防止重复插入论文
  31. InsertId, err := s.ConsequentDao.M.InsertAndGetId(p.Entity)
  32. if err == nil {
  33. p.Detail.ConsequentId = int(InsertId)
  34. _, err = s.ConsequentDetailDao.M.Insert(p.Detail)
  35. // 如果Detail插入失败则删除成果
  36. if err != nil {
  37. s.ConsequentDao.Where("id=?", InsertId).Delete()
  38. failCount += 1
  39. failList = append(failList, map[string]string{
  40. "title": p.Detail.PaperTopic,
  41. "error": "",
  42. })
  43. } else {
  44. successCount += 1
  45. }
  46. } else {
  47. failCount += 1
  48. failList = append(failList, map[string]string{
  49. "title": p.Detail.PaperTopic,
  50. "error": "",
  51. })
  52. }
  53. }
  54. return failCount, successCount, failList, nil
  55. }