train_head_office.go 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. package proj
  2. import (
  3. "context"
  4. projDao "dashoo.cn/micro/app/dao/proj"
  5. model "dashoo.cn/micro/app/model/proj"
  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. settingList := make([]*model.FeedbackDetail, 0)
  60. err = s.FeedDao.Where(s.FeedDao.C.TrainId, id).Scan(&settingList)
  61. detail.FeedbackList = settingList
  62. for _, feedbackDetail := range settingList {
  63. Distributor := make([]*model.Distributor, 0)
  64. err = s.DetailDao.Where(s.DetailDao.C.MainId, feedbackDetail.Id).Scan(&Distributor)
  65. if err != nil {
  66. return nil, myerrors.TipsError("工单查询失败,请稍后重试")
  67. }
  68. feedbackDetail.DistributorList = Distributor
  69. }
  70. if err != nil {
  71. return nil, myerrors.TipsError("工单查询失败,请稍后重试")
  72. }
  73. return detail, nil
  74. }
  75. func (s *trainHeadService) GetDetailById(id int64) (detail *model.TrainHeadDetailForFeedBack, err error) {
  76. err = s.Dao.WherePri(id).Scan(&detail)
  77. if err == sql.ErrNoRows {
  78. return nil, myerrors.TipsError("工单不存在")
  79. }
  80. if err != nil {
  81. return nil, err
  82. }
  83. settingList := make([]*model.FeedbackDetailRes, 0)
  84. err = s.DetailDao.As("fd").LeftJoin("train_head_office_feedback as f", "f.id = fd.main_id").Where("f.train_id", id).
  85. Fields("fd.*,f.sale_id,f.sale_name").
  86. Scan(&settingList)
  87. if err != nil {
  88. return nil, myerrors.TipsError("工单查询失败,请稍后重试")
  89. }
  90. detail.FeedbackDetailList = settingList
  91. return detail, nil
  92. }
  93. func (s *trainHeadService) Create(req *model.CreateTrainHead) (err error) {
  94. ent := model.TrainHeadOffice{
  95. Id: 0,
  96. TrainTitle: req.TrainTitle,
  97. TrainDate: req.TrainDate,
  98. TrainConcreteStartTime: req.TrainConcreteStartTime,
  99. TrainConcreteEndTime: req.TrainConcreteEndTime,
  100. CreatedBy: s.GetCxtUserId(),
  101. CreatedName: s.GetCxtUserName(),
  102. CreatedTime: gtime.Now(),
  103. }
  104. //service.SetCreatedInfo(ent, s.GetCxtUserId(), s.GetCxtUserName())
  105. e := s.Dao.Transaction(s.Ctx, func(ctx context.Context, tx *gdb.TX) error {
  106. id, err := s.Dao.TX(tx).InsertAndGetId(ent)
  107. if err != nil {
  108. return myerrors.TipsError("提取方案创建失败,请联系管理员")
  109. }
  110. //CreateSetting := make([]*model.TrainHeadOfficeFeedback, 0)
  111. DetailList := make([]*model.TrainHeadOfficeFeedbackDetail, 0)
  112. for _, feedBack := range req.FeedbackList {
  113. TrainHeadSetting := model.TrainHeadOfficeFeedback{
  114. TrainId: int(id),
  115. SaleId: feedBack.Sale.SaleId,
  116. SaleName: feedBack.Sale.SaleName,
  117. CreatedBy: s.GetCxtUserId(),
  118. CreatedName: s.GetCxtUserName(),
  119. CreatedTime: gtime.Now(),
  120. }
  121. //CreateSetting = append(CreateSetting, &TrainHeadSetting)
  122. settingId, err := s.FeedDao.TX(tx).InsertAndGetId(TrainHeadSetting)
  123. if err != nil {
  124. return myerrors.TipsError("提取方案创建失败,请联系管理员")
  125. }
  126. for _, Dis := range feedBack.DistributorList {
  127. detail := model.TrainHeadOfficeFeedbackDetail{
  128. MainId: int(settingId),
  129. DistributorId: Dis.DistributorId,
  130. DistributorName: Dis.DistributorName,
  131. CreatedBy: s.GetCxtUserId(),
  132. CreatedName: s.GetCxtUserName(),
  133. CreatedTime: gtime.Now(),
  134. }
  135. DetailList = append(DetailList, &detail)
  136. }
  137. _, err = s.DetailDao.TX(tx).Insert(DetailList)
  138. if err != nil {
  139. return myerrors.TipsError("提取方案创建失败,请联系管理员")
  140. }
  141. }
  142. if err != nil {
  143. return myerrors.TipsError("提取方案创建失败,请联系管理员")
  144. }
  145. return nil
  146. })
  147. return e
  148. }
  149. func (s *trainHeadService) UpdateById(req *model.UpdateTrainHead) error {
  150. ent := model.TrainHeadOffice{}
  151. err := s.Dao.WherePri(req.Id).Scan(&ent)
  152. if err == sql.ErrNoRows {
  153. return myerrors.TipsError("该培训工单不存在")
  154. }
  155. if err != nil {
  156. return err
  157. }
  158. updateMap := g.Map{
  159. s.Dao.C.TrainTitle: req.TrainTitle,
  160. s.Dao.C.TrainDate: req.TrainDate,
  161. s.Dao.C.TrainConcreteStartTime: req.TrainConcreteStartTime,
  162. s.Dao.C.TrainConcreteEndTime: req.TrainConcreteEndTime,
  163. s.Dao.C.UpdatedBy: s.GetCxtUserId(),
  164. s.Dao.C.UpdatedName: s.GetCxtUserName(),
  165. s.Dao.C.UpdatedTime: gtime.Now(),
  166. }
  167. e := s.Dao.Transaction(s.Ctx, func(ctx context.Context, tx *gdb.TX) error {
  168. _, err = s.Dao.Ctx(ctx).TX(tx).Data(updateMap).WherePri(req.Id).FieldsEx(service.UpdateFieldEx...).Update()
  169. if err != nil {
  170. return myerrors.TipsError("修改培训工单失败")
  171. }
  172. for _, feedBack := range req.FeedbackList {
  173. switch feedBack.Operate {
  174. case "10":
  175. TrainHeadSetting := model.TrainHeadOfficeFeedback{
  176. TrainId: int(req.Id),
  177. SaleId: feedBack.Sale.SaleId,
  178. SaleName: feedBack.Sale.SaleName,
  179. CreatedBy: s.GetCxtUserId(),
  180. CreatedName: s.GetCxtUserName(),
  181. CreatedTime: gtime.Now(),
  182. }
  183. //service.SetCreatedInfo(TrainHeadSetting, s.GetCxtUserId(), s.GetCxtUserName())
  184. DetailList := make([]*model.TrainHeadOfficeFeedbackDetail, 0)
  185. //CreateSetting = append(CreateSetting, &TrainHeadSetting)
  186. settingId, err := s.FeedDao.TX(tx).InsertAndGetId(TrainHeadSetting)
  187. //CreateSetting := make([]*model.TrainHeadOfficeFeedback, 0)
  188. for _, Dis := range feedBack.DistributorList {
  189. detail := model.TrainHeadOfficeFeedbackDetail{
  190. MainId: int(settingId),
  191. DistributorId: Dis.DistributorId,
  192. DistributorName: Dis.DistributorName,
  193. CreatedBy: s.GetCxtUserId(),
  194. CreatedName: s.GetCxtUserName(),
  195. CreatedTime: gtime.Now(),
  196. }
  197. //service.SetCreatedInfo(detail, s.GetCxtUserId(), s.GetCxtUserName())
  198. DetailList = append(DetailList, &detail)
  199. }
  200. _, err = s.DetailDao.TX(tx).Insert(DetailList)
  201. if err != nil {
  202. return myerrors.TipsError("培训工单修改失败")
  203. }
  204. case "20":
  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. _, err = s.DetailDao.TX(tx).Insert(DetailList)
  229. if err != nil {
  230. return myerrors.TipsError("培训工单修改失败")
  231. }
  232. case "30":
  233. _, err := s.FeedDao.Ctx(ctx).TX(tx).WherePri(feedBack.Id).Delete()
  234. if err != nil {
  235. return myerrors.TipsError("培训工单修改失败")
  236. }
  237. }
  238. }
  239. return nil
  240. })
  241. return e
  242. }
  243. func (s *trainHeadService) FeedBackTrain(req *model.FeedBackTrainReq) error {
  244. for _, feedback := range req.FeedBackTrainList {
  245. _, err := s.DetailDao.Data(g.Map{
  246. s.DetailDao.C.TrainingPersNum: feedback.TrainingPersNum,
  247. s.DetailDao.C.DistributorFeedback: feedback.DistributorFeedback,
  248. s.Dao.C.UpdatedBy: s.GetCxtUserId(),
  249. s.Dao.C.UpdatedName: s.GetCxtUserName(),
  250. s.Dao.C.UpdatedTime: gtime.Now(),
  251. }).FieldsEx(service.UpdateFieldEx...).WherePri(feedback.Id).Update()
  252. if err != nil {
  253. return myerrors.TipsError("培训工单反馈提交失败,请稍后重试")
  254. }
  255. }
  256. return nil
  257. }
  258. func (s *trainHeadService) DeleteByIds(ids []int64) error {
  259. if len(ids) == 0 {
  260. return nil
  261. }
  262. e := s.Dao.Transaction(s.Ctx, func(ctx context.Context, tx *gdb.TX) error {
  263. _, err := s.Dao.Ctx(ctx).WhereIn(s.Dao.C.Id, ids).Delete()
  264. if err != nil {
  265. return myerrors.TipsError("培训工单删除失败,请稍后重试")
  266. }
  267. _, err = s.FeedDao.Ctx(ctx).TX(tx).WhereIn(s.FeedDao.C.TrainId, ids).Delete()
  268. if err != nil {
  269. return myerrors.TipsError("培训工单删除失败,请稍后重试")
  270. }
  271. return nil
  272. })
  273. return e
  274. }