第二代基于事件的高级计划排程引擎
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.

443 lines
16 KiB

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
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
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
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 service
  2. import (
  3. "errors"
  4. "fmt"
  5. "leit.com/aps_engine/db"
  6. "leit.com/aps_engine/models"
  7. "time"
  8. )
  9. type TimeModelSrv struct {
  10. PlantNr int
  11. StartDate time.Time
  12. EndDate time.Time
  13. DayModelDict map[int]DayModelSrv // 日模型字典
  14. WeekModelDict map[int]WeekModelSrv // 周模型字典
  15. CalendarDict map[int]CalendarSrv // 日历字典
  16. WorkShiftDict map[int]WorkShiftSrv // 人员班组字典
  17. }
  18. // 加载日模型、周模型和工作日历等基础数据
  19. func(tmsrv *TimeModelSrv)LoadBasicData(startDate, endDate time.Time)(err error){
  20. var(
  21. dmsrv DayModelSrv
  22. wkmsrv WeekModelSrv
  23. calsrv CalendarSrv
  24. wssrv WorkShiftSrv
  25. dmtablst []models.DayModel
  26. wkmtablst []models.WeekModel
  27. caltablst []models.WorkCalendar
  28. wstablst []models.WorkShift
  29. i int
  30. )
  31. // 初始化
  32. tmsrv.DayModelDict = make(map[int]DayModelSrv)
  33. tmsrv.WeekModelDict = make(map[int]WeekModelSrv)
  34. tmsrv.CalendarDict = make(map[int]CalendarSrv)
  35. tmsrv.WorkShiftDict = make(map[int]WorkShiftSrv)
  36. // 加载日模型
  37. engine := db.Eloquent.Master()
  38. session := engine.NewSession()
  39. defer session.Close()
  40. dmtab := models.DayModel{PlantNr: db.PlantNr}
  41. if dmtablst, err = dmtab.SelectAll(); err != nil {
  42. err = errors.New(fmt.Sprintf("加载工厂%d的日模型失败%v!",dmtab.PlantNr, err))
  43. return
  44. }
  45. for i = 0; i < len(dmtablst); i++ {
  46. dmsrv = DayModelSrv{}
  47. dmsrv.Init(dmtablst[i])
  48. tmsrv.DayModelDict[dmsrv.DayModelNr] = dmsrv
  49. }
  50. // 加载周模型
  51. wkmtab := models.WeekModel{PlantNr: db.PlantNr}
  52. if wkmtablst, err = wkmtab.SelectAll(); err != nil {
  53. err = errors.New(fmt.Sprintf("加载工厂%d的周模型失败%v!",wkmtab.PlantNr, err))
  54. return
  55. }
  56. for i = 0; i < len(wkmtablst); i++ {
  57. wkmsrv = WeekModelSrv{}
  58. wkmsrv.Init(wkmtablst[i])
  59. tmsrv.WeekModelDict[wkmsrv.WeekModelNr] = wkmsrv
  60. }
  61. // 加载工作日历
  62. caltab := models.WorkCalendar{PlantNr: db.PlantNr}
  63. if caltablst, err = caltab.SelectAll(startDate, endDate); err != nil {
  64. err = errors.New(fmt.Sprintf("加载工厂%d的工作日历失败%v!",caltab.PlantNr, err))
  65. return
  66. }
  67. for i = 0; i < len(caltablst); i++ {
  68. calsrv = CalendarSrv{}
  69. calsrv.Init(caltablst[i])
  70. tmsrv.CalendarDict[calsrv.CalendarNr] = calsrv
  71. }
  72. // 加载工作班次模型
  73. wstab := models.WorkShift{PlantNr: db.PlantNr}
  74. if wstablst, err = wstab.SelectAll(); err != nil {
  75. err = errors.New(fmt.Sprintf("加载工厂%d的人员班组失败%v!",wstab.PlantNr, err))
  76. return
  77. }
  78. for i = 0; i < len(wstablst); i++ {
  79. wssrv = WorkShiftSrv{}
  80. wssrv.Init(wstablst[i])
  81. tmsrv.WorkShiftDict[wssrv.WorkShiftNr] = wssrv
  82. }
  83. return
  84. }
  85. // 生成日模型的可用时间线
  86. func(tmsrv *TimeModelSrv)GenDayModelLineArray()(err error){
  87. var(
  88. dms DayModelSrv
  89. wssrv WorkShiftSrv
  90. lssrv LineSegementSrv
  91. nextStartPoint int
  92. ok bool
  93. )
  94. // 遍历日模型
  95. for _, dms = range tmsrv.DayModelDict {
  96. dms.LineArray = []LineSegementSrv{}
  97. // 是否是人员班组
  98. if dms.DayModelTab.WorkShiftToggle {
  99. // 班次1
  100. if dms.DayModelTab.S1Toggle {
  101. if wssrv, ok = tmsrv.WorkShiftDict[dms.DayModelTab.S1WorkShiftNr]; !ok {
  102. err = errors.New(fmt.Sprintf("日模型%d的班次1对应的人员班次%d不存在!",dms.DayModelTab.DayModelNr, dms.DayModelTab.S1WorkShiftNr))
  103. return
  104. }
  105. nextStartPoint = wssrv.Wsstab.SBeg
  106. if wssrv.Wsstab.SB1Beg > 0 && wssrv.Wsstab.SB1End > wssrv.Wsstab.SB1Beg {
  107. lssrv = LineSegementSrv{}
  108. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  109. lssrv.StartSecond = nextStartPoint
  110. lssrv.EndSecond = wssrv.Wsstab.SB1Beg
  111. lssrv.GetDuration()
  112. nextStartPoint = wssrv.Wsstab.SB1End
  113. dms.LineArray = append(dms.LineArray, lssrv)
  114. }
  115. if wssrv.Wsstab.SB2End > 0 && wssrv.Wsstab.SB2End > wssrv.Wsstab.SB2Beg {
  116. lssrv = LineSegementSrv{}
  117. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  118. lssrv.StartSecond = nextStartPoint
  119. lssrv.EndSecond = wssrv.Wsstab.SB2Beg
  120. lssrv.GetDuration()
  121. nextStartPoint = wssrv.Wsstab.SB2End
  122. dms.LineArray = append(dms.LineArray, lssrv)
  123. }
  124. if wssrv.Wsstab.SB3End > 0 && wssrv.Wsstab.SB3End > wssrv.Wsstab.SB3Beg {
  125. lssrv = LineSegementSrv{}
  126. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  127. lssrv.StartSecond = nextStartPoint
  128. lssrv.EndSecond = wssrv.Wsstab.SB3Beg
  129. lssrv.GetDuration()
  130. nextStartPoint = wssrv.Wsstab.SB3End
  131. dms.LineArray = append(dms.LineArray, lssrv)
  132. }
  133. if wssrv.Wsstab.SB4End > 0 && wssrv.Wsstab.SB4End > wssrv.Wsstab.SB4Beg {
  134. lssrv = LineSegementSrv{}
  135. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  136. lssrv.StartSecond = nextStartPoint
  137. lssrv.EndSecond = wssrv.Wsstab.SB4Beg
  138. lssrv.GetDuration()
  139. nextStartPoint = wssrv.Wsstab.SB4End
  140. dms.LineArray = append(dms.LineArray, lssrv)
  141. }
  142. if wssrv.Wsstab.SB5End > 0 && wssrv.Wsstab.SB5End > wssrv.Wsstab.SB5Beg {
  143. lssrv = LineSegementSrv{}
  144. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  145. lssrv.StartSecond = nextStartPoint
  146. lssrv.EndSecond = wssrv.Wsstab.SB5Beg
  147. lssrv.GetDuration()
  148. nextStartPoint = wssrv.Wsstab.SB5End
  149. dms.LineArray = append(dms.LineArray, lssrv)
  150. }
  151. lssrv = LineSegementSrv{}
  152. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  153. lssrv.StartSecond = nextStartPoint
  154. lssrv.EndSecond = wssrv.Wsstab.SEnd
  155. lssrv.GetDuration()
  156. dms.LineArray = append(dms.LineArray, lssrv)
  157. }
  158. // 班次2
  159. if dms.DayModelTab.S2Toggle {
  160. if wssrv, ok = tmsrv.WorkShiftDict[dms.DayModelTab.S2WorkShiftNr]; !ok {
  161. err = errors.New(fmt.Sprintf("日模型%d的班次2对应的人员班次%d不存在!",dms.DayModelTab.DayModelNr, dms.DayModelTab.S2WorkShiftNr))
  162. return
  163. }
  164. nextStartPoint = wssrv.Wsstab.SBeg
  165. if wssrv.Wsstab.SB1Beg > 0 && wssrv.Wsstab.SB1End > wssrv.Wsstab.SB1Beg {
  166. lssrv = LineSegementSrv{}
  167. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  168. lssrv.StartSecond = nextStartPoint
  169. lssrv.EndSecond = wssrv.Wsstab.SB1Beg
  170. lssrv.GetDuration()
  171. nextStartPoint = wssrv.Wsstab.SB1End
  172. dms.LineArray = append(dms.LineArray, lssrv)
  173. }
  174. if wssrv.Wsstab.SB2End > 0 && wssrv.Wsstab.SB2End > wssrv.Wsstab.SB2Beg {
  175. lssrv = LineSegementSrv{}
  176. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  177. lssrv.StartSecond = nextStartPoint
  178. lssrv.EndSecond = wssrv.Wsstab.SB2Beg
  179. lssrv.GetDuration()
  180. nextStartPoint = wssrv.Wsstab.SB2End
  181. dms.LineArray = append(dms.LineArray, lssrv)
  182. }
  183. if wssrv.Wsstab.SB3End > 0 && wssrv.Wsstab.SB3End > wssrv.Wsstab.SB3Beg {
  184. lssrv = LineSegementSrv{}
  185. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  186. lssrv.StartSecond = nextStartPoint
  187. lssrv.EndSecond = wssrv.Wsstab.SB3Beg
  188. lssrv.GetDuration()
  189. nextStartPoint = wssrv.Wsstab.SB3End
  190. dms.LineArray = append(dms.LineArray, lssrv)
  191. }
  192. if wssrv.Wsstab.SB4End > 0 && wssrv.Wsstab.SB4End > wssrv.Wsstab.SB4Beg {
  193. lssrv = LineSegementSrv{}
  194. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  195. lssrv.StartSecond = nextStartPoint
  196. lssrv.EndSecond = wssrv.Wsstab.SB4Beg
  197. lssrv.GetDuration()
  198. nextStartPoint = wssrv.Wsstab.SB4End
  199. dms.LineArray = append(dms.LineArray, lssrv)
  200. }
  201. if wssrv.Wsstab.SB5End > 0 && wssrv.Wsstab.SB5End > wssrv.Wsstab.SB5Beg {
  202. lssrv = LineSegementSrv{}
  203. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  204. lssrv.StartSecond = nextStartPoint
  205. lssrv.EndSecond = wssrv.Wsstab.SB5Beg
  206. lssrv.GetDuration()
  207. nextStartPoint = wssrv.Wsstab.SB5End
  208. dms.LineArray = append(dms.LineArray, lssrv)
  209. }
  210. lssrv = LineSegementSrv{}
  211. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  212. lssrv.StartSecond = nextStartPoint
  213. lssrv.EndSecond = wssrv.Wsstab.SEnd
  214. lssrv.GetDuration()
  215. dms.LineArray = append(dms.LineArray, lssrv)
  216. }
  217. // 班次2
  218. if dms.DayModelTab.S3Toggle {
  219. if wssrv, ok = tmsrv.WorkShiftDict[dms.DayModelTab.S3WorkShiftNr]; !ok {
  220. err = errors.New(fmt.Sprintf("日模型%d的班次3对应的人员班次%d不存在!",dms.DayModelTab.DayModelNr, dms.DayModelTab.S3WorkShiftNr))
  221. return
  222. }
  223. nextStartPoint = wssrv.Wsstab.SBeg
  224. if wssrv.Wsstab.SB1Beg > 0 && wssrv.Wsstab.SB1End > wssrv.Wsstab.SB1Beg {
  225. lssrv = LineSegementSrv{}
  226. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  227. lssrv.StartSecond = nextStartPoint
  228. lssrv.EndSecond = wssrv.Wsstab.SB1Beg
  229. lssrv.GetDuration()
  230. nextStartPoint = wssrv.Wsstab.SB1End
  231. dms.LineArray = append(dms.LineArray, lssrv)
  232. }
  233. if wssrv.Wsstab.SB2End > 0 && wssrv.Wsstab.SB2End > wssrv.Wsstab.SB2Beg {
  234. lssrv = LineSegementSrv{}
  235. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  236. lssrv.StartSecond = nextStartPoint
  237. lssrv.EndSecond = wssrv.Wsstab.SB2Beg
  238. lssrv.GetDuration()
  239. nextStartPoint = wssrv.Wsstab.SB2End
  240. dms.LineArray = append(dms.LineArray, lssrv)
  241. }
  242. if wssrv.Wsstab.SB3End > 0 && wssrv.Wsstab.SB3End > wssrv.Wsstab.SB3Beg {
  243. lssrv = LineSegementSrv{}
  244. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  245. lssrv.StartSecond = nextStartPoint
  246. lssrv.EndSecond = wssrv.Wsstab.SB3Beg
  247. lssrv.GetDuration()
  248. nextStartPoint = wssrv.Wsstab.SB3End
  249. dms.LineArray = append(dms.LineArray, lssrv)
  250. }
  251. if wssrv.Wsstab.SB4End > 0 && wssrv.Wsstab.SB4End > wssrv.Wsstab.SB4Beg {
  252. lssrv = LineSegementSrv{}
  253. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  254. lssrv.StartSecond = nextStartPoint
  255. lssrv.EndSecond = wssrv.Wsstab.SB4Beg
  256. lssrv.GetDuration()
  257. nextStartPoint = wssrv.Wsstab.SB4End
  258. dms.LineArray = append(dms.LineArray, lssrv)
  259. }
  260. if wssrv.Wsstab.SB5End > 0 && wssrv.Wsstab.SB5End > wssrv.Wsstab.SB5Beg {
  261. lssrv = LineSegementSrv{}
  262. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  263. lssrv.StartSecond = nextStartPoint
  264. lssrv.EndSecond = wssrv.Wsstab.SB5Beg
  265. lssrv.GetDuration()
  266. nextStartPoint = wssrv.Wsstab.SB5End
  267. dms.LineArray = append(dms.LineArray, lssrv)
  268. }
  269. lssrv = LineSegementSrv{}
  270. lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr
  271. lssrv.StartSecond = nextStartPoint
  272. lssrv.EndSecond = wssrv.Wsstab.SEnd
  273. lssrv.GetDuration()
  274. dms.LineArray = append(dms.LineArray, lssrv)
  275. }
  276. }else{
  277. // 班次1
  278. if dms.DayModelTab.S1Toggle {
  279. nextStartPoint = dms.DayModelTab.S1Beg
  280. if dms.DayModelTab.S1B1End > 0 && dms.DayModelTab.S1B1End > dms.DayModelTab.S1B1Beg {
  281. lssrv = LineSegementSrv{}
  282. lssrv.StartSecond = nextStartPoint
  283. lssrv.EndSecond = dms.DayModelTab.S1B1Beg
  284. lssrv.GetDuration()
  285. nextStartPoint = dms.DayModelTab.S1B1End
  286. dms.LineArray = append(dms.LineArray, lssrv)
  287. }
  288. if dms.DayModelTab.S1B2End > 0 && dms.DayModelTab.S1B2End > dms.DayModelTab.S1B2Beg {
  289. lssrv = LineSegementSrv{}
  290. lssrv.StartSecond = nextStartPoint
  291. lssrv.EndSecond = dms.DayModelTab.S1B2Beg
  292. lssrv.GetDuration()
  293. nextStartPoint = dms.DayModelTab.S1B2End
  294. dms.LineArray = append(dms.LineArray, lssrv)
  295. }
  296. if dms.DayModelTab.S1B3End > 0 && dms.DayModelTab.S1B3End > dms.DayModelTab.S1B3Beg {
  297. lssrv = LineSegementSrv{}
  298. lssrv.StartSecond = nextStartPoint
  299. lssrv.EndSecond = dms.DayModelTab.S1B3Beg
  300. lssrv.GetDuration()
  301. nextStartPoint = dms.DayModelTab.S1B3End
  302. dms.LineArray = append(dms.LineArray, lssrv)
  303. }
  304. if dms.DayModelTab.S1B4End > 0 && dms.DayModelTab.S1B4End > dms.DayModelTab.S1B4Beg {
  305. lssrv = LineSegementSrv{}
  306. lssrv.StartSecond = nextStartPoint
  307. lssrv.EndSecond = dms.DayModelTab.S1B4Beg
  308. lssrv.GetDuration()
  309. nextStartPoint = dms.DayModelTab.S1B4End
  310. dms.LineArray = append(dms.LineArray, lssrv)
  311. }
  312. if dms.DayModelTab.S1B5End > 0 && dms.DayModelTab.S1B5End > dms.DayModelTab.S1B5Beg {
  313. lssrv = LineSegementSrv{}
  314. lssrv.StartSecond = nextStartPoint
  315. lssrv.EndSecond = dms.DayModelTab.S1B5Beg
  316. lssrv.GetDuration()
  317. nextStartPoint = dms.DayModelTab.S1B5End
  318. dms.LineArray = append(dms.LineArray, lssrv)
  319. }
  320. lssrv = LineSegementSrv{}
  321. lssrv.StartSecond = nextStartPoint
  322. lssrv.EndSecond = dms.DayModelTab.S1End
  323. lssrv.GetDuration()
  324. dms.LineArray = append(dms.LineArray, lssrv)
  325. }
  326. // 班次2
  327. if dms.DayModelTab.S2Toggle {
  328. nextStartPoint = dms.DayModelTab.S2Beg
  329. if dms.DayModelTab.S2B1End > 0 && dms.DayModelTab.S2B1End > dms.DayModelTab.S2B1Beg {
  330. lssrv = LineSegementSrv{}
  331. lssrv.StartSecond = nextStartPoint
  332. lssrv.EndSecond = dms.DayModelTab.S2B1Beg
  333. lssrv.GetDuration()
  334. nextStartPoint = dms.DayModelTab.S2B1End
  335. dms.LineArray = append(dms.LineArray, lssrv)
  336. }
  337. if dms.DayModelTab.S2B2End > 0 && dms.DayModelTab.S2B2End > dms.DayModelTab.S2B2Beg {
  338. lssrv = LineSegementSrv{}
  339. lssrv.StartSecond = nextStartPoint
  340. lssrv.EndSecond = dms.DayModelTab.S2B2Beg
  341. lssrv.GetDuration()
  342. nextStartPoint = dms.DayModelTab.S2B2End
  343. dms.LineArray = append(dms.LineArray, lssrv)
  344. }
  345. if dms.DayModelTab.S2B3End > 0 && dms.DayModelTab.S2B3End > dms.DayModelTab.S2B3Beg {
  346. lssrv = LineSegementSrv{}
  347. lssrv.StartSecond = nextStartPoint
  348. lssrv.EndSecond = dms.DayModelTab.S2B3Beg
  349. lssrv.GetDuration()
  350. nextStartPoint = dms.DayModelTab.S2B3End
  351. dms.LineArray = append(dms.LineArray, lssrv)
  352. }
  353. if dms.DayModelTab.S2B4End > 0 && dms.DayModelTab.S2B4End > dms.DayModelTab.S2B4Beg {
  354. lssrv = LineSegementSrv{}
  355. lssrv.StartSecond = nextStartPoint
  356. lssrv.EndSecond = dms.DayModelTab.S2B4Beg
  357. lssrv.GetDuration()
  358. nextStartPoint = dms.DayModelTab.S2B4End
  359. dms.LineArray = append(dms.LineArray, lssrv)
  360. }
  361. if dms.DayModelTab.S2B5End > 0 && dms.DayModelTab.S2B5End > dms.DayModelTab.S2B5Beg {
  362. lssrv = LineSegementSrv{}
  363. lssrv.StartSecond = nextStartPoint
  364. lssrv.EndSecond = dms.DayModelTab.S2B5Beg
  365. lssrv.GetDuration()
  366. nextStartPoint = dms.DayModelTab.S2B5End
  367. dms.LineArray = append(dms.LineArray, lssrv)
  368. }
  369. lssrv = LineSegementSrv{}
  370. lssrv.StartSecond = nextStartPoint
  371. lssrv.EndSecond = dms.DayModelTab.S2End
  372. lssrv.GetDuration()
  373. dms.LineArray = append(dms.LineArray, lssrv)
  374. }
  375. // 班次2
  376. if dms.DayModelTab.S3Toggle {
  377. nextStartPoint = dms.DayModelTab.S3Beg
  378. if dms.DayModelTab.S3B1End > 0 && dms.DayModelTab.S3B1End > dms.DayModelTab.S3B1Beg {
  379. lssrv = LineSegementSrv{}
  380. lssrv.StartSecond = nextStartPoint
  381. lssrv.EndSecond = dms.DayModelTab.S3B1Beg
  382. lssrv.GetDuration()
  383. nextStartPoint = dms.DayModelTab.S3B1End
  384. dms.LineArray = append(dms.LineArray, lssrv)
  385. }
  386. if dms.DayModelTab.S3B2End > 0 && dms.DayModelTab.S3B2End > dms.DayModelTab.S3B2Beg {
  387. lssrv = LineSegementSrv{}
  388. lssrv.StartSecond = nextStartPoint
  389. lssrv.EndSecond = dms.DayModelTab.S3B2Beg
  390. lssrv.GetDuration()
  391. nextStartPoint = dms.DayModelTab.S3B2End
  392. dms.LineArray = append(dms.LineArray, lssrv)
  393. }
  394. if dms.DayModelTab.S3B3End > 0 && dms.DayModelTab.S3B3End > dms.DayModelTab.S3B3Beg {
  395. lssrv = LineSegementSrv{}
  396. lssrv.StartSecond = nextStartPoint
  397. lssrv.EndSecond = dms.DayModelTab.S3B3Beg
  398. lssrv.GetDuration()
  399. nextStartPoint = dms.DayModelTab.S3B3End
  400. dms.LineArray = append(dms.LineArray, lssrv)
  401. }
  402. if dms.DayModelTab.S3B4End > 0 && dms.DayModelTab.S3B4End > dms.DayModelTab.S3B4Beg {
  403. lssrv = LineSegementSrv{}
  404. lssrv.StartSecond = nextStartPoint
  405. lssrv.EndSecond = dms.DayModelTab.S3B4Beg
  406. lssrv.GetDuration()
  407. nextStartPoint = dms.DayModelTab.S3B4End
  408. dms.LineArray = append(dms.LineArray, lssrv)
  409. }
  410. if dms.DayModelTab.S3B5End > 0 && dms.DayModelTab.S3B5End > dms.DayModelTab.S3B5Beg {
  411. lssrv = LineSegementSrv{}
  412. lssrv.StartSecond = nextStartPoint
  413. lssrv.EndSecond = dms.DayModelTab.S3B5Beg
  414. lssrv.GetDuration()
  415. nextStartPoint = dms.DayModelTab.S3B5End
  416. dms.LineArray = append(dms.LineArray, lssrv)
  417. }
  418. lssrv = LineSegementSrv{}
  419. lssrv.StartSecond = nextStartPoint
  420. lssrv.EndSecond = dms.DayModelTab.S3End
  421. lssrv.GetDuration()
  422. dms.LineArray = append(dms.LineArray, lssrv)
  423. }
  424. }
  425. tmsrv.DayModelDict[dms.DayModelNr] = dms
  426. }
  427. return
  428. }