Browse Source

:sparkles: 季度报表集装箱逻辑调整

lag 9 months ago
parent
commit
2984253e94

+ 1 - 1
src/main/java/com/shcd/controller/SpStatementController.java

@@ -90,7 +90,7 @@ public class SpStatementController {
   }
 
   /**
-   * 生成上海市长江经济带船舶使用岸电情况报表
+   * 生成季度报表
    *
    * @param vo
    * @return

+ 4 - 0
src/main/java/com/shcd/mapper/SpStatementContainerMapper.java

@@ -2,6 +2,9 @@ package com.shcd.mapper;
 
 import com.shcd.entity.SpStatementContainer;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.shcd.vo.SpQuarterReportOriginVo;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
 
 /**
 * @author 14390
@@ -11,6 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 */
 public interface SpStatementContainerMapper extends BaseMapper<SpStatementContainer> {
 
+  SpQuarterReportOriginVo selectCurrentQuarterData(@Param("reportDateList") List<String> reportDateList);
 }
 
 

+ 45 - 17
src/main/java/com/shcd/service/impl/SpStatementQuarterReportServiceImpl.java

@@ -67,6 +67,7 @@ public class SpStatementQuarterReportServiceImpl extends
       Date endDate;
       Date newStartDate;
       Date newEndDate;
+      List<String> quarterReportDateString = new ArrayList<>();
       if (currentQuarter == 1) {
         startDate = DateUtils.stringToDate(currentYear - 1 + "-" + "12" + dateEnd,
             "yyyy-MM-dd HH:mm:ss");
@@ -75,6 +76,9 @@ public class SpStatementQuarterReportServiceImpl extends
             "yyyy-MM-dd HH:mm:ss");
         newEndDate = DateUtils.stringToDate(currentYear + "-" + "02" + dateEnd,
             "yyyy-MM-dd HH:mm:ss");
+        quarterReportDateString.add(currentYear + "-01");
+        quarterReportDateString.add(currentYear + "-02");
+        quarterReportDateString.add(currentYear + "-03");
       } else if (currentQuarter == 2) {
         startDate = DateUtils.stringToDate(currentYear + "-" + "03" + dateEnd,
             "yyyy-MM-dd HH:mm:ss");
@@ -83,6 +87,9 @@ public class SpStatementQuarterReportServiceImpl extends
             "yyyy-MM-dd HH:mm:ss");
         newEndDate = DateUtils.stringToDate(currentYear + "-" + "05" + dateEnd,
             "yyyy-MM-dd HH:mm:ss");
+        quarterReportDateString.add(currentYear + "-04");
+        quarterReportDateString.add(currentYear + "-05");
+        quarterReportDateString.add(currentYear + "-06");
       } else if (currentQuarter == 3) {
         startDate = DateUtils.stringToDate(currentYear + "-" + "06" + dateEnd,
             "yyyy-MM-dd HH:mm:ss");
@@ -91,6 +98,9 @@ public class SpStatementQuarterReportServiceImpl extends
             "yyyy-MM-dd HH:mm:ss");
         newEndDate = DateUtils.stringToDate(currentYear + "-" + "08" + dateEnd,
             "yyyy-MM-dd HH:mm:ss");
+        quarterReportDateString.add(currentYear + "-07");
+        quarterReportDateString.add(currentYear + "-08");
+        quarterReportDateString.add(currentYear + "-09");
       } else {
         startDate = DateUtils.stringToDate(currentYear + "-" + "09" + dateEnd,
             "yyyy-MM-dd HH:mm:ss");
@@ -99,6 +109,9 @@ public class SpStatementQuarterReportServiceImpl extends
             "yyyy-MM-dd HH:mm:ss");
         newEndDate = DateUtils.stringToDate(currentYear + "-" + "11" + dateEnd,
             "yyyy-MM-dd HH:mm:ss");
