Commit d2dcc317b4e6386b9726686128d62ab33b9b3acc

Authored by 潘钊
2 parents 36404ec9 a0638d3c

Merge branch 'minhang' of http://222.66.0.204:8090/panzhaov5/bsth_control into minhang

Too many changes to show.

To preserve performance only 16 of 28 files are displayed.

... ... @@ -259,11 +259,11 @@
259 259 </dependency>
260 260  
261 261  
262   - <!--<dependency>-->
263   - <!--<groupId>ojdbc</groupId>-->
264   - <!--<artifactId>ojdbc</artifactId>-->
265   - <!--<version>14</version>-->
266   - <!--</dependency>-->
  262 + <dependency>
  263 + <groupId>ojdbc</groupId>
  264 + <artifactId>ojdbc</artifactId>
  265 + <version>14</version>
  266 + </dependency>
267 267 </dependencies>
268 268  
269 269 <dependencyManagement>
... ...
src/main/java/com/bsth/controller/report/ReportController.java
... ... @@ -51,6 +51,7 @@ public class ReportController {
51 51 m.put("jzsj", a.getJzsj());
52 52 m.put("czsj", a.getCzsj());
53 53 m.put("upDown", a.getUpDown()==0?"上行":"下行");
  54 + resList.add(m);
54 55 i++;
55 56 }
56 57  
... ... @@ -66,41 +67,61 @@ public class ReportController {
66 67 return resList;
67 68 }
68 69  
  70 +
