Commit 71c8a2729d6ccd63927e69faba48c56916c01b62

Authored by 廖磊
1 parent ce4e5383

油量表重复数据抛出异常

src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
... ... @@ -198,7 +198,16 @@ public class YlbServiceImpl extends BaseServiceImpl<Ylb,Integer> implements YlbS
198 198  
199 199 }
200 200 if(addList.size()>0){
201   - new BatchSaveUtils<Ylb>().saveList(addList, Ylb.class);
  201 + try {
  202 + new BatchSaveUtils<Ylb>().saveList2(addList, Ylb.class);
  203 + } catch (Exception e) {
  204 + // TODO: handle exception
  205 + if(e.getMessage().indexOf("PK_YLB_UK")>0){
  206 + newMap.put("fage", "存在相同数据,数据已经过滤");
  207 + logger.info("定时器:存在相同数据,数据已经过滤");
  208 + }
  209 + }
  210 +// new BatchSaveUtils<Ylb>().saveList(addList, Ylb.class);
202 211 }
203 212 result = "success";
204 213 }catch (Exception e) {
... ... @@ -363,7 +372,16 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
363 372 }
364 373 }
365 374 if(addList.size()>0){
366   - new BatchSaveUtils<Ylb>().saveList(addList, Ylb.class);
  375 + try {
  376 + new BatchSaveUtils<Ylb>().saveList2(addList, Ylb.class);
  377 + } catch (Exception e) {
  378 + // TODO: handle exception
  379 + if(e.getMessage().indexOf("PK_YLB_UK")>0){
  380 + newMap.put("fage", "存在相同数据,数据已经过滤");
  381 + logger.info("获取:存在相同数据,数据已经过滤");
  382 + }
  383 + }
  384 +
367 385 }
368 386  
369 387 if(updateList.size()>0){
... ... @@ -372,7 +390,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
372 390 }
373 391 }
374 392 newMap.put("status", ResponseCode.SUCCESS);
375   - } catch (ParseException e) {
  393 + } catch (Exception e) {
376 394 // TODO Auto-generated catch block
377 395 newMap.put("status", ResponseCode.ERROR);
378 396 throw e;
... ... @@ -778,7 +796,16 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
778 796 t.setYh(0.0);
779 797 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){
780 798 t.setCreatetime(new Date());
781   - repository.save(t);
  799 + try {
  800 + repository.save(t);
  801 + } catch (Exception e) {
  802 + // TODO: handle exception
  803 + if(e.getMessage().indexOf("PK_YLB_UK")>0){
  804 + newMap.put("fage", "存在相同数据,数据已经过滤");
  805 + logger.info("核对有存油没里程:存在相同数据,数据已经过滤");
  806 + }
  807 + }
  808 +
782 809 /*if(null!=cyl){
783 810 cyl.setCyl(Arith.add(t.getJzl(), t.getCzyl()));
784 811 cyl.setUpdatetime(y1.getYyrq());
... ...
src/main/java/com/bsth/service/report/impl/CulateMileageServiceImpl.java
... ... @@ -222,7 +222,21 @@ public class CulateMileageServiceImpl implements CulateMileageService{
222 222 if (!isInOut(scheduleRealInfo)) {
223 223 if(!scheduleRealInfo.isDestroy()){
224 224 if(scheduleRealInfo.isSflj()){
225   - ljgl=Arith.add(ljgl,scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());
  225 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  226 + if(childTaskPlans.isEmpty()){
  227 + ljgl=Arith.add(ljgl,scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());
  228 + }else{
  229 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  230 + while (it.hasNext()) {
  231 + ChildTaskPlan childTaskPlan = it.next();
  232 + if(childTaskPlan.getMileageType().equals("service")){
  233 + if (!childTaskPlan.isDestroy()) {
  234 + Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  235 + ljgl=Arith.add(ljgl,jhgl);
  236 + }
  237 + }
  238 + }
  239 + }
226 240 }else{
227 241 Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
228 242 if(!childTaskPlans.isEmpty()){
... ...
src/main/java/com/bsth/util/BatchSaveUtils.java
... ... @@ -99,6 +99,47 @@ public class BatchSaveUtils&lt;T&gt; {
99 99 return 0;
100 100 }
101 101  
  102 + public int saveList2(List<T> list, Class<T> clazz) throws Exception{
  103 + //获取泛型 T 的字节码
  104 + Table table = clazz.getAnnotation(Table.class);
  105 + if(null == table){
  106 + logger.error("找不到" + clazz.getSimpleName() + "类的表映射");
  107 + return -1;
  108 + }
  109 + List<Field> fs = fieldFilter(clazz.getDeclaredFields());
  110 + String sql = createSql(table, fs);
  111 + logger.info(sql);
  112 +
  113 + //每5000条批量入库一次
  114 + Connection conn = null;
  115 + PreparedStatement ps = null;
  116 + try{
  117 + conn = getConn();
  118 + conn.setAutoCommit(false);
  119 + ps = conn.prepareStatement(sql);
  120 +
  121 + int fsize = fs.size(), count = 0;
  122 + for(T t : list){
  123 + count ++;
  124 + for(int i = 0; i < fsize; i ++){
  125 + ps.setObject(i + 1, fs.get(i).get(t));
  126 + }
  127 +
  128 + ps.addBatch();
  129 + if(count % batchSize == 0){
  130 + ps.executeBatch();
  131 + conn.commit();
  132 + ps.clearBatch();
  133 + }
  134 + }
  135 + ps.executeBatch();
  136 + conn.commit();
  137 + }finally {
  138 + closeAll(conn, ps, null);
  139 + }
  140 +
  141 + return 0;
  142 + }
102 143 public String createSql(Table table, List<Field> fs){
103 144 String sqlBefore = "insert into " + table.name() + "("
104 145 ,sqlValues = " values(";
... ...