Commit f7e8ce7a73048c065196aede19edeb772731d7e3

Authored by 潘钊
1 parent 13e708cc

update

src/main/java/com/bsth/StartCommand.java
... ... @@ -12,8 +12,8 @@ import org.springframework.boot.CommandLineRunner;
12 12 import org.springframework.stereotype.Component;
13 13  
14 14 import com.bsth.security.SecurityMetadataSourceService;
15   -import com.bsth.util.DateUtils;
16   -import com.bsth.vehicle.GetSchedulePlanThread;
  15 +import com.bsth.service.realcontrol.GetSchedulePlanThread;
  16 +import com.bsth.service.realcontrol.SchedulePersistenceThread;
17 17 import com.bsth.vehicle.common.CommonRefreshThread;
18 18 import com.bsth.vehicle.directive.DirectivePersistenceThread;
19 19 import com.bsth.vehicle.gpsdata.GpsRefreshThread;
... ... @@ -31,7 +31,7 @@ public class StartCommand implements CommandLineRunner{
31 31 @Autowired
32 32 SecurityMetadataSourceService invocationSecurityMetadataSourceService;
33 33  
34   - public static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(4);
  34 + public static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(5);
35 35  
36 36 @Autowired
37 37 GpsRefreshThread gpsRefreshThread;
... ... @@ -45,6 +45,9 @@ public class StartCommand implements CommandLineRunner{
45 45 @Autowired
46 46 DirectivePersistenceThread directivePersistenceThread;
47 47  
  48 + @Autowired
  49 + SchedulePersistenceThread SchedulePersistenceThread;
  50 +
48 51 @Override
49 52 public void run(String... arg0){
50 53  
... ... @@ -61,10 +64,13 @@ public class StartCommand implements CommandLineRunner{
61 64 , 60 * 60 * 24, TimeUnit.SECONDS);*/
62 65  
63 66 //两分钟调度指令入库一次
64   - //scheduler.scheduleWithFixedDelay(directivePersistenceThread, 20, 60 * 1, TimeUnit.SECONDS);
  67 + //scheduler.scheduleWithFixedDelay(directivePersistenceThread, 20, 60 * 2, TimeUnit.SECONDS);
65 68  
66 69 //两小时刷新一次对照数据
67   - scheduler.scheduleWithFixedDelay(commonRefreshThread, 0, 60 * 60 * 2, TimeUnit.SECONDS);
  70 + //scheduler.scheduleWithFixedDelay(commonRefreshThread, 0, 60 * 60 * 2, TimeUnit.SECONDS);
  71 +
  72 + //一分钟持久化一次实际排班
  73 + scheduler.scheduleWithFixedDelay(SchedulePersistenceThread, 60 * 1, 60 * 1, TimeUnit.SECONDS);
68 74 } catch (Exception e) {
69 75 e.printStackTrace();
70 76 }
... ...
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
... ... @@ -5,6 +5,7 @@ import java.util.Map;
5 5  
6 6 import org.springframework.beans.factory.annotation.Autowired;
7 7 import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestMethod;
8 9 import org.springframework.web.bind.annotation.RequestParam;
9 10 import org.springframework.web.bind.annotation.RestController;
10 11  
... ... @@ -14,7 +15,7 @@ import com.bsth.service.realcontrol.ScheduleRealInfoService;
14 15  
15 16 @RestController
16 17 @RequestMapping("/realSchedule")
17   -public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, Integer>{
  18 +public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, Long>{
18 19  
19 20 @Autowired
20 21 ScheduleRealInfoService scheduleRealInfoService;
... ... @@ -33,8 +34,8 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
33 34 * @param @param dfsj 待发时间(HH:mm)
34 35 * @throws
35 36 */
36   - public Map<String, Object> outgoAdjust(@RequestParam Integer id, @RequestParam String remarks,@RequestParam String dfsj){
37   -
38   - return null;
  37 + @RequestMapping(value = "/outgoAdjust", method = RequestMethod.POST)
  38 + public Map<String, Object> outgoAdjust(@RequestParam Long id, @RequestParam String remarks,@RequestParam String dfsj){
  39 + return scheduleRealInfoService.outgoAdjust(id, remarks, dfsj);
39 40 }
40 41 }
... ...
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
... ... @@ -126,6 +126,12 @@ public class ScheduleRealInfo {
126 126 * 待发时间(格式 HH:mm)
127 127 */
128 128 private String dfsj;
  129 +
  130 + /**
  131 + * 发车时间戳
  132 + */
  133 + @Transient
  134 + private Long fcsjT;
129 135  
130 136 public Long getId() {
131 137 return id;
... ... @@ -430,5 +436,12 @@ public class ScheduleRealInfo {
430 436 public void setDfsj(String dfsj) {
431 437 this.dfsj = dfsj;
432 438 }
433   -
  439 +
  440 + public Long getFcsjT() {
  441 + return fcsjT;
  442 + }
  443 +
  444 + public void setFcsjT(Long fcsjT) {
  445 + this.fcsjT = fcsjT;
  446 + }
434 447 }
... ...
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
... ... @@ -9,7 +9,7 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo;
9 9 import com.bsth.repository.BaseRepository;
10 10  
11 11 @Repository
12   -public interface ScheduleRealInfoRepository extends BaseRepository<ScheduleRealInfo, Integer>{
  12 +public interface ScheduleRealInfoRepository extends BaseRepository<ScheduleRealInfo, Long>{
13 13  
14 14 @Query("select s from ScheduleRealInfo s where s.xlBm in ?1")
15 15 List<ScheduleRealInfo> findByLines(List<String> lines);
... ...
src/main/java/com/bsth/service/realcontrol/GetSchedulePlanThread.java
... ... @@ -58,8 +58,7 @@ public class GetSchedulePlanThread extends Thread{
58 58 item.setFcsjT(sdf2.parse(dateStr + " " + item.getFcsj()).getTime());
59 59 }
60 60  
61   - //scheduleRealInfoRepository.save(realList);
62   - new BatchSaveUtils<ScheduleRealInfo>().saveListMysql(realList, ScheduleRealInfo.class);
  61 + //new BatchSaveUtils<ScheduleRealInfo>().saveList(realList, ScheduleRealInfo.class);
63 62 //写入缓存
64 63 ScheduleBuffer.init(realList);
65 64 logger.info("结束................." + sdf3.format(new Date(System.currentTimeMillis())));
... ...
src/main/java/com/bsth/service/realcontrol/ScheduleBuffer.java 0 → 100644
  1 +package com.bsth.service.realcontrol;
  2 +
  3 +import java.util.Collections;
  4 +import java.util.Comparator;
  5 +import java.util.HashMap;
  6 +import java.util.LinkedList;
  7 +import java.util.List;
  8 +import java.util.Map;
  9 +
  10 +import org.slf4j.Logger;
  11 +import org.slf4j.LoggerFactory;
  12 +
  13 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  14 +import com.google.common.collect.ArrayListMultimap;
  15 +
  16 +/**
  17 + *
  18 + * @ClassName: ScheduleRealInfoBuffer
  19 + * @Description: TODO(当天实际排班缓存)
  20 + * @author PanZhao
  21 + * @date 2016年6月14日 上午9:40:38
  22 + *
  23 + */
  24 +public class ScheduleBuffer {
  25 +
  26 + static Logger logger = LoggerFactory.getLogger(ScheduleBuffer.class);
  27 +
  28 + /**
  29 + * 当天实际排班
  30 + * K 线路编码 V 按时间升序的班次
  31 + */
  32 + public static ArrayListMultimap<String, ScheduleRealInfo> schedulListMap;
  33 +
  34 + /**
  35 + * 主键 和 排班映射
  36 + */
  37 + public static Map<Long, ScheduleRealInfo> pkSchedulMap;
  38 +
  39 + /**
  40 + * 需要持久化的排班
  41 + */
  42 + public static LinkedList<ScheduleRealInfo> persistentList;
  43 +
  44 + static{
  45 + schedulListMap = ArrayListMultimap.create();
  46 + pkSchedulMap = new HashMap<>();
  47 + persistentList = new LinkedList<>();
  48 + }
  49 +
  50 + public static int init(List<ScheduleRealInfo> list){
  51 +
  52 + try{
  53 + //发车时间排序
  54 + Collections.sort(list, new Comparator<ScheduleRealInfo>() {
  55 +
  56 + @Override
  57 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  58 + return (int) (o1.getFcsjT() - o2.getFcsjT());
  59 + }
  60 + });
  61 +
  62 + for(ScheduleRealInfo schedul : list){
  63 + schedulListMap.put(schedul.getXlBm(), schedul);
  64 + pkSchedulMap.put(schedul.getId(), schedul);
  65 + }
  66 + }catch(Exception e){
  67 + logger.error("缓存排班数据失败...", e);
  68 + return -1;
  69 + }
  70 + return 0;
  71 + }
  72 +}
... ...
src/main/java/com/bsth/service/realcontrol/SchedulePersistenceThread.java 0 → 100644
  1 +package com.bsth.service.realcontrol;
  2 +
  3 +import java.util.LinkedList;
  4 +
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.stereotype.Component;
  7 +
  8 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  9 +import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
  10 +
  11 +/**
  12 + *
  13 + * @ClassName: SchedulePersistenceThread
  14 + * @Description: TODO(排班缓存 修改 持久化)
  15 + * @author PanZhao
  16 + * @date 2016年6月14日 下午1:11:49
  17 + *
  18 + */
  19 +@Component
  20 +public class SchedulePersistenceThread extends Thread {
  21 +
  22 + @Autowired
  23 + ScheduleRealInfoRepository scheduleRepository;
  24 +
  25 + @Override
  26 + public void run() {
  27 + LinkedList<ScheduleRealInfo> list = ScheduleBuffer.persistentList;
  28 +
  29 + ScheduleRealInfo schedule;
  30 + for (int i = 0; i < 1000; i++) {
  31 + schedule = list.poll();
  32 +
  33 + if (null == schedule)
  34 + break;
  35 +
  36 + scheduleRepository.save(schedule);
  37 + }
  38 + }
  39 +}
... ...
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
... ... @@ -9,8 +9,10 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo;
9 9 import com.bsth.service.BaseService;
10 10  
11 11 @Service
12   -public interface ScheduleRealInfoService extends BaseService<ScheduleRealInfo, Integer>{
  12 +public interface ScheduleRealInfoService extends BaseService<ScheduleRealInfo, Long>{
13 13  
14 14 Map<String, Collection<ScheduleRealInfo>> findByLines(String lines);
15 15  
  16 + Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj);
  17 +
16 18 }
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
1 1 package com.bsth.service.realcontrol.impl;
2 2  
3 3 import java.util.Collection;
  4 +import java.util.HashMap;
4 5 import java.util.List;
5 6 import java.util.Map;
6 7  
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
7 10 import org.springframework.beans.factory.annotation.Autowired;
8 11 import org.springframework.stereotype.Service;
9 12  
  13 +import com.bsth.common.ResponseCode;
10 14 import com.bsth.entity.realcontrol.ScheduleRealInfo;
11 15 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
12 16 import com.bsth.service.impl.BaseServiceImpl;
  17 +import com.bsth.service.realcontrol.ScheduleBuffer;
13 18 import com.bsth.service.realcontrol.ScheduleRealInfoService;
14 19 import com.google.common.base.Splitter;
15 20 import com.google.common.collect.ArrayListMultimap;
... ... @@ -17,11 +22,13 @@ import com.google.common.collect.Lists;
17 22 import com.google.common.collect.Multimap;
18 23  
19 24 @Service
20   -public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Integer> implements ScheduleRealInfoService{
  25 +public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long> implements ScheduleRealInfoService{
21 26  
22 27 @Autowired
23 28 ScheduleRealInfoRepository scheduleRealInfoRepository;
24 29  
  30 + Logger logger = LoggerFactory.getLogger(this.getClass());
  31 +
25 32 @Override
26 33 public Map<String, Collection<ScheduleRealInfo>> findByLines(String lines) {
27 34 List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lines));
... ... @@ -36,4 +43,29 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
36 43  
37 44 return mMap.asMap();
38 45 }
  46 +
  47 + @Override
  48 + public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj) {
  49 + Map<String, Object> map = new HashMap<>();
  50 + try{
  51 +
  52 + ScheduleRealInfo schedule = ScheduleBuffer.pkSchedulMap.get(id);
  53 + schedule.setDfsj(dfsj);
  54 + String newRem = schedule.getRemarks();
  55 + if(null == newRem)
  56 + newRem = "";
  57 + newRem += "[待发调整] " + remarks +";";
  58 + schedule.setRemarks(newRem);
  59 + //持久化到数据库
  60 + ScheduleBuffer.persistentList.add(schedule);
  61 +
  62 + map.put("status", ResponseCode.SUCCESS);
  63 + map.put("dfsj", dfsj);
  64 + map.put("remarks", newRem);
  65 + }catch(Exception e){
  66 + logger.error("", e);
  67 + map.put("status", ResponseCode.ERROR);
  68 + }
  69 + return map;
  70 + }
39 71 }
... ...
src/main/java/com/bsth/vehicle/directive/DirectivePersistenceThread.java
1 1 package com.bsth.vehicle.directive;
2 2  
3   -import java.util.ArrayList;
4 3 import java.util.LinkedList;
5   -import java.util.List;
6 4  
7 5 import org.slf4j.Logger;
8 6 import org.slf4j.LoggerFactory;
... ... @@ -33,8 +31,6 @@ public class DirectivePersistenceThread extends Thread{
33 31 public void run() {
34 32 LinkedList<Directive> list = DirectiveBuffer.transientList;
35 33  
36   - List<Directive> persList = new ArrayList<>();
37   -
38 34 Directive directive;
39 35 for(int i = 0; i < 1000; i ++){
40 36 directive = list.poll();
... ... @@ -42,15 +38,7 @@ public class DirectivePersistenceThread extends Thread{
42 38 if(null == directive)
43 39 break;
44 40  
45   - persList.add(directive);
46   - }
47   -
48   - if(persList.size() > 0){
49   - try{
50   - directiveRepository.save(persList);
51   - }catch(Exception e){
52   - logger.error("", e);
53   - }
  41 + directiveRepository.save(directive);
54 42 }
55 43 }
56 44 }
... ...
src/main/resources/static/pages/control/line/css/lineControl.css
... ... @@ -864,7 +864,7 @@ height: 400px;
864 864 width: 9%;
865 865 }
866 866 .pb-table tr td:nth-child(5){
867   - width: 15%;
  867 + /* width: 15%; */
868 868 }
869 869 .pb-table tr td:nth-child(6){
870 870 width: 10%;
... ... @@ -873,7 +873,10 @@ height: 400px;
873 873 width: 10%;
874 874 }
875 875 .pb-table tr td:nth-child(8){
876   - width: 15%;
  876 + /* width: 15%; */
  877 +}
  878 +.pb-table tr td:nth-child(9){
  879 + width: 55px;
877 880 }
878 881 .pb-table tr td:nth-child(10){
879 882 width: 47px;
... ... @@ -1298,6 +1301,9 @@ height: 400px;
1298 1301 border: 1px solid #d3cfc8;
1299 1302 padding: 8px 0 4px 5px;
1300 1303 color: black;
  1304 +
  1305 + height: 240px;
  1306 + overflow: auto;
1301 1307 }
1302 1308  
1303 1309  
... ... @@ -1458,4 +1464,12 @@ height: 400px;
1458 1464 .hide-lt-1080{
1459 1465 display: none;
1460 1466 }
  1467 +}
  1468 +
  1469 +.tab_line .panel-wrap ._panel ._body .pb-table a.remarks-popover{
  1470 + color: gray;text-decoration: none;
  1471 +}
  1472 +
  1473 +.form-custom hr{
  1474 + margin: 15px 0;
1461 1475 }
1462 1476 \ No newline at end of file
... ...
src/main/resources/static/pages/control/line/js/alone.js
... ... @@ -39,12 +39,36 @@ var _alone = (function(){
39 39 trigger: 'hover',
40 40 container: '.portlet-fullscreen'
41 41 });
  42 +
  43 + //备注POPOVER
  44 + $('.remarks-popover').popover({trigger: 'hover',container: '.portlet-fullscreen',placement:'bottom'});
42 45 });
43 46  
44 47 //$('.tab-pane.aloneline')
45 48 /*_data.queryStationRoute('10904' , 'lineSvg10904' , drawSvg.init);
46 49 */
  50 + },
  51 + //刷新班次
  52 + refreshSchedule: function(schedule){
  53 + //xlBm
  54 + var tr = $('tr[data-id='+schedule.id+']', '#tab_line_' + schedule.xlBm)[0]
  55 + ,cells = tr.cells, name;
47 56  
  57 + $.each(cells, function(i, cell){
  58 + name = $(cell).data('name');
  59 + if(name == 'remarks'){
  60 + var link = $(cell).find('a');
  61 + if(link.length == 0){
  62 + $(cell).append('<a class="remarks-popover" href="javascript:;" data-toggle="popover" data-content="'+schedule[name]+'" >备注</a>')
  63 + }
  64 + else{
  65 + link.attr('data-content', schedule[name]);
  66 + }
  67 + }
  68 + else{
  69 + $(cell).text(schedule[name]);
  70 + }
  71 + });
48 72 }
49 73 }
50 74  
... ...
src/main/resources/static/pages/control/line/js/data.js
... ... @@ -14,7 +14,8 @@ var _data = (function(){
14 14  
15 15 var dateStr = moment().format('YYYY-MM-DD');
16 16 //实际排班
17   - var schedules = {};
  17 + var schedules = {}
  18 + ,scheduleList = [];
18 19  
19 20 var dataObject = {
20 21 getLines: function(){
... ... @@ -68,10 +69,10 @@ var _data = (function(){
68 69 },
69 70 //查询实际排班计划
70 71 queryRealSchedule: function(lineArrayStr, cb){
71   - $.get('/realSchedule/lines', {lines: lineArrayStr} ,function(scheduls){
  72 + $.get('/realSchedule/lines', {lines: lineArrayStr} ,function(rs){
72 73 var list, sm, em;
73   - for(var lineCode in scheduls){
74   - list = scheduls[lineCode];
  74 + for(var lineCode in rs){
  75 + list = rs[lineCode];
75 76 $.each(list, function(){
76 77 //发车时间 + 历时 = 终点时间
77 78 if(this.bcsj){
... ... @@ -82,9 +83,11 @@ var _data = (function(){
82 83 this.zdsj = em.format('HH:mm');
83 84 //终点时间戳
84 85 this.zdsjT = em.valueOf();
85   - //缓存实际排班计划
86   - schedules[this.id] = this;
87 86 }
  87 +
  88 + //缓存实际排班计划
  89 + schedules[this.id] = this;
  90 + scheduleList.push(this);
88 91 });
89 92  
90 93 //按发车时间排序
... ... @@ -92,13 +95,21 @@ var _data = (function(){
92 95 return a.fcsjT - b.fcsjT;
93 96 });
94 97 }
95   -
96   - cb && cb(scheduls);
  98 + cb && cb(rs);
97 99 });
98 100 },
99 101 //根据排班ID获取排班
100 102 getSchedulById: function(id){
101 103 return schedules[id];
  104 + },
  105 + //根据车辆内部编码获取排班数组
  106 + getSchedulByVeh: function(nbbm){
  107 + var array = [];
  108 + $.each(scheduleList, function(){
  109 + if(this.clZbh == nbbm)
  110 + array.push(this);
  111 + });
  112 + return array;
102 113 }
103 114 };
104 115  
... ...
src/main/resources/static/pages/control/line/js/rightMenu.js
... ... @@ -15,7 +15,6 @@ var _menu = (function() {
15 15 layer.alert('无法找到当前项对应的班次信息,请尝试刷新页面!', {icon: 2, title: '异常'});
16 16 return;
17 17 }
18   - console.log(schedul);
19 18 menuObject[method](schedul);
20 19 });
21 20  
... ... @@ -44,7 +43,7 @@ var _menu = (function() {
44 43 },
45 44 //待发调整
46 45 outgoAdjust: function(schedul){
47   - layer.open({
  46 + var index = layer.open({
48 47 type: 1,
49 48 area: ['630px', '545px'],
50 49 maxmin: true,
... ... @@ -55,25 +54,50 @@ var _menu = (function() {
55 54 success: function(){
56 55 $('#outgoAdjustForm button.confirm').one('click', function(){
57 56 var params = $('#outgoAdjustForm').serializeJSON();
58   - console.log(params);
  57 + $post('/realSchedule/outgoAdjust', params, function(rs){
  58 + layer.close(index);
  59 + layer.msg('调整成功!');
  60 + schedul.dfsj = rs.dfsj;
  61 + schedul.remarks = rs.remarks;
  62 + _alone.refreshSchedule(schedul);
  63 + });
59 64 });
60 65 }
61 66 });
62 67 },
63 68 //计划烂班
64   - planDestroy: function(){
  69 + planDestroy: function(schedul){
  70 + var data = {item: schedul, array : _data.getSchedulByVeh(schedul.clZbh)}
65 71 layer.open({
66 72 type: 1,
67   - area: ['370px', '585px'],
  73 + area: ['370px', '605px'],
68 74 maxmin: true,
69 75 skin:'layui-layer-molv',
70   - content: template('plan_destroy_body_temp', {}),
  76 + content: template('plan_destroy_body_temp', data),
71 77 shift: 5,
72 78 title: '计划烂班设置',
73 79 success: function(){
74   - $('#planDestroyForm .icheck').iCheck({
75   - checkboxClass: 'icheckbox_square-red',
76   - increaseArea: '20%'
  80 + var f = $('#planDestroyForm');
  81 + $('.icheck', f).iCheck({
  82 + checkboxClass: 'icheckbox_square-red',
  83 + increaseArea: '20%'
  84 + });
  85 + //滚动到选中项
  86 + var cont = $('.custom-check-box', f)
  87 + ,checked = $('.icheck:checked', f);
  88 + if(checked.length > 0){
  89 + cont.animate({
  90 + scrollTop: checked.offset().top - cont.offset().top + checked.scrollTop()
  91 + }, 500);
  92 + }
  93 + //确定
  94 + $('button.confirm', f).one('click', function(){
  95 + var params = f.serializeJSON()
  96 + ,text = '确定烂掉部分班次?,';
  97 + $.each(params.ids, function(i, id){
  98 + var s = _data.getSchedulById(id);
  99 + text += (s.)
  100 + });
77 101 });
78 102 }
79 103 });
... ...
src/main/resources/static/pages/control/line/temps/alone_tp.html
... ... @@ -30,14 +30,18 @@
30 30 {{each up as item i}}
31 31 <tr data-id={{item.id}}>
32 32 <td name="lineNo">{{i + 1}}</td>
33   - <td><a href="javascript:;">{{item.lpName}}</a></td>
34   - <td>{{item.clZbh}}</td>
35   - <td>{{item.zdsj}}</td>
  33 + <td data-name="lpName"><a href="javascript:;">{{item.lpName}}</a></td>
  34 + <td data-name="clZbh">{{item.clZbh}}</td>
  35 + <td data-name="zdsj">{{item.zdsj}}</td>
36 36 <td></td>
37   - <td>{{item.fcsj}}</td>
38   - <td>{{item.dfsj}}</td>
  37 + <td data-name="fcsj">{{item.fcsj}}</td>
  38 + <td data-name="dfsj">{{item.dfsj}}</td>
39 39 <td></td>
40   - <td class="hide-lt-1080"></td>
  40 + <td class="hide-lt-1080" data-name="remarks">
  41 + {{if item.remarks != null}}
  42 + <a class="remarks-popover" href="javascript:;" data-toggle="popover" data-content="{{item.remarks}}" >备注</a>
  43 + {{/if}}
  44 + </td>
41 45 <td><a href="javascript:;">主</a></td>
42 46 </tr>
43 47 {{/each}}
... ... @@ -71,16 +75,20 @@
71 75 <table class="table table-striped table-bordered table-advance pb-table data">
72 76 <tbody>
73 77 {{each down as item i}}
74   - <tr>
  78 + <tr data-id={{item.id}}>
75 79 <td name="lineNo">{{i + 1}}</td>
76   - <td><a href="javascript:;">{{item.lpName}}</a></td>
77   - <td>{{item.clZbh}}</td>
78   - <td>{{item.zdsj}}</td>
  80 + <td data-name="lpName"><a href="javascript:;">{{item.lpName}}</a></td>
  81 + <td data-name="clZbh">{{item.clZbh}}</td>
  82 + <td data-name="zdsj">{{item.zdsj}}</td>
79 83 <td></td>
80   - <td>{{item.fcsj}}</td>
81   - <td>{{item.dfsj}}</td>
  84 + <td data-name="fcsj">{{item.fcsj}}</td>
  85 + <td data-name="dfsj">{{item.dfsj}}</td>
82 86 <td></td>
83   - <td class="hide-lt-1080"></td>
  87 + <td class="hide-lt-1080" data-name="remarks">
  88 + {{if item.remarks != null}}
  89 + <a class="remarks-popover" href="javascript:;" data-toggle="popover" data-content="{{item.remarks}}" >备注</a>
  90 + {{/if}}
  91 + </td>
84 92 <td><a href="javascript:;">主</a></td>
85 93 </tr>
86 94 {{/each}}
... ... @@ -214,6 +222,7 @@
214 222 <!-- 待发调整 -->
215 223 <script id="outgo_adjust_body_temp" type="text/html">
216 224 <form action="#" class="form-horizontal form-custom" id="outgoAdjustForm">
  225 + <input value={{id}} type="hidden" name="id">
217 226 <div class="form-body">
218 227 <div class="form-custom-row">
219 228 <div class="item">
... ... @@ -292,7 +301,7 @@
292 301 <div class="form-custom-row">
293 302 <div class="item full">
294 303 <span class="item-label" style="width: 80px;">内部编码: </span>
295   - <input disabled class="form-control" value="W2B-095">
  304 + <input disabled class="form-control" value="{{item.clZbh}}">
296 305 </div>
297 306 </div>
298 307  
... ... @@ -301,27 +310,12 @@
301 310 <span class="item-label" style="width: 80px;vertical-align: top;">执行班次: </span>
302 311 <div class="custom-check-box" >
303 312 <div class="checkbox-list">
  313 +{{each array as obj i}}
304 314 <label>
305   - <div class="checker"><span><input type="checkbox" class="icheck"></span></div> 11:56
306   - </label>
307   - <label>
308   - <div class="checker"><span><input type="checkbox" class="icheck"></span></div> 16:31
309   - </label>
310   - <label>
311   - <div class="checker"><span><input type="checkbox" class="icheck"></span></div> 16:46
312   - </label>
313   - <label>
314   - <div class="checker"><span><input type="checkbox" class="icheck"></span></div> 17:34
315   - </label>
316   - <label>
317   - <div class="checker"><span><input type="checkbox" class="icheck"></span></div> 18:48
318   - </label>
319   - <label>
320   - <div class="checker"><span><input type="checkbox" class="icheck"></span></div> 19:40
321   - </label>
322   - <label>
323   - <div class="checker"><span><input type="checkbox" class="icheck"></span></div> 20:33
  315 + <div class="checker">
  316 + <span><input type="checkbox" value={{obj.id}} name="ids[]" class="icheck" {{if obj.fcsj==item.fcsj}}checked{{/if}}></span></div> {{obj.fcsj}}
324 317 </label>
  318 +{{/each}}
325 319 </div>
326 320 </div>
327 321 </div>
... ... @@ -352,7 +346,7 @@
352 346  
353 347 <div class="form-custom-row">
354 348 <div class="item full" >
355   - <textarea class="form-control" rows="4" placeholder="不超过50个字符"></textarea>
  349 + <textarea class="form-control" rows="4" name="remarks" placeholder="烂班说明!不超过50个字符,必填"></textarea>
356 350 </div>
357 351 </div>
358 352  
... ...