liyg 2 سال پیش
والد
کامیت
86c468bd81

+ 106 - 11
src/main/java/com/steerinfo/dil/controller/ShipDynamicsController.java

@@ -49,7 +49,19 @@ public class ShipDynamicsController extends BaseRESTfulController {
         Double capacityNumberAllSum2=0.0;
         Double capacityNumberAllSum3=0.0;
         Double capacityNumberAllSum4=0.0;
+
+        //物资大类小计,每一个批次进行完小计后清空
+        // 1:未到闸船舶2:等闸船舶3:已过闸船舶4:到港待卸船舶的和
+        Double materialNumberSum1 = 0.0;
+        Double materialNumberSum2 = 0.0;
+        Double materialNumberSum3 = 0.0;
+        Double materialNumberSum4 = 0.0;
+        //物资大类下游港口吨位的求和
+        Double materialTonnageSum=0.0;
+        //物资总小计
+        Double materialNumberAllSum=0.0;
         for (int i = 0; i <= list.size()-1; i++) {
+            //处理船舶合计
             if(i>0&&!list.get(i).get("batchInfacoryId").equals(list.get(i-1).get("batchInfacoryId"))){
                 Map<String,Object> map=new LinkedHashMap<>();
                 map.put("batchInfacoryId",list.get(i-1).get("batchInfacoryId"));
@@ -97,6 +109,48 @@ public class ShipDynamicsController extends BaseRESTfulController {
                capacityNumberSum3 = 0.0;
                capacityNumberSum4 = 0.0;
             }
+            //处理物资合计
+            if(i>0&&!list.get(i).get("materialTypeName").equals(list.get(i-1).get("materialTypeName"))){
+                //如果和上一个物资名不一样,则统计清零
+                //四小合计
+                Map<String,Object> map=new LinkedHashMap<>();
+                map.put("materialType",list.get(i-1).get("materialTypeName"));
+                map.put("batchInfacoryId","不合并第二行");
+                map.put("batchId",list.get(i-1).get("batchId"));
+                map.put("pm","物资合计");
+                map.put("tonnage",materialTonnageSum);
+                map.put("capacity1","物资小计");
+                map.put("capacity2","物资小计");
+                map.put("capacity3" ,"物资小计");
+                map.put("capacity4","物资小计");
+                map.put("capacityNumber1",materialNumberSum1);
+                map.put("capacityNumber2",materialNumberSum2);
+                map.put("capacityNumber3",materialNumberSum3);
+                map.put("capacityNumber4",materialNumberSum4);
+                mapList.add(map);
+                //总合计
+                Map<String,Object> map2=new HashMap<>();
+                map2.put("materialType",list.get(i-1).get("materialTypeName"));
+                map2.put("batchInfacoryId","不合并第二行");
+                map2.put("pm","物资合计");
+                map2.put("tonnage",materialTonnageSum);
+                map2.put("batchId",list.get(i-1).get("batchId"));
+                map2.put("capacity1", list.get(i-1).get("materialTypeName") + ":" +
+                new BigDecimal(materialNumberSum1+materialNumberSum2+materialNumberSum3+materialNumberSum4).setScale(2,BigDecimal.ROUND_HALF_UP));
+                map2.put("type",1);
+                map2.put("aaaaa", 2);
+                mapList.add(map2);
+                materialNumberSum1 = 0.0;
+                materialNumberSum2 = 0.0;
+                materialNumberSum3 = 0.0;
+                materialNumberSum4 = 0.0;
+                materialTonnageSum=0.0;
+                materialNumberAllSum=0.0;
+            }
+            if(i==0 || !list.get(i).get("batchInfacoryId").equals(list.get(i-1).get("batchInfacoryId"))){
+                //物资大类的下游港口总和
+                materialTonnageSum=new BigDecimal(materialTonnageSum+Double.valueOf(list.get(i).get("tonnage").toString())).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
+            }
             Map<String, Object> map = new HashMap<>();
             map.put("batchInfacoryId",list.get(i).get("batchInfacoryId"));
             map.put("batchId",list.get(i).get("batchId"));
@@ -134,6 +188,8 @@ public class ShipDynamicsController extends BaseRESTfulController {
             String locationValue4=null;
             String dgsj=null;
             String locationStatus = list.get(i).get("locationStatus").toString();
+            //物资大类总小计
+            materialNumberAllSum=new BigDecimal(materialNumberAllSum+Double.valueOf(list.get(i).get("capacityNumber").toString())).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
             if ("未到闸船舶".equals(locationStatus)) {
                 capacity1 = list.get(i).get("capacity").toString();
                 capacityNumber1 = list.get(i).get("capacityNumber").toString();
@@ -143,6 +199,8 @@ public class ShipDynamicsController extends BaseRESTfulController {
                 capacityNumberAllSum1+=Double.valueOf(capacityNumber1);
                 capacityNumberSum1 = new BigDecimal(capacityNumberSum1).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
                 capacityNumberAllSum1 = new BigDecimal(capacityNumberAllSum1).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
+                //物资分类
+                materialNumberSum1 = new BigDecimal(materialNumberSum1+Double.valueOf(capacityNumber1)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
             } else if ("等闸船舶".equals(locationStatus)) {
                 capacity2 = list.get(i).get("capacity").toString();
                 capacityNumber2 = list.get(i).get("capacityNumber").toString();
@@ -152,6 +210,8 @@ public class ShipDynamicsController extends BaseRESTfulController {
                 capacityNumberAllSum2+=Double.valueOf(capacityNumber2);
                 capacityNumberSum2 = new BigDecimal(capacityNumberSum2).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
                 capacityNumberAllSum2 = new BigDecimal(capacityNumberAllSum2).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
+                //物资分类
+                materialNumberSum2 = new BigDecimal(materialNumberSum2+Double.valueOf(capacityNumber2)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
             } else if ("已过闸船舶".equals(locationStatus)) {
                 capacity3 = list.get(i).get("capacity").toString();
                 capacityNumber3 = list.get(i).get("capacityNumber").toString();
@@ -161,6 +221,8 @@ public class ShipDynamicsController extends BaseRESTfulController {
                 capacityNumberAllSum3+=Double.valueOf(capacityNumber3);
                 capacityNumberSum3 = new BigDecimal(capacityNumberSum3).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
                 capacityNumberAllSum3 = new BigDecimal(capacityNumberAllSum3).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
+                //物资分类
+                materialNumberSum3 = new BigDecimal(materialNumberSum3+Double.valueOf(capacityNumber3)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
             } else if ("到港待卸船舶".equals(locationStatus)) {
                 capacity4 = list.get(i).get("capacity").toString();
                 capacityNumber4 = list.get(i).get("capacityNumber").toString();
@@ -171,6 +233,8 @@ public class ShipDynamicsController extends BaseRESTfulController {
                 capacityNumberAllSum4+=Double.valueOf(capacityNumber4);
                 capacityNumberSum4 = new BigDecimal(capacityNumberSum4).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
                 capacityNumberAllSum4 = new BigDecimal(capacityNumberAllSum4).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
+                //物资分类
+                materialNumberSum4 = new BigDecimal(materialNumberSum4+Double.valueOf(capacityNumber4)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
             }
             map.put("capacity1",capacity1);
             map.put("capacityNumber1",capacityNumber1);
@@ -193,6 +257,7 @@ public class ShipDynamicsController extends BaseRESTfulController {
             map.put("portName", list.get(i).get("portName"));
             mapList.add(map);
         }
+        //船舶合计处理最后一行
         Map<String,Object> map=new HashMap<>();
         map.put("batchInfacoryId",list.get(list.size() - 1).get("batchInfacoryId"));
         map.put("batchId",list.get(list.size() -1 ).get("batchId"));
@@ -234,18 +299,48 @@ public class ShipDynamicsController extends BaseRESTfulController {
         map2.put("type",1);
         map2.put("eeeeee", 12);
         mapList.add(map2);
+        //物资合计处理最后一行
+        //四小合计
+        Map<String,Object> map11=new LinkedHashMap<>();
+        map11.put("materialType",list.get(list.size() - 1).get("materialTypeName"));
+        map11.put("batchInfacoryId","不合并第二行");
+        map11.put("pm","物资合计");
+        map11.put("tonnage",materialTonnageSum);
+        map11.put("batchId",list.get(list.size() -1).get("batchId"));
+        map11.put("capacity1","物资小计");
+        map11.put("capacity2","物资小计");
+        map11.put("capacity3" ,"物资小计");
+        map11.put("capacity4","物资小计");
+        map11.put("capacityNumber1",materialNumberSum1);
+        map11.put("capacityNumber2",materialNumberSum2);
+        map11.put("capacityNumber3",materialNumberSum3);
+        map11.put("capacityNumber4",materialNumberSum4);
+
+        mapList.add(map11);
+        //总合计
+        Map<String,Object> map22=new HashMap<>();
+        map22.put("materialType",list.get(list.size() -1).get("materialTypeName"));
+        map22.put("batchInfacoryId","不合并第二行");
+        map22.put("pm","物资合计");
+        map22.put("tonnage",materialTonnageSum);
+        map22.put("batchId",list.get(list.size() -1).get("batchId"));
+        map22.put("capacity1", list.get(list.size() -1).get("materialTypeName") + ":" +
+                new BigDecimal(materialNumberSum1+materialNumberSum2+materialNumberSum3+materialNumberSum4).setScale(2,BigDecimal.ROUND_HALF_UP));
+        map22.put("type",1);
+        map22.put("aaaaa", 2);
+        mapList.add(map22);
         //有下游吨位无江船的
-        List<Map<String,Object>> unloads=iShipDynamicsService.selectAllUnload(mapVal);
-        for (Map<String,Object> temp:unloads){
-            String pm= temp.get("materialName").toString() +"\n\n\n\n\n"+
-                    "\""+temp.get("shipName").toString()+"\""+"\n\n\n\n\n"+
-                    temp.get("dateOfLoans").toString().substring(0, 10)+"\n\n\n\n\n"+"放"+
-                    temp.get("numberOfLoans").toString()+"吨";
-            temp.put("pm",pm);
-            temp.put("materialType",temp.get("materialTypeName"));
-            tonnageSum+=Double.parseDouble(temp.get("tonnage").toString());
-        }
-        mapList.addAll(unloads);
+//        List<Map<String,Object>> unloads=iShipDynamicsService.selectAllUnload(mapVal);
+//        for (Map<String,Object> temp:unloads){
+//            String pm= temp.get("materialName").toString() +"\n\n\n\n\n"+
+//                    "\""+temp.get("shipName").toString()+"\""+"\n\n\n\n\n"+
+//                    temp.get("dateOfLoans").toString().substring(0, 10)+"\n\n\n\n\n"+"放"+
+//                    temp.get("numberOfLoans").toString()+"吨";
+//            temp.put("pm",pm);
+//            temp.put("materialType",temp.get("materialTypeName"));
+//            tonnageSum+=Double.parseDouble(temp.get("tonnage").toString());
+//        }
+//        mapList.addAll(unloads);
         //最下方的两行
         //第一行
         Map<String,Object> map3=new HashMap<>();

+ 118 - 53
src/main/resources/com/steerinfo/dil/mapper/ShipDynamicsMapper.xml

@@ -4,63 +4,128 @@
 <!-- 获取船舶动态表数据  -->
     <select id="selectAll" resultType="java.util.Map" parameterType="java.util.Map">
     SELECT * FROM (
-        select DISTINCT
-               db.BATCH_ID "batchId",
-               DBI2.BATCH_INFACOTRY_ID  "batchInfacoryId",
-               db.result_foreign_ship_name "shipName",
-               rm.material_name "materialName",
-               adn.NOTICE_DELIVERY_TIME "dateOfLoans",
-               adn.RESULT_NUMBER_OF_LOANS "numberOfLoans",
-               rp.port_name "portName",
-               wgm.gm_tonnage "tonnage",
-               rc.capacity_number "capacity",
-               tlsr.RESULT_ACTUAL_INSTALLATIONS "capacityNumber",
-               tlsr.RESULT_OUT_PORT_TIME "outPortTime",
-               tlsr.RESULT_ARRIVAL_PORT_TIME "dgsj",
-               tsl.LOCATION_STATUS "locationStatus",
-               tsl.LOCATION_VALUE "locationValue",
-               tsl.LOCATION_ROUTE_TIME,
-               RMT.MATERIAL_TYPE_NAME "materialTypeName",
-               RMT.MATERIAL_TYPE_ID "materialTypeId",
-               OSI.INSTRUCTIONS_STATUS "instructionStatus"
-                 from AMSSHIP_DELIVERY_NOTICE adn
-                 LEFT JOIN DIL_BATCH_INFACOTRY DBI2 on adn.batch_id=DBI2.BATCH_INFACOTRY_ID
-                 LEFT JOIN AMSSHIP_DELIVERY_ATTORNEY ADA ON ADA.BATCH_ID = adn.batch_id
-                 JOIN DIL_BATCH DB ON DBI2.BATCH_ID=DB.BATCH_ID
-                 join rms_material rm on db.material_id=rm.material_id
-                 left join rms_port rp on rp.port_id=ADA.DOWN_SWIM_PORT_ID
-                 left join WMSH_GRID_MATERIAL wgm on wgm.batch_id = DB.BATCH_ID AND ADA.DOWN_SWIM_PORT_ID=WGM.PORT_ID
-                 left join TMSSHIP_LOAD_SHIP_RESULT tlsr on DBI2.BATCH_INFACOTRY_ID=tlsr.batch_id
-                 left join tmsship_total_result ttr on ttr.result_id=tlsr.TOTAL_RESULT_ID
-                 left join omsship_instructions_capacity oic on ttr.order_id=oic.instructions_capacity_id
-                 left join OMSSHIP_SHIPMENT_INSTRUCTIONS OSI  ON OSI.SHIPMENT_INSTRUCTIONS_ID=oic.INSTRUCTIONS_ID
-                 left join rms_capacity rc on oic.capacity_id=rc.capacity_id
-                 left join RMS_MATERIAL_TYPE RMT on adn.MATERIAL_TYPE_ID =  RMT.MATERIAL_TYPE_ID
-                 left join (select * from tmsship_ship_location t where t.location_id in
-                                                                        (SELECT
-                                                                             t.location_id
-                                                                         FROM
-                                                                             (
-                                                                                 SELECT
-                                                                                     t.location_id,
-                                                                                     t.total_result_id,
-                                                                                     t.location_route_time,
-                                                                                     ROW_NUMBER () OVER (
+                      select DISTINCT
+                          db.BATCH_ID "batchId",
+                          DBI2.BATCH_INFACOTRY_ID  "batchInfacoryId",
+                          db.result_foreign_ship_name "shipName",
+                          rm.material_name "materialName",
+                          adn.NOTICE_DELIVERY_TIME "dateOfLoans",
+                          adn.RESULT_NUMBER_OF_LOANS "numberOfLoans",
+                          rp.port_name "portName",
+                          wgm.gm_tonnage "tonnage",
+                          rc.capacity_number "capacity",
+                          tlsr.RESULT_ACTUAL_INSTALLATIONS "capacityNumber",
+                          tlsr.RESULT_OUT_PORT_TIME "outPortTime",
+                          tlsr.RESULT_ARRIVAL_PORT_TIME "dgsj",
+                          tsl.LOCATION_STATUS "locationStatus",
+                          tsl.LOCATION_VALUE "locationValue",
+                          tsl.LOCATION_ROUTE_TIME,
+                          NVL(ADN.RESULT_MEMO,'块矿') "materialTypeName",
+                          RMT.MATERIAL_TYPE_ID "materialTypeId",
+                          OSI.INSTRUCTIONS_STATUS "instructionStatus"
+                      from AMSSHIP_DELIVERY_NOTICE adn
+                               LEFT JOIN DIL_BATCH_INFACOTRY DBI2 on adn.batch_id=DBI2.BATCH_INFACOTRY_ID
+                               LEFT JOIN AMSSHIP_DELIVERY_ATTORNEY ADA ON ADA.BATCH_ID = adn.batch_id
+                               JOIN DIL_BATCH DB ON DBI2.BATCH_ID=DB.BATCH_ID
+                               join rms_material rm on db.material_id=rm.material_id
+                               left join rms_port rp on rp.port_id=ADA.DOWN_SWIM_PORT_ID
+                               left join WMSH_GRID_MATERIAL wgm on wgm.batch_id = DB.BATCH_ID AND ADA.DOWN_SWIM_PORT_ID=WGM.PORT_ID
+                               left join TMSSHIP_LOAD_SHIP_RESULT tlsr on DBI2.BATCH_INFACOTRY_ID=tlsr.batch_id
+                               left join tmsship_total_result ttr on ttr.result_id=tlsr.TOTAL_RESULT_ID
+                               left join omsship_instructions_capacity oic on ttr.order_id=oic.instructions_capacity_id
+                               left join OMSSHIP_SHIPMENT_INSTRUCTIONS OSI  ON OSI.SHIPMENT_INSTRUCTIONS_ID=oic.INSTRUCTIONS_ID
+                               left join rms_capacity rc on oic.capacity_id=rc.capacity_id
+                               left join RMS_MATERIAL_TYPE RMT on adn.MATERIAL_TYPE_ID =  RMT.MATERIAL_TYPE_ID
+                               left join (select * from tmsship_ship_location t where t.location_id in
+                                                                                      (SELECT
+                                                                                           t.location_id
+                                                                                       FROM
+                                                                                           (
+                                                                                               SELECT
+                                                                                                   t.location_id,
+                                                                                                   t.total_result_id,
+                                                                                                   t.location_route_time,
+                                                                                                   ROW_NUMBER () OVER (
                                                                                          PARTITION BY t.total_result_id
                                                                                          ORDER BY t.location_route_time DESC
                                                                                          ) AS rn
-                                                                                 FROM
-                                                                                     tmsship_ship_location t
-                                                                             ) t
-                                                                         WHERE
-                                                                             rn = 1)) tsl on tsl.total_result_id=ttr.result_id
-        where ttr.ship_status = 0 and tsl.LOCATION_STATUS is not null and tlsr.DELETED=0
-        and  adn.DELETED=0 and oic.DELETED=0
-        <if test="con!=null and con!=''.toString()">
-         and (instr(RMT.MATERIAL_TYPE_NAME,#{con}) > 0 or instr(rc.capacity_number,#{con}) > 0 or instr(rm.material_name,#{con}) > 0 or instr(db.result_foreign_ship_name,#{con}) >0 )
-        </if>
+                                                                                               FROM
+                                                                                                   tmsship_ship_location t
+                                                                                           ) t
+                                                                                       WHERE
+                                                                                           rn = 1)) tsl on tsl.total_result_id=ttr.result_id
+                      where ttr.ship_status = 0 and tsl.LOCATION_STATUS is not null and tlsr.DELETED=0
+                        and  adn.DELETED=0 and oic.DELETED=0
+                      union all
+                      select DISTINCT
+                          db.BATCH_ID "batchId",
+                          DBI2.BATCH_INFACOTRY_ID  "batchInfacoryId",
+                          db.result_foreign_ship_name "shipName",
+                          rm.material_name "materialName",
+
+                          adn.NOTICE_DELIVERY_TIME "dateOfLoans",
+                          adn.RESULT_NUMBER_OF_LOANS "numberOfLoans",
+                          rp.port_name "portName",
+                          wgm.gm_tonnage "tonnage",
+                          null "capacity",
+                          0 "capacityNumber",
+                          null "outPortTime",
+                          null "dgsj",
+                          null "locationStatus",
+                          null "locationValue",
+                          null,
+                          null "materialTypeName",
+                          null "materialTypeId",
+                          null "instructionStatus"
+
+                      from AMSSHIP_DELIVERY_NOTICE adn
+                               LEFT JOIN DIL_BATCH_INFACOTRY DBI2 on adn.batch_id=DBI2.BATCH_INFACOTRY_ID
+                               LEFT JOIN AMSSHIP_DELIVERY_ATTORNEY ADA ON ADA.BATCH_ID = adn.batch_id
+                               JOIN DIL_BATCH DB ON DBI2.BATCH_ID=DB.BATCH_ID
+                               join rms_material rm on db.material_id=rm.material_id
+                               left join rms_port rp on rp.port_id=ADA.DOWN_SWIM_PORT_ID
+                               left join WMSH_GRID_MATERIAL wgm on wgm.batch_id = DB.BATCH_ID AND ADA.DOWN_SWIM_PORT_ID=WGM.PORT_ID
+                               left join RMS_MATERIAL_TYPE RMT on adn.MATERIAL_TYPE_ID =  RMT.MATERIAL_TYPE_ID
+                      where adn.DELETED=0 and wgm.DELETED=0 and wgm.gm_tonnage>0
+                        and DBI2.BATCH_INFACOTRY_ID not in(
+                          select DISTINCT
+                              DBI2.BATCH_INFACOTRY_ID  "batchInfacoryId"
+                          from AMSSHIP_DELIVERY_NOTICE adn
+                                   LEFT JOIN DIL_BATCH_INFACOTRY DBI2 on adn.batch_id=DBI2.BATCH_INFACOTRY_ID
+                                   LEFT JOIN AMSSHIP_DELIVERY_ATTORNEY ADA ON ADA.BATCH_ID = adn.batch_id
+                                   JOIN DIL_BATCH DB ON DBI2.BATCH_ID=DB.BATCH_ID
+                                   join rms_material rm on db.material_id=rm.material_id
+                                   left join rms_port rp on rp.port_id=ADA.DOWN_SWIM_PORT_ID
+                                   left join WMSH_GRID_MATERIAL wgm on wgm.batch_id = DB.BATCH_ID AND ADA.DOWN_SWIM_PORT_ID=WGM.PORT_ID
+                                   left join TMSSHIP_LOAD_SHIP_RESULT tlsr on DBI2.BATCH_INFACOTRY_ID=tlsr.batch_id
+                                   left join tmsship_total_result ttr on ttr.result_id=tlsr.TOTAL_RESULT_ID
+                                   left join omsship_instructions_capacity oic on ttr.order_id=oic.instructions_capacity_id
+                                   left join OMSSHIP_SHIPMENT_INSTRUCTIONS OSI  ON OSI.SHIPMENT_INSTRUCTIONS_ID=oic.INSTRUCTIONS_ID
+                                   left join rms_capacity rc on oic.capacity_id=rc.capacity_id
+                                   left join RMS_MATERIAL_TYPE RMT on adn.MATERIAL_TYPE_ID =  RMT.MATERIAL_TYPE_ID
+                                   left join (select * from tmsship_ship_location t where t.location_id in
+                                                                                          (SELECT
+                                                                                               t.location_id
+                                                                                           FROM
+                                                                                               (
+                                                                                                   SELECT
+                                                                                                       t.location_id,
+                                                                                                       t.total_result_id,
+                                                                                                       t.location_route_time,
+                                                                                                       ROW_NUMBER () OVER (
+                                                                                         PARTITION BY t.total_result_id
+                                                                                         ORDER BY t.location_route_time DESC
+                                                                                         ) AS rn
+                                                                                                   FROM
+                                                                                                       tmsship_ship_location t
+                                                                                               ) t
+                                                                                           WHERE
+                                                                                               rn = 1)) tsl on tsl.total_result_id=ttr.result_id
+                          where ttr.ship_status = 0 and tsl.LOCATION_STATUS is not null and tlsr.DELETED=0
+                            and  adn.DELETED=0 and oic.DELETED=0
+                      )
         )
-        Order By "batchInfacoryId" DESC
+        Order By "materialTypeName","batchId","batchInfacoryId" DESC
     </select>
     <select id="selectByshipName" resultType="java.util.Map" parameterType="java.util.Map">
         select sd.GM_TONNAGE as "tonnage",