diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java index caf599418..27c259283 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java @@ -22,10 +22,7 @@ import com.jsowell.pile.service.OrderSplitRecordService; import com.jsowell.pile.service.PileMerchantInfoService; import com.jsowell.pile.service.PileStationInfoService; import com.jsowell.pile.util.UserUtils; -import com.jsowell.pile.vo.web.OrderListVO; -import com.jsowell.pile.vo.web.SplitAggregateDataVO; -import com.jsowell.pile.vo.web.SplitConfigOrderVO; -import com.jsowell.pile.vo.web.SplitRecordInfoVO; +import com.jsowell.pile.vo.web.*; import com.jsowell.service.OrderService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -364,4 +361,23 @@ public class OrderBasicInfoController extends BaseController { logger.info("订单保险金额退款 params:{}, result:{}", JSON.toJSONString(orderBasicInfo), response); return response; } + + /** + * 订单数量与保险金额时间区统计 + * @param dto + * @return + */ + @PostMapping("/queryOrderInsuranceAmountByTime") + public RestApiResponse queryOrderInsuranceAmountByTime(@RequestBody QueryOrderDTO dto) { + RestApiResponse response = null; + try { + OrderCountByTimeVO result = orderBasicInfoService.queryOrderInsuranceAmountByTime(dto); + response = new RestApiResponse<>(result); + } catch (Exception e) { + logger.error("时间区间查询订单统计 error", e); + } + logger.info("时间区间查询订单统计 result:{}", response); + return response; + } + } diff --git a/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java b/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java index 612ac7476..ec59169f6 100644 --- a/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java +++ b/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java @@ -73,8 +73,8 @@ public class ThreadPoolConfig { @Bean(name = "thirdpartyTaskExecutor") public ThreadPoolTaskExecutor thirdpartyTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setMaxPoolSize(corePoolSize_tp); - executor.setCorePoolSize(maxPoolSize_tp); + executor.setMaxPoolSize(maxPoolSize_tp); + executor.setCorePoolSize(corePoolSize_tp); executor.setQueueCapacity(queueCapacity_tp); executor.setKeepAliveSeconds(keepAliveSeconds_tp); // 线程池对拒绝任务(无线程可用)的处理策略 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index d410460d1..75f496d21 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -1,10 +1,7 @@ package com.jsowell.pile.mapper; -import com.alipay.api.domain.ChargeOrderInfo; import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.OrderDetail; -import com.jsowell.pile.domain.OrderSplitRecord; -import com.jsowell.pile.domain.UserFrequentedStationInfo; import com.jsowell.pile.dto.*; import com.jsowell.pile.dto.nanrui.NRQueryOrderDTO; import com.jsowell.pile.dto.ningxiajiaotou.NXJTQueryOrdersInfoDTO; @@ -431,4 +428,10 @@ public interface OrderBasicInfoMapper { @Param("endTime") String endTime ); + /** + * 按月份统计订单数量和保险金额 + * @param dto 查询条件,startTime/endTime 必须是 yyyy-MM 拼装后的时间段 + * @return List + */ + List selectOrderCountAndInsuranceByMonth(@Param("dto") QueryOrderDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index e97e30425..3c5f083d4 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -631,4 +631,6 @@ public interface OrderBasicInfoService{ * @return */ List getOrderDetailByStationIdsForMonth(List stationIds , String startTime , String endTime); + + OrderCountByTimeVO queryOrderInsuranceAmountByTime(QueryOrderDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index ca934bc53..523e47c76 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -77,7 +77,11 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -618,7 +622,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { // 结算时间设置为当前时间 orderInfo.setSettlementTime(new Date()); - + // 启动失败原因 orderInfo.setReason(failedReasonMsg); // 订单退款(结算订单) @@ -5958,5 +5962,77 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { public List getOrderDetailByStationIdsForMonth(List stationIds , String startTime , String endTime) { return orderBasicInfoMapper.getOrderDetailByStationIdsForMonth(stationIds, startTime, endTime); } + + /** + * 订单数量与保险金额时间区统计 + * @param dto + * @return + */ + @Override + public OrderCountByTimeVO queryOrderInsuranceAmountByTime(QueryOrderDTO dto) { + if (dto == null) { + dto = new QueryOrderDTO(); + } + + DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + try { + // 处理 startTime + if (StringUtils.isNotEmpty(dto.getStartTime())) { + YearMonth startMonth = YearMonth.parse(dto.getStartTime(), monthFormatter); + dto.setStartTime(startMonth.atDay(1).atStartOfDay().format(dateTimeFormatter)); + } + // 处理 endTime,取下个月月初,保证 < endTime 不丢数据 + if (StringUtils.isNotEmpty(dto.getEndTime())) { + YearMonth endMonth = YearMonth.parse(dto.getEndTime(), monthFormatter); + dto.setEndTime(endMonth.plusMonths(1).atDay(1).atStartOfDay().format(dateTimeFormatter)); + } + } catch (Exception e) { + throw new IllegalArgumentException("时间格式错误,应为 yyyy-MM"); + } + + // 默认本月 + if (StringUtils.isEmpty(dto.getStartTime()) || StringUtils.isEmpty(dto.getEndTime())) { + YearMonth currentMonth = YearMonth.now(); + dto.setStartTime(currentMonth.atDay(1).atStartOfDay().format(dateTimeFormatter)); + dto.setEndTime(currentMonth.plusMonths(1).atDay(1).atStartOfDay().format(dateTimeFormatter)); + } + + // 查询数据库聚合结果 + List stats = orderBasicInfoMapper.selectOrderCountAndInsuranceByMonth(dto); + + // 封装返回结果 + BigDecimal totalInsuranceAmount = BigDecimal.ZERO; + int totalCount = 0; + List result = new ArrayList<>(); + + for (OrderMonthStatVO stat : stats) { + YearMonth ym = YearMonth.parse(stat.getMonth(), monthFormatter); + + OrderCountByTimeVO.OrderCountByTimeListVO vo = new OrderCountByTimeVO.OrderCountByTimeListVO(); + vo.setStartTime(ym.atDay(1).atStartOfDay().format(dateTimeFormatter)); + vo.setEndTime(ym.plusMonths(1).atDay(1).atStartOfDay().format(dateTimeFormatter)); + vo.setCount(stat.getOrderCount()); + vo.setOrderCount(stat.getOrderCount()); + BigDecimal insuranceAmount = stat.getInsuranceAmount() == null ? BigDecimal.ZERO : stat.getInsuranceAmount(); + vo.setInsuranceAmount(totalInsuranceAmount); + + result.add(vo); + + totalCount += stat.getOrderCount(); + totalInsuranceAmount = totalInsuranceAmount.add(insuranceAmount); + } + + OrderCountByTimeVO vo = new OrderCountByTimeVO(); + vo.setOrderCountByTimeList(result); + vo.setTotalCount(totalCount); + vo.setTotalInsuranceAmount(totalInsuranceAmount); + + + logger.info("按月统计结果: {}", JSONObject.toJSONString(vo)); + return vo; + + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OccupyOrderVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OccupyOrderVO.java index 9a4ea6b54..3a3e46cf2 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OccupyOrderVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OccupyOrderVO.java @@ -1,5 +1,6 @@ package com.jsowell.pile.vo.web; +import com.jsowell.common.annotation.Excel; import lombok.Data; import java.math.BigDecimal; @@ -13,16 +14,36 @@ import java.math.BigDecimal; @Data public class OccupyOrderVO { private String id; + @Excel(name = "占桩订单号") private String occupyCode; + private String status; + + @Excel(name = "会员ID") private String memberId; + private String stationId; + private String plateNumber; + + @Excel(name = "站点名称") private String stationName; + + @Excel(name = "占桩开始时间") private String startTime; + + @Excel(name = "占桩结束时间") private String endTime; + + @Excel(name = "支付状态") private String payStatus; + + @Excel(name = "订单金额") private BigDecimal orderAmount; + + @Excel(name = "充电桩编号") private String pileSn; + + @Excel(name = "充电桩枪口号") private String connectorCode; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java new file mode 100644 index 000000000..fc96649a1 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java @@ -0,0 +1,11 @@ +package com.jsowell.pile.vo.web; + +import lombok.Data; +import java.math.BigDecimal; + +@Data +public class OrderMonthStatVO { + private String month; + private Integer orderCount; + private BigDecimal insuranceAmount; +} diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index 083a3976b..24589e7be 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3457,4 +3457,21 @@ AND DATE_ADD(#{endTime,jdbcType=VARCHAR}, INTERVAL 1 DAY) ORDER BY t1.create_time DESC + + + + + diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/XinDiantuPlatfromServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/XinDiantuPlatfromServiceImpl.java index 897bcf964..a2d52413f 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/XinDiantuPlatfromServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/XinDiantuPlatfromServiceImpl.java @@ -656,12 +656,10 @@ public class XinDiantuPlatfromServiceImpl implements ThirdPartyPlatformService { */ @Override public String notificationEquipChargeStatus(String orderCode) { - //判断是否是常畅充平台的订单 - boolean flag = isNeedPushToThirdPartyPlatform(orderCode , ThirdPlatformTypeEnum.CHANG_ZHOU_PLATFORM.getOperatorId()); - if (!flag){ - //表示不是常畅充平台的订单 - return null; - } +// boolean flag = isNeedPushToThirdPartyPlatform(orderCode , com.jsowell.common.enums.ThirdPlatformTypeEnum.XIN_DIAN_TU.getOperatorId()); +// if (!flag){ +// return null; +// } // 根据订单号查询订单信息 OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode);