diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/constant/ConstantClass.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/constant/ConstantClass.java index c5f768c0..3a6b2ac5 100644 --- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/constant/ConstantClass.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/constant/ConstantClass.java @@ -31,6 +31,17 @@ public class ConstantClass { public static final Integer AREA = 1; public static final Integer POINT = 2; + /** + * 三方的evcs常量 + * + * @date 2022/3/15 16:05 + * @since version-1.0 + */ + public static final String KUAI_DIAN_EVCS = "MA005DBW1"; + public static final String HENG_DA_EVCS = "MA5FF58R7"; + public static final String XIN_DIAN_TU_EVCS = "MA25CNM38"; + public static final String XIAO_JU_EVCS = "101437000"; + /** * 刷卡的卡类型 */ diff --git a/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/controller/XhpcDataBigScreenController.java b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/controller/XhpcDataBigScreenController.java index 08b9513e..57d28cd6 100644 --- a/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/controller/XhpcDataBigScreenController.java +++ b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/controller/XhpcDataBigScreenController.java @@ -3,6 +3,7 @@ package com.xhpc.databigscreen.controller; import com.xhpc.common.core.domain.R; import com.xhpc.common.core.web.controller.BaseController; import com.xhpc.databigscreen.domain.CoreParam; +import com.xhpc.databigscreen.domain.OrderRatio; import com.xhpc.databigscreen.service.XhpcDataBigScreenService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -26,6 +27,32 @@ public class XhpcDataBigScreenController extends BaseController { @Resource XhpcDataBigScreenService xhpcDataBigScreenService; + /** + * Return order ratio + * + * @author WH + * @date 2022/3/9 15:49 + * @since version-1.0 + */ + @GetMapping("/order-ratio") + public R queryOrderRatio(CoreParam coreParam) { + + return xhpcDataBigScreenService.queryOrderRatio(coreParam); + } + + /** + * Return total electric quantity + * + * @author WH + * @date 2022/3/9 15:49 + * @since version-1.0 + */ + @GetMapping("/electric-quantity") + public R queryElectricQuantity(CoreParam coreParam) { + + return xhpcDataBigScreenService.queryElectricQuantity(coreParam); + } + /** * Return user activation * diff --git a/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/domain/OrderRatio.java b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/domain/OrderRatio.java new file mode 100644 index 00000000..b81c80d4 --- /dev/null +++ b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/domain/OrderRatio.java @@ -0,0 +1,30 @@ +package com.xhpc.databigscreen.domain; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Wrapper class of history ratio + * + * @author WH + * @date 2022/3/11 13:57 + * @since version-1.0 + */ +@Data +@NoArgsConstructor +public class OrderRatio { + + private Long totalCount; + private Long cClientRatio; + private Long stClientRatio; + private Long bClientRatio; + + /** + * 三方订单 + */ + private Long xiaoJuRatio; + private Long kuaiDianRatio; + private Long xinDianTuRatio; + private Long hengDaRatio; + +} diff --git a/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/mapper/XhpcHistoryOrderMapper.java b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/mapper/XhpcHistoryOrderMapper.java index 0acdf0c7..c7ab019e 100644 --- a/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/mapper/XhpcHistoryOrderMapper.java +++ b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/mapper/XhpcHistoryOrderMapper.java @@ -32,4 +32,25 @@ public interface XhpcHistoryOrderMapper { @Param("userType") Integer userType, @Param("currentTime") String currentTime); + /** + * query total electric quantity by multiple tenant or multiple charging station + * + * @author WH + * @date 2022/3/9 16:29 + * @since version-1.0 + */ + Long selectTotalElectricQuantity( + @Param("tenantIdList") List tenantIdList, + @Param("chargingStationIdList") List chargingStationIdList); + + Long selectCountByTenantIdsAndChargingStationIds( + @Param("tenantIdList") List tenantIdList, + @Param("chargingStationIdList") List chargingStationIdList); + + Long selectOrderCountBy( + @Param("tenantIdList") List tenantIdList, + @Param("chargingStationIdList") List chargingStationIdList, + @Param("userType") Integer userType, + @Param("operatorId3rdptyEvcs") String operatorId3rdptyEvcs); + } \ No newline at end of file diff --git a/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/service/XhpcDataBigScreenService.java b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/service/XhpcDataBigScreenService.java index 19e7baf7..859842a4 100644 --- a/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/service/XhpcDataBigScreenService.java +++ b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/service/XhpcDataBigScreenService.java @@ -2,6 +2,7 @@ package com.xhpc.databigscreen.service; import com.xhpc.common.core.domain.R; import com.xhpc.databigscreen.domain.CoreParam; +import com.xhpc.databigscreen.domain.OrderRatio; import java.util.List; import java.util.Map; @@ -40,4 +41,22 @@ public interface XhpcDataBigScreenService { */ R queryUserActivation(CoreParam coreParam); + /** + * query charge electric quantity + * + * @author WH + * @date 2022/3/9 15:53 + * @since version-1.0 + */ + R queryElectricQuantity(CoreParam coreParam); + + /** + * query order ratio by multiple kind of area + * + * @author WH + * @date 2022/3/9 17:35 + * @since version-1.0 + */ + R queryOrderRatio(CoreParam coreParam); + } diff --git a/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/service/impl/XhpcDataBigScreenServiceImpl.java b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/service/impl/XhpcDataBigScreenServiceImpl.java index f8ca7f7c..68eba8b0 100644 --- a/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/service/impl/XhpcDataBigScreenServiceImpl.java +++ b/xhpc-modules/xhpc-data-big-screen/src/main/java/com/xhpc/databigscreen/service/impl/XhpcDataBigScreenServiceImpl.java @@ -5,6 +5,7 @@ import com.xhpc.common.core.domain.R; import com.xhpc.common.util.MyDateUtil; import com.xhpc.common.util.UserTypeUtil; import com.xhpc.databigscreen.domain.CoreParam; +import com.xhpc.databigscreen.domain.OrderRatio; import com.xhpc.databigscreen.mapper.XhpcAppUserMapper; import com.xhpc.databigscreen.mapper.XhpcChargingStationMapper; import com.xhpc.databigscreen.mapper.XhpcHistoryOrderMapper; @@ -259,4 +260,185 @@ public class XhpcDataBigScreenServiceImpl implements XhpcDataBigScreenService { return null; } + @Override + public R queryElectricQuantity(CoreParam coreParam) { + + String tenantIdsStr = null; + List> xhpcChargingStationList = null; + List tenantIdList = null; + String[] tenantIdArray = null; + + //judge care param function + switch (coreParam.getParamType()) { + case 0: + tenantIdsStr = coreParam.getTenantIds(); + if (!"".equals(tenantIdsStr) && tenantIdsStr != null) { + tenantIdArray = tenantIdsStr.split(","); + tenantIdList = Arrays.stream(tenantIdArray).collect(Collectors.toList()); + Long totalElectricQuantity = xhpcHistoryOrderMapper.selectTotalElectricQuantity(tenantIdList, null); + return R.ok(totalElectricQuantity); + } else { + Long totalElectricQuantity = xhpcHistoryOrderMapper.selectTotalElectricQuantity(null, null); + return R.ok(totalElectricQuantity); + } + //query charging station infos of whole area + case 1: + Integer areaCode = coreParam.getAreaCode(); + tenantIdsStr = coreParam.getTenantIds(); + if (!"".equals(tenantIdsStr) && tenantIdsStr != null) { + tenantIdArray = tenantIdsStr.split(","); + tenantIdList = Arrays.stream(tenantIdArray).collect(Collectors.toList()); + xhpcChargingStationList = xhpcChargingStationMapper.selectByTenantIdAndAreaCode(tenantIdList, areaCode); + ArrayList chargingStationIdList = new ArrayList<>(); + for (Map chargingStation : xhpcChargingStationList) { + chargingStationIdList.add((Long) chargingStation.get(ConstantClass.CHARGING_STATION_ID)); + } + Long totalElectricQuantity = xhpcHistoryOrderMapper.selectTotalElectricQuantity(tenantIdList, chargingStationIdList); + return R.ok(totalElectricQuantity); + } else { + xhpcChargingStationList = xhpcChargingStationMapper.selectByTenantIdAndAreaCode(tenantIdList, areaCode); + ArrayList chargingStationIdList = new ArrayList<>(); + for (Map chargingStation : xhpcChargingStationList) { + chargingStationIdList.add((Long) chargingStation.get(ConstantClass.CHARGING_STATION_ID)); + } + Long totalElectricQuantity = xhpcHistoryOrderMapper.selectTotalElectricQuantity(tenantIdList, chargingStationIdList); + return R.ok(totalElectricQuantity); + } + case 2: + //query location info of special charging station of special tenant + tenantIdsStr = coreParam.getTenantIds(); + if (!"".equals(tenantIdsStr) && tenantIdsStr != null) { + tenantIdArray = tenantIdsStr.split(","); + tenantIdList = Arrays.stream(tenantIdArray).collect(Collectors.toList()); + String chargingStationIdStr = coreParam.getChargingStationIds(); + long chargingStationId = Long.parseLong(chargingStationIdStr); + xhpcChargingStationList = xhpcChargingStationMapper.selectByTenantIdAndChargingStationId(tenantIdList, chargingStationId); + ArrayList chargingStationIdList = new ArrayList<>(); + for (Map chargingStation : xhpcChargingStationList) { + chargingStationIdList.add((Long) chargingStation.get(ConstantClass.CHARGING_STATION_ID)); + } + Long totalElectricQuantity = xhpcHistoryOrderMapper.selectTotalElectricQuantity(tenantIdList, chargingStationIdList); + return R.ok(totalElectricQuantity); + } else { + return R.fail("传入的参数有误"); + } + default: + R.fail("param type is invalid"); + break; + } + return null; + } + + @Override + public R queryOrderRatio(CoreParam coreParam) { + + String tenantIdsStr = null; + List> xhpcChargingStationList = null; + List tenantIdList = null; + String[] tenantIdArray = null; + //judge care param function + switch (coreParam.getParamType()) { + case 0: + tenantIdsStr = coreParam.getTenantIds(); + if (!"".equals(tenantIdsStr) && tenantIdsStr != null) { + tenantIdArray = tenantIdsStr.split(","); + tenantIdList = Arrays.stream(tenantIdArray).collect(Collectors.toList()); + OrderRatio orderRatio = getOrderRatio(tenantIdList, null); + return R.ok(orderRatio); + } else { + OrderRatio orderRatio = getOrderRatio(null, null); + return R.ok(orderRatio); + } + //query charging station infos of whole area + case 1: + Integer areaCode = coreParam.getAreaCode(); + tenantIdsStr = coreParam.getTenantIds(); + if (!"".equals(tenantIdsStr) && tenantIdsStr != null) { + tenantIdArray = tenantIdsStr.split(","); + tenantIdList = Arrays.stream(tenantIdArray).collect(Collectors.toList()); + xhpcChargingStationList = xhpcChargingStationMapper.selectByTenantIdAndAreaCode(tenantIdList, areaCode); + ArrayList chargingStationIdList = new ArrayList<>(); + for (Map chargingStation : xhpcChargingStationList) { + chargingStationIdList.add((Long) chargingStation.get(ConstantClass.CHARGING_STATION_ID)); + } + OrderRatio orderRatio = getOrderRatio(tenantIdList, chargingStationIdList); + return R.ok(orderRatio); + } else { + xhpcChargingStationList = xhpcChargingStationMapper.selectByTenantIdAndAreaCode(tenantIdList, areaCode); + ArrayList chargingStationIdList = new ArrayList<>(); + for (Map chargingStation : xhpcChargingStationList) { + chargingStationIdList.add((Long) chargingStation.get(ConstantClass.CHARGING_STATION_ID)); + } + OrderRatio orderRatio = getOrderRatio(tenantIdList, chargingStationIdList); + return R.ok(orderRatio); + } + case 2: + //query location info of special charging station of special tenant + tenantIdsStr = coreParam.getTenantIds(); + if (!"".equals(tenantIdsStr) && tenantIdsStr != null) { + tenantIdArray = tenantIdsStr.split(","); + tenantIdList = Arrays.stream(tenantIdArray).collect(Collectors.toList()); + String chargingStationIdStr = coreParam.getChargingStationIds(); + long chargingStationId = Long.parseLong(chargingStationIdStr); + xhpcChargingStationList = xhpcChargingStationMapper.selectByTenantIdAndChargingStationId(tenantIdList, chargingStationId); + ArrayList chargingStationIdList = new ArrayList<>(); + for (Map chargingStation : xhpcChargingStationList) { + chargingStationIdList.add((Long) chargingStation.get(ConstantClass.CHARGING_STATION_ID)); + } + OrderRatio orderRatio = getOrderRatio(tenantIdList, chargingStationIdList); + return R.ok(orderRatio); + } else { + return R.fail("传入的参数有误"); + } + default: + R.fail("param type is invalid"); + break; + } + return null; + } + + /** + * 获取订单来源比例方法 + * + * @param tenantIdList 租户id集合 + * @param chargingStationIdList 电站id集合 + * @author WH + * @date 2022/3/15 17:08 + * @since version-1.0 + */ + private OrderRatio getOrderRatio(List tenantIdList, List chargingStationIdList) { + + Long totalCount = xhpcHistoryOrderMapper.selectCountByTenantIdsAndChargingStationIds(tenantIdList, null); + OrderRatio orderRatio = new OrderRatio(); + orderRatio.setTotalCount(totalCount); + Long stClientNumber = xhpcHistoryOrderMapper.selectOrderCountBy(tenantIdList, chargingStationIdList, UserTypeUtil.COMMUNIT_TYPE, null); + double stClientNumberDouble = stClientNumber.doubleValue(); + long stClientRatio = (long) (stClientNumberDouble / totalCount * 100); + orderRatio.setStClientRatio(stClientRatio); + Long bClientNumber = xhpcHistoryOrderMapper.selectOrderCountBy(tenantIdList, chargingStationIdList, UserTypeUtil.CUSTOMERS_TYPE, null); + double bClientNumberDouble = bClientNumber.doubleValue(); + long bClientRatio = (long) (bClientNumberDouble / totalCount * 100); + orderRatio.setBClientRatio(bClientRatio); + Long kuaiDianNumber = xhpcHistoryOrderMapper.selectOrderCountBy(tenantIdList, chargingStationIdList, UserTypeUtil.INTERNET_TYPE, ConstantClass.KUAI_DIAN_EVCS); + double kuaiDianNumberDouble = kuaiDianNumber.doubleValue(); + long kuaiDianRatio = (long) (kuaiDianNumberDouble / totalCount * 100); + orderRatio.setKuaiDianRatio(kuaiDianRatio); + Long hengDaNumber = xhpcHistoryOrderMapper.selectOrderCountBy(tenantIdList, chargingStationIdList, UserTypeUtil.INTERNET_TYPE, ConstantClass.HENG_DA_EVCS); + double hengDaNumberDouble = hengDaNumber.doubleValue(); + long hengDaRatio = (long) (hengDaNumberDouble / totalCount * 100); + orderRatio.setHengDaRatio(hengDaRatio); + Long xinDianTuNumber = xhpcHistoryOrderMapper.selectOrderCountBy(tenantIdList, chargingStationIdList, UserTypeUtil.INTERNET_TYPE, ConstantClass.XIN_DIAN_TU_EVCS); + double xinDianTuNumberDouble = xinDianTuNumber.doubleValue(); + long xinDianTuRatio = (long) (xinDianTuNumberDouble / totalCount * 100); + orderRatio.setXinDianTuRatio(xinDianTuRatio); + Long xiaoJuNumber = xhpcHistoryOrderMapper.selectOrderCountBy(tenantIdList, chargingStationIdList, UserTypeUtil.INTERNET_TYPE, ConstantClass.XIAO_JU_EVCS); + double xiaoJuNumberDouble = xiaoJuNumber.doubleValue(); + long xiaoJuRatio = (long) (xiaoJuNumberDouble / totalCount * 100); + orderRatio.setXiaoJuRatio(xiaoJuRatio); + //为了防止转换成百分比导致的进度丢失问题,故C端用户直接算出来,而不是查出来 + long cClientRatio = 100 - xiaoJuRatio - kuaiDianRatio - xinDianTuRatio - hengDaRatio - stClientRatio - bClientRatio; + orderRatio.setCClientRatio(cClientRatio); + return orderRatio; + } + } diff --git a/xhpc-modules/xhpc-data-big-screen/src/main/resources/mapper/XhpcHistoryOrderMapper.xml b/xhpc-modules/xhpc-data-big-screen/src/main/resources/mapper/XhpcHistoryOrderMapper.xml index 2ff7f888..2e4add4b 100644 --- a/xhpc-modules/xhpc-data-big-screen/src/main/resources/mapper/XhpcHistoryOrderMapper.xml +++ b/xhpc-modules/xhpc-data-big-screen/src/main/resources/mapper/XhpcHistoryOrderMapper.xml @@ -109,6 +109,72 @@ ) AS a + + + delete from xhpc_history_order