广汽安道拓Acura项目MES后台
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.

564 lines
19 KiB

2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. package task
  2. import (
  3. dal "LAPP_ACURA_MOM_BACKEND/dao/base"
  4. dal_pm "LAPP_ACURA_MOM_BACKEND/dao/pm"
  5. "LAPP_ACURA_MOM_BACKEND/db"
  6. "LAPP_ACURA_MOM_BACKEND/grmi"
  7. meta "LAPP_ACURA_MOM_BACKEND/meta/pm"
  8. model "LAPP_ACURA_MOM_BACKEND/models/pm"
  9. "LAPP_ACURA_MOM_BACKEND/utils"
  10. "LAPP_ACURA_MOM_BACKEND/web/middleware/glog"
  11. "context"
  12. "log"
  13. "strconv"
  14. "time"
  15. )
  16. func CreateTask() {
  17. tick := time.Tick(60 * time.Second)
  18. for {
  19. select {
  20. case <-tick:
  21. CreateOrder()
  22. }
  23. }
  24. }
  25. //结构体
  26. type TaskData struct {
  27. TaskType string
  28. PmAsset model.Asset
  29. PmTemplate model.Template
  30. PmService model.Service
  31. }
  32. var taskChan = make(chan TaskData, 1000) //定义一个调度任务通道
  33. /****
  34. *生成维护工单
  35. ***************/
  36. func CreateOrder() {
  37. //创建继承Baxkground的子节点Context
  38. ctx, cancel := context.WithCancel(context.Background())
  39. defer cancel()
  40. go doSth(ctx)
  41. data := make([]model.CreateData, 0)
  42. //第一步,多表联查出所有的数据
  43. engine := db.Eloquent.Master()
  44. query := engine.Table("PM_ASSET")
  45. query = query.Join("INNER", "PM_AssetTemplateLst", "PM_Asset.PlantNr = PM_AssetTemplateLst.PlantNr and PM_Asset.AssetNr = PM_AssetTemplateLst.AssetNr")
  46. query = query.Join("INNER", "PM_Template", "PM_Template.PlantNr = PM_AssetTemplateLst.PlantNr and PM_Template.MainTemplateNr = PM_AssetTemplateLst.MainTemplateNr")
  47. query = query.Join("INNER", "PM_TemplateServiceLst", "PM_Template.PlantNr = PM_TemplateServiceLst.PlantNr and PM_Template.MainTemplateNr = PM_TemplateServiceLst.MainTemplateNr")
  48. query = query.Join("INNER", "PM_Service", "PM_Service.PlantNr = PM_TemplateServiceLst.PlantNr and PM_Service.MainServiceNr = PM_TemplateServiceLst.MainServiceNr")
  49. query = query.Where("PM_Service.SchedType = ?", "AUTO")
  50. err := query.Find(&data)
  51. if err != nil {
  52. return
  53. }
  54. //第二步,把所有的服务调度放到channel
  55. for _, v := range data {
  56. //判断激活状态
  57. if utils.ValueIsEmpty(v.Service.EnabledToggle) {
  58. continue
  59. }
  60. dataone := TaskData{}
  61. dataone.PmService = v.Service
  62. dataone.PmTemplate = v.Template
  63. dataone.PmAsset = v.Asset
  64. //判断taskType
  65. if v.Service.MaintByDateToggle {
  66. dataone.TaskType = "A" //A是按照日期维护
  67. } else if v.Service.MaintByHourToggle {
  68. dataone.TaskType = "B" //B是按照小时维护
  69. } else if v.Service.MaintByMileageToggle {
  70. dataone.TaskType = "C" //C是按照仪表值维护
  71. } else if v.Service.NeedScheduleToggle {
  72. dataone.TaskType = "D" //D是按照调度维护
  73. } else {
  74. continue
  75. }
  76. taskChan <- dataone
  77. }
  78. }
  79. //生成任务工单
  80. func doSth(ctx context.Context) {
  81. engine := db.Eloquent.Master()
  82. //第三步,启动协程,从channel里读取数据,根据服务维护日期进入不同的方法里
  83. for {
  84. select {
  85. case <-ctx.Done():
  86. return
  87. case task, ok := <-taskChan:
  88. if !ok {
  89. log.Println("调度生成终止")
  90. return //停机退出
  91. }
  92. session := engine.NewSession()
  93. defer session.Close()
  94. dao_workorder := dal_pm.NewWorkOrderDAO(session, task.PmService.PlantNr, "PM_Service")
  95. snrDao := dal.NewSnrDAO(session, task.PmService.PlantNr, "PM_Service")
  96. dao_serviceattrlst := dal_pm.NewServiceAttrLstDAO(session, task.PmService.PlantNr, "PM_Service")
  97. dao_workorderattrlst := dal_pm.NewWorkOrderAttrLstDAO(session, task.PmService.PlantNr, "PM_Service")
  98. dao_workcalendarlst := dal.NewWorkCalendarLstDAO(session, task.PmAsset.PlantNr, "PM_Service")
  99. dao_AssetKpi := dal_pm.NewAssetKpiDAO(session, task.PmAsset.PlantNr, "PM_Service")
  100. switch task.TaskType {
  101. case "A":
  102. //当前零点时间
  103. today := utils.GetZeroTime(time.Now())
  104. //逻辑:判断是否到了维护时间,(当前时间戳-起始时间戳)%间隔时间
  105. t1 := utils.TimeFormat(time.Now(), "yyyyMMdd")
  106. t2 := task.PmService.DueDateOn
  107. time1, _ := utils.TimeParseyyyyMMdd(t1)
  108. time2, _ := utils.TimeParseyyyyMMdd(t2.ToString())
  109. timelen := int(time1.Unix()) - int(time2.Unix())
  110. timeunit := task.PmService.DueDateInterval
  111. glog.InfoExtln("维护工单A", "Mainservicenr:", task.PmService.MainServiceNr)
  112. glog.InfoExtln("维护工单A", "t1:", t1)
  113. glog.InfoExtln("维护工单A", "t2:", task.PmService.DueDateOn)
  114. glog.InfoExtln("维护工单A", "timelen:", timelen)
  115. glog.InfoExtln("维护工单A", "timeunit:", timeunit)
  116. glog.InfoExtln("维护工单A", "res:", ((timelen / 86400) % timeunit))
  117. if res := ((timelen / 86400) % timeunit); res == 0 {
  118. //判断是否已经生成了维护工单,如果生成了,跳过
  119. tem, err := dao_workorder.SelectLastOne(task.PmService.PlantNr,task.PmService.MainServiceNr,task.PmAsset.AssetNr)
  120. if err!=nil {
  121. glog.InfoExtln("维护工单A", "err:", err)
  122. continue
  123. }
  124. //判断是否添加了服务
  125. t2now, _ := utils.TimeParse(tem.ActBegTime.ToString())
  126. endtime := t2now.AddDate(0, 0, timeunit)
  127. //先把时间字符串格式化成相同的时间类型
  128. nowtime, _ := utils.TimeParseyyyyMMdd(t1)
  129. if nowtime.Before(endtime) {
  130. //处理逻辑
  131. glog.InfoExtln("维护工单A", "nowtime:", nowtime)
  132. glog.InfoExtln("维护工单A", "endtime:", endtime)
  133. continue
  134. }
  135. glog.InfoExtln("维护工单A", "endtime:", endtime)
  136. workOrderId, err := snrDao.GetNextSnr("WorkOrder")
  137. if err != nil {
  138. _ = session.Rollback()
  139. continue
  140. }
  141. //符合逻辑生成维护工单
  142. pm := new(model.WorkOrder)
  143. pm.PlantNr = task.PmService.PlantNr
  144. pm.MaintWorkOrderId = workOrderId
  145. pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
  146. pm.Descr = task.PmService.Descr
  147. pm.Status = 26
  148. pm.Priority = task.PmService.Priority
  149. pm.AssetNr = task.PmAsset.AssetNr
  150. pm.PlBegDat = grmi.Date(time.Now())
  151. pm.SchedBegTime = grmi.DateTime(time.Now())
  152. endtime = today.AddDate(0, 0, timeunit)
  153. pm.SchedEndTime = grmi.DateTime(endtime)
  154. pm.ActBegTime = grmi.DateTime(today)
  155. pm.ActEndTime = grmi.DateTime(endtime)
  156. //查询当天是否是工作日,如果是跳过
  157. engine := db.Eloquent.Master()
  158. session := engine.NewSession()
  159. defer session.Close()
  160. dao := dal.NewWorkCalendarLstDAO(session, task.PmAsset.PlantNr, "PM_Service")
  161. ok := dao.IsWorkDate(t1)
  162. if !ok {
  163. result, err := dao.SelectNearWorkDate(t1)
  164. if err != nil {
  165. _ = session.Rollback()
  166. continue
  167. }
  168. if result == nil {
  169. _ = session.Rollback()
  170. continue
  171. } else {
  172. Acttime := result.WorkDate.Restore()
  173. pm.ActBegTime = grmi.DateTime(Acttime)
  174. Actendtime := Acttime.AddDate(0, 0, timeunit)
  175. glog.InfoExtln("维护工单A", "Actendtime:", Actendtime)
  176. pm.ActEndTime = grmi.DateTime(Actendtime)
  177. }
  178. }
  179. pm.MaintType = task.PmService.MaintType
  180. err = dao_workorder.InsertOne(pm)
  181. if err != nil {
  182. _ = session.Rollback()
  183. continue
  184. }
  185. data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
  186. if err != nil {
  187. _ = session.Rollback()
  188. continue
  189. }
  190. //生成属性
  191. for _, v := range data {
  192. at := new(model.WorkOrderAttrLst)
  193. at.PlantNr = v.PlantNr
  194. at.Descr = v.Descr
  195. at.MainServiceNr = v.MainServiceNr
  196. at.MaintWorkOrderId = workOrderId
  197. at.Pos = v.Pos
  198. at.Parameter = v.Parameter
  199. at.ParaValue = v.ParaValue
  200. at.AttrNr = v.AttrNr
  201. err := dao_workorderattrlst.InsertOne(at)
  202. if err != nil {
  203. _ = session.Rollback()
  204. continue
  205. }
  206. }
  207. }
  208. session.Commit()
  209. case "B":
  210. today := utils.TimeFormat(time.Now(), "yyyyMMdd")
  211. //查询当天是否是工作日,如果是跳过
  212. engine := db.Eloquent.Master()
  213. session := engine.NewSession()
  214. defer session.Close()
  215. ok := dao_workcalendarlst.IsWorkDate(today)
  216. if !ok {
  217. continue
  218. }
  219. //逻辑:起始时间+间隔时间,
  220. t1 := utils.TimeFormat(time.Now(), "yyyyMMddHHmmss")
  221. //判断是否已经生成了维护工单,如果生成了,跳过
  222. tem, err := dao_workorder.SelectLastOne(task.PmService.PlantNr,task.PmService.MainServiceNr,task.PmAsset.AssetNr)
  223. if err != nil{
  224. glog.InfoExtln("维护工单B", "err:", err)
  225. continue
  226. }
  227. glog.InfoExtln("维护工单B", "tem:", tem)
  228. time2, _ := utils.TimeParse(tem.ActBegTime.ToString())
  229. time1, _ := utils.TimeParse(t1)
  230. timelen := int(time1.Unix()) - int(time2.Unix())
  231. timeunit := task.PmService.DueHourInterval
  232. glog.InfoExtln("维护工单B", "Mainservicenr:", task.PmService.MainServiceNr)
  233. glog.InfoExtln("维护工单B", "tem.Actbegtime:", tem.ActBegTime)
  234. glog.InfoExtln("维护工单B", "timelen:", timelen)
  235. glog.InfoExtln("维护工单B", "timeunit:", timeunit)
  236. if (timelen - timeunit*3600) > 0 {
  237. workOrderId, err := snrDao.GetNextSnr("WorkOrder")
  238. if err != nil {
  239. glog.InfoExtln("维护工单B", "err:", err)
  240. continue
  241. }
  242. //查询当天是否是工作日,如果是跳过
  243. engine := db.Eloquent.Master()
  244. session := engine.NewSession()
  245. defer session.Close()
  246. res := dao_workcalendarlst.IsWorkDate(today)
  247. if !res {
  248. continue
  249. }
  250. //符合逻辑生成维护工单
  251. pm := new(model.WorkOrder)
  252. pm.PlantNr = task.PmService.PlantNr
  253. pm.MaintWorkOrderId = workOrderId
  254. pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
  255. pm.Descr = task.PmService.Descr
  256. pm.Status = 26
  257. pm.Priority = task.PmService.Priority
  258. pm.AssetNr = task.PmAsset.AssetNr
  259. pm.PlBegDat = grmi.Date(time.Now())
  260. timeNow := time.Now()
  261. pm.SchedBegTime = grmi.DateTime(timeNow)
  262. //计算结束时间
  263. endtime := timeNow.Add(time.Duration(timeunit) * time.Hour)
  264. glog.InfoExtln("维护工单B", "timeunit:", timeunit)
  265. pm.SchedEndTime = grmi.DateTime(endtime)
  266. pm.ActBegTime = grmi.DateTime(timeNow)
  267. pm.ActEndTime = grmi.DateTime(endtime)
  268. pm.MaintType = task.PmService.MaintType
  269. err = dao_workorder.InsertOne(pm)
  270. if err != nil {
  271. glog.InfoExtln("维护工单B", "err:", err)
  272. _ = session.Rollback()
  273. continue
  274. }
  275. data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
  276. if err != nil {
  277. glog.InfoExtln("维护工单B", "err:", err)
  278. _ = session.Rollback()
  279. continue
  280. }
  281. //生成属性
  282. for _, v := range data {
  283. at := new(model.WorkOrderAttrLst)
  284. at.PlantNr = v.PlantNr
  285. at.Descr = v.Descr
  286. at.MainServiceNr = v.MainServiceNr
  287. at.MaintWorkOrderId = workOrderId
  288. at.Pos = v.Pos
  289. at.Parameter = v.Parameter
  290. at.ParaValue = v.ParaValue
  291. at.AttrNr = v.AttrNr
  292. err := dao_workorderattrlst.InsertOne(at)
  293. if err != nil {
  294. glog.InfoExtln("维护工单B", "err:", err)
  295. _ = session.Rollback()
  296. continue
  297. }
  298. }
  299. }
  300. session.Commit()
  301. case "C":
  302. today := utils.TimeFormat(time.Now(), "yyyyMMdd")
  303. //查询当天是否是工作日,如果是跳过
  304. engine := db.Eloquent.Master()
  305. session := engine.NewSession()
  306. defer session.Close()
  307. dao := dal.NewWorkCalendarLstDAO(session, task.PmAsset.PlantNr, "PM_Service")
  308. ok := dao.IsWorkDate(today)
  309. if !ok {
  310. continue
  311. }
  312. //逻辑:仪表值
  313. //第一步:查询资产阈值表,判断是否是触发状态
  314. info, err := dao_AssetKpi.Select([]grmi.Predicate{meta.AssetKpi_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.AssetKpi_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
  315. if err != nil {
  316. continue
  317. }
  318. for _, pmaInfo := range info {
  319. switch pmaInfo.KpiType {
  320. case 1:
  321. if pmaInfo.TriggerStatus == 1 {
  322. continue
  323. }
  324. if pmaInfo.ThresholdVal < pmaInfo.ActualVal {
  325. continue
  326. }
  327. //第二步:生成维护工单,
  328. //逻辑:根据调度时间维护
  329. workOrderId, err := snrDao.GetNextSnr("WorkOrder")
  330. if err != nil {
  331. continue
  332. }
  333. log.Printf("流水号id:%v", workOrderId)
  334. if err != nil {
  335. return
  336. }
  337. //符合逻辑生成维护工单
  338. pm := new(model.WorkOrder)
  339. pm.PlantNr = task.PmService.PlantNr
  340. pm.MaintWorkOrderId = workOrderId
  341. pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
  342. pm.Descr = task.PmService.Descr
  343. pm.Status = 26
  344. pm.Priority = task.PmService.Priority
  345. pm.AssetNr = task.PmAsset.AssetNr
  346. pm.PlBegDat = grmi.Date(time.Now())
  347. pm.SchedBegTime = grmi.DateTime(time.Now())
  348. timenow := utils.ValueToString(task.PmService.MainTimeLen, "")
  349. m, _ := time.ParseDuration(timenow + "h")
  350. pm.SchedEndTime = grmi.DateTime(time.Now().Add(m))
  351. pm.ActBegTime = pm.SchedBegTime
  352. pm.ActEndTime = pm.SchedEndTime
  353. pm.MaintType = task.PmService.MaintType
  354. err = dao_workorder.InsertOne(pm)
  355. if err != nil {
  356. _ = session.Rollback()
  357. continue
  358. }
  359. data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
  360. if err != nil {
  361. _ = session.Rollback()
  362. continue
  363. }
  364. //生成属性
  365. for _, v := range data {
  366. at := new(model.WorkOrderAttrLst)
  367. at.PlantNr = v.PlantNr
  368. at.Descr = v.Descr
  369. at.MainServiceNr = v.MainServiceNr
  370. at.MaintWorkOrderId = workOrderId
  371. at.Pos = v.Pos
  372. at.Parameter = v.Parameter
  373. at.ParaValue = v.ParaValue
  374. at.AttrNr = v.AttrNr
  375. err := dao_workorderattrlst.InsertOne(at)
  376. if err != nil {
  377. _ = session.Rollback()
  378. continue
  379. }
  380. }
  381. //第三步:锁定触发器状态
  382. pmaInfo.TriggerStatus = 1
  383. err = dao_AssetKpi.UpdateOne(&pmaInfo)
  384. if err != nil {
  385. _ = session.Rollback()
  386. continue
  387. }
  388. case 2:
  389. if pmaInfo.CounterVal < pmaInfo.CounterCycleVal {
  390. continue
  391. }
  392. //第二步:生成维护工单,
  393. //逻辑:根据调度时间维护
  394. workOrderId, err := snrDao.GetNextSnr("WorkOrder")
  395. if err != nil {
  396. continue
  397. }
  398. log.Printf("流水号id:%v", workOrderId)
  399. if err != nil {
  400. return
  401. }
  402. //符合逻辑生成维护工单
  403. pm := new(model.WorkOrder)
  404. pm.PlantNr = task.PmService.PlantNr
  405. pm.MaintWorkOrderId = workOrderId
  406. pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
  407. pm.Descr = task.PmService.Descr
  408. pm.Status = 26
  409. pm.Priority = task.PmService.Priority
  410. pm.AssetNr = task.PmAsset.AssetNr
  411. pm.PlBegDat = grmi.Date(time.Now())
  412. pm.SchedBegTime = grmi.DateTime(time.Now())
  413. timenow := utils.ValueToString(task.PmService.MainTimeLen, "")
  414. m, _ := time.ParseDuration(timenow + "h")
  415. pm.SchedEndTime = grmi.DateTime(time.Now().Add(m))
  416. pm.ActBegTime = pm.SchedBegTime
  417. pm.ActEndTime = pm.SchedEndTime
  418. pm.MaintType = task.PmService.MaintType
  419. dao_workorder.InsertOne(pm)
  420. if err != nil {
  421. _ = session.Rollback()
  422. continue
  423. }
  424. data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
  425. if err != nil {
  426. _ = session.Rollback()
  427. continue
  428. }
  429. //生成属性
  430. for _, v := range data {
  431. at := new(model.WorkOrderAttrLst)
  432. at.PlantNr = v.PlantNr
  433. at.Descr = v.Descr
  434. at.MainServiceNr = v.MainServiceNr
  435. at.MaintWorkOrderId = workOrderId
  436. at.Pos = v.Pos
  437. at.Parameter = v.Parameter
  438. at.ParaValue = v.ParaValue
  439. at.AttrNr = v.AttrNr
  440. err := dao_workorderattrlst.InsertOne(at)
  441. if err != nil {
  442. _ = session.Rollback()
  443. continue
  444. }
  445. }
  446. //第三步:计数清零
  447. pmaInfo.CounterCycleVal = 1
  448. err = dao_AssetKpi.UpdateOne(&pmaInfo)
  449. if err != nil {
  450. _ = session.Rollback()
  451. continue
  452. }
  453. }
  454. }
  455. session.Commit()
  456. case "D":
  457. today := utils.TimeFormat(time.Now(), "yyyyMMdd")
  458. //查询当天是否是工作日,如果是跳过
  459. engine := db.Eloquent.Master()
  460. session := engine.NewSession()
  461. defer session.Close()
  462. ok := dao_workcalendarlst.IsWorkDate(today)
  463. if !ok {
  464. continue
  465. }
  466. //逻辑:起始时间+间隔时间,
  467. //判断是否已经生成了维护工单,如果生成了,跳过
  468. tem, err := dao_workorder.SelectLastOne(task.PmService.PlantNr,task.PmService.MainServiceNr,task.PmAsset.AssetNr)
  469. if err != nil {
  470. glog.InfoExtln("维护工单D", "err:", err)
  471. continue
  472. }
  473. time2, _ := utils.TimeParse(tem.ActBegTime.ToString())
  474. time1, _ := utils.TimeParseyyyyMMdd(today)
  475. timelen := int(time1.Unix()) - int(time2.Unix())
  476. if err != nil {
  477. continue
  478. }
  479. if timelen >= 0 {
  480. //逻辑:根据调度时间维护
  481. workOrderId, err := snrDao.GetNextSnr("WorkOrder")
  482. log.Printf("流水号id:%v", workOrderId)
  483. if err != nil {
  484. return
  485. }
  486. //符合逻辑生成维护工单
  487. pm := new(model.WorkOrder)
  488. pm.PlantNr = task.PmService.PlantNr
  489. pm.MaintWorkOrderId = workOrderId
  490. pm.MainServiceNr = strconv.Itoa(task.PmService.MainServiceNr)
  491. pm.Descr = task.PmService.Descr
  492. pm.Status = 26
  493. pm.Priority = task.PmService.Priority
  494. pm.AssetNr = task.PmAsset.AssetNr
  495. pm.PlBegDat = grmi.Date(time.Now())
  496. pm.SchedBegTime = grmi.DateTime(time.Now())
  497. timenow := utils.ValueToString(task.PmService.MainTimeLen, "")
  498. m, _ := time.ParseDuration(timenow + "h")
  499. pm.SchedEndTime = grmi.DateTime(time.Now().Add(m))
  500. pm.ActBegTime = pm.SchedBegTime
  501. pm.ActEndTime = pm.SchedEndTime
  502. pm.MaintType = task.PmService.MaintType
  503. err = dao_workorder.InsertOne(pm)
  504. if err != nil {
  505. continue
  506. }
  507. data, err := dao_serviceattrlst.Select([]grmi.Predicate{meta.ServiceAttrLst_PlantNr.NewPredicate(grmi.Equal, task.PmService.PlantNr), meta.ServiceAttrLst_MainServiceNr.NewPredicate(grmi.Equal, task.PmService.MainServiceNr)}, nil)
  508. if err != nil {
  509. _ = session.Rollback()
  510. continue
  511. }
  512. //生成属性
  513. for _, v := range data {
  514. at := new(model.WorkOrderAttrLst)
  515. at.PlantNr = v.PlantNr
  516. at.Descr = v.Descr
  517. at.MainServiceNr = v.MainServiceNr
  518. at.MaintWorkOrderId = workOrderId
  519. at.Pos = v.Pos
  520. at.Parameter = v.Parameter
  521. at.ParaValue = v.ParaValue
  522. at.AttrNr = v.AttrNr
  523. err := dao_workorderattrlst.InsertOne(at)
  524. if err != nil {
  525. continue
  526. }
  527. }
  528. }
  529. default:
  530. //进行非抢占式任务
  531. }
  532. }
  533. }
  534. }