Ver Fonte

Merge remote-tracking branch 'origin/master'

zuy há 2 anos atrás
pai
commit
9059919af2

+ 37 - 0
admin/src/main/java/com/kym/admin/controller/StatController.java

@@ -0,0 +1,37 @@
+package com.kym.admin.controller;
+
+import com.kym.common.R;
+import com.kym.entity.admin.queryParams.StatQueryParam;
+import com.kym.service.miniapp.ChargeOrderService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author skyline
+ * @description 统计数据
+ * @date 2023-09-02 09:44
+ */
+@RestController
+@RequestMapping("/stat")
+public class StatController {
+
+    private final ChargeOrderService chargeOrderService;
+
+    public StatController(ChargeOrderService chargeOrderService) {
+        this.chargeOrderService = chargeOrderService;
+    }
+
+    /**
+     * 站点充电数据-日/月
+     *
+     * @param params
+     * @return
+     */
+    @GetMapping("/stationStat")
+    R stationStat(@ModelAttribute StatQueryParam params) {
+        var res = chargeOrderService.stationStat(params);
+        return R.success(res);
+    }
+}

+ 22 - 0
entity/src/main/java/com/kym/entity/admin/queryParams/StatQueryParam.java

@@ -0,0 +1,22 @@
+package com.kym.entity.admin.queryParams;
+
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * @author skyline
+ * @description 统计查询参数
+ * @date 2023-09-02 10:15
+ */
+@Data
+public class StatQueryParam extends PageParams {
+
+    private static final String TYPE_DAY = "day";
+    private static final String TYPE_MONTH = "month";
+
+    private String stationId;
+    private String startTime;
+    private String endTime;
+    private String type;
+}

+ 24 - 0
entity/src/main/java/com/kym/entity/admin/vo/StationStatVo.java

@@ -0,0 +1,24 @@
+package com.kym.entity.admin.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author skyline
+ * @description
+ * @date 2023-09-02 10:36
+ */
+@Data
+public class StationStatVo {
+    private String stationId;
+    private String statTime;
+    private Integer totalOrders;
+    private Double totalPower;
+    private Integer totalMoney;
+    private Integer elecMoney;
+    private BigDecimal elecMoneyPercent;
+    private Integer serviceMoney;
+    private BigDecimal serviceMoneyPercent;
+
+}

+ 5 - 0
mapper/src/main/java/com/kym/mapper/miniapp/ChargeOrderMapper.java

@@ -2,7 +2,10 @@ package com.kym.mapper.miniapp;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.kym.entity.admin.queryParams.CustomChargeOrdersQueryParam;
+import com.kym.entity.admin.queryParams.StatQueryParam;
 import com.kym.entity.admin.vo.CustomOrderVo;
+import com.kym.entity.admin.vo.StationStatVo;
+import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.ChargeOrder;
 import org.apache.ibatis.annotations.Param;
 
@@ -19,4 +22,6 @@ import java.util.List;
 public interface ChargeOrderMapper extends BaseMapper<ChargeOrder> {
 
     List<CustomOrderVo> listChargeOrders(@Param("params") CustomChargeOrdersQueryParam params);
+
+    List<StationStatVo> stationStat(@Param("params") StatQueryParam params);
 }

+ 50 - 0
mapper/src/main/resources/mappers/miniapp/ChargeOrderMapper.xml

@@ -41,6 +41,16 @@
         <result column="charge_status" property="chargeStatus"/>
     </resultMap>
 
+    <resultMap id="StationStatMap" type="com.kym.entity.admin.vo.StationStatVo">
+        <result column="station_id" property="stationId"/>
+        <result column="start_time" property="startTime"/>
+        <result column="total_orders" property="totalOrders"/>
+        <result column="total_power" property="totalPower"/>
+        <result column="total_money" property="totalMoney"/>
+        <result column="elec_money" property="elecMoney"/>
+        <result column="service_money" property="serviceMoney"/>
+    </resultMap>
+
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
         id
@@ -92,4 +102,44 @@
         </where>
     </select>
 