+        quarterReportDateString.add(currentYear + "-10");
+        quarterReportDateString.add(currentYear + "-11");
+        quarterReportDateString.add(currentYear + "-12");
       }
       //防止数据重复出现,先删后插
       this.remove(Wrappers.<SpStatementQuarterReport>lambdaQuery()
@@ -208,16 +221,31 @@ public class SpStatementQuarterReportServiceImpl extends
       ShorePowerQuarterDataType[] dataTypes = ShorePowerQuarterDataType.values();
       //计算季度,即使某个类型没有数据也能存进表里 spStatementQuarterReports必定会有12条数据
       for (ShorePowerQuarterDataType dataType : dataTypes) {
-        SpStatementQuarterReport spStatementQuarterReport = new SpStatementQuarterReport();
-        spStatementQuarterReport.setDataType(dataType.getDataType());
-        spStatementQuarterReport.setId(snowflakeConfig.snowflakeStringId());
-        spStatementQuarterReport.setYear(currentYear);
-        spStatementQuarterReport.setQuarter(currentQuarter);
-        calculateQuarterReportDetailOriginMonth(spStatementQuarterReport,
-            resultMapOrigin.get(dataType.getDataType()));
-        calculateQuarterReportDetailBlMonth(spStatementQuarterReport,
-            resultMapBl.get(dataType.getDataType()));
-        spStatementQuarterReports.add(spStatementQuarterReport);
+        // 集装箱数据从指标报表中的集装箱数据中拿取
+        if (ShorePowerQuarterDataType.CONTAINER_BERTH.equals(dataType)) {
+          SpQuarterReportOriginVo spQuarterReportOriginVo = containerMapper.selectCurrentQuarterData(
+              quarterReportDateString);
+          SpStatementQuarterReport spStatementQuarterReport = new SpStatementQuarterReport();
+          spStatementQuarterReport.setDataType(dataType.getDataType());
+          spStatementQuarterReport.setId(snowflakeConfig.snowflakeStringId());
+          spStatementQuarterReport.setYear(currentYear);
+          spStatementQuarterReport.setQuarter(currentQuarter);
+          spStatementQuarterReport.setShipUsageQuarter(spQuarterReportOriginVo.getShipUsage());
+          spStatementQuarterReport.setChargeTimeQuarter(spQuarterReportOriginVo.getChargeTime());
+          spStatementQuarterReport.setElectUseQuarter(spQuarterReportOriginVo.getElect());
+          spStatementQuarterReports.add(spStatementQuarterReport);
+        } else {
+          SpStatementQuarterReport spStatementQuarterReport = new SpStatementQuarterReport();
+          spStatementQuarterReport.setDataType(dataType.getDataType());
+          spStatementQuarterReport.setId(snowflakeConfig.snowflakeStringId());
+          spStatementQuarterReport.setYear(currentYear);
+          spStatementQuarterReport.setQuarter(currentQuarter);
+          calculateQuarterReportDetailOriginMonth(spStatementQuarterReport,
+              resultMapOrigin.get(dataType.getDataType()));
+          calculateQuarterReportDetailBlMonth(spStatementQuarterReport,
+              resultMapBl.get(dataType.getDataType()));
+          spStatementQuarterReports.add(spStatementQuarterReport);
+        }
       }
 //      saveCurrentMonthContainerDataToDB(spStatementQuarterReports, currentDate);
       //过滤出额外的总和,合并明细的时候会增加一个总和的数据,但是都是0
@@ -400,13 +428,13 @@ public class SpStatementQuarterReportServiceImpl extends
     containerSingleData.setElectUsage(currentMonthContainerData.getElectUseQuarter());
     if (!Objects.isNull(sameTimeLastYear)) {
       containerSingleData.setShipUsageTon(
-        containerSingleData.getShipUsage().subtract(sameTimeLastYear.getShipUsage())
-            .multiply(BigDecimal.valueOf(100))
-            .divide(sameTimeLastYear.getShipUsage(), 2, RoundingMode.HALF_UP));
-    containerSingleData.setElectUsageTon(
-        containerSingleData.getElectUsage().subtract(sameTimeLastYear.getElectUsage())
-            .multiply(BigDecimal.valueOf(100))
-            .divide(sameTimeLastYear.getElectUsage(), 2, RoundingMode.HALF_UP));
+          containerSingleData.getShipUsage().subtract(sameTimeLastYear.getShipUsage())
+              .multiply(BigDecimal.valueOf(100))
+              .divide(sameTimeLastYear.getShipUsage(), 2, RoundingMode.HALF_UP));
+      containerSingleData.setElectUsageTon(
+          containerSingleData.getElectUsage().subtract(sameTimeLastYear.getElectUsage())
+              .multiply(BigDecimal.valueOf(100))
+              .divide(sameTimeLastYear.getElectUsage(), 2, RoundingMode.HALF_UP));
     }
     containerMapper.insert(containerSingleData);
   }

