train_head_office.go 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. package train
  2. import (
  3. "context"
  4. projDao "dashoo.cn/micro/app/dao/train"
  5. model "dashoo.cn/micro/app/model/train"
  6. "dashoo.cn/micro/app/service"
  7. "dashoo.cn/opms_libary/myerrors"
  8. "database/sql"
  9. "github.com/gogf/gf/database/gdb"
  10. "github.com/gogf/gf/frame/g"
  11. "github.com/gogf/gf/os/gtime"
  12. )
  13. type trainHeadService struct {
  14. *service.ContextService
  15. Dao *projDao.TrainHeadOfficeDao
  16. FeedDao *projDao.TrainHeadOfficeFeedbackDao
  17. DetailDao *projDao.TrainHeadOfficeFeedbackDetailDao
  18. }
  19. func NewtrainHeadService(ctx context.Context) (svc *trainHeadService, err error) {
  20. svc = new(trainHeadService)
  21. if svc.ContextService, err = svc.Init(ctx); err != nil {
  22. return nil, err
  23. }
  24. svc.Dao = projDao.NewTrainHeadOfficeDao(svc.Tenant)
  25. svc.FeedDao = projDao.NewTrainHeadOfficeFeedbackDao(svc.Tenant)
  26. svc.DetailDao = projDao.NewTrainHeadOfficeFeedbackDetailDao(svc.Tenant)
  27. return svc, nil
  28. }
  29. func (s *trainHeadService) GetList(req *model.SearchTrainHeadReq) (total int, list []*model.SearchTrainHeadRes, err error) {
  30. db := s.Dao.Ctx(s.Ctx)
  31. if req.TrainTitle != "" {
  32. db = db.WhereLike(s.Dao.C.TrainTitle, "%"+req.TrainTitle+"%")
  33. }
  34. //if req.TrainStartDate != nil {
  35. // db = db.Where("train_date >=?", req.TrainStartDate)
  36. //}
  37. //if req.TrainEndDate != nil {
  38. // db = db.Where("train_date <=?", req.TrainEndDate)
  39. //}
  40. total, err = db.Count()
  41. if err != nil {
  42. return 0, nil, err
  43. }
  44. err = db.OrderDesc(s.Dao.C.CreatedTime).Page(req.GetPage()).Scan(&list)
  45. //if err != nil && err != sql.ErrNoRows {
  46. if err != nil {
  47. return 0, nil, err
  48. }
  49. return total, list, nil
  50. }
  51. func (s *trainHeadService) GetEntityById(id int64) (detail *model.TrainHeadDetail, err error) {
  52. err = s.Dao.WherePri(id).Scan(&detail)
  53. if err == sql.ErrNoRows {
  54. return nil, myerrors.TipsError("工单不存在")
  55. }
  56. if err != nil {
  57. return nil, err
  58. }
  59. saleList := make([]*model.Sale, 0)
  60. err = s.FeedDao.Where(s.FeedDao.C.TrainId, id).Scan(&saleList)
  61. if err != nil {
  62. return nil, err
  63. }
  64. feedBackDetailList := make([]*model.FeedbackDetail, 0)
  65. err = s.DetailDao.Ctx(s.Ctx).Where(s.DetailDao.C.MainId, id).Scan(&feedBackDetailList)
  66. if err != nil {
  67. return nil, err
  68. }
  69. detail.SaleList = saleList
  70. detail.DistributorList = feedBackDetailList
  71. return detail, nil
  72. }
  73. func (s *trainHeadService) GetDetailById(id int64) (detail *model.TrainHeadDetailForFeedBack, err error) {
  74. err = s.Dao.WherePri(id).Scan(&detail)
  75. if err == sql.ErrNoRows {
  76. return nil, myerrors.TipsError("工单不存在")
  77. }
  78. if err != nil {
  79. return nil, err
  80. }
  81. disList := make([]*model.FeedbackDetail, 0)
  82. err = s.DetailDao.Ctx(s.Ctx).Where(s.DetailDao.C.MainId, id).Where(s.DetailDao.C.SaleId, s.GetCxtUserId()).Scan(&disList)
  83. if err != nil {
  84. return nil, err
  85. }
  86. detail.DistributorList = disList
  87. return detail, nil
  88. }
  89. func (s *trainHeadService) Create(req *model.CreateTrainHead) (err error) {
  90. ent := model.TrainHeadOffice{
  91. Id: 0,
  92. TrainTitle: req.TrainTitle,
  93. TrainDate: req.TrainDate,
  94. TrainConcreteStartTime: req.TrainConcreteStartTime,
  95. TrainConcreteEndTime: req.TrainConcreteEndTime,
  96. CreatedBy: s.GetCxtUserId(),
  97. CreatedName: s.GetCxtUserName(),
  98. CreatedTime: gtime.Now(),
  99. }
  100. //service.SetCreatedInfo(ent, s.GetCxtUserId(), s.GetCxtUserName())
  101. e := s.Dao.Transaction(s.Ctx, func(ctx context.Context, tx *gdb.TX) error {
  102. id, err := s.Dao.TX(tx).InsertAndGetId(ent)
  103. if err != nil {
  104. return myerrors.TipsError("提取方案创建失败,请联系管理员")
  105. }
  106. createSaleList := make([]*model.TrainHeadOfficeFeedback, 0)
  107. DetailList := make([]*model.TrainHeadOfficeFeedbackDetail, 0)
  108. for _, sale := range req.SaleList {
  109. createSale := model.TrainHeadOfficeFeedback{
  110. TrainId: int(id),
  111. SaleId: sale.SaleId,
  112. SaleName: sale.SaleName,
  113. CreatedBy: s.GetCxtUserId(),
  114. CreatedName: s.GetCxtUserName(),
  115. CreatedTime: gtime.Now(),
  116. }
  117. createSaleList = append(createSaleList, &createSale)
  118. }
  119. for _, distributor := range req.DistributorList {
  120. detail := model.TrainHeadOfficeFeedbackDetail{
  121. MainId: int(id),
  122. SaleId: distributor.SaleId,
  123. SaleName: distributor.SaleName,
  124. DistributorId: distributor.DistributorId,
  125. DistributorName: distributor.DistributorName,
  126. CreatedBy: s.GetCxtUserId(),
  127. CreatedName: s.GetCxtUserName(),
  128. CreatedTime: gtime.Now(),
  129. }
  130. DetailList = append(DetailList, &detail)
  131. }
  132. _, err = s.FeedDao.Ctx(s.Ctx).InsertAndGetId(createSaleList)
  133. if err != nil {
  134. return myerrors.TipsError("提取方案创建失败,请联系管理员")
  135. }
  136. _, err = s.DetailDao.Ctx(s.Ctx).InsertAndGetId(DetailList)
  137. if err != nil {
  138. return myerrors.TipsError("提取方案创建失败,请联系管理员")
  139. }
  140. return nil
  141. })
  142. return e
  143. }
  144. // func (s *trainHeadService) UpdateById(req *model.UpdateTrainHead) error {
  145. //
  146. // ent := model.TrainHeadOffice{}
  147. // err := s.Dao.WherePri(req.Id).Scan(&ent)
  148. // if err == sql.ErrNoRows {
  149. // return myerrors.TipsError("该培训工单不存在")
  150. // }
  151. // if err != nil {
  152. // return err
  153. // }
  154. //
  155. // updateMap := g.Map{
  156. // s.Dao.C.TrainTitle: req.TrainTitle,
  157. // s.Dao.C.TrainDate: req.TrainDate,
  158. // s.Dao.C.TrainConcreteStartTime: req.TrainConcreteStartTime,
  159. // s.Dao.C.TrainConcreteEndTime: req.TrainConcreteEndTime,
  160. // s.Dao.C.UpdatedBy: s.GetCxtUserId(),
  161. // s.Dao.C.UpdatedName: s.GetCxtUserName(),
  162. // s.Dao.C.UpdatedTime: gtime.Now(),
  163. // }
  164. // e := s.Dao.Transaction(s.Ctx, func(ctx context.Context, tx *gdb.TX) error {
  165. // _, err = s.Dao.Ctx(ctx).TX(tx).Data(updateMap).WherePri(req.Id).FieldsEx(service.UpdateFieldEx...).Update()
  166. // if err != nil {
  167. // return myerrors.TipsError("修改培训工单失败")
  168. // }
  169. // for _, feedBack := range req.FeedbackList {
  170. // switch feedBack.Operate {
  171. // case "10":
  172. // TrainHeadSetting := model.TrainHeadOfficeFeedback{
  173. // TrainId: int(req.Id),
  174. // SaleId: feedBack.Sale.SaleId,
  175. // SaleName: feedBack.Sale.SaleName,
  176. // CreatedBy: s.GetCxtUserId(),
  177. // CreatedName: s.GetCxtUserName(),
  178. // CreatedTime: gtime.Now(),
  179. // }
  180. // //service.SetCreatedInfo(TrainHeadSetting, s.GetCxtUserId(), s.GetCxtUserName())
  181. // DetailList := make([]*model.TrainHeadOfficeFeedbackDetail, 0)
  182. // //CreateSetting = append(CreateSetting, &TrainHeadSetting)
  183. // settingId, err := s.FeedDao.TX(tx).InsertAndGetId(TrainHeadSetting)
  184. // //CreateSetting := make([]*model.TrainHeadOfficeFeedback, 0)
  185. // for _, Dis := range feedBack.DistributorList {
  186. // detail := model.TrainHeadOfficeFeedbackDetail{
  187. // MainId: int(settingId),
  188. // DistributorId: Dis.DistributorId,
  189. // DistributorName: Dis.DistributorName,
  190. // CreatedBy: s.GetCxtUserId(),
  191. // CreatedName: s.GetCxtUserName(),
  192. // CreatedTime: gtime.Now(),
  193. // }
  194. // //service.SetCreatedInfo(detail, s.GetCxtUserId(), s.GetCxtUserName())
  195. // DetailList = append(DetailList, &detail)
  196. //
  197. // }
  198. // _, err = s.DetailDao.TX(tx).Insert(DetailList)
  199. // if err != nil {
  200. // return myerrors.TipsError("培训工单修改失败")
  201. // }
  202. //
  203. // case "20":
  204. //
  205. // _, err = s.FeedDao.Ctx(ctx).TX(tx).Data(g.Map{
  206. // s.FeedDao.C.SaleId: feedBack.Sale.SaleId,
  207. // s.FeedDao.C.SaleName: feedBack.Sale.SaleId,
  208. // s.Dao.C.UpdatedBy: s.GetCxtUserId(),
  209. // s.Dao.C.UpdatedName: s.GetCxtUserName(),
  210. // s.Dao.C.UpdatedTime: gtime.Now(),
  211. // }).WherePri(feedBack.Id).FieldsEx(service.UpdateFieldEx...).Update()
  212. // _, err = s.DetailDao.TX(tx).Where(s.DetailDao.C.MainId, feedBack.Id).Delete()
  213. // if err != nil {
  214. // return myerrors.TipsError("培训工单修改失败")
  215. // }
  216. // DetailList := make([]*model.TrainHeadOfficeFeedbackDetail, 0)
  217. // for _, Dis := range feedBack.DistributorList {
  218. // detail := model.TrainHeadOfficeFeedbackDetail{
  219. // MainId: int(feedBack.Id),
  220. // DistributorId: Dis.DistributorId,
  221. // DistributorName: Dis.DistributorName,
  222. // CreatedBy: s.GetCxtUserId(),
  223. // CreatedName: s.GetCxtUserName(),
  224. // CreatedTime: gtime.Now(),
  225. // }
  226. // DetailList = append(DetailList, &detail)
  227. //
  228. // }
  229. // _, err = s.DetailDao.TX(tx).Insert(DetailList)
  230. //
  231. // if err != nil {
  232. // return myerrors.TipsError("培训工单修改失败")
  233. // }
  234. //
  235. // case "30":
  236. // _, err := s.FeedDao.Ctx(ctx).TX(tx).WherePri(feedBack.Id).Delete()
  237. // if err != nil {
  238. // return myerrors.TipsError("培训工单修改失败")
  239. // }
  240. // }
  241. //
  242. // }
  243. // return nil
  244. // })
  245. //
  246. // return e
  247. // }
  248. func (s *trainHeadService) FeedBackTrain(req *model.FeedBackTrainReq) error {
  249. for _, feedback := range req.FeedBackTrainList {
  250. _, err := s.DetailDao.Data(g.Map{
  251. s.DetailDao.C.TrainingPersNum: feedback.TrainingPersNum,
  252. s.DetailDao.C.DistributorFeedback: feedback.DistributorFeedback,
  253. s.Dao.C.UpdatedBy: s.GetCxtUserId(),
  254. s.Dao.C.UpdatedName: s.GetCxtUserName(),
  255. s.Dao.C.UpdatedTime: gtime.Now(),
  256. }).FieldsEx(service.UpdateFieldEx...).WherePri(feedback.Id).Update()
  257. if err != nil {
  258. return myerrors.TipsError("培训工单反馈提交失败,请稍后重试")
  259. }
  260. }
  261. return nil
  262. }
  263. func (s *trainHeadService) DeleteByIds(ids []int64) error {
  264. if len(ids) == 0 {
  265. return nil
  266. }
  267. e := s.Dao.Transaction(s.Ctx, func(ctx context.Context, tx *gdb.TX) error {
  268. _, err := s.Dao.Ctx(ctx).WhereIn(s.Dao.C.Id, ids).Delete()
  269. if err != nil {
  270. return myerrors.TipsError("培训工单删除失败,请稍后重试")
  271. }
  272. _, err = s.FeedDao.Ctx(ctx).TX(tx).WhereIn(s.FeedDao.C.TrainId, ids).Delete()
  273. if err != nil {
  274. return myerrors.TipsError("培训工单删除失败,请稍后重试")
  275. }
  276. return nil
  277. })
  278. return e
  279. }