+    <select id="stationStat" resultMap="StationStatMap" parameterType="com.kym.entity.admin.queryParams.StatQueryParam">
+        SELECT
+        <if test="params.stationId != null">
+            t1.station_id,
+        </if>
+        <if test="params.type == null or params.type == 'day'">
+            DATE_FORMAT(t1.start_time, '%Y-%m-%d')
+        </if>
+        <if test="params.type != null and params.type == 'month'">
+            DATE_FORMAT(t1.start_time, '%Y-%m')
+        </if>
+        stat_time,
+        count(t1.id) total_orders,
+        SUM(t1.total_power) total_power,
+        SUM(t1.total_money) total_money,
+        SUM(t1.elec_money) elec_money,
+        SUM(t1.service_money) service_money
+        FROM
+        (SELECT
+        *
+        FROM
+        t_charge_order
+        <where>
+            <if test="params.stationId != null">
+                and station_id = #{params.stationId}
+            </if>
+        </where>
+        ) t1
+        GROUP BY stat_time
+        <trim prefix="having" suffixOverrides="and">
+            <if test="params.startTime != null">
+                stat_time &gt;= #{params.startTime} and
+            </if>
+            <if test="params.endTime != null">
+                stat_time &lt;= #{params.endTime} and
+            </if>
+        </trim>
+        order by stat_time desc
+    </select>
+
 </mapper>

+ 4 - 0
service/src/main/java/com/kym/service/miniapp/ChargeOrderService.java

@@ -2,7 +2,9 @@ package com.kym.service.miniapp;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kym.entity.admin.queryParams.CustomChargeOrdersQueryParam;
+import com.kym.entity.admin.queryParams.StatQueryParam;
 import com.kym.entity.admin.vo.CustomOrderVo;
+import com.kym.entity.admin.vo.StationStatVo;
 import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.ChargeOrder;
 
@@ -25,4 +27,6 @@ public interface ChargeOrderService extends IService<ChargeOrder> {
     Object orderDetail(String startChargeSeq);
 
     ChargeOrder orderDetailForApp(String startChargeSeq);
+
+    PageBean<StationStatVo> stationStat(StatQueryParam params);
 }

+ 21 - 1
service/src/main/java/com/kym/service/miniapp/impl/ChargeOrderServiceImpl.java

@@ -4,7 +4,9 @@ import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
 import com.kym.entity.admin.queryParams.CustomChargeOrdersQueryParam;
+import com.kym.entity.admin.queryParams.StatQueryParam;
 import com.kym.entity.admin.vo.CustomOrderVo;
+import com.kym.entity.admin.vo.StationStatVo;
 import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.mapper.miniapp.ChargeOrderMapper;
@@ -12,6 +14,8 @@ import com.kym.service.miniapp.ChargeOrderService;
 import com.kym.service.utils.KymCache;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.stream.Collectors;
 
 /**
@@ -46,7 +50,7 @@ public class ChargeOrderServiceImpl extends ServiceImpl<ChargeOrderMapper, Charg
     public PageBean<CustomOrderVo> customChargeOrders(CustomChargeOrdersQueryParam params, Integer pageNum, Integer pageSize) {
         PageHelper.startPage(pageNum, pageSize);
         // 查询订单列表(订单编号,手机号,充电站,充电桩SN/短码,订单状态,建单时间,结算时间,充电电量,实付金额,付款状态)
-        var result = baseMapper.listChargeOrders(params).stream().map(item -> item.setShortId(kymCache.getShortId(item.getConnectorId().substring(0,15))).setStationName(kymCache.getStationName(item.getConnectorId()))).collect(Collectors.toList());
+        var result = baseMapper.listChargeOrders(params).stream().map(item -> item.setShortId(kymCache.getShortId(item.getConnectorId().substring(0, 15))).setStationName(kymCache.getStationName(item.getConnectorId()))).collect(Collectors.toList());
         return new PageBean<>(result);
     }
 
@@ -66,5 +70,21 @@ public class ChargeOrderServiceImpl extends ServiceImpl<ChargeOrderMapper, Charg
         return lambdaQuery().eq(ChargeOrder::getStartChargeSeq, startChargeSeq).one();
     }
 
+    /**
+     * 站点统计
+     *
+     * @param params
+     * @return
+     */
+    @Override
+    public PageBean<StationStatVo> stationStat(StatQueryParam params) {
+        PageHelper.startPage(params.getPageNum(), params.getPageSize());
+        var res = baseMapper.stationStat(params).stream().peek(item -> {
+            item.setElecMoneyPercent((new BigDecimal(item.getElecMoney())).divide(new BigDecimal(item.getTotalMoney()), 2, RoundingMode.HALF_UP));
+            item.setServiceMoneyPercent(BigDecimal.ONE.subtract(item.getElecMoneyPercent()));
+        }).collect(Collectors.toList());
+        return new PageBean<>(res);
+    }
+
 
 }