+ 41 - 41
src/main/java/com/shcd/service/impl/SpStatementShipUsageMonthServiceImpl.java

@@ -656,47 +656,47 @@ public class SpStatementShipUsageMonthServiceImpl extends
               .multiply(BigDecimal.valueOf(100))
               .divide(sameTimeLastYear.getElectUsage(), 2, RoundingMode.HALF_UP));
       //如果当前是第一月
-//      if (toDate.getMonth() + 1 == 1) {
-//        //不用查往期合计
-//        spStatementSg.setSumChargeTime(
-//            underLineSg.getShorePowerTime().setScale(2, RoundingMode.HALF_UP));
-//        spStatementSg.setSumShipUsageNum(
-//            underLineSg.getShipUsage().setScale(2, RoundingMode.HALF_UP));
-//        spStatementSg.setSumElectUse(
-//            underLineSg.getShorePowerCount().setScale(2, RoundingMode.HALF_UP));
-//        spStatementSg.setSumShipUsageTon(
-//            spStatementSg.getSumShipUsageNum().subtract(last.getSumShipUsageNum())
-//                .multiply(BigDecimal.valueOf(100))
-//                .divide(last.getSumShipUsageNum(), 2, RoundingMode.HALF_UP));
-//        spStatementSg.setSumElectUseTon(
-//            spStatementSg.getSumElectUse().subtract(last.getSumElectUse())
-//                .multiply(BigDecimal.valueOf(100))
-//                .divide(last.getSumElectUse(), 2, RoundingMode.HALF_UP));
-//      } else {
-//        //查询往期合计,计算本月合计
-//        SpStatementSg lastMonthSg = spStatementSgService.getOne(
-//            Wrappers.<SpStatementSg>lambdaQuery()
-//                .eq(SpStatementSg::getReportDate,
-//                    thisYear + "-" + (lastMonth < 10 ? "0" + lastMonth : lastMonth)));
-//        spStatementSg.setSumChargeTime(
-//            underLineSg.getShorePowerTime().add(lastMonthSg.getSumChargeTime())
-//                .setScale(2, RoundingMode.HALF_UP));
-//        spStatementSg.setSumShipUsageNum(
-//            underLineSg.getShipUsage().add(lastMonthSg.getSumShipUsageNum())
-//                .setScale(2, RoundingMode.HALF_UP));
-//        spStatementSg.setSumElectUse(
-//            underLineSg.getShorePowerCount().add(lastMonthSg.getSumElectUse())
-//                .setScale(2, RoundingMode.HALF_UP));
-//        spStatementSg.setSumShipUsageTon(
-//            spStatementSg.getSumShipUsageNum().subtract(last.getSumShipUsageNum())
-//                .multiply(BigDecimal.valueOf(100))
-//                .divide(last.getSumShipUsageNum(), 2, RoundingMode.HALF_UP));
-//        spStatementSg.setSumElectUseTon(
-//            spStatementSg.getSumElectUse().subtract(last.getSumElectUse())
-//                .multiply(BigDecimal.valueOf(100))
-//                .divide(last.getSumElectUse(), 2, RoundingMode.HALF_UP));
-//      }
-//      spStatementSgService.save(spStatementSg);
+      if (toDate.getMonth() + 1 == 1) {
+        //不用查往期合计
+        spStatementSg.setSumChargeTime(
+            underLineSg.getShorePowerTime().setScale(2, RoundingMode.HALF_UP));
+        spStatementSg.setSumShipUsageNum(
+            underLineSg.getShipUsage().setScale(2, RoundingMode.HALF_UP));
+        spStatementSg.setSumElectUse(
+            underLineSg.getShorePowerCount().setScale(2, RoundingMode.HALF_UP));
+        spStatementSg.setSumShipUsageTon(
+            spStatementSg.getSumShipUsageNum().subtract(last.getSumShipUsageNum())
+                .multiply(BigDecimal.valueOf(100))
+                .divide(last.getSumShipUsageNum(), 2, RoundingMode.HALF_UP));
+        spStatementSg.setSumElectUseTon(
+            spStatementSg.getSumElectUse().subtract(last.getSumElectUse())
+                .multiply(BigDecimal.valueOf(100))
+                .divide(last.getSumElectUse(), 2, RoundingMode.HALF_UP));
+      } else {
+        //查询往期合计,计算本月合计
+        SpStatementSg lastMonthSg = spStatementSgService.getOne(
+            Wrappers.<SpStatementSg>lambdaQuery()
+                .eq(SpStatementSg::getReportDate,
+                    thisYear + "-" + (lastMonth < 10 ? "0" + lastMonth : lastMonth)));
+        spStatementSg.setSumChargeTime(
+            underLineSg.getShorePowerTime().add(lastMonthSg.getSumChargeTime())
+                .setScale(2, RoundingMode.HALF_UP));
+        spStatementSg.setSumShipUsageNum(
+            underLineSg.getShipUsage().add(lastMonthSg.getSumShipUsageNum())
+                .setScale(2, RoundingMode.HALF_UP));
+        spStatementSg.setSumElectUse(
+            underLineSg.getShorePowerCount().add(lastMonthSg.getSumElectUse())
+                .setScale(2, RoundingMode.HALF_UP));
+        spStatementSg.setSumShipUsageTon(
+            spStatementSg.getSumShipUsageNum().subtract(last.getSumShipUsageNum())
+                .multiply(BigDecimal.valueOf(100))
+                .divide(last.getSumShipUsageNum(), 2, RoundingMode.HALF_UP));
+        spStatementSg.setSumElectUseTon(
+            spStatementSg.getSumElectUse().subtract(last.getSumElectUse())
+                .multiply(BigDecimal.valueOf(100))
+                .divide(last.getSumElectUse(), 2, RoundingMode.HALF_UP));
+      }
+      spStatementSgService.save(spStatementSg);
       // 计算靠泊集装箱码头船舶数据
       List<SpQuarterReportOriginVo> spQuarterReportOriginVos = spStatementShipUsageMonthMapper.selectQuarterOrigin(
           lastDate, thisDate, lastCycleStart, lastCycleEnd);