69 71 @RequestMapping(value="/queryListClzd" ,method = RequestMethod.GET)
70 72 public List<ArrivalInfo> queryListClzd(@RequestParam String zd,@RequestParam String line,
71 73 @RequestParam String zdlx,@RequestParam String fcsj,@RequestParam String ddsj){
72 74 return service.queryListClzd(line,zd,zdlx,fcsj,ddsj);
73 75 }
74 76  
75   - @RequestMapping(value="/exportQueryListClzd" ,method = RequestMethod.GET)
76   - public List<Map<String, Object>> exportQueryListClzd(@RequestParam String zd,@RequestParam String line,
77   - @RequestParam String zdlx,@RequestParam String fcsj,@RequestParam String ddsj){
  77 +
  78 +
  79 +
  80 + @RequestMapping(value="/jobSummaryExport" ,method = RequestMethod.GET)
  81 + public List<Map<String, Object>> jobSummaryExport(@RequestParam Map<String, Object> map){
78 82 List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  83 + String lineName=map.get("lineName").toString();
  84 + String date=map.get("date").toString();
79 85 ReportUtils ee = new ReportUtils();
80   - List<ArrivalInfo> list=service.queryListClzd(line, zd, zdlx, fcsj, ddsj);
81   - List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
82   - int i=1;
83   - for (ArrivalInfo a:list ) {
84   - Map<String, Object> m = new HashMap<String, Object>();
85   - m.put("i", i);
86   - m.put("nbbm", a.getNbbm());
87   - m.put("stopName", a.getStopName());
88   - m.put("jzsj", a.getJzsj());
89   - m.put("czsj", a.getCzsj());
90   - m.put("upDown", a.getUpDown()==0?"上行":"下行");
91   - i++;
  86 + List<Map<String,Object>> fwqlList= service.jobFwqk(map);
  87 + List<Map<String, Object>> lgqlList=service.jobLjqk(map);
  88 + map=service.jobHzxx(map);
  89 + map.put("lineName", lineName);
  90 + map.put("date",date);
  91 + if(fwqlList.size()<=0){
  92 + Map<String, Object> newMap=new HashMap<String,Object>();
  93 + newMap.put("nr", " ");
  94 + newMap.put("lp", " ");
  95 + newMap.put("nbbm", " ");
  96 + newMap.put("jgh", " ");
  97 + newMap.put("dz", " ");
  98 + newMap.put("sj", " ");
  99 + newMap.put("lbbc", " ");
  100 + newMap.put("lblc", " ");
  101 + newMap.put("jyqp", " ");
  102 + fwqlList.add(newMap);
  103 + }
  104 + if(lgqlList.size()<=0){
  105 + Map<String, Object> newMap=new HashMap<String,Object>();
  106 + newMap.put("lp", " ");
  107 + newMap.put("nbbm", " ");
  108 + newMap.put("jgh", " ");
  109 + newMap.put("dz", " ");
  110 + newMap.put("sj", " ");
  111 + newMap.put("ljlc"," ");
  112 + newMap.put("jyqp", " ");
  113 + lgqlList.add(newMap);
92 114 }
93   -
94 115 try {
95   - Map<String, Object> map=new HashMap<String, Object>();
96   - listI.add(resList.iterator());
  116 + listI.add(fwqlList.iterator());
  117 + listI.add(lgqlList.iterator());
97 118 String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
98   - ee.excelReplace(listI, new Object[] { map }, path + "mould/inoutstation.xls",
99   - path + "export/班次到离站.xls");
  119 + ee.excelReplace(listI, new Object[] { map }, path + "mould/jobSummary.xls",
  120 + path + "export/调度员工作汇总日报.xls");
100 121 } catch (Exception e) {
101 122 e.printStackTrace();
102 123 }
103   - return resList;
  124 + return new ArrayList<Map<String, Object>>();
104 125 }
105 126 @RequestMapping(value = "/sreachZd", method = RequestMethod.GET)
106 127 public List<Map<String, String>> sreachPersonnel(@RequestParam String line,@RequestParam int zdlx,@RequestParam String zd) {
... ...
src/main/java/com/bsth/data/schedule/late_adjust/LateAdjustHandle.java
1   -
2   -package com.bsth.data.schedule.late_adjust;
3   -
4   -import com.bsth.data.BasicData;
5   -import com.bsth.data.LineConfigData;
6   -import com.bsth.data.gpsdata.GpsEntity;
7   -import com.bsth.entity.realcontrol.LineConfig;
8   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
9   -import com.bsth.util.Arith;
10   -import com.bsth.websocket.handler.SendUtils;
11   -import org.slf4j.Logger;
12   -import org.slf4j.LoggerFactory;
13   -import org.springframework.beans.BeansException;
14   -import org.springframework.context.ApplicationContext;
15   -import org.springframework.context.ApplicationContextAware;
16   -import org.springframework.stereotype.Component;
17   -
18   -import java.util.Collection;
19   -import java.util.HashMap;
20   -import java.util.Map;
21   -
22   -/**
23   - * 误点自动调整待发 处理程序
24   - *
25   - * 注意 :这里的误点是指应发未到
26   - * Created by panzhao on 2017/4/16.
27   - */
28   -@Component
29   -public class LateAdjustHandle implements ApplicationContextAware{
30   -
31   - static LineConfigData lineConfigData;
32   - static SendUtils sendUtils;
33   -
34   - static Logger logger = LoggerFactory.getLogger(LateAdjustHandle.class);
35   -
36   - /**
37   - * 应发未到车辆 和 班次
38   - */
39   - private static Map<String, ScheduleRealInfo> lateSchMap;
40   -
41   -
42   - static {
43   - lateSchMap = new HashMap<>();
44   - }
45   -
46   - /**
47   - * 新增一个误点班次
48   - * @param sch
49   - */
50   - public static void putLate(ScheduleRealInfo sch){
51   - try {
52   - //进出场班次不需要
53   - if(sch.getBcType().equals("in") || sch.getBcType().equals("out"))
54   - return;
55   - //线路配置
56   - LineConfig config = lineConfigData.get(sch.getXlBm());
57   - if(sch.getLateMinute() == 0){
58   - if(config.isEnableYjtk()){
59   - sch.setLateMinute(sch.getXlDir().equals("0")?config.getUpStopMinute():config.getDownStopMinute());
60   - }
61   - else
62   - return;
63   - }
64   -
65   - if(sch.getDfsj().compareTo(config.getYjtkStart()) > 0
66   - && sch.getDfsj().compareTo(config.getYjtkEnd()) <= 0){
67   -
68   - ScheduleRealInfo cancel = null;
69   - //之前存在误点班次没有发出
70   - ScheduleRealInfo old = lateSchMap.get(sch.getClZbh());
71   - if(old != null && old.getDfsjT() < sch.getDfsjT()){
72   - remove(old);
73   - cancel = old;
74   - logger.info("【应发未到】old 班次 " + old.getId() + " -被覆盖!");
75   - }
76   -
77   - lateSchMap.put(sch.getClZbh(), sch);
78   - //通知客户端
79   - sch.setLate2(true);
80   - sendUtils.sendAutoWdtz(sch, cancel);
81   -
82   - logger.info("【应发未到】班次 " + sch.getClZbh() + " -" + sch.getDfsj() + " -id: " + sch.getId() + " -加入误点调整!");
83   - }
84   - }catch (Exception e){
85   - logger.error("", e);
86   - }
87   - }
88   -
89   -
90   - /**
91   - * 获取所有应发未到的班次
92   - * @return
93   - */
94   - public static Collection<ScheduleRealInfo> allLateSch(){
95   - return lateSchMap.values();
96   - }
97   -
98   - public static void remove(ScheduleRealInfo sch){
99   - try {
100   - if(lateSchMap.get(sch.getClZbh()) == sch){
101   - lateSchMap.remove(sch.getClZbh());
102   - sch.setLate2(false);
103   - sch.setLateMinute(0);
104   - }
105   - }catch (Exception e){
106   - logger.error("", e);
107   - }
108   - }
109   -
110   - /**
111   - * 车辆到站
112   - * @param gps
113   - */
114   - public static void carArrive(GpsEntity gps){
115   - try{
116   - if(gps.getInstation() != 1)
117   - return;
118   -
119   - ScheduleRealInfo sch = lateSchMap.get(gps.getNbbm());
120   - if(sch == null)
121   - return;
122   -
123   - //进的是班次起点(名称一样即可)
124   - gps.setStationName(BasicData.stationCode2NameMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo()));
125   - if(gps.getStationName().equals(sch.getQdzName())
126   - && sch.getLateMinute() > 0){
127   - //自动调整待发 到达时间 + 停靠时间
128   - long dt = Arith.addLong(gps.getTimestamp(), (sch.getLateMinute() * 60 * 1000));
129   - sch.setDfsjAll(dt);
130   - sch.setDfAuto(true);
131   - //取消应发未到标记
132   - sch.setLate2(false);
133   -
134   - lateSchMap.remove(sch.getClZbh());
135   - logger.info("【应发未到】车辆到站 " + sch.getClZbh() + " -" + sch.getDfsj() + " -到站时间:" + gps.getTimestamp() + " -停靠时间:" + sch.getLateMinute() + " -自动设置的待发时间:" + dt);
136   - }
137   - }catch (Exception e){
138   - e.printStackTrace();
139   - logger.error("", e);
140   - }
141   - }
142   -
143   - @Override
144   - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
145   - lineConfigData = applicationContext.getBean(LineConfigData.class);
146   - sendUtils = applicationContext.getBean(SendUtils.class);
147   - }
  1 +
  2 +package com.bsth.data.schedule.late_adjust;
  3 +
  4 +import com.bsth.data.BasicData;
  5 +import com.bsth.data.LineConfigData;
  6 +import com.bsth.data.gpsdata.GpsEntity;
  7 +import com.bsth.entity.realcontrol.LineConfig;
  8 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  9 +import com.bsth.util.Arith;
  10 +import com.bsth.websocket.handler.SendUtils;
  11 +import org.slf4j.Logger;
  12 +import org.slf4j.LoggerFactory;
  13 +import org.springframework.beans.BeansException;
  14 +import org.springframework.context.ApplicationContext;
  15 +import org.springframework.context.ApplicationContextAware;
  16 +import org.springframework.stereotype.Component;
  17 +
  18 +import java.util.Collection;
  19 +import java.util.HashMap;
  20 +import java.util.Map;
  21 +
  22 +/**
  23 + * 误点自动调整待发 处理程序
  24 + *
  25 + * 注意 :这里的误点是指应发未到
  26 + * Created by panzhao on 2017/4/16.
  27 + */
  28 +@Component
  29 +public class LateAdjustHandle implements ApplicationContextAware{
  30 +
  31 + static LineConfigData lineConfigData;
  32 + static SendUtils sendUtils;
  33 +
  34 + static Logger logger = LoggerFactory.getLogger(LateAdjustHandle.class);
  35 +
  36 + /**
  37 + * 应发未到车辆 和 班次
  38 + */
  39 + private static Map<String, ScheduleRealInfo> lateSchMap;
  40 +
  41 +
  42 + static {
  43 + lateSchMap = new HashMap<>();
  44 + }
  45 +
  46 + /**
  47 + * 新增一个误点班次
  48 + * @param sch
  49 + */
  50 + public static void putLate(ScheduleRealInfo sch){
  51 + try {
  52 + //进出场班次不需要
  53 + if(sch.getBcType().equals("in") || sch.getBcType().equals("out"))
  54 + return;
  55 + //线路配置
  56 + LineConfig config = lineConfigData.get(sch.getXlBm());
  57 + if(sch.getLateMinute() == 0){
  58 + if(config.isEnableYjtk()){
  59 + sch.setLateMinute(sch.getXlDir().equals("0")?config.getUpStopMinute():config.getDownStopMinute());
  60 + }
  61 + else
  62 + return;
  63 + }
  64 +
  65 + if(sch.getDfsj().compareTo(config.getYjtkStart()) > 0
  66 + && sch.getDfsj().compareTo(config.getYjtkEnd()) <= 0){
  67 +
  68 + ScheduleRealInfo cancel = null;
  69 + //之前存在误点班次没有发出
  70 + ScheduleRealInfo old = lateSchMap.get(sch.getClZbh());
  71 + if(old != null && old.getDfsjT() < sch.getDfsjT()){
  72 + remove(old);
  73 + cancel = old;
  74 + logger.info("【应发未到】old 班次 " + old.getId() + " -被覆盖!");
  75 + }
  76 +
  77 + lateSchMap.put(sch.getClZbh(), sch);
  78 + //通知客户端
  79 + sch.setLate2(true);
  80 + sendUtils.sendAutoWdtz(sch, cancel);
  81 +
  82 + logger.info("【应发未到】班次 " + sch.getClZbh() + " -" + sch.getDfsj() + " -id: " + sch.getId() + " -加入误点调整!");
  83 + }
  84 + }catch (Exception e){
  85 + logger.error("", e);
  86 + }
  87 + }
  88 +
  89 +
  90 + /**
  91 + * 获取所有应发未到的班次
  92 + * @return
  93 + */
  94 + public static Collection<ScheduleRealInfo> allLateSch(){
  95 + return lateSchMap.values();
  96 + }
  97 +
  98 + public static void remove(ScheduleRealInfo sch){
  99 + try {
  100 + if(lateSchMap.get(sch.getClZbh()) == sch){
  101 + lateSchMap.remove(sch.getClZbh());
  102 + sch.setLate2(false);
  103 + sch.setLateMinute(0);
  104 + }
  105 + }catch (Exception e){
  106 + logger.error("", e);
  107 + }
  108 + }
  109 +
  110 + /**
  111 + * 车辆到站
  112 + * @param gps
  113 + */
  114 + public static void carArrive(GpsEntity gps){
  115 + try{
  116 + if(gps.getInstation() != 1)
  117 + return;
  118 +
  119 + ScheduleRealInfo sch = lateSchMap.get(gps.getNbbm());
  120 + if(sch == null)
  121 + return;
  122 +
  123 + //进的是班次起点(名称一样即可)
  124 + gps.setStationName(BasicData.stationCode2NameMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo()));
  125 + if(gps.getStationName().equals(sch.getQdzName())
  126 + && sch.getLateMinute() > 0){
  127 + //自动调整待发 到达时间 + 停靠时间
  128 + long dt = Arith.addLong(gps.getTimestamp(), (sch.getLateMinute() * 60 * 1000));
  129 + sch.setDfsjAll(dt);
  130 + sch.setDfAuto(true);
  131 + //取消应发未到标记
  132 + sch.setLate2(false);
  133 +
  134 + lateSchMap.remove(sch.getClZbh());
  135 + logger.info("【应发未到】车辆到站 " + sch.getClZbh() + " -" + sch.getDfsj() + " -到站时间:" + gps.getTimestamp() + " -停靠时间:" + sch.getLateMinute() + " -自动设置的待发时间:" + dt);
  136 + }
  137 + }catch (Exception e){
  138 + e.printStackTrace();
  139 + logger.error("", e);
  140 + }
  141 + }
  142 +
  143 + @Override
  144 + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  145 + lineConfigData = applicationContext.getBean(LineConfigData.class);
  146 + sendUtils = applicationContext.getBean(SendUtils.class);
  147 + }
148 148 }
149 149 \ No newline at end of file
... ...
src/main/java/com/bsth/data/schedule/late_adjust/ScheduleLateThread.java
1   -package com.bsth.data.schedule.late_adjust;
2   -
3   -
4   -import com.bsth.data.schedule.DayOfSchedule;
5   -import com.bsth.data.schedule.ScheduleComparator;
6   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
7   -import com.bsth.websocket.handler.SendUtils;
8   -import org.apache.commons.lang3.StringUtils;
9   -import org.springframework.beans.factory.annotation.Autowired;
10   -import org.springframework.stereotype.Component;
11   -
12   -import java.util.ArrayList;
13   -import java.util.Collections;
14   -import java.util.Comparator;
15   -import java.util.List;
16   -
17   -/**
18   - *
19   - * @ClassName: ScheduleLateThread
20   - * @Description: TODO(班次误点扫描线程)
21   - * @author PanZhao
22   - * @date 2016年8月31日 下午3:09:02
23   - *
24   - */
25   -@Component
26   -public class ScheduleLateThread extends Thread{
27   -
28   - @Autowired
29   - DayOfSchedule dayOfSchedule;
30   -
31   - @Autowired
32   - SendUtils sendUtils;
33   -
34   - private static Comparator<ScheduleRealInfo> cpm = new ScheduleComparator.FCSJ();
35   -
36   - @Override
37   - public void run() {
38   - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll());
39   - Collections.sort(all, cpm);
40   -
41   - long t = System.currentTimeMillis();
42   - int size = all.size();
43   -
44   - ScheduleRealInfo sch;
45   - for(int i = 0; i < size; i ++){
46   - sch = all.get(i);
47   - if(sch.getDfsjT() > t)
48   - break;
49   -
50   - if(sch.isLate())
51   - continue;
52   -
53   - if(sch.getStatus() == 0
54   - && StringUtils.isEmpty(sch.getFcsjActual())){
55   -
56   - //检查应发未到 当前班次无起点到达时间
57   - if(StringUtils.isEmpty(sch.getQdzArrDateSJ())){
58   - ScheduleRealInfo prev = dayOfSchedule.prev(sch);
59   - //上一个班次也没有实际终点到达时间
60   - if(prev != null && StringUtils.isEmpty(prev.getZdsjActual())){
61   - //进入误点调整程序
62   - LateAdjustHandle.putLate(sch);
63   - }
64   - }
65   -
66   - //应发未发
67   - sch.setLate(true);
68   - //通知客户端
69   - sendUtils.refreshSch(sch);
70   - }
71   - }
72   - }
  1 +package com.bsth.data.schedule.late_adjust;
  2 +
  3 +
  4 +import com.bsth.data.schedule.DayOfSchedule;
  5 +import com.bsth.data.schedule.ScheduleComparator;
  6 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  7 +import com.bsth.websocket.handler.SendUtils;
  8 +import org.apache.commons.lang3.StringUtils;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.stereotype.Component;
  11 +
  12 +import java.util.ArrayList;
  13 +import java.util.Collections;
  14 +import java.util.Comparator;
  15 +import java.util.List;
  16 +
  17 +/**
  18 + *
  19 + * @ClassName: ScheduleLateThread
  20 + * @Description: TODO(班次误点扫描线程)
  21 + * @author PanZhao
  22 + * @date 2016年8月31日 下午3:09:02
  23 + *
  24 + */
  25 +@Component
  26 +public class ScheduleLateThread extends Thread{
  27 +
  28 + @Autowired
  29 + DayOfSchedule dayOfSchedule;
  30 +
  31 + @Autowired
  32 + SendUtils sendUtils;
  33 +
  34 + private static Comparator<ScheduleRealInfo> cpm = new ScheduleComparator.FCSJ();
  35 +
  36 + @Override
  37 + public void run() {
  38 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll());
  39 + Collections.sort(all, cpm);
  40 +
  41 + long t = System.currentTimeMillis();
  42 + int size = all.size();
  43 +
  44 + ScheduleRealInfo sch;
  45 + for(int i = 0; i < size; i ++){
  46 + sch = all.get(i);
  47 + if(sch.getDfsjT() > t)
  48 + break;
  49 +
  50 + if(sch.isLate())
  51 + continue;
  52 +
  53 + if(sch.getStatus() == 0
  54 + && StringUtils.isEmpty(sch.getFcsjActual())){
  55 +
  56 + //检查应发未到 当前班次无起点到达时间
  57 + if(StringUtils.isEmpty(sch.getQdzArrDateSJ())){
  58 + ScheduleRealInfo prev = dayOfSchedule.prev(sch);
  59 + //上一个班次也没有实际终点到达时间
  60 + if(prev != null && StringUtils.isEmpty(prev.getZdsjActual())){
  61 + //进入误点调整程序
  62 + LateAdjustHandle.putLate(sch);
  63 + }
  64 + }
  65 +
  66 + //应发未发
  67 + sch.setLate(true);
  68 + //通知客户端
  69 + sendUtils.refreshSch(sch);
  70 + }
  71 + }
  72 + }
