Commit 8ed2f6f3bd9f60ffdab170178a2d55d175c043d3

Authored by 徐烜
1 parent f7603ac9

PSM-7

src/main/java/com/bsth/entity/search/PredicatesBuilder.java
1 package com.bsth.entity.search; 1 package com.bsth.entity.search;
2 2
  3 +import org.joda.time.DateTime;
  4 +
3 import javax.persistence.criteria.CriteriaBuilder; 5 import javax.persistence.criteria.CriteriaBuilder;
4 import javax.persistence.criteria.Path; 6 import javax.persistence.criteria.Path;
5 import javax.persistence.criteria.Predicate; 7 import javax.persistence.criteria.Predicate;
@@ -56,6 +58,10 @@ public class PredicatesBuilder { @@ -56,6 +58,10 @@ public class PredicatesBuilder {
56 } else if (leftType.isAssignableFrom(Date.class) && 58 } else if (leftType.isAssignableFrom(Date.class) &&
57 rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类 59 rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类
58 return cb.greaterThanOrEqualTo((Path<Date>) expression, (Date) object); 60 return cb.greaterThanOrEqualTo((Path<Date>) expression, (Date) object);
  61 + } else if (leftType.isAssignableFrom(Date.class) &&
  62 + rightType.isAssignableFrom(String.class)) { // 左边是日期,右边是字符串,尝试转换字符串到日期
  63 + DateTime dateTime = new DateTime(object);
  64 + return cb.greaterThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
59 } else { 65 } else {
60 throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass()); 66 throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
61 } 67 }
@@ -83,6 +89,10 @@ public class PredicatesBuilder { @@ -83,6 +89,10 @@ public class PredicatesBuilder {
83 } else if (leftType.isAssignableFrom(Date.class) && 89 } else if (leftType.isAssignableFrom(Date.class) &&
84 rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类 90 rightType.isAssignableFrom(Date.class)) { // 判定是否是Date类型的子类
85 return cb.lessThanOrEqualTo((Path<Date>) expression, (Date) object); 91 return cb.lessThanOrEqualTo((Path<Date>) expression, (Date) object);
  92 + } else if (leftType.isAssignableFrom(Date.class) &&
  93 + rightType.isAssignableFrom(String.class)) { // 左边是日期,右边是字符串,尝试转换字符串到日期
  94 + DateTime dateTime = new DateTime(object);
  95 + return cb.lessThanOrEqualTo((Path<Date>) expression, dateTime.toDate());
86 } else { 96 } else {
87 throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass()); 97 throw new RuntimeException("ge 不支持类型组合:" + expression.getJavaType() + ">=" + object.getClass());
88 } 98 }
src/main/resources/static/pages/scheduleApp/module/common/main.js
@@ -63,27 +63,59 @@ ScheduleApp.factory(&#39;requestNotificationChannel&#39;, [&#39;$rootScope&#39;, function($rootS @@ -63,27 +63,59 @@ ScheduleApp.factory(&#39;requestNotificationChannel&#39;, [&#39;$rootScope&#39;, function($rootS
63 }]); 63 }]);
64 64
65 // http 拦截器 65 // http 拦截器
66 -ScheduleApp.factory('myInterceptor', ['requestNotificationChannel', function(requestNotificationChannel) {  
67 - return {  
68 - request: function(config) {  
69 - requestNotificationChannel.requestStarted();  
70 - return config;  
71 - },  
72 - requestError: function(rejection) {  
73 - requestNotificationChannel.requestEnded();  
74 - return rejection;  
75 - },  
76 - response: function(response) {  
77 - requestNotificationChannel.requestEnded();  
78 - return response;  
79 - },  
80 - responseError: function(rejection) {  
81 - requestNotificationChannel.requestEnded();  
82 - return rejection;  
83 - }  
84 - }; 66 +ScheduleApp.factory(
  67 + 'myInterceptor',
  68 + [
  69 + 'requestNotificationChannel',
  70 + '$q',
  71 + function(requestNotificationChannel, $q) {
  72 + return {
  73 + request: function(config) {
  74 + requestNotificationChannel.requestStarted();
  75 + return config;
  76 + },
  77 + requestError: function(rejection) {
  78 + requestNotificationChannel.requestEnded();
  79 + return rejection;
  80 + },
  81 + response: function(response) {
  82 + requestNotificationChannel.requestEnded();
85 83
86 -}]); 84 + return response;
  85 + },
  86 + responseError: function(rejection) {
  87 + requestNotificationChannel.requestEnded();
  88 +
  89 + // 处理错误,springboot会包装返回的错误数据
  90 + // 如:{"timestamp":1478674739246,"status":500,"error":"Internal Server Error","exception":"java.lang.ClassCastException","message":"java.lang.String cannot be cast to java.lang.Long","path":"/tidc/importfile"}
  91 +
  92 + var status = rejection.status;
  93 + var path = rejection.data.path;
  94 + var message = rejection.data.message;
  95 + var output = [];
  96 + output.push("状态编码:" + status);
  97 + output.push("访问路径:" + path);
  98 + output.push("错误消息:" + message);
  99 + if (status) {
  100 + if (status == 500) {
  101 + alert("服务端错误:" + "\n" + output.join("\n"));
  102 + } else if (status == 407) {
  103 + alert("请重新登录:" + "\n" + output.join("\n"));
  104 + } else if (status == -1) {
  105 + alert("貌似服务端连接不上");
  106 + } else {
  107 + alert("其他错误:" + "\n" + output.join("\n"));
  108 + }
  109 + } else {
  110 + alert("我擦,后台返回连个状态码都没返回,见鬼了!");
  111 + }
  112 +
  113 + return $q.reject(rejection);
  114 + }
  115 + };
  116 + }
  117 + ]
  118 +);