+ 2 - 0
src/main/java/com/shcd/vo/SpQuarterReportOriginVo.java

@@ -12,4 +12,6 @@ public class SpQuarterReportOriginVo {
     private Date startTime;
     private Date endTime;
     private BigDecimal elect;
+    private BigDecimal shipUsage;
+    private BigDecimal chargeTime;
 }

+ 8 - 0
src/main/resources/mapper/SpStatementContainerMapper.xml

@@ -28,4 +28,12 @@
         SUM_SHIP_USAGE_NUM,SUM_SHIP_USAGE_TON,SUM_CHARGE_TIME,
         SUM_ELECT_USE,SUM_ELECT_USE_TON
     </sql>
+
+  <select id="selectCurrentQuarterData" resultType="com.shcd.vo.SpQuarterReportOriginVo">
+    select SUM(t.ship_usage) shipUsage,SUM(t.charge_time) chargeTime,SUM(t.elect_usage) elect from
+    GHJG_PORT_MANAGE.SP_STATEMENT_CONTAINER t where t.report_date in
+    <foreach item="item" collection="reportDateList" separator="," open="(" close=")">
+      #{item}
+    </foreach>
+  </select>
 </mapper>

+ 1 - 3
src/main/resources/mapper/SpStatementShipUsageMonthMapper.xml

@@ -95,10 +95,8 @@
     from GHJG_PORT_MANAGE.SHORE_POWER_CONN_RECORD_INFO i
            left join GHJG_PORT_MANAGE.SHORE_POWER_BERTH_INFO_NEW b on i.BERTHID = b.BERTHID
     where b.BERTHTYPE is not null
-      AND ((i.ENDTIME >= #{startDate}
+      AND (i.ENDTIME >= #{startDate}
       AND i.ENDTIME &lt;= #{endDate})
-      OR (i.ENDTIME >= #{newStartDate} and i.ENDTIME &lt;= #{newStartEnd} AND
-          i.MODIFYTIME >= #{startDate} and i.MODIFYTIME &lt;= #{endDate}))
   </select>
   <select id="selectQuarterBlBerth" resultType="com.shcd.vo.SpQuarterReportBlVo">
     select B.BERTH_TYPE      berthType,