73 73 }
74 74 \ No newline at end of file
... ...
src/main/java/com/bsth/entity/mcy_forms/Waybillday.java
... ... @@ -20,6 +20,8 @@ public class Waybillday {
20 20  
21 21 private String zlc;//里程
22 22  
  23 + private String sh;//损耗
  24 +
23 25 public String getJgh() {
24 26 return jgh;
25 27 }
... ... @@ -110,6 +112,15 @@ public class Waybillday {
110 112 public void setYl(String yl) {
111 113 this.yl = yl;
112 114 }
  115 +
  116 + public String getSh() {
  117 + return sh;
  118 + }
  119 +
  120 + public void setSh(String sh) {
  121 + this.sh = sh;
  122 + }
  123 +
113 124  
114 125  
115 126 }
... ...
src/main/java/com/bsth/entity/schedule/SchedulePlan.java
... ... @@ -2,8 +2,11 @@ package com.bsth.entity.schedule;
2 2  
3 3 import com.bsth.entity.Line;
4 4 import com.fasterxml.jackson.annotation.JsonIgnore;
  5 +import org.apache.commons.lang3.BooleanUtils;
5 6  
6 7 import javax.persistence.*;
  8 +import java.sql.PreparedStatement;
  9 +import java.sql.SQLException;
7 10 import java.util.ArrayList;
8 11 import java.util.Date;
9 12 import java.util.List;
... ... @@ -53,6 +56,30 @@ public class SchedulePlan extends BEntity {
53 56 @OneToMany(mappedBy = "schedulePlan", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
54 57 private List<SchedulePlanInfo> schedulePlanInfoList = new ArrayList<>();
55 58  
  59 +
  60 + public static String generateInsertSql() {
  61 + String sql = "insert into bsth_c_s_sp " +
  62 + " (xl, schedule_from_time, schedule_to_time, " +
  63 + "tt_info_names, tt_info_ids, is_history_plan_first, plan_result, " +
  64 + "create_by, update_by, create_date, update_date) " +
  65 + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  66 + return sql;
  67 + }
  68 +
  69 + public void preparedStatementSet(PreparedStatement ps) throws SQLException {
  70 + ps.setInt(1, this.xl.getId());
  71 + ps.setDate(2, new java.sql.Date(this.scheduleFromTime.getTime()));
  72 + ps.setDate(3, new java.sql.Date(this.scheduleToTime.getTime()));
  73 + ps.setString(4, this.ttInfoNames);
  74 + ps.setString(5, this.ttInfoIds);
  75 + ps.setInt(6, BooleanUtils.isTrue(this.isHistoryPlanFirst) ? 1 : 0);
  76 + ps.setString(7, this.planResult);
  77 + ps.setInt(8, this.getCreateBy().getId());
  78 + ps.setInt(9, this.getUpdateBy().getId());
  79 + ps.setTimestamp(10, new java.sql.Timestamp(this.getCreateDate().getTime()));
  80 + ps.setTimestamp(11, new java.sql.Timestamp(this.getUpdateDate().getTime()));
  81 + }
  82 +
56 83 public Long getId() {
57 84 return id;
58 85 }
... ...
src/main/java/com/bsth/entity/schedule/SchedulePlanInfo.java
... ... @@ -6,6 +6,9 @@ import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output;
6 6 import org.apache.commons.lang3.StringUtils;
7 7  
8 8 import javax.persistence.*;
  9 +import java.sql.PreparedStatement;
  10 +import java.sql.SQLException;
  11 +import java.sql.Types;
9 12 import java.util.Date;
10 13 import java.util.List;
11 14  
... ... @@ -148,12 +151,15 @@ public class SchedulePlanInfo {
148 151 private Date updateDate;
149 152  
150 153  
  154 +// @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  155 +// @JoinTable(
  156 +// name = "bsth_c_s_sp_r_info",
  157 +// joinColumns = @JoinColumn(name = "sp_info_id"),
  158 +// inverseJoinColumns = @JoinColumn(name = "sp_id")
  159 +// )
  160 +// private SchedulePlan schedulePlan;
  161 +
151 162 @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
152   - @JoinTable(
153   - name = "bsth_c_s_sp_r_info",
154   - joinColumns = @JoinColumn(name = "sp_info_id"),
155   - inverseJoinColumns = @JoinColumn(name = "sp_id")
156   - )
157 163 private SchedulePlan schedulePlan;
158 164  
159 165 public SchedulePlanInfo() {}
... ... @@ -302,6 +308,62 @@ public class SchedulePlanInfo {
302 308  
303 309 }
304 310  
  311 + public static String generateInsertSql() {
  312 + String sql = "insert into bsth_c_s_sp_info " +
  313 + " (schedule_date, gs_name, gs_bm, fgs_name, fgs_bm, ccno, " +
  314 + "xl, xl_name, xl_bm, lp, lp_name, cl, cl_zbh, bd_time, cc_time, " +
  315 + "j, j_gh, j_name, s, s_gh, s_name, " +
  316 + "xl_dir, qdz_code, qdz_name, zdz_code, zdz_name, " +
  317 + "fcsj, fcno, bcs, jhlc, bcsj, bc_type, " +
  318 + "tt_info, tt_info_name, remark, schedule_plan, " +
  319 + "create_by, update_by, create_date, update_date) " +
  320 + "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," +
  321 + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  322 + return sql;
  323 + }
  324 +
  325 + public void preparedStatementSet(PreparedStatement ps) throws SQLException {
  326 + if (this.scheduleDate != null) ps.setDate(1, new java.sql.Date(this.scheduleDate.getTime())); else ps.setNull(1, Types.DATE);
  327 + if (this.gsName != null) ps.setString(2, this.gsName); else ps.setNull(2, Types.VARCHAR);
  328 + if (this.gsBm != null) ps.setString(3, this.gsBm); else ps.setNull(3, Types.VARCHAR);
  329 + if (this.fgsName != null) ps.setString(4, this.fgsName); else ps.setNull(4, Types.VARCHAR);
  330 + if (this.fgsBm != null) ps.setString(5, this.fgsBm); else ps.setNull(5, Types.VARCHAR);
  331 + if (this.ccno != null) ps.setInt(6, this.ccno); else ps.setNull(6, Types.INTEGER);
  332 + if (this.xl != null) ps.setInt(7, this.xl); else ps.setNull(7, Types.INTEGER);
  333 + if (this.xlName != null) ps.setString(8, this.xlName); else ps.setNull(8, Types.VARCHAR);
  334 + if (this.xlBm != null) ps.setString(9, this.xlBm); else ps.setNull(9, Types.VARCHAR);
  335 + if (this.lp != null) ps.setLong(10, this.lp); else ps.setNull(10, Types.BIGINT);
  336 + if (this.lpName != null) ps.setString(11, this.lpName); else ps.setNull(11, Types.VARCHAR);
  337 + if (this.cl != null) ps.setInt(12, this.cl); else ps.setNull(12, Types.INTEGER);
  338 + if (this.clZbh != null) ps.setString(13, this.clZbh); else ps.setNull(13, Types.VARCHAR);
  339 + if (this.bdTime != null) ps.setString(14, this.bdTime); else ps.setNull(14, Types.VARCHAR);
  340 + if (this.ccTime != null) ps.setString(15, this.ccTime); else ps.setNull(15, Types.VARCHAR);
  341 + if (this.j != null) ps.setInt(16, this.j); else ps.setNull(16, Types.INTEGER);
  342 + if (this.jGh != null) ps.setString(17, this.jGh); else ps.setNull(17, Types.VARCHAR);
  343 + if (this.jName != null) ps.setString(18, this.jName); else ps.setNull(18, Types.VARCHAR);
  344 + if (this.s != null) ps.setInt(19, this.s); else ps.setNull(19, Types.INTEGER);
  345 + if (this.sGh != null) ps.setString(20, this.sGh); else ps.setNull(20, Types.VARCHAR);
  346 + if (this.sName != null) ps.setString(21, this.sName); else ps.setNull(21, Types.VARCHAR);
  347 + if (this.xlDir != null) ps.setString(22, this.xlDir); else ps.setNull(22, Types.VARCHAR);
  348 + if (this.qdzCode != null) ps.setString(23, this.qdzCode); else ps.setNull(23, Types.VARCHAR);
  349 + if (this.qdzName != null) ps.setString(24, this.qdzName); else ps.setNull(24, Types.VARCHAR);
  350 + if (this.zdzCode != null) ps.setString(25, this.zdzCode); else ps.setNull(25, Types.VARCHAR);
  351 + if (this.zdzName != null) ps.setString(26, this.zdzName); else ps.setNull(26, Types.VARCHAR);
  352 + if (this.fcsj != null) ps.setString(27, this.fcsj); else ps.setNull(27, Types.VARCHAR);
  353 + if (this.fcno != null) ps.setInt(28, this.fcno); else ps.setNull(28, Types.INTEGER);
  354 + if (this.bcs != null) ps.setInt(29, this.bcs); else ps.setNull(29, Types.INTEGER);
  355 + if (this.jhlc != null) ps.setDouble(30, this.jhlc); else ps.setNull(30, Types.DOUBLE);
  356 + if (this.bcsj != null) ps.setInt(31, this.bcsj); else ps.setNull(31, Types.INTEGER);
  357 + if (this.bcType != null) ps.setString(32, this.bcType); else ps.setNull(32, Types.VARCHAR);
  358 + if (this.ttInfo != null) ps.setLong(33, this.ttInfo); else ps.setNull(33, Types.BIGINT);
  359 + if (this.ttInfoName != null) ps.setString(34, this.ttInfoName); else ps.setNull(34, Types.VARCHAR);
  360 + if (this.remark != null) ps.setString(35, this.remark); else ps.setNull(35, Types.VARCHAR);
  361 + if (this.schedulePlan != null) ps.setLong(36, this.schedulePlan.getId()); else ps.setNull(36, Types.BIGINT);
  362 + if (this.createBy != null) ps.setInt(37, this.createBy.getId()); else ps.setNull(37, Types.INTEGER);
  363 + if (this.updateBy != null) ps.setInt(38, this.updateBy.getId()); else ps.setNull(38, Types.INTEGER);
  364 + if (this.createDate != null) ps.setTimestamp(39, new java.sql.Timestamp(this.createDate.getTime())); else ps.setNull(39, Types.TIMESTAMP);
  365 + if (this.updateDate != null) ps.setTimestamp(40, new java.sql.Timestamp(this.updateDate.getTime())); else ps.setNull(40, Types.TIMESTAMP);
  366 + }
305 367  
306 368 public Long getId() {
307 369 return id;
... ...
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
... ... @@ -22,7 +22,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
22 22 List<ScheduleRealInfo> findByLines(List<String> lines);
23 23  
24 24  
25   - @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and bc_type not in ('in','out') order by (lpName+1),clZbh,realExecDate,fcsj")
  25 + @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and bc_type not in ('in','out') order by (lpName+1),clZbh,realExecDate,dfsj")
26 26 List<ScheduleRealInfo> scheduleDailyQp(String line,String date);
27 27  
28 28 @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY s.id,s.jGh,s.clZbh,s.lpName order by (lpName+1)")
... ... @@ -87,11 +87,11 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
87 87 List<ScheduleRealInfo> correctForm(String line,String startDate,String endDate,String lpName,String code);
88 88  
89 89 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
90   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDate = str_to_date(?4,'%Y-%m-%d') and s.xlBm=?5 order by realExecDate,fcsj")
  90 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDate = str_to_date(?4,'%Y-%m-%d') and s.xlBm=?5 order by realExecDate,dfsj")
91 91 List<ScheduleRealInfo> queryListWaybill(String jName,String clZbh,String lpName,String date,String line);
92 92  
93 93 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
94   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDate = str_to_date(?4,'%Y-%m-%d') and s.xlBm=?5 order by realExecDate,fcsj")
  94 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDate = str_to_date(?4,'%Y-%m-%d') and s.xlBm=?5 order by realExecDate,dfsj")
95 95 List<ScheduleRealInfo> queryListWaybillXcld(String jGh,String clZbh,String lpName,String date,String line);
96 96  
97 97 // @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
... ... @@ -104,11 +104,11 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
104 104  
105 105  
106 106 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
107   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.clZbh = ?1 and s.scheduleDate = str_to_date(?2,'%Y-%m-%d') and xlBm =?3 order by realExecDate,fcsj")
  107 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.clZbh = ?1 and s.scheduleDate = str_to_date(?2,'%Y-%m-%d') and xlBm =?3 order by realExecDate,dfsj")
108 108 List<ScheduleRealInfo> queryListWaybill2(String clZbh,String date,String line);
109 109  
110 110 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
111   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh like %?1% and s.clZbh like %?2% and s.scheduleDate = str_to_date(?3,'%Y-%m-%d') and s.gsBm like %?4% and s.fgsBm like %?5% order by realExecDate,fcsj")
  111 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh like %?1% and s.clZbh like %?2% and s.scheduleDate = str_to_date(?3,'%Y-%m-%d') and s.gsBm like %?4% and s.fgsBm like %?5% order by realExecDate,dfsj")
112 112 List<ScheduleRealInfo> queryListWaybill3(String jName,String clZbh,String date,String gsbm,String fgsbm);
113 113  
114 114 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
... ... @@ -133,11 +133,11 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
133 133  
134 134 //去掉了 xlBm is not null
135 135 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
136   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by s.realExecDate,s.fcsj, (s.lpName+1)")
  136 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by s.realExecDate,s.dfsj, (s.lpName+1)")
137 137 List<ScheduleRealInfo> scheduleByDateAndLine(String line,String date);
138 138  
139 139 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
140   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm =?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by (s.lpName+1), s.realExecDate,s.fcsj")
  140 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm =?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by (s.lpName+1), s.realExecDate,s.dfsj")
141 141 List<ScheduleRealInfo> scheduleByDateAndLineQp(String line,String date);
142 142  
143 143 @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
... ...
src/main/java/com/bsth/repository/schedule/SchedulePlanInfoRepository.java
... ... @@ -24,8 +24,6 @@ public interface SchedulePlanInfoRepository extends BaseRepository&lt;SchedulePlanI
24 24 @Query(value = "select s from SchedulePlanInfo s where scheduleDate=?1")
25 25 List<SchedulePlanInfo> findByDate(Date date);
26 26  
27   - Long deleteByXlAndScheduleDateGreaterThanEqualAndScheduleDateLessThanEqual(Integer xlid, Date startDate, Date endDate);
28   -
29 27 @Query(value = " select " +
30 28 "info.xl as xlId, " +
31 29 "info.xl_name as xlName, " +
... ...
src/main/java/com/bsth/service/forms/impl/ExportServiceImpl.java
... ... @@ -35,12 +35,14 @@ public class ExportServiceImpl implements ExportService{
35 35  
36 36 for(Waybillday w : list){
37 37 Map<String, Object> m = new HashMap<String, Object>();
38   - m.put("carPlate", w.getCarPlate());
  38 + m.put("carPlate", w.getNbbm());
39 39 m.put("jzl1", w.getJzl1());
40 40 m.put("jzl", w.getJzl());
41 41 m.put("yh", w.getYh());
  42 + m.put("sh", w.getSh());
42 43 m.put("jName", w.getjName());
43 44 m.put("zlc", w.getZlc());
  45 + m.put("jy", "");
44 46 resList.add(m);
45 47 }
46 48  
... ... @@ -48,7 +50,7 @@ public class ExportServiceImpl implements ExportService{
48 50 listI.add(resList.iterator());
49 51 String path = this.getClass().getResource("/").getPath()+"static/pages/forms/";
50 52 ee.excelReplace(listI, new Object[] { map }, path+"mould/waybillday.xls",
51   - path+"export/行车路单日报表" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
  53 + path+"export/行车路单日报表.xls");
52 54 } catch (Exception e) {
53 55 e.printStackTrace();
54 56 }
... ...
src/main/java/com/bsth/service/forms/impl/FormsServiceImpl.java
... ... @@ -64,48 +64,69 @@ public class FormsServiceImpl implements FormsService {
64 64 // 行车路单日报表
65 65 @Override
66 66 public List<Waybillday> waybillday(Map<String, Object> map) {
67   -
68   -
69   -
70   - String sql=" select t.*,z.jzl,z.yh from ("
71   - + " select x.j_gh,x.cl_zbh,x.j_name,x.schedule_date,"
72   - + " x.gs_bm,x.gs_name,x.fgs_bm,x.fgs_name from bsth_c_s_sp_info_real x "
73   - + " where to_days( x.schedule_date)=to_days('"+map.get("date").toString() + "') "
74   - + " and x.gs_bm='"+map.get("gsdmWaybillday").toString()+"' "
75   - + " and x.fgs_bm='"+map.get("fgsdmWaybillday").toString()+"' "
76   - + " and xl_bm like '%"+ map.get("line").toString().trim()+"%'"
77   - + " GROUP BY x.j_gh,x.cl_zbh,x.j_name,"
78   - + " x.schedule_date,x.gs_bm,x.gs_name,x.fgs_bm,x.fgs_name ) t"
79   - + " LEFT join (select y.rq,y.xlbm,y.nbbm,y.jsy,y.jzl,y.yh from"
80   - + " bsth_c_ylb y where 1=1 "
81   - + " and to_days(y.RQ)=to_days('"+map.get("date").toString() + "') "
82   - + " and y.XLBM like '%"+ map.get("line").toString().trim()+"%'"
83   - + " and y.ssgsdm='"+map.get("gsdmWaybillday").toString()+"'"
84   - + " and y.fgsdm='"+map.get("gsdmWaybillday").toString()+"') z "
85   - + " on t.cl_zbh=z.nbbm ";
  67 + String line=map.get("line").toString();
  68 + String date=map.get("date").toString();
  69 +
  70 + String sql="select "
  71 + + " r.cl_zbh,r.j_gh,r.j_name"
  72 + + " from bsth_c_s_sp_info_real r where "
  73 + + " r.schedule_date_str = '"+date+"'"
  74 + + " and r.xl_bm = '"+line+"' "
  75 + + " group by "
  76 + + " r.cl_zbh,r.j_gh,r.j_name";
86 77  
87 78 List<Waybillday> list = jdbcTemplate.query(sql, new RowMapper<Waybillday>() {
  79 +
88 80 @Override
89 81 public Waybillday mapRow(ResultSet arg0, int arg1) throws SQLException {
90   - Waybillday wbd = new Waybillday();
91   - wbd.setCarPlate(arg0.getString("cl_zbh"));
92   - wbd.setJzl(arg0.getString("jzl"));
93   - wbd.setYh(arg0.getString("yh"));
94   - wbd.setjName(arg0.getString("j_name"));
95   - wbd.setRq(arg0.getString("schedule_date"));
96   - wbd.setJgh(arg0.getString("j_gh"));
97   - return wbd;
98   - }
  82 + Waybillday w=new Waybillday();
  83 + w.setJgh(arg0.getString("j_gh"));
  84 + w.setjName(arg0.getString("j_name"));
  85 + w.setNbbm(arg0.getString("cl_zbh"));
  86 + return w;
  87 +
  88 + };
99 89 });
100   -
101   - for(int i=0;i<list.size();i++){
  90 + List<ScheduleRealInfo> realList= scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
  91 + List<Ylb> listYlb= ylbRepository.obtainYl(date, "", "", line, "", "xlbm");
  92 + double jzl=0.0,sh=0.0,yh=0.0;
  93 + for (int i = 0; i < list.size(); i++) {
102 94 Waybillday w=list.get(i);
103   - Map<String, Object> maps = new HashMap<>();
104   - maps = commonService.findKMBC2(w.getJgh(), w.getCarPlate(),
105   - w.getRq());
106   - w.setJzl1(maps.get("ksgl").toString());
107   - w.setZlc(maps.get("realMileage").toString());
108   -
  95 + List<ScheduleRealInfo> listInfo=new ArrayList<ScheduleRealInfo>();
  96 + for (int j = 0; j < realList.size(); j++) {
  97 + ScheduleRealInfo s=realList.get(j);
  98 + if(w.getNbbm().equals(s.getClZbh()) && w.getJgh().equals(w.getJgh())){
  99 + listInfo.add(s);
  100 + }
  101 + }
  102 +
  103 + double sjgl=culateMileageService.culateSjgl(listInfo);
  104 + double ljgl=culateMileageService.culateLjgl(listInfo);
  105 + double zyygl=Arith.add(sjgl, ljgl);
  106 + double jccg=culateMileageService.culateJccgl(listInfo);
  107 + double ksgl=culateMileageService.culateKsgl(listInfo);
  108 + double zksgl=Arith.add(jccg, ksgl);
  109 +
  110 + w.setJzl1(String.valueOf(zksgl));
  111 + w.setZlc(String.valueOf(Arith.add(zyygl, zksgl)));
  112 +
  113 +
  114 + jzl=0.0;
  115 + sh=0.0;
  116 + yh=0.0;
  117 + for (int j = 0; j < listYlb.size(); j++) {
  118 + Ylb y=listYlb.get(j);
  119 + if(w.getNbbm().equals(y.getNbbm()) && w.getJgh().equals(y.getJsy())){
  120 + jzl=Arith.add(jzl, y.getJzl());
  121 + sh=Arith.add(sh, y.getSh());
  122 + yh=Arith.add(yh, y.getYh());
  123 + }
  124 + }
  125 +
  126 + w.setJzl(String.valueOf(jzl));
  127 + w.setYh(String.valueOf(yh));
  128 + w.setSh(String.valueOf(sh));
  129 +
109 130 }
110 131 return list;
111 132 }
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -1668,35 +1668,42 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1668 1668 public List<Map<String, Object>> statisticsDaily(String line, String date,
1669 1669 String xlName, String type) {
1670 1670 List<Map<String, Object>> lMap= new ArrayList<Map<String, Object>>();
1671   - List<ScheduleRealInfo> lists = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
  1671 + List<ScheduleRealInfo>list_s=scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
  1672 + List<ScheduleRealInfo> lists =new ArrayList<ScheduleRealInfo>();
  1673 + for (int i = 0; i < list_s.size(); i++) {
  1674 + ScheduleRealInfo s=list_s.get(i);
  1675 + if(s.getZdsjActual()!=null){
  1676 + lists.add(s);
  1677 + }
  1678 + }
1672 1679 Map<String, Object> map = new HashMap<String, Object>();
1673 1680 map.put("xlName", xlName);
1674   - double jhlc=culateService.culateJhgl(lists);
  1681 + double jhlc=culateService.culateJhgl(list_s);
1675 1682 map.put("jhlc",jhlc);
1676 1683 map.put("sjgl", Arith.add(culateService.culateSjgl(lists),culateService.culateLjgl(lists)));
1677   - double lbgl=culateService.culateLbgl(lists);
  1684 + double lbgl=culateService.culateLbgl(list_s);
1678 1685 map.put("ssgl", lbgl);
1679   - map.put("ssgl_lz", culateService.culateCJLC(lists, "路阻"));
1680   - map.put("ssgl_dm", culateService.culateCJLC(lists, "吊慢"));
1681   - map.put("ssgl_gz", culateService.culateCJLC(lists, "故障"));
1682   - map.put("ssgl_jf", culateService.culateCJLC(lists, "纠纷"));
1683   - map.put("ssgl_zs", culateService.culateCJLC(lists, "肇事"));
1684   - map.put("ssgl_qr", culateService.culateCJLC(lists, "缺人"));
1685   - map.put("ssgl_qc", culateService.culateCJLC(lists, "缺车"));
1686   - map.put("ssgl_kx", culateService.culateCJLC(lists, "客稀"));
1687   - map.put("ssgl_qh", culateService.culateCJLC(lists, "气候"));
1688   - map.put("ssgl_yw", culateService.culateCJLC(lists, "援外"));
1689   - double ssgl_pc=culateService.culateCJLC(lists, "配车");
1690   - double ssgl_by=culateService.culateCJLC(lists, "保养");
1691   - double ssgl_cj=culateService.culateCJLC(lists, "抽减");
1692   - double ssgl_qt=culateService.culateCJLC(lists, "其他");
  1686 + map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
  1687 + map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
  1688 + map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
  1689 + map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
  1690 + map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
  1691 + map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
  1692 + map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
  1693 + map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
  1694 + map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
  1695 + map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
  1696 + double ssgl_pc=culateService.culateCJLC(list_s, "配车");
  1697 + double ssgl_by=culateService.culateCJLC(list_s, "保养");
  1698 + double ssgl_cj=culateService.culateCJLC(list_s, "抽减");
  1699 + double ssgl_qt=culateService.culateCJLC(list_s, "其他");
1693 1700 map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by),Arith.add(ssgl_cj, ssgl_qt)));
1694   - map.put("ssbc", culateService.culateLbbc(lists));
  1701 + map.put("ssbc", culateService.culateLbbc(list_s));
1695 1702 double ljgl=culateService.culateLjgl(lists);
1696 1703 map.put("ljgl", ljgl);
1697   - map.put("jhbc", culateService.culateJhbc(lists,""));
1698   - map.put("jhbc_m", culateService.culateJhbc(lists, "zgf"));
1699   - map.put("jhbc_a", culateService.culateJhbc(lists, "wgf"));
  1704 + map.put("jhbc", culateService.culateJhbc(list_s,""));
  1705 + map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
  1706 + map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
1700 1707 map.put("sjbc", culateService.culateSjbc(lists,""));
1701 1708 map.put("sjbc_m", culateService.culateSjbc(lists,"zgf"));
1702 1709 map.put("sjbc_a", culateService.culateSjbc(lists,"wgf"));
... ... @@ -2264,11 +2271,18 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2264 2271 return lMap;
2265 2272 }*/
2266 2273  
2267   - public final Map<String, Object> staticTj(List<ScheduleRealInfo> lists){
  2274 + public final Map<String, Object> staticTj(List<ScheduleRealInfo> list){
  2275 + List<ScheduleRealInfo> lists=new ArrayList<ScheduleRealInfo>();
  2276 + for(int i=0;i<list.size();i++){
  2277 + ScheduleRealInfo s=list.get(i);
  2278 + if(s.getZdsjActual()!=null){
  2279 + lists.add(s);
  2280 + }
  2281 + }
2268 2282 Map<String, Object> map = new HashMap<String, Object>();
2269 2283 map.put("xlName", lists.get(0).getXlName());
2270   - double jhyygl=culateService.culateJhgl(lists);//计划营运公里
2271   - double jhjcclc= culateService.culateJhJccgl(lists);//计划进出场公里(计划空驶公里)
  2284 + double jhyygl=culateService.culateJhgl(list);//计划营运公里
  2285 + double jhjcclc= culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
2272 2286 map.put("jhlc", jhyygl);
2273 2287 map.put("jcclc", jhjcclc);
2274 2288 map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
... ... @@ -2284,23 +2298,23 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2284 2298 map.put("sjgl",zyygl);
2285 2299 map.put("sjksgl", zksgl);
2286 2300  
2287   - map.put("ssgl", culateService.culateLbgl(lists));
2288   - map.put("ssgl_lz", culateService.culateCJLC(lists, "路阻"));
2289   - map.put("ssgl_dm", culateService.culateCJLC(lists, "吊慢"));
2290   - map.put("ssgl_gz", culateService.culateCJLC(lists, "故障"));
2291   - map.put("ssgl_jf", culateService.culateCJLC(lists, "纠纷"));
2292   - map.put("ssgl_zs", culateService.culateCJLC(lists, "肇事"));
2293   - map.put("ssgl_qr", culateService.culateCJLC(lists, "缺人"));
2294   - map.put("ssgl_qc", culateService.culateCJLC(lists, "缺车"));
2295   - map.put("ssgl_kx", culateService.culateCJLC(lists, "客稀"));
2296   - map.put("ssgl_qh", culateService.culateCJLC(lists, "气候"));
2297   - map.put("ssgl_yw", culateService.culateCJLC(lists, "援外"));
2298   - map.put("ssgl_other", culateService.culateCJLC(lists, "其他"));
2299   - map.put("ssbc", culateService.culateLbbc(lists));
  2301 + map.put("ssgl", culateService.culateLbgl(list));
  2302 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  2303 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  2304 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  2305 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  2306 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  2307 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  2308 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  2309 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  2310 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  2311 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  2312 + map.put("ssgl_other", culateService.culateCJLC(list, "其他"));
  2313 + map.put("ssbc", culateService.culateLbbc(list));
2300 2314 map.put("ljgl", ljgl);
2301   - map.put("jhbc", culateService.culateJhbc(lists,""));
2302   - map.put("jhbc_m", culateService.culateJhbc(lists, "zgf"));
2303   - map.put("jhbc_a", culateService.culateJhbc(lists, "wgf"));
  2315 + map.put("jhbc", culateService.culateJhbc(list,""));
  2316 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  2317 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
2304 2318 map.put("sjbc", culateService.culateSjbc(lists,""));
2305 2319 map.put("sjbc_m", culateService.culateSjbc(lists,"zgf"));
2306 2320 map.put("sjbc_a", culateService.culateSjbc(lists,"wgf"));
... ... @@ -2324,6 +2338,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2324 2338 public List<Map<String, Object>> statisticsDailyTj(String gsdm,String fgsdm,String line, String date,String date2,
2325 2339 String xlName, String type) {
2326 2340 List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  2341 + List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
2327 2342 List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2328 2343 line =line.trim();
2329 2344 if(line.equals("")){
... ... @@ -2333,6 +2348,12 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2333 2348 //查询单条线路
2334 2349 list = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date,date2);
2335 2350 }
  2351 + for (int i = 0; i < list.size(); i++) {
  2352 + ScheduleRealInfo s=list.get(i);
  2353 + if(s.getZdsjActual()!=null){
  2354 + list_s.add(s);
  2355 + }
  2356 + }
2336 2357 List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
2337 2358 for (int i = 0; i < list.size(); i++) {
2338 2359 if(i<list.size()-1){
... ... @@ -2366,12 +2387,12 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2366 2387 map.put("jcclc", jhjcclc);
2367 2388 map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
2368 2389  
2369   - double ljgl= culateService.culateLjgl(list);
2370   - double sjyygl= culateService.culateSjgl(list);
  2390 + double ljgl= culateService.culateLjgl(list_s);
  2391 + double sjyygl= culateService.culateSjgl(list_s);
2371 2392 double zyygl= Arith.add(sjyygl,ljgl);
2372 2393  
2373   - double sjjccgl=culateService.culateJccgl(list);
2374   - double sjksgl=culateService.culateKsgl(list);
  2394 + double sjjccgl=culateService.culateJccgl(list_s);
  2395 + double sjksgl=culateService.culateKsgl(list_s);
2375 2396 double zksgl=Arith.add(sjjccgl, sjksgl);
2376 2397 map.put("sjzgl", Arith.add(zyygl, zksgl));
2377 2398 map.put("sjgl",zyygl);
... ... @@ -2393,15 +2414,15 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2393 2414 map.put("jhbc", culateService.culateJhbc(list,""));
2394 2415 map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
2395 2416 map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
2396   - map.put("sjbc", culateService.culateSjbc(list,""));
2397   - map.put("sjbc_m", culateService.culateSjbc(list,"zgf"));
2398   - map.put("sjbc_a", culateService.culateSjbc(list,"wgf"));
2399   - map.put("ljbc", culateService.culateLjbc(list,""));
2400   - map.put("ljbc_m", culateService.culateLjbc(list,"zgf"));
2401   - map.put("ljbc_a", culateService.culateLjbc(list,"wgf"));
2402   - map.put("fzbc", culateService.culateFzbc(list, ""));
2403   - map.put("fzbc_m", culateService.culateFzbc(list, "zgf"));
2404   - map.put("fzbc_a", culateService.culateFzbc(list, "wgf"));
  2417 + map.put("sjbc", culateService.culateSjbc(list_s,""));
  2418 + map.put("sjbc_m", culateService.culateSjbc(list_s,"zgf"));
  2419 + map.put("sjbc_a", culateService.culateSjbc(list_s,"wgf"));
  2420 + map.put("ljbc", culateService.culateLjbc(list_s,""));
  2421 + map.put("ljbc_m", culateService.culateLjbc(list_s,"zgf"));
  2422 + map.put("ljbc_a", culateService.culateLjbc(list_s,"wgf"));
  2423 + map.put("fzbc", culateService.culateFzbc(list_s, ""));
  2424 + map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
  2425 + map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
2405 2426 map.put("dtbc", 0);
2406 2427 map.put("dtbc_m", 0);
2407 2428 map.put("dtbc_a", 0);
... ...
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
... ... @@ -1181,6 +1181,7 @@ public class ReportServiceImpl implements ReportService{
1181 1181 newMap.put("dz", scheduleRealInfo.getQdzName());
1182 1182 newMap.put("sj", scheduleRealInfo.getFcsj());
1183 1183 newMap.put("lbbc", 1);
  1184 + newMap.put("gzf", " ");
1184 1185 newMap.put("lblc", scheduleRealInfo.getJhlcOrig());
1185 1186 newMap.put("jyqp", scheduleRealInfo.getRemarks());
1186 1187 list.add(newMap);
... ... @@ -1206,6 +1207,7 @@ public class ReportServiceImpl implements ReportService{
1206 1207 newMap.put("jgh", scheduleRealInfo.getjGh());
1207 1208 newMap.put("dz", childTaskPlan.getStartStationName());
1208 1209 newMap.put("sj", childTaskPlan.getStartDate());
  1210 + newMap.put("gzf", " ");
1209 1211 newMap.put("lbbc", 0);
1210 1212 newMap.put("lblc", childTaskPlan.getMileage());
1211 1213 newMap.put("jyqp", childTaskPlan.getRemarks());
... ... @@ -1237,8 +1239,12 @@ public class ReportServiceImpl implements ReportService{
1237 1239 newMap.put("lp", "小计");
1238 1240 newMap.put("nbbm", "少驶班次");
1239 1241 newMap.put("jgh", lbbc);
1240   - newMap.put("sj", "少驶公里");
  1242 + newMap.put("lbbc", "少驶公里");
1241 1243 newMap.put("lblc", lblc);
  1244 + newMap.put("dz", " ");
  1245 + newMap.put("sj", " ");
  1246 + newMap.put("gzf", " ");
  1247 + newMap.put("jyqp"," ");
1242 1248 listNew.add(newMap);
1243 1249 }
1244 1250  
... ... @@ -1271,7 +1277,7 @@ public class ReportServiceImpl implements ReportService{
1271 1277 newMap.put("dz", scheduleRealInfo.getQdzName());
1272 1278 newMap.put("sj", scheduleRealInfo.getFcsj());
1273 1279 newMap.put("ljlc", scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());
1274   - newMap.put("jyqp", scheduleRealInfo.getRealMileage());
  1280 + newMap.put("jyqp", scheduleRealInfo.getRealMileage()==null?"":scheduleRealInfo.getRealMileage());
1275 1281 list.add(newMap);
1276 1282 }
1277 1283 // }else{
... ...
src/main/java/com/bsth/service/schedule/impl/SchedulePlanServiceImpl.java
... ... @@ -8,6 +8,7 @@ import com.bsth.repository.LineRepository;
8 8 import com.bsth.repository.schedule.*;
9 9 import com.bsth.service.schedule.SchedulePlanRuleResultService;
10 10 import com.bsth.service.schedule.SchedulePlanService;
  11 +import com.bsth.service.schedule.exception.ScheduleException;
11 12 import com.bsth.service.schedule.rules.ScheduleRuleService;
12 13 import com.bsth.service.schedule.rules.plan.PlanCalcuParam_input;
13 14 import com.bsth.service.schedule.rules.plan.PlanResult;
... ... @@ -24,9 +25,6 @@ import org.slf4j.Logger;
24 25 import org.slf4j.LoggerFactory;
25 26 import org.springframework.beans.factory.annotation.Autowired;
26 27 import org.springframework.stereotype.Service;
27   -import org.springframework.transaction.annotation.Isolation;
28   -import org.springframework.transaction.annotation.Propagation;
29   -import org.springframework.transaction.annotation.Transactional;
30 28  
31 29 import java.util.*;
32 30  
... ... @@ -216,32 +214,53 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
216 214  
217 215 }
218 216  
219   - @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
220 217 public SchedulePlan save(SchedulePlan schedulePlan) {
221 218 // pre、如果排班的数据之前已经有了,删除之前的数据
222   - schedulePlanInfoRepository.deleteByXlAndScheduleDateGreaterThanEqualAndScheduleDateLessThanEqual(
223   - schedulePlan.getXl().getId(), schedulePlan.getScheduleFromTime(), schedulePlan.getScheduleToTime()
224   - );
  219 + Date startpre = new Date();
  220 + scheduleRuleService.deelteSchedulePlanInfo(
  221 + schedulePlan.getXl().getId(),
  222 + schedulePlan.getScheduleFromTime(),
  223 + schedulePlan.getScheduleToTime());
  224 + Date endpre = new Date();
225 225  
226 226 // 1、时刻表数据及每日路牌数据计算
  227 + Date start1 = new Date();
227 228 Object[] ttInfoRets = ttInfoOutput(schedulePlan);
228 229 TTInfoResults_output ttInfoResults_output = (TTInfoResults_output) ttInfoRets[0];
229 230 LpInfoResults_output lpInfoResults_output = (LpInfoResults_output) ttInfoRets[1];
  231 + Date end1 = new Date();
230 232 // 2、循环规则计算输出
  233 + Date start2 = new Date();
231 234 ScheduleResults_output scheduleResults_output = loopRuleOutput(schedulePlan, lpInfoResults_output);
  235 + Date end2 = new Date();
232 236 // 3、计划输出
  237 + Date start3 = new Date();
233 238 PlanResult planResult = planResultOutput(schedulePlan, scheduleResults_output, ttInfoResults_output);
  239 + Date end3 = new Date();
  240 +
  241 + // 4、保存数据(jdbcTemplate 批量插入)
  242 + Date start4 = new Date();
  243 + scheduleRuleService.generateSchedulePlan(schedulePlan, planResult.getSchedulePlanInfos());
  244 + Date end4 = new Date();
  245 +
234 246  
235   - // 4、保存数据(TODO:之后改成批量保存)
236   - schedulePlan.getSchedulePlanInfoList().addAll(planResult.getSchedulePlanInfos());
237   - super.save(schedulePlan);
  247 + logger.info("删除数据 {} ms,drool时刻表每日路牌计算 {} ms,drool循环规则计算 {} ms,drool计划数据 {} ms,插入数据 {} ms",
  248 + endpre.getTime() - startpre.getTime(),
  249 + end1.getTime() - start1.getTime(),
  250 + end2.getTime() - start2.getTime(),
  251 + end3.getTime() - start3.getTime(),
  252 + end4.getTime() - start4.getTime());
238 253  
239   - schedulePlanRuleResultService.bulkSave(scheduleResults_output.getSchedulePlanRuleResults());
240 254  
241 255 return new SchedulePlan();
242 256 }
243 257  
244 258 @Override
  259 + public void delete(Long aLong) throws ScheduleException {
  260 + scheduleRuleService.deleteSchedulePlanAll(aLong);
  261 + }
  262 +
  263 + @Override
245 264 public SchedulePlan findSchedulePlanTommorw() {
246 265 DateTime today = new DateTime(new Date());
247 266 DateTime tommorw = new DateTime(today.getYear(), today.getMonthOfYear(), today.getDayOfMonth(), 0, 0).plusDays(1);
... ...
src/main/java/com/bsth/service/schedule/rules/ScheduleRuleService.java
1 1 package com.bsth.service.schedule.rules;
2 2  
  3 +import com.bsth.entity.schedule.SchedulePlan;
  4 +import com.bsth.entity.schedule.SchedulePlanInfo;
3 5 import com.bsth.entity.schedule.temp.SchedulePlanRuleResult;
4 6  
5 7 import java.util.Date;
... ... @@ -19,4 +21,26 @@ public interface ScheduleRuleService {
19 21 * @return
20 22 */
21 23 List<SchedulePlanRuleResult> findLastByXl(String xlid, Date from);
  24 +
  25 + /**
  26 + * 生成排班计划。
  27 + * @param schedulePlan 计划主表
  28 + * @param schedulePlanInfos 计划明细表
  29 + */
  30 + void generateSchedulePlan(SchedulePlan schedulePlan, List<SchedulePlanInfo> schedulePlanInfos);
  31 +
  32 + /**
  33 + * 删除排班计划。
  34 + * @param id 排班计划id
  35 + */
  36 + void deleteSchedulePlanAll(Long id);
  37 +
  38 + /**
  39 + * 删除指定时间范围的排班明细。
  40 + * @param xlid 线路id
  41 + * @param datefrom 开始日期
  42 + * @param dateto 结束日期
  43 + */
  44 + void deelteSchedulePlanInfo(Integer xlid, Date datefrom, Date dateto);
22 45 }
  46 +
... ...
src/main/java/com/bsth/service/schedule/rules/ScheduleRuleServiceImpl.java
1 1 package com.bsth.service.schedule.rules;
2 2  
  3 +import com.bsth.entity.schedule.SchedulePlan;
  4 +import com.bsth.entity.schedule.SchedulePlanInfo;
3 5 import com.bsth.entity.schedule.temp.SchedulePlanRuleResult;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
4 8 import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.jdbc.core.BatchPreparedStatementSetter;
5 10 import org.springframework.jdbc.core.JdbcTemplate;
  11 +import org.springframework.jdbc.core.PreparedStatementCreator;
6 12 import org.springframework.jdbc.core.RowMapper;
  13 +import org.springframework.jdbc.support.GeneratedKeyHolder;
  14 +import org.springframework.jdbc.support.KeyHolder;
7 15 import org.springframework.stereotype.Service;
  16 +import org.springframework.transaction.annotation.Isolation;
  17 +import org.springframework.transaction.annotation.Propagation;
  18 +import org.springframework.transaction.annotation.Transactional;
8 19  
  20 +import java.sql.Connection;
  21 +import java.sql.PreparedStatement;
9 22 import java.sql.ResultSet;
10 23 import java.sql.SQLException;
  24 +import java.util.ArrayList;
11 25 import java.util.Date;
12 26 import java.util.List;
13 27  
... ... @@ -16,6 +30,8 @@ import java.util.List;
16 30 */
17 31 @Service
18 32 public class ScheduleRuleServiceImpl implements ScheduleRuleService {
  33 + /** 日志记录器 */
  34 + private static final Logger logger = LoggerFactory.getLogger(ScheduleRuleServiceImpl.class);
19 35  
20 36 @Autowired
21 37 private JdbcTemplate jdbcTemplate;
... ... @@ -43,4 +59,70 @@ public class ScheduleRuleServiceImpl implements ScheduleRuleService {
43 59 }
44 60 });
45 61 }
  62 +
  63 + @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
  64 + public void deleteSchedulePlanAll(Long id) {
  65 + String sql1 = "delete from bsth_c_s_sp where id = ?";
  66 + String sql2 = "delete from bsth_c_s_sp_info where schedule_plan = ?";
  67 +
  68 + jdbcTemplate.update(sql2, id);
  69 + jdbcTemplate.update(sql1, id);
  70 + }
  71 +
  72 + @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
  73 + public void deelteSchedulePlanInfo(Integer xlid, Date datefrom, Date dateto) {
  74 + String sql = "delete from bsth_c_s_sp_info where xl = ? and schedule_date >= ? and schedule_date <= ?";
  75 + jdbcTemplate.update(sql, xlid, datefrom, dateto);
  76 + }
  77 +
  78 + @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
  79 + @Override
  80 + public void generateSchedulePlan(final SchedulePlan schedulePlan, final List<SchedulePlanInfo> schedulePlanInfos) {
  81 + // 1、插入排班计划主表,并获取主键id
  82 + KeyHolder keyHolder = new GeneratedKeyHolder();
  83 + jdbcTemplate.update(new PreparedStatementCreator() {
  84 + @Override
  85 + public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
  86 + PreparedStatement ps = connection.prepareStatement(
  87 + SchedulePlan.generateInsertSql(), new String[] {"id"});
  88 + schedulePlan.preparedStatementSet(ps);
  89 +
  90 + return ps;
  91 + }
  92 + }, keyHolder);
  93 +
  94 + SchedulePlan master = new SchedulePlan();
  95 + master.setId(keyHolder.getKey().longValue());
  96 + for (SchedulePlanInfo schedulePlanInfo : schedulePlanInfos) {
  97 + schedulePlanInfo.setSchedulePlan(master);
  98 + }
  99 +
  100 + // 2、批量插入排班计划从表
  101 + List<List<SchedulePlanInfo>> lists = new ArrayList<>();
  102 + int batchSize = 2000;
  103 + int loopCount = schedulePlanInfos.size() / batchSize;
  104 + int otherCount = schedulePlanInfos.size() % batchSize;
  105 + for (int i = 0; i < loopCount; i++) {
  106 + lists.add(schedulePlanInfos.subList(i * batchSize, i * batchSize + batchSize));
  107 + }
  108 + if (otherCount > 0) {
  109 + lists.add(schedulePlanInfos.subList(loopCount * batchSize, loopCount * batchSize + otherCount));
  110 + }
  111 +
  112 + for (final List<SchedulePlanInfo> list : lists) {
  113 + jdbcTemplate.batchUpdate(SchedulePlanInfo.generateInsertSql(), new BatchPreparedStatementSetter() {
  114 + @Override
  115 + public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
  116 + SchedulePlanInfo schedulePlanInfo = list.get(i);
  117 + schedulePlanInfo.preparedStatementSet(preparedStatement);
  118 + }
  119 + @Override
  120 + public int getBatchSize() {
  121 + return list.size();
  122 + }
  123 + });
  124 + }
  125 +
  126 + }
46 127 }
  128 +
... ...