ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/CardChargingOrderQuery.java
@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "CardChargingOrderQuery刷卡充电订单查询对象") public class CardChargingOrderQuery extends BasePage { @@ -12,11 +14,11 @@ @ApiModelProperty("订单编号") private String code; @ApiModelProperty("充电卡ID(分片键)") private Long cardId; @ApiModelProperty("充电卡号") private String cardNo; @ApiModelProperty("站点ids(权限过滤,前端忽略)") private List<Integer> siteIds; @ApiModelProperty("订单状态") private Integer status; @@ -30,9 +32,15 @@ @ApiModelProperty("充电枪ID") private Integer gunId; @ApiModelProperty("开始时间范围") private String startTime; @ApiModelProperty("充电开始时间范围的开始时间") private String startTime1; @ApiModelProperty("结束时间范围") private String endTime; @ApiModelProperty("充电开始时间范围的结束时间") private String startTime2; @ApiModelProperty("充电结束时间范围的开始时间") private String endTime1; @ApiModelProperty("充电结束时间范围的结束时间") private String endTime2; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TCardChargingOrderController.java
@@ -1,8 +1,9 @@ package com.ruoyi.order.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.query.CardChargingOrderQuery; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.service.TCardChargingOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -26,7 +27,7 @@ @GetMapping("/list") @ApiOperation("刷卡充电订单列表") public R<IPage<Map<String, Object>>> list(CardChargingOrderQuery query) { public R<PageInfo<ChargingOrderVO>> list(CardChargingOrderQuery query) { return R.ok(cardChargingOrderService.pageList(query)); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TCardChargingOrderMapper.java
@@ -1,10 +1,9 @@ package com.ruoyi.order.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.order.api.model.TCardChargingOrder; import com.ruoyi.order.api.query.CardChargingOrderQuery; import com.ruoyi.order.api.vo.ChargingOrderVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -12,11 +11,31 @@ public interface TCardChargingOrderMapper extends BaseMapper<TCardChargingOrder> { IPage<Map<String, Object>> pageList(Page<?> page, @Param("query") CardChargingOrderQuery query); List<ChargingOrderVO> pageList(@Param("query") CardChargingOrderQuery query, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime2, @Param("offset") long offset, @Param("pageSize") long pageSize); Map<String, Object> summary(@Param("query") CardChargingOrderQuery query); long count(@Param("query") CardChargingOrderQuery query, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime2); Map<String, Object> summary(@Param("query") CardChargingOrderQuery query, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime2); List<Map<String, Object>> balanceIncomeDetail(@Param("query") CardChargingOrderQuery query); List<Map<String, Object>> accountingStrategyList(@Param("chargingOrderId") Long chargingOrderId); List<Map<String, Object>> shareIncomeByOrderIds(@Param("orderIds") List<Long> orderIds); Map<String, Object> shareIncomeSummaryByOrderIds(@Param("orderIds") List<Long> orderIds); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TCardChargingOrderService.java
@@ -1,16 +1,17 @@ package com.ruoyi.order.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.common.core.web.page.PageInfo; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.order.api.model.TCardChargingOrder; import com.ruoyi.order.api.query.CardChargingOrderQuery; import com.ruoyi.order.api.vo.ChargingOrderVO; import java.util.List; import java.util.Map; public interface TCardChargingOrderService extends IService<TCardChargingOrder> { IPage<Map<String, Object>> pageList(CardChargingOrderQuery query); PageInfo<ChargingOrderVO> pageList(CardChargingOrderQuery query); Map<String, Object> summary(CardChargingOrderQuery query); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TCardChargingOrderServiceImpl.java
@@ -1,30 +1,74 @@ package com.ruoyi.order.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.api.model.TCardChargingOrder; import com.ruoyi.order.api.query.CardChargingOrderQuery; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.mapper.TCardChargingOrderMapper; import com.ruoyi.order.service.TCardChargingOrderService; import com.ruoyi.chargingPile.api.model.Site; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @Service public class TCardChargingOrderServiceImpl extends ServiceImpl<TCardChargingOrderMapper, TCardChargingOrder> implements TCardChargingOrderService { @Resource private TokenService tokenService; @Resource private SiteClient siteClient; @Resource private ChargingPileClient chargingPileClient; @Resource private ChargingGunClient chargingGunClient; @Override public IPage<Map<String, Object>> pageList(CardChargingOrderQuery query) { Page<Map<String, Object>> page = new Page<>(query.getPageCurr(), query.getPageSize()); return baseMapper.pageList(page, query); public PageInfo<ChargingOrderVO> pageList(CardChargingOrderQuery query) { String[] timeRange = parseTimeRange(query); int pageCurr = query.getPageCurr() == null || query.getPageCurr() < 1 ? 1 : query.getPageCurr(); int pageSize = query.getPageSize() == null || query.getPageSize() < 1 ? 50 : query.getPageSize(); PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(pageCurr, pageSize); setAuthSiteIds(query); long offset = (long) (pageCurr - 1) * pageSize; long total = baseMapper.count(query, timeRange[0], timeRange[1], timeRange[2], timeRange[3]); pageInfo.setTotal(total); List<ChargingOrderVO> list = total == 0 ? Collections.emptyList() : baseMapper.pageList(query, timeRange[0], timeRange[1], timeRange[2], timeRange[3], offset, pageSize); fillPageExtra(list); pageInfo.setRecords(list); return pageInfo; } @Override public Map<String, Object> summary(CardChargingOrderQuery query) { return baseMapper.summary(query); String[] timeRange = parseTimeRange(query); setAuthSiteIds(query); Map<String, Object> result = baseMapper.summary(query, timeRange[0], timeRange[1], timeRange[2], timeRange[3]); if (result == null) { result = new HashMap<>(); } result.putIfAbsent("platformIncome", BigDecimal.ZERO); result.putIfAbsent("partnerIncome", BigDecimal.ZERO); return result; } @Override @@ -36,4 +80,50 @@ public List<Map<String, Object>> accountingStrategyList(Long chargingOrderId) { return baseMapper.accountingStrategyList(chargingOrderId); } private void setAuthSiteIds(CardChargingOrderQuery query) { List<Integer> siteIds = new ArrayList<>(); if (query.getSiteId() != null) { siteIds.add(query.getSiteId()); } else { Long userId = tokenService.getLoginUser().getUserid(); if (userId != null) { siteIds = Optional.ofNullable(siteClient.getSiteListByUserId(userId).getData()).orElse(Collections.emptyList()) .stream().map(GetSiteListDTO::getId).collect(Collectors.toList()); } } if (siteIds.isEmpty()) { siteIds.add(-1); } query.setSiteIds(siteIds); } private void fillPageExtra(List<ChargingOrderVO> list) { if (list == null || list.isEmpty()) { return; } List<Integer> siteIds = list.stream().map(ChargingOrderVO::getSiteId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); List<Integer> gunIds = list.stream().map(ChargingOrderVO::getChargingGunId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); Map<Integer, Site> sites = Optional.ofNullable(siteClient.getSiteByIds(siteIds).getData()).orElse(Collections.emptyList()).stream() .collect(Collectors.toMap(Site::getId, item -> item, (a, b) -> a)); Map<Integer, TChargingGun> guns = gunIds.isEmpty() ? Collections.emptyMap() : Optional.ofNullable(chargingGunClient.getChargingGunByIds(gunIds).getData()).orElse(Collections.emptyList()).stream() .collect(Collectors.toMap(TChargingGun::getId, item -> item, (a, b) -> a)); for (ChargingOrderVO item : list) { Site site = sites.get(item.getSiteId()); item.setSiteName(site == null ? null : site.getName()); TChargingGun gun = guns.get(item.getChargingGunId()); item.setTerminalName(gun == null ? null : gun.getName()); if (item.getStartTime() != null && item.getEndTime() != null) { item.setChargingSecond(ChronoUnit.SECONDS.between(item.getStartTime(), item.getEndTime())); } item.setPlatformIncome(BigDecimal.ZERO); item.setPartnerIncome(BigDecimal.ZERO); } } private String[] parseTimeRange(CardChargingOrderQuery query) { return new String[]{query.getStartTime1(), query.getStartTime2(), query.getEndTime1(), query.getEndTime2()}; } } ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TCardChargingOrderMapper.xml
@@ -5,11 +5,14 @@ <sql id="queryCondition"> <where> o.del_flag = 0 <if test="query.siteIds != null and query.siteIds.size() > 0"> AND o.site_id IN <foreach collection="query.siteIds" item="siteId" open="(" separator="," close=")"> #{siteId} </foreach> </if> <if test="query.code != null and query.code != ''"> AND o.code LIKE CONCAT('%', #{query.code}, '%') </if> <if test="query.cardId != null"> AND o.card_id = #{query.cardId} </if> <if test="query.cardNo != null and query.cardNo != ''"> AND o.card_no LIKE CONCAT('%', #{query.cardNo}, '%') @@ -26,51 +29,45 @@ <if test="query.gunId != null"> AND o.charging_gun_id = #{query.gunId} </if> <if test="query.startTime != null and query.startTime != ''"> AND o.start_time >= #{query.startTime} <if test="startTime1 != null and startTime1 != ''"> AND o.pay_time BETWEEN #{startTime1} AND #{startTime2} </if> <if test="query.endTime != null and query.endTime != ''"> AND o.start_time <= #{query.endTime} <if test="endTime1 != null and endTime1 != ''"> AND o.end_time BETWEEN #{endTime1} AND #{endTime2} </if> </where> </sql> <select id="pageList" resultType="java.util.LinkedHashMap"> SELECT o.id, o.code, o.card_id AS cardId, o.card_no AS cardNo, o.site_id AS siteId, o.charging_pile_id AS chargingPileId, o.charging_gun_id AS chargingGunId, o.start_time AS startTime, o.end_time AS endTime, o.status, o.order_amount AS orderAmount, o.payment_amount AS paymentAmount, o.electrovalence, o.service_charge AS serviceCharge, o.charging_capacity AS chargingCapacity, o.balance_pay_amount AS balancePayAmount, o.third_pay_amount AS thirdPayAmount, o.refund_amount AS refundAmount, o.pay_time AS payTime, o.create_time AS createTime <select id="pageList" resultType="com.ruoyi.order.api.vo.ChargingOrderVO"> SELECT o.* FROM t_card_charging_order o <include refid="queryCondition"/> ORDER BY o.id DESC ORDER BY o.create_time DESC LIMIT #{offset}, #{pageSize} </select> <select id="count" resultType="long"> SELECT COUNT(1) FROM t_card_charging_order o <include refid="queryCondition"/> </select> <select id="summary" resultType="java.util.LinkedHashMap"> SELECT COUNT(1) AS orderCount, IFNULL(SUM(o.charging_capacity), 0) AS total, IFNULL(SUM(TIMESTAMPDIFF(SECOND, o.start_time, o.end_time)), 0) AS time, IFNULL(SUM(o.electrovalence), 0) AS electronicMoney, IFNULL(SUM(o.service_charge), 0) AS serviceMoney, IFNULL(SUM(o.electrovalence), 0) + IFNULL(SUM(o.service_charge), 0) AS income, IFNULL(SUM(o.order_amount), 0) AS orderAmount, IFNULL(SUM(o.payment_amount), 0) AS paymentAmount, IFNULL(SUM(o.electrovalence), 0) AS electrovalence, IFNULL(SUM(o.service_charge), 0) AS serviceCharge, IFNULL(SUM(o.charging_capacity), 0) AS chargingCapacity, IFNULL(SUM(o.balance_pay_amount), 0) AS balancePayAmount, IFNULL(SUM(o.third_pay_amount), 0) AS thirdPayAmount, IFNULL(SUM(o.refund_amount), 0) AS refundAmount 0 AS platformIncome, 0 AS partnerIncome, 0 AS platformIncomeTotal, 0 AS partnerIncomeTotal FROM t_card_charging_order o <include refid="queryCondition"/> </select>