87 119
88 ScheduleApp.config(['$httpProvider', function($httpProvider) { 120 ScheduleApp.config(['$httpProvider', function($httpProvider) {
89 $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; 121 $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice.js
@@ -416,7 +416,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanManageService_g&#39;, [&#39;$resource @@ -416,7 +416,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanManageService_g&#39;, [&#39;$resource
416 return { 416 return {
417 rest : $resource( 417 rest : $resource(
418 '/spc/:id', 418 '/spc/:id',
419 - {order: 'createDate', direction: 'DESC', id: '@id_route'}, 419 + {order: 'xl.id,createDate', direction: 'DESC,DESC', id: '@id_route'},
420 { 420 {
421 list: { 421 list: {
422 method: 'GET', 422 method: 'GET',
@@ -452,7 +452,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanInfoManageService_g&#39;, [&#39;$reso @@ -452,7 +452,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanInfoManageService_g&#39;, [&#39;$reso
452 return { 452 return {
453 rest : $resource( 453 rest : $resource(
454 '/spic/:id', 454 '/spic/:id',
455 - {order: 'scheduleDate,lp,fcno', direction: 'ASC', id: '@id_route'}, 455 + {order: 'scheduleDate,lp,fcno', direction: 'ASC,ASC,ASC', id: '@id_route'},
456 { 456 {
457 list: { 457 list: {
458 method: 'GET', 458 method: 'GET',
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/list.html
@@ -4,13 +4,13 @@ @@ -4,13 +4,13 @@
4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column"> 4 <table class="fixTable table table-striped table-bordered table-hover table-checkable order-column">
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 - <th style="width: 5%;">序号</th>  
8 - <th style="width: 15%;">线路</th>  
9 - <th style="width: 20%;">时刻表</th>  
10 - <th>排班开始时间</th>  
11 - <th>排班结束时间</th>  
12 - <th>修改时间</th>  
13 - <th style="width: 21%">操作</th> 7 + <th style="width: 50px;">序号</th>
  8 + <th style="width: 150px;">线路</th>
  9 + <th style="width: 100%;">关联时刻表</th>
  10 + <th style="width: 150px;">排班开始日期</th>
  11 + <th style="width: 150px;">排班结束日期</th>
  12 + <th style="width: 180px;">排班操作时间</th>
  13 + <th style="width: 180px;">操作</th>
14 </tr> 14 </tr>
15 <tr role="row" class="filter"> 15 <tr role="row" class="filter">
16 <td></td> 16 <td></td>
@@ -25,9 +25,37 @@ @@ -25,9 +25,37 @@
25 datatype="xl"> 25 datatype="xl">
26 </sa-Select3> 26 </sa-Select3>
27 </td> 27 </td>
28 - <td></td>  
29 - <td></td>  
30 - <td></td> 28 + <td>
  29 + <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition().name_like" placeholder="输入时刻表名称..."/>
  30 + </td>
  31 + <td>
  32 + <div class="input-group">
  33 + <input type="text" class="form-control input-sm"
  34 + name="scheduleFromTime" placeholder="选择日期..."
  35 + uib-datepicker-popup="yyyy-MM-dd"
  36 + is-open="ctrl.scheduleFromTime"
  37 + ng-model="ctrl.searchCondition()['scheduleFromTime_ge']" readonly/>
  38 + <span class="input-group-btn">
  39 + <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.scheduleFromTime_open()">
  40 + <i class="glyphicon glyphicon-calendar"></i>
  41 + </button>
  42 + </span>
  43 + </div>
  44 + </td>
  45 + <td>
  46 + <div class="input-group">
  47 + <input type="text" class="form-control input-sm"
  48 + name="scheduleToTime" placeholder="选择日期..."
  49 + uib-datepicker-popup="yyyy-MM-dd"
  50 + is-open="ctrl.scheduleToTime"
  51 + ng-model="ctrl.searchCondition()['scheduleToTime_le']" readonly/>
  52 + <span class="input-group-btn">
  53 + <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.scheduleToTime_open()">
  54 + <i class="glyphicon glyphicon-calendar"></i>
  55 + </button>
  56 + </span>
  57 + </div>
  58 + </td>
31 <td></td> 59 <td></td>
32 <td> 60 <td>
33 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" 61 <button class="btn btn-sm green btn-outline filter-submit margin-bottom"
@@ -65,9 +93,9 @@ @@ -65,9 +93,9 @@
65 <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>--> 93 <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>-->
66 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>--> 94 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>-->
67 <a ui-sref="schedulePlanInfoManage({spid : info.id, xlname : info.xl.name, ttname : info.ttInfo.name, stime : info.scheduleFromTime, etime : info.scheduleToTime})" 95 <a ui-sref="schedulePlanInfoManage({spid : info.id, xlname : info.xl.name, ttname : info.ttInfo.name, stime : info.scheduleFromTime, etime : info.scheduleToTime})"
68 - class="btn default blue-stripe btn-sm"> 排班明细 </a> 96 + class="btn btn-info btn-sm"> 明细 </a>
69 <a ng-click="ctrl.deletePlan(info.id)" 97 <a ng-click="ctrl.deletePlan(info.id)"
70 - class="btn default blue-stripe btn-sm"> 删除 </a> 98 + class="btn btn-danger btn-sm"> 删除 </a>
71 </td> 99 </td>
72 </tr> 100 </tr>
73 </tbody> 101 </tbody>
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/schedulePlanManage.js
@@ -78,6 +78,16 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanManageListCtrl&#39;, [&#39;Schedul @@ -78,6 +78,16 @@ angular.module(&#39;ScheduleApp&#39;).controller(&#39;SchedulePlanManageListCtrl&#39;, [&#39;Schedul
78 infos: [] 78 infos: []
79 }; 79 };
80 80
  81 + // 日期 日期控件开关
  82 + self.scheduleFromTime = false;
  83 + self.scheduleFromTime_open = function() {
  84 + self.scheduleFromTime = true;
  85 + };
  86 + self.scheduleToTime = false;
  87 + self.scheduleToTime_open = function() {
  88 + self.scheduleToTime = true;
  89 + };
  90 +
81 // 初始创建的时候,获取一次列表数据 91 // 初始创建的时候,获取一次列表数据
82 schedulePlanManageService.getPage().then( 92 schedulePlanManageService.getPage().then(
83 function(result) { 93 function(result) {
src/main/resources/static/pages/scheduleApp/module/core/ttInfoDetailManage/main.js
@@ -109,7 +109,7 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -109,7 +109,7 @@ angular.module(&#39;ScheduleApp&#39;).controller(
109 109
110 // TODO:edit操作暂时使用旧版本的js文件 110 // TODO:edit操作暂时使用旧版本的js文件
111 111
112 - // {"timestamp":1478674739246,"status":500,"error":"Internal Server Error","exception":"java.lang.ClassCastException","message":"java.lang.String cannot be cast to java.lang.Long","path":"/tidc/importfile"} 112 +
113 } 113 }
114 ] 114 ]
115 ); 115 );
116 \ No newline at end of file 116 \ No newline at end of file