From 4fd0278cda787a91eb35d95d6491f5485afe3e48 Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期六, 07 九月 2024 18:03:32 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 348 ++++++++++++++++ ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java | 15 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsx | 0 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TSettlementConfirmServiceImpl.java | 34 + ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java | 3 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java | 25 + ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java | 7 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java | 4 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java | 6 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 20 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java | 11 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java | 20 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TSettlementConfirmService.java | 24 + ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml | 39 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 17 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java | 9 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java | 2 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java | 50 + ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java | 21 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java | 21 + ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordVO.java | 23 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java | 33 + ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java | 11 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 2 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 14 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java | 3 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java | 200 +++++++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java | 6 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java | 101 ++++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java | 93 ++- ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordPageInfoVO.java | 31 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/SettlementConfirmAdd.java | 26 + ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml | 3 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java | 11 36 files changed, 1,151 insertions(+), 91 deletions(-) diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java index b4cdc47..d33b267 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java @@ -2,7 +2,9 @@ import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.feignClient.SiteClient; +import com.ruoyi.chargingPile.api.model.Partner; import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.common.core.domain.R; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,7 +27,12 @@ public SiteClient create(Throwable throwable) { log.error("站点调用失败:{}", throwable.getMessage()); return new SiteClient() { - + + @Override + public R<List<TChargingPile>> getPileListBySiteId(Integer siteId) { + return R.fail("根据站点id 查询所有充电桩:" + throwable.getMessage()); + } + @Override public R<List<Site>> getSiteByIds(List<Integer> ids) { return R.fail("根据id集合获取站点数据调用失败:" + throwable.getMessage()); @@ -40,6 +47,12 @@ public R<List<GetSiteListDTO>> getSiteListByUserId(Long userId) { return null; } + + @Override + public R<Partner> getPartnerR(Integer id) { + return R.fail("根据合作商id获取合作商详情失败:" + throwable.getMessage()); + + } }; } } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java index a56392f..c311954 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java @@ -2,14 +2,13 @@ import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.factory.SiteFallbackFactory; +import com.ruoyi.chargingPile.api.model.Partner; import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -19,6 +18,8 @@ */ @FeignClient(contextId = "SiteClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = SiteFallbackFactory.class) public interface SiteClient { + @GetMapping("/site/getPileListBySiteId/{siteId}") + public R<List<TChargingPile>> getPileListBySiteId(@PathVariable("siteId")Integer siteId); /** * 根据id集合获取数据 @@ -37,4 +38,6 @@ @GetMapping("/site/getSiteList/byUserId") R<List<GetSiteListDTO>> getSiteListByUserId(@RequestParam("userId") Long userId); + @GetMapping("/getPartnerR/{id}") + R<Partner> getPartnerR(@PathVariable("id") Integer id); } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java new file mode 100644 index 0000000..38121cc --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java @@ -0,0 +1,21 @@ +package com.ruoyi.chargingPile.api.query; + +import com.ruoyi.common.core.query.TimeRangePageQuery; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "停车缴费订单Query") +public class ParkingRecordQuery extends TimeRangePageQuery { + + @ApiModelProperty(value = "站点id") + private Integer siteId; + + @ApiModelProperty(value = "订单编号") + private String code; + + @ApiModelProperty(value = "车牌号") + private String licensePlate; + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordPageInfoVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordPageInfoVO.java new file mode 100644 index 0000000..e27db5c --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordPageInfoVO.java @@ -0,0 +1,31 @@ +package com.ruoyi.chargingPile.api.vo; + +import com.ruoyi.common.core.web.page.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel(value = "停车记录分页VO") +public class TParkingRecordPageInfoVO implements Serializable { + + @ApiModelProperty(value = "订单数") + private Integer orderCount; + + @ApiModelProperty(value = "超时占位费") + private BigDecimal timeoutAmountSum; + + @ApiModelProperty(value = "超时占用时长") + private Integer feeDurationSum; + + @ApiModelProperty(value = "总占用时长") + private Integer parkingDurationSum; + + @ApiModelProperty(value = "列表") + private PageInfo<TParkingRecordVO> parkingRecordVOS; + + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordVO.java new file mode 100644 index 0000000..623192c --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordVO.java @@ -0,0 +1,23 @@ +package com.ruoyi.chargingPile.api.vo; + +import com.ruoyi.chargingPile.api.model.TParkingRecord; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "停车记录VO") +public class TParkingRecordVO extends TParkingRecord { + + @ApiModelProperty(value = "停车费") + private BigDecimal parkingFee; + + @ApiModelProperty(value = "收费时长") + private Integer feeDuration; + + @ApiModelProperty(value = "站点名称") + private String siteName; + +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java index 2586a69..d39a68e 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java @@ -31,7 +31,12 @@ public R<UploadRealTimeMonitoringData> chargingOrderInfo(String orderId) { return R.fail("查询充电桩实时监测数据失败:" + throwable.getMessage()); } - + + @Override + public R<List<UploadRealTimeMonitoringData>> getOrderInfoByCodes(String orderId) { + return R.fail("根据订单编号s获取所有监测数据失败:" + throwable.getMessage()); + } + @Override public R<List<UploadRealTimeMonitoringData>> getDataByOrderCode(String code) { return R.fail("根据订单编号获取所有监测数据失败:" + throwable.getMessage()); diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java index 902dff5..5ceab1f 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java @@ -25,7 +25,14 @@ */ @PostMapping("/uploadRealTimeMonitoringData/getOrderInfoByCode") R<UploadRealTimeMonitoringData> chargingOrderInfo(String orderId); - + + /** + * 批量查询 + * @param orderId + * @return + */ + @PostMapping(value = "/uploadRealTimeMonitoringData/getOrderInfoByCodes") + public R<List<UploadRealTimeMonitoringData>> getOrderInfoByCodes(@RequestParam("orderId") String orderId); /** * 根据订单编号获取所有监测数据 * @param code diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/SettlementConfirmAdd.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/SettlementConfirmAdd.java new file mode 100644 index 0000000..fe67ee4 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/SettlementConfirmAdd.java @@ -0,0 +1,26 @@ +package com.ruoyi.order.api.dto; + +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.order.api.model.TSettlementConfirm; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "SettlementConfirmAdd生成结算确认表对象",description = "管理后台-财务结算生成结算确认表对象") +public class SettlementConfirmAdd { + @ApiModelProperty(value = "站点id") + private Integer siteId; + @ApiModelProperty(value = "费用归属日期类型 1开始 2结束") + private Integer type; + @ApiModelProperty(value = "开始时间2020-01-01 00:00:00") + private String startTime; + @ApiModelProperty(value = "结束时间2020-01-01 23:59:59") + private String endTime; + @ApiModelProperty(value = "点击去生成 传1 填完表格数据点击保存 传2") + private Integer state; + @ApiModelProperty(value = "保存的数据") + private TSettlementConfirm data; +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java index cb89711..960f451 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java @@ -6,10 +6,12 @@ import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.ChargingListQuery; import com.ruoyi.order.api.model.TChargingOrder; +import com.ruoyi.order.api.model.TSettlementConfirm; import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingBillVO; import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; +import com.ruoyi.order.api.vo.SettlementTotalVO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -91,11 +93,21 @@ public void excelEndCharge(String code) { } - + @Override public R<TChargingOrder> getChargingOrderByLicensePlate(GetChargingOrderByLicensePlate query) { return R.fail("根据车牌号和时间查询有效的充电数据失败:" + throwable.getMessage()); } + + @Override + public R<TSettlementConfirm> downloadSettlement(String uid) { + return R.fail("通过id查询结算确认失败:" + throwable.getMessage()); + } + + @Override + public R<SettlementTotalVO> settlementTotalR(String time) { + return R.fail("查询结算汇总表导出列表失败:" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java index 366a8c3..80529c0 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java @@ -7,9 +7,11 @@ import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory; import com.ruoyi.order.api.model.ChargingListQuery; import com.ruoyi.order.api.model.TChargingOrder; +import com.ruoyi.order.api.model.TSettlementConfirm; import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingBillVO; +import com.ruoyi.order.api.vo.SettlementTotalVO; import io.swagger.annotations.ApiOperation; import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; import org.springframework.cloud.openfeign.FeignClient; @@ -96,8 +98,8 @@ */ @PostMapping("/t-charging-order/excelEndCharge") void excelEndCharge(@RequestParam("code") String code); - - + + /** * 根据车牌号和时间查询有效的充电数据 * @param query @@ -105,4 +107,15 @@ */ @PostMapping("/t-charging-order/getChargingOrderByLicensePlate") R<TChargingOrder> getChargingOrderByLicensePlate(@RequestBody GetChargingOrderByLicensePlate query); + + /** + * 获取充电结算记录 + * @param uid + * @return + */ + @GetMapping(value = "/financial/settlement/downloadSettlement/{uid}") + public R<TSettlementConfirm> downloadSettlement(@PathVariable("uid") String uid); + + @GetMapping(value = "/financial/settlement/settlementTotalR") + public R<SettlementTotalVO> settlementTotalR(String time); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java new file mode 100644 index 0000000..796d4a9 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java @@ -0,0 +1,200 @@ +package com.ruoyi.order.api.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.web.domain.BasePojo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * <p> + * + * </p> + * + * @author xiaochen + * @since 2024-08-07 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("t_settlement confirm") +@ApiModel(value="TSettlementConfirm对象", description="") +public class TSettlementConfirm extends BasePojo { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty(value = "站点id") + @TableField("site_id") + private Integer siteId; + @ApiModelProperty(value = "合作商id") + @TableField("partner_id") + private Integer partnerId; + @ApiModelProperty(value = "结算电费备注") + @TableField("remark") + private String remark; + @ApiModelProperty(value = "结算服务费备注") + @TableField("service_remark") + private String serviceRemark; + + @ApiModelProperty(value = "计量电量(电量合计)") + @TableField("metering_electronic") + private BigDecimal meteringElectronic; + @ApiModelProperty(value = "充电电量") + @TableField("charging_electronic") + private BigDecimal chargingElectronic; + @ApiModelProperty(value = "电损电量") + @TableField("loss_electronic") + private BigDecimal lossElectronic; + @ApiModelProperty(value = "收入合计") + @TableField("收入合计") + private BigDecimal income; + + @ApiModelProperty(value = "场地费") + @TableField("venue") + private BigDecimal venue; + @ApiModelProperty(value = "计量电费") + @TableField("metering") + private BigDecimal metering; + @ApiModelProperty(value = "清洁费") + @TableField("clean") + private BigDecimal clean; + @ApiModelProperty(value = "日常维护费") + @TableField("maintain") + private BigDecimal maintain; + @ApiModelProperty(value = "成本") + @TableField("cost") + private BigDecimal cost; + @ApiModelProperty(value = "合计可分配金额") + @TableField("distribution") + private BigDecimal distribution; + @ApiModelProperty(value = "利润") + @TableField("profit_money") + private BigDecimal profitMoney; + @ApiModelProperty(value = "新能源利润") + @TableField("new_money") + private BigDecimal newMoney; + @ApiModelProperty(value = "新能源结算金额") + @TableField("new_Settlement") + private BigDecimal newSettlement; + + @ApiModelProperty(value = "供电局结算电费") + @TableField("supply_electronic") + private BigDecimal supplyElectronic; + @ApiModelProperty(value = "合作商承担电损占比") + @TableField("proportion_partner") + private BigDecimal proportionPartner; + @ApiModelProperty(value = "承担金额") + @TableField("proportion_money") + private BigDecimal proportionMoney; + @ApiModelProperty(value = "本期结算电费总金额 (实际电费转账)") + @TableField("total_electronic") + private BigDecimal totalElectronic; + @ApiModelProperty(value = "本期结算服务费总金额(实际服务费转账)") + @TableField("total_service") + private BigDecimal totalService; + @ApiModelProperty(value = "合作商充电服务费根据合同约定分成比例") + @TableField("service_partner") + private BigDecimal servicePartner; + @ApiModelProperty(value = "合作商充电服务费根据合同约定分成金额") + @TableField("service_money") + private BigDecimal serviceMoney; + + @ApiModelProperty(value = "三方收费(合计三方平台收费)") + @TableField("sharing_amount") + private BigDecimal sharingAmount; + @ApiModelProperty(value = " 交易手续费 三方收费*0.06%") + @TableField("commission_amount") + private BigDecimal commissionAmount; + @ApiModelProperty(value = "充电电费计费(平台合计电费)") + @TableField("electrovalence") + private BigDecimal electrovalence; + @ApiModelProperty(value = "充电服务费计费(实收服务费)") + @TableField("service_charge") + private BigDecimal serviceCharge; + @ApiModelProperty(value = "交易手续费计费") + @TableField("order_commission") + private BigDecimal orderCommission; + @ApiModelProperty(value = "会员抵扣") + @TableField("vip_discount") + private BigDecimal vipDiscount; + @ApiModelProperty(value = "优惠券抵扣") + @TableField("coupon_discount") + private BigDecimal couponDiscount; + + + + + + + + + + + + + + + + + + + + + + + + + + + @ApiModelProperty(value = "类型(1=开始,2=结束)") + @TableField("type") + private Integer type; + @ApiModelProperty(value = "开始时间") + @TableField("start_time") + private LocalDateTime startTime; + @ApiModelProperty(value = "结束时间") + @TableField("end_time") + private LocalDateTime endTime; + @ApiModelProperty(value = "站点名称") + @TableField(exist = false) + private String siteName; + @ApiModelProperty(value = "合作商名称") + @TableField(exist = false) + private String partnerName; + + @ApiModelProperty(value = "uid") + @TableField(exist = false) + private String uid; + + @ApiModelProperty(value = "结账日期 2024年09月06日17:10:06至2024年09月06日17:10:06") + @TableField(exist = false) + private String time; + @ApiModelProperty(value = "充电记录明细") + @TableField(exist = false) + private List<TChargingOrder> list; + @ApiModelProperty(value = "收入合计涨幅/跌幅 正数为涨幅负数为跌幅 字段为空 说明没有上月记录 不展示涨幅跌幅") + @TableField(exist = false) + private String incomePercentage; + @ApiModelProperty(value = "总利润涨幅/跌幅 正数为涨幅负数为跌幅 字段为空 说明没有上月记录 不展示涨幅跌幅") + @TableField(exist = false) + private String totalPercentage; + @ApiModelProperty(value = "利用率") + @TableField(exist = false) + private String rate; + @ApiModelProperty(value = "参与电力市场交易退补电费") + @TableField(exist = false) + private Integer electronicRefund; + +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java new file mode 100644 index 0000000..7117147 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java @@ -0,0 +1,25 @@ +package com.ruoyi.order.api.query; + +import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "SettlementListQuery结算表记录列表查询对象",description = "管理后台-财务结算-结算表记录列表查询对") +public class SettlementListQuery extends BasePage { + + @ApiModelProperty(value = "类型(1=开始,2=结束)") + private Integer type; + @ApiModelProperty(value = "站点ids 选择全部 不传") + private List<Integer> siteIds; + @ApiModelProperty(value = "合作商id ") + private Integer partnerId; + @ApiModelProperty(value = "开始时间2020-01-01 00:00:00") + private String startTime; + @ApiModelProperty(value = "结束时间2021-01-01 23:59:59") + private String endTime; + +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java new file mode 100644 index 0000000..bbe3edf --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java @@ -0,0 +1,21 @@ +package com.ruoyi.order.api.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy; +import com.ruoyi.order.api.model.TSettlementConfirm; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "SettlementTotalVO对象",description = "结算汇总表列表VO") +public class SettlementTotalVO { + @ApiModelProperty(value = "列表数据") + List<TSettlementConfirm> list1; + @ApiModelProperty(value = "合计数据") + List<TSettlementConfirm> list2; +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java index dc609fb..7d33fd2 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java @@ -31,7 +31,9 @@ * @return */ @PostMapping("/vip/getInfo1") - public R<TVip> getInfo1(@RequestParam("id") Integer id); + R<TVip> getInfo1(@RequestParam("id") Integer id); + + @PostMapping(value = "/vip/getInfo") R<TVip> getInfo(@RequestParam("id") Integer id); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java index 690629f..47aab16 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java @@ -51,8 +51,10 @@ List<TAppUserVipDetail> list = appUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, userId).last(" and now() between start_time and end_time order by start_time desc").list(); for (TAppUserVipDetail tAppUserVipDetail : list) { - TVip data = vipClient.getInfo1(tAppUserVipDetail.getVipId()).getData(); - tAppUserVipDetail.setVipName(data.getName()); + if(null != tAppUserVipDetail.getVipId()){ + TVip data = vipClient.getInfo1(tAppUserVipDetail.getVipId()).getData(); + tAppUserVipDetail.setVipName(data.getName()); + } } return R.ok(list); } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java index e5fdd18..ef92923 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java @@ -17,6 +17,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; @Component @@ -44,7 +45,10 @@ R<TVip> info = vipClient.getInfo1(vipId); TVip vip = info.getData(); - List<SendCouponDto> javaList = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class); + List<SendCouponDto> javaList = new ArrayList<>(); + if (vip.getCoupon()!=null) { + javaList = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class); + } tAppUserVipDetail.setCouponIds(vip.getCoupon()); tAppUserVipDetail.setSendChargeNum(vip.getDiscountTimes()); @@ -80,16 +84,42 @@ }else { nowUser.setVipEndTime(nowUser.getVipEndTime().plusDays(plusDay).minusDays(1)); //获取detail里结束时间大于当前时间的数据,并将enttime延长 - TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one(); + TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getVipId,vipId).eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one(); + if (tAppUserVipDetail!=null) { + List<TAppUserVipDetail> list = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).ge(TAppUserVipDetail::getStartTime, tAppUserVipDetail.getEndTime()).list(); + for (TAppUserVipDetail appUserVipDetail : list) { + appUserVipDetail.setStartTime(appUserVipDetail.getStartTime().plusMonths(plusDay).minusDays(1)); + appUserVipDetail.setEndTime(appUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); + } + tAppUserVipDetailService.updateBatchById(list); + tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); -// TAppUserVipDetail newAppUser = new TAppUserVipDetail(); -// newAppUser.setAppUserId(nowUser.getId()); -// newAppUser.setStartTime(tAppUserVipDetail.getEndTime()); - tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); -// newAppUser.setVipId(vipId); - tAppUserVipDetailService.updateById(tAppUserVipDetail); -// tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusDays(plusDay)); -// tAppUserVipDetailService.updateById(tAppUserVipDetail); + tAppUserVipDetailService.updateById(tAppUserVipDetail); + }else { + TAppUserVipDetail tAppUserVipDetail2 = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one(); + + TAppUserVipDetail tAppUserVipDetail1 = new TAppUserVipDetail(); + tAppUserVipDetail1.setAppUserId(nowUser.getId()); + tAppUserVipDetail1.setStartTime(tAppUserVipDetail2.getEndTime()); + tAppUserVipDetail1.setEndTime(tAppUserVipDetail2.getEndTime().plusMonths(plusDay).minusDays(1)); + tAppUserVipDetail1.setVipId(vipId); + + R<TVip> info = vipClient.getInfo1(vipId); + TVip vip = info.getData(); + List<SendCouponDto> javaList = new ArrayList<>(); + if (vip.getCoupon()!=null) { + javaList = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class); + } + + tAppUserVipDetail1.setCouponIds(vip.getCoupon()); + tAppUserVipDetail1.setSendChargeNum(vip.getDiscountTimes()); + tAppUserVipDetail1.setChargeNum(vip.getDiscountTimes()); + tAppUserVipDetail1.setDiscountMoney(vip.getMaximumDeduction()); + tAppUserVipDetail1.setSendMonth(1); + tAppUserVipDetailService.save(tAppUserVipDetail1); + + } + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java index 3c71cd9..7f3c920 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java @@ -9,6 +9,7 @@ import com.ruoyi.chargingPile.api.query.SetPermissionConfiguration; import com.ruoyi.chargingPile.dto.ResetPassword; import com.ruoyi.chargingPile.service.IPartnerService; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.utils.SecurityUtils; @@ -68,6 +69,12 @@ Partner partner = partnerService.getPartner(id); return AjaxResult.success(partner); } + @ResponseBody + @GetMapping("/getPartnerR/{id}") + public R<Partner> getPartnerR(@PathVariable("id") Integer id){ + Partner partner = partnerService.getPartner(id); + return R.ok(partner); + } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java index 1db4d7c..fc48e33 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java @@ -82,6 +82,17 @@ @Resource private ChargingOrderClient chargingOrderClient; + + /** + * 根据站点id 查询所有充电桩 + * @param siteId + * @return + */ + @GetMapping("/getPileListBySiteId/{siteId}") + public R<List<TChargingPile>> getPileListBySiteId(@PathVariable("siteId")Integer siteId){ + + return R.ok(chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, siteId).list()); + } /** * 小程序扫一扫 * @param number diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java index ca22e94..c1e071b 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java @@ -1,7 +1,14 @@ package com.ruoyi.chargingPile.controller; +import java.time.LocalDateTime; import java.math.BigDecimal; + +import com.ruoyi.chargingPile.api.feignClient.SiteClient; +import com.ruoyi.chargingPile.api.model.Partner; +import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.common.core.utils.WebUtils; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TChargingOrder; +import com.ruoyi.order.api.model.TSettlementConfirm; import com.ruoyi.order.api.vo.ChargingBillListVO; @@ -35,6 +42,7 @@ import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.ChargingListQuery; import com.ruoyi.order.api.vo.ChargingBillVO; +import com.ruoyi.order.api.vo.SettlementTotalVO; import io.swagger.annotations.ApiOperation; import org.apache.commons.codec.CharEncoding; import org.springframework.beans.BeanUtils; @@ -50,6 +58,8 @@ import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; import java.util.List; import java.util.regex.Pattern; @@ -70,6 +80,8 @@ private final RedisService redisService; @Resource private ChargingOrderClient chargingOrderClient; + @Resource + private SiteClient siteClient; @Autowired public TApplyChargingPileController(TApplyChargingPileService applyChargingPileService, TokenService tokenService, RedisService redisService) { @@ -212,9 +224,7 @@ applyChargingPileExportDto.setIs3("否"); } exportDtos.add(applyChargingPileExportDto); - } - // excel模板封装 ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream()); InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" +"充电桩申请记录" + ".xlsx"); @@ -272,6 +282,93 @@ } return R.ok(); } + @ApiOperation(value = "导出", tags = {"管理后台-结算汇总表"}) + @GetMapping("/downloadSettlementTotal") + public R downloadSettlementTotal(String time,HttpServletResponse response) + { + SettlementTotalVO data = chargingOrderClient.settlementTotalR(time).getData(); + + + try { + response.setCharacterEncoding(Constants.UTF8); + response.setContentType("application/vnd.ms-excel"); + response.setHeader("Access-Control-Expose-Headers", "Content-disposition"); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode("结算确认单", CharEncoding.UTF_8) + ".xlsx"); + } catch (UnsupportedEncodingException e) { + return R.fail("excel导出失败!"); + } + try { + // excel模板封装 + ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream()); + InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" +"运营商名称1-充电桩名称1-结算对账单明细-结算月份1" + ".xlsx"); + // 自动释放资源 + try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build(); + excelWriter.fill(new FillWrapper("data1", data.getList1()), fillConfig, writeSheet); + excelWriter.fill(new FillWrapper("data2", data.getList2()), fillConfig, writeSheet); + excelWriter.finish(); + } catch (Exception e) { + return R.fail("excel导出失败!"); + } + } catch (IOException e) { + return R.fail("excel导出失败!"); + } + return R.ok(); + } + @ApiOperation(value = "下载", tags = {"管理后台-结算表记录"}) + @GetMapping("/downloadSettlement") + public R downloadSettlement(String uid,HttpServletResponse response) + { + TSettlementConfirm data = chargingOrderClient.downloadSettlement(uid).getData(); + List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(data.getSiteId())).getData(); + if (!data1.isEmpty()){ + data.setSiteName(data1.get(0).getName()); + } + Partner data2 = siteClient.getPartnerR(data.getPartnerId()).getData(); + if (data2!=null){ + data.setPartnerName(data2.getName()); + } + List<TSettlementConfirm> chargingBillVOS = new ArrayList<>(); + chargingBillVOS.add(data); + try { + response.setCharacterEncoding(Constants.UTF8); + response.setContentType("application/vnd.ms-excel"); + response.setHeader("Access-Control-Expose-Headers", "Content-disposition"); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode("结算确认单", CharEncoding.UTF_8) + ".xlsx"); + } catch (UnsupportedEncodingException e) { + return R.fail("excel导出失败!"); + } + try { + // excel模板封装 + ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream()); + InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" +"运营商名称1-充电桩名称1-结算对账单明细-结算月份1" + ".xlsx"); + // 自动释放资源 + try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + WriteSheet writeSheet2 = EasyExcel.writerSheet().build(); + WriteSheet writeSheet3 = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); + excelWriter.fill(new FillWrapper("data1", chargingBillVOS), fillConfig, writeSheet); + excelWriter.fill(new FillWrapper("data2", chargingBillVOS), fillConfig, writeSheet2); + excelWriter.fill(new FillWrapper("data3", data.getList()), fillConfig, writeSheet3); + excelWriter.finish(); + } catch (Exception e) { + return R.fail("excel导出失败!"); + } + } catch (IOException e) { + return R.fail("excel导出失败!"); + } + return R.ok(); + } + + + + + + @ApiOperation(value = "下载-未出账", tags = {"管理后台-充电算账单"}) @GetMapping("/download") public R download(String uid,HttpServletResponse response) diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java index ad1d1f3..b34c051 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java @@ -5,12 +5,16 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.chargingPile.api.model.TParkingLot; import com.ruoyi.chargingPile.api.model.TParkingRecord; +import com.ruoyi.chargingPile.api.query.ParkingRecordQuery; import com.ruoyi.chargingPile.api.vo.GetParkingRecord; +import com.ruoyi.chargingPile.api.vo.TParkingRecordPageInfoVO; +import com.ruoyi.chargingPile.api.vo.TParkingRecordVO; import com.ruoyi.chargingPile.dto.ParkingRecordPageQuery; import com.ruoyi.chargingPile.service.TParkingLotService; import com.ruoyi.chargingPile.service.TParkingRecordService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.PageInfo; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; @@ -49,6 +53,13 @@ return R.ok(page); } + @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "停车缴费订单列表") + @PostMapping(value = "/pageList") + public R<PageInfo<TParkingRecordPageInfoVO>> pageList(@RequestBody ParkingRecordQuery query) { + + return R.ok(); + } + @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "详情") @GetMapping(value = "/detail") public R<TParkingRecord> detail(Long id) { diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java index 981cc4b..6820fa6 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java @@ -35,7 +35,8 @@ public AjaxResult<PageInfo<TRepair>> getRepairList(String name, String siteId, BasePage basePage){ PageInfo<TRepair> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize()); List<TRepair> repairList = repairService.getRepairList(pageInfo, name, siteId); - return AjaxResult.success(repairList); + pageInfo.setRecords(repairList); + return AjaxResult.success(pageInfo); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java index afe8e9f..c9190aa 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.chargingPile.api.model.TRepair; import com.ruoyi.common.core.web.page.PageInfo; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -24,6 +25,6 @@ * @param siteId * @return */ - List<TRepair> getRepairList(PageInfo<TRepair> pageInfo, String name, String siteId); + List<TRepair> getRepairList(PageInfo<TRepair> pageInfo, @Param("name") String name, @Param("siteId") String siteId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java index 7cf4f33..97458c6 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java @@ -378,7 +378,7 @@ this.updateById(site); List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, id).eq(TChargingGun::getDelFlag, 0)); for (TChargingGun tChargingGun : list) { - tChargingGun.setChargingPileId(accountingStrategyId); + tChargingGun.setAccountingStrategyId(accountingStrategyId); } chargingGunService.updateBatchById(list); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java index d497796..00e72b4 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java @@ -242,7 +242,7 @@ List<Integer> id = setAccountingStrategy.getId(); List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, id).eq(TChargingGun::getDelFlag, 0)); for (TChargingGun tChargingGun : list) { - tChargingGun.setChargingPileId(setAccountingStrategy.getAccountingStrategyId()); + tChargingGun.setAccountingStrategyId(setAccountingStrategy.getAccountingStrategyId()); } chargingGunService.updateBatchById(list); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml index ce9ef7e..d20746a 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml @@ -25,8 +25,7 @@ </sql> <select id="pageList" resultType="com.ruoyi.chargingPile.api.vo.TParkingLotVO"> SELECT - tpl.id, tpl.`name`, tpl.code, tpl.site_id, tpl.charge_free_duration, tpl.charge_capping, tpl.charge_rate, tpl.non_charge_free_duration, - tpl.non_charge_capping, tpl.non_charge_rate, tpl.remark, tpl.create_time, tpl.del_flag, ts.name AS siteName + tpl.*, ts.name AS siteName FROM t_parking_lot tpl LEFT JOIN t_site ts ON tpl.site_id = ts.id <where> diff --git "a/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx" "b/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx" new file mode 100644 index 0000000..807ae43 --- /dev/null +++ "b/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx" Binary files differ diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java index aedff15..b3b1995 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -40,6 +41,25 @@ } return R.ok(); } + + /** + * 批量查询 + * @param orderId + * @return + */ + @PostMapping(value = "/getOrderInfoByCodes") + public R<List<UploadRealTimeMonitoringData>> getOrderInfoByCodes(@RequestParam("orderId") String orderId){ + List<UploadRealTimeMonitoringData> res = new ArrayList<>(); + for (String s : orderId.split(",")) { + List<UploadRealTimeMonitoringData> dataByOrderCode = uploadRealTimeMonitoringDataService.getDataByOrderCode(s); + if(dataByOrderCode.size() > 0){ + UploadRealTimeMonitoringData uploadRealTimeMonitoringData = dataByOrderCode.get(dataByOrderCode.size() - 1); + res.add(uploadRealTimeMonitoringData); + } + + } + return R.ok(res); + } /** diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java index 27e04ad..c69b333 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java @@ -20,15 +20,15 @@ */ private String sk; /** - * endpoint配置 938d8d39e2.iotda.cn-north-4.myhuaweicloud.com + * endpoint配置 94cb3eb5f9.st1.iotda-app.cn-south-1.myhuaweicloud.com */ private String endpoint; /** - * project_id配置 0cc59978c61e4b4da24e8c3d02937b45 + * project_id配置 f31c21e190e04fb0aebf8c0b1e7959cd */ private String projectId; /** - * Instance-Id配置 c60f266a-57a2-460c-a24e-eabda84602eb + * Instance-Id配置 d21a37d3-c578-43aa-a1ab-be3854e7c337 */ private String instanceId; diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java index c2a2428..91d8a7f 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java @@ -5,9 +5,9 @@ import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.iam.v3.model.*; import com.ruoyi.common.redis.service.RedisService; -import com.ruoyi.integration.iotda.constant.IotConstant; import com.ruoyi.integration.iotda.builder.IotBuilder; import com.ruoyi.integration.iotda.config.IotAccountConfig; +import com.ruoyi.integration.iotda.constant.IotConstant; import com.ruoyi.integration.iotda.utils.time.UtcToSeconds; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java index 950f938..92990e1 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java @@ -7,9 +7,16 @@ import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.order.api.dto.SettlementConfirmAdd; +import com.ruoyi.order.api.model.TChargingOrder; +import com.ruoyi.order.api.model.TSettlementConfirm; +import com.ruoyi.order.api.query.SettlementListQuery; +import com.ruoyi.order.api.vo.SettlementTotalVO; import com.ruoyi.order.vo.ChargingOrderListInfoVO; import com.ruoyi.order.api.vo.ChargingOrderTimeVO; import com.ruoyi.order.api.model.ChargingListQuery; @@ -18,10 +25,13 @@ import com.ruoyi.payment.api.feignClient.WxPaymentClient; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.time.format.DateTimeFormatter; +import java.util.List; /** * <p> @@ -38,59 +48,60 @@ @Resource private TChargingOrderService chargingOrderService; - @Autowired - private TokenService tokenService; - @Autowired - private TOrderEvaluateService orderEvaluateService; - @Resource - private WxPaymentClient wxPaymentClient; - - @Resource - private RedisService redisService; - - @Resource - private AliPaymentClient aliPaymentClient; - @Resource - private TShoppingOrderService shoppingOrderService; - - @Resource - private AppUserClient appUserClient; - - @Resource - private TVipOrderService vipOrderService; - @Resource - private ParkingLotClient parkingLotClient; - @Resource - private TChargingOrderRefundService chargingOrderRefundService; - - @Resource - private TShoppingOrderRefundService shoppingOrderRefundService; - @Resource - private TVipOrderRefundService vipOrderRefundService; - @Resource - private SiteClient siteClient; - @Resource - private ChargingPileClient chargingPileClient; - @Resource - private ChargingGunClient chargingGunClient; - @Resource - private AppUserCarClient appUserCarClient; - @Resource - private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; - @ResponseBody + private TSettlementConfirmService tSettlementConfirmService; @PostMapping(value = "/chargingList") @ApiOperation(value = "充电时段统计列表", tags = {"管理后台-财务结算"}) public AjaxResult<ChargingOrderTimeVO> chargingList(@RequestBody ChargingListQuery dto) { ChargingOrderTimeVO res = chargingOrderService.chargingList(dto); return AjaxResult.success(res); } - @ResponseBody @GetMapping(value = "/chargingInfo") @ApiOperation(value = "充电时段统计列表-查看详情", tags = {"管理后台-财务结算"}) public AjaxResult<ChargingOrderListInfoVO> chargingInfo(String uid) { ChargingOrderListInfoVO res = chargingOrderService.chargingInfo(uid); return AjaxResult.success(res); } + + @GetMapping(value = "/settlementTotal") + @ApiOperation(value = "结算汇总-列表查询", tags = {"管理后台-财务结算"}) + @ApiParam(name = "time", value = "汇报时间2024-01-01 00:00:00") + public AjaxResult<SettlementTotalVO> settlementTotal(String time) { + SettlementTotalVO res = chargingOrderService.settlementTotal(time); + return AjaxResult.success(res); + } + @GetMapping(value = "/settlementTotalR") + public R<SettlementTotalVO> settlementTotalR( String time) { + SettlementTotalVO res = chargingOrderService.settlementTotal(time); + return R.ok(res); + } + @PostMapping(value = "/settlementAdd") + @ApiOperation(value = "结算确认表-生成/保存结算确认表", tags = {"管理后台-财务结算"}) + public R<TSettlementConfirm> settlementAdd(@RequestBody SettlementConfirmAdd dto) { + TSettlementConfirm res = chargingOrderService.settlementAdd(dto); + return R.ok(res); + } + @PostMapping(value = "/settlementList") + @ApiOperation(value = "结算表记录-列表查询", tags = {"管理后台-财务结算"}) + public R<PageInfo<TSettlementConfirm>> settlementList(@RequestBody SettlementListQuery dto) { + PageInfo<TSettlementConfirm> res = chargingOrderService.settlementList(dto); + return R.ok(res); + } + @GetMapping(value = "/downloadSettlement/{uid}") + public R<TSettlementConfirm> downloadSettlement(@PathVariable("uid") String uid) { + TSettlementConfirm byId = tSettlementConfirmService.getById(uid); + if (byId!=null){ + List<TChargingOrder> list = chargingOrderService.lambdaQuery().eq(TChargingOrder::getSiteId, byId.getSiteId()) + .between(TChargingOrder::getStartTime, byId.getStartTime(), byId.getEndTime()) + .eq(TChargingOrder::getStatus, 5) + .eq(TChargingOrder::getRechargePaymentStatus, 2).list(); + byId.setList(list); + String format = byId.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); + String format1 = byId.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); + byId.setTime(format+"至"+format1); + } + return R.ok(byId); + } + } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java new file mode 100644 index 0000000..260ee56 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java @@ -0,0 +1,33 @@ +package com.ruoyi.order.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.api.model.TSettlementConfirm; +import com.ruoyi.order.api.model.TVipOrder; +import com.ruoyi.order.api.query.SettlementListQuery; +import com.ruoyi.order.api.query.VipShoppingOrderQuery; +import com.ruoyi.order.dto.SixVipDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import javax.validation.constraints.Pattern; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +/** + * <p> + * Mapper 接口 + * </p> + * + * @author xiaochen + * @since 2024-08-07 + */ +@Mapper +public interface TSettlementConfirmMapper extends BaseMapper<TSettlementConfirm> { + + + List<TSettlementConfirm> settlementList(@Param("pageInfo") PageInfo<TSettlementConfirm> pageInfo, @Param("req") SettlementListQuery dto); + + List<TSettlementConfirm> settlementTotal(@Param("time") String time); +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java index f7da0dc..d62aa72 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java @@ -6,15 +6,15 @@ import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.api.dto.SettlementConfirmAdd; import com.ruoyi.order.api.model.ChargingListQuery; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TChargingOrderRefund; +import com.ruoyi.order.api.model.TSettlementConfirm; import com.ruoyi.order.api.query.ChargingOrderQuery; +import com.ruoyi.order.api.query.SettlementListQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; -import com.ruoyi.order.api.vo.ChargingOrderTimeVO; -import com.ruoyi.order.api.vo.ChargingOrderVO; -import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; -import com.ruoyi.order.api.vo.TCharingOrderVO; +import com.ruoyi.order.api.vo.*; import com.ruoyi.order.dto.*; import com.ruoyi.order.vo.ChargingOrderListInfoVO; import org.springframework.web.bind.annotation.RequestBody; @@ -156,13 +156,19 @@ * @param orderCode */ void excelEndCharge(String orderCode); - - + + /** * 根据车牌号和开始时间查询充电数据 * @param query * @return */ TChargingOrder getChargingOrderByLicensePlate(GetChargingOrderByLicensePlate query); - + + + TSettlementConfirm settlementAdd(SettlementConfirmAdd dto); + + PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto); + + SettlementTotalVO settlementTotal(String time); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TSettlementConfirmService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TSettlementConfirmService.java new file mode 100644 index 0000000..f46e6dd --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TSettlementConfirmService.java @@ -0,0 +1,24 @@ +package com.ruoyi.order.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.api.model.TSettlementConfirm; +import com.ruoyi.order.api.model.TVipOrder; +import com.ruoyi.order.api.query.VipShoppingOrderQuery; +import com.ruoyi.order.dto.SixVipDto; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +/** + * <p> + * 服务类 + * </p> + * + * @author xiaochen + * @since 2024-08-07 + */ +public interface TSettlementConfirmService extends IService<TSettlementConfirm> { + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index 928979b..dd605fc 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -1,7 +1,9 @@ package com.ruoyi.order.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -29,14 +31,17 @@ import com.ruoyi.integration.api.feignClient.*; import com.ruoyi.integration.api.model.*; import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; +import com.ruoyi.order.api.dto.SettlementConfirmAdd; import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient; import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; +import com.ruoyi.order.api.query.SettlementListQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.*; import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TChargingOrderMapper; +import com.ruoyi.order.mapper.TSettlementConfirmMapper; import com.ruoyi.order.service.TChargingOrderAccountingStrategyService; import com.ruoyi.order.service.TChargingOrderRefundService; import com.ruoyi.order.service.TChargingOrderService; @@ -47,6 +52,7 @@ import com.ruoyi.order.vo.ChargingOrderListInfoVO; import com.ruoyi.other.api.domain.TIntegralRule; import com.ruoyi.other.api.feignClient.IntegralRuleClient; +import com.ruoyi.other.api.feignClient.OtherClient; import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.payment.api.feignClient.AliPaymentClient; @@ -56,6 +62,7 @@ import com.ruoyi.payment.api.model.WxPaymentRefundModel; import com.ruoyi.payment.api.vo.*; import com.ruoyi.system.api.feignClient.SysUserClient; +import com.sun.org.apache.bcel.internal.generic.NEW; import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.ApiModelProperty; import org.slf4j.Logger; @@ -93,10 +100,13 @@ @Resource private ChargingGunClient chargingGunClient; - + @Resource + private TSettlementConfirmMapper tSettlementConfirmMapper; + @Resource private SiteClient siteClient; - + + @Resource private AppUserCarClient appUserCarClient; @Resource @@ -104,7 +114,6 @@ @Resource private ChargingPileClient chargingPileClient; - @Resource private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; @@ -117,7 +126,6 @@ @Resource private AliPaymentClient aliPaymentClient; - @Resource private AppCouponClient appCouponClient; @@ -437,7 +445,7 @@ chargingOrder.setVipDiscountAmount(discountAmount); } } - + } this.save(chargingOrder); @@ -1347,7 +1355,6 @@ chargingOrderListInfoVO.setTerminalName(data2.getName()+data1.getName()); } chargingOrderListInfoVO.setEndMode(chargingOrder.getEndMode()); - // todo 周一完善 // 获取开始SOC 结束soc List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData(); if (!data6.isEmpty()){ @@ -1612,8 +1619,8 @@ return null; } - - + + /** * 根据车牌号和开始时间查询充电数据 * @param query @@ -1630,4 +1637,329 @@ .eq(TChargingOrder::getRechargePaymentStatus, 2).ne(TChargingOrder::getStatus, -1)); return one; } + + @Override + public TSettlementConfirm settlementAdd(SettlementConfirmAdd dto) { + List<Site> data = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData(); + TSettlementConfirm tSettlementConfirm = new TSettlementConfirm(); + if (!data.isEmpty()){ + tSettlementConfirm.setSiteName(data.get(0).getName()); + tSettlementConfirm.setPartnerId(data.get(0).getPartnerId()); + if (data.get(0).getPartnerId()!=null){ + Partner data1 = siteClient.getPartnerR(data.get(0).getPartnerId()).getData(); + if (data1!=null){ + tSettlementConfirm.setPartnerName(data1.getName()); + tSettlementConfirm.setPartnerId(data1.getId()); + } + } + } + String startTime = dto.getStartTime(); + String endTime = dto.getEndTime(); + // 将这两个时间转化为localDateTime + tSettlementConfirm.setStartTime(LocalDateTime.parse(startTime)); + tSettlementConfirm.setEndTime(LocalDateTime.parse(endTime)); + // 根据站点id和开始时间和结束时间和归属日期 查询充电订单列表 + QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>() + .eq("site_id", dto.getSiteId()) + .eq("recharge_payment_status",2); + switch (dto.getType()){ + case 1: + eq.between("start_time", startTime, endTime); + break; + case 2: + eq.between("end_time", startTime, endTime); + break; + } + List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq); + // 充电电量 度 + BigDecimal chargingElectronic = new BigDecimal("0"); + // 三方收费 分佣 + BigDecimal sharingAmount = new BigDecimal("0"); + // 三方交易手续费 三方收费*0.6% + BigDecimal commissionAmount = new BigDecimal("0"); + // 累计电费 + BigDecimal electrovalence = new BigDecimal("0"); + // 累计服务费 + BigDecimal serviceCharge = new BigDecimal("0"); + // 订单手续费 订单支付金额*0.6% + BigDecimal orderCommission = new BigDecimal("0"); + // 会员抵扣 + BigDecimal vipDiscount = new BigDecimal("0"); + // 优惠券抵扣 + BigDecimal couponDiscount = new BigDecimal("0"); + // 支付订单金额 需要减去退款金额 + BigDecimal paymentAmount = new BigDecimal("0"); + for (TChargingOrder tChargingOrder : tChargingOrders) { + // 累加充电总度数 + chargingElectronic = chargingElectronic.add(tChargingOrder.getChargingCapacity()); + // 累加分佣 + sharingAmount = sharingAmount.add(tChargingOrder.getSharingAmount()); + // 累加电费 + electrovalence = electrovalence.add(tChargingOrder.getElectrovalence()); + // 累加服务费 + serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge()); + // 累加会员折扣 + if (tChargingOrder.getVipDiscountAmount()!=null){ + vipDiscount = vipDiscount.add(tChargingOrder.getVipDiscountAmount()); + } + // 累加优惠券折扣 + if (tChargingOrder.getCouponDiscountAmount()!=null){ + couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount()); + } + if (tChargingOrder.getRefundStatus() == 2){ + // 如果成功退款 那么减去退款金额 + paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount())); + }else{ + paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount()); + } + } + // 三方交易手续费 三方收费*0.6% + commissionAmount = sharingAmount.multiply(new BigDecimal("0.006")); + // 订单手续费 订单支付金额 - 退款金额*0.6% + orderCommission = paymentAmount.multiply(new BigDecimal("0.006")); + tSettlementConfirm.setSharingAmount(sharingAmount); + tSettlementConfirm.setCommissionAmount(commissionAmount); + tSettlementConfirm.setElectrovalence(electrovalence); + // 服务费=总服务费-三费收费-交易手续费-交易手续费-服务费会员抵扣-服务费优惠券抵扣 + tSettlementConfirm.setServiceCharge(serviceCharge.subtract(commissionAmount).subtract(sharingAmount).subtract(orderCommission).subtract(vipDiscount).subtract(couponDiscount)); + tSettlementConfirm.setOrderCommission(orderCommission); + tSettlementConfirm.setVipDiscount(vipDiscount); + tSettlementConfirm.setCouponDiscount(couponDiscount); + tSettlementConfirm.setSiteId(dto.getSiteId()); + tSettlementConfirm.setMeteringElectronic(dto.getData().getMeteringElectronic()); + tSettlementConfirm.setChargingElectronic(chargingElectronic); + tSettlementConfirm.setLossElectronic(dto.getData().getLossElectronic()); + tSettlementConfirm.setIncome(chargingElectronic.add(serviceCharge)); + tSettlementConfirm.setVenue(dto.getData().getVenue()); + tSettlementConfirm.setMetering(dto.getData().getMetering()); + tSettlementConfirm.setClean(dto.getData().getClean()); + tSettlementConfirm.setMaintain(dto.getData().getMaintain()); + tSettlementConfirm.setCost(dto.getData().getVenue().add(dto.getData().getClean()).add(dto.getData().getMaintain())); + tSettlementConfirm.setProfitMoney(new BigDecimal("0")); + tSettlementConfirm.setNewMoney(new BigDecimal("0")); + tSettlementConfirm.setNewSettlement(new BigDecimal("0")); + tSettlementConfirm.setVipDiscount(vipDiscount); + tSettlementConfirm.setCouponDiscount(couponDiscount); + tSettlementConfirm.setSupplyElectronic(dto.getData().getSupplyElectronic()); + tSettlementConfirm.setType(dto.getType()); + tSettlementConfirm.setProportionPartner(dto.getData().getProportionPartner()); + tSettlementConfirm.setProportionMoney(dto.getData().getProportionMoney()); + tSettlementConfirm.setTotalElectronic(dto.getData().getTotalElectronic()); + tSettlementConfirm.setTotalService(dto.getData().getTotalService()); + tSettlementConfirm.setRemark(dto.getData().getRemark()); + tSettlementConfirm.setServicePartner(dto.getData().getServicePartner()); + tSettlementConfirm.setServiceMoney(dto.getData().getServiceMoney()); + tSettlementConfirm.setTotalService(dto.getData().getTotalService()); + tSettlementConfirm.setServiceRemark(dto.getData().getServiceRemark()); + tSettlementConfirm.setDistribution(dto.getData().getDistribution()); + tSettlementConfirm.setIncome(dto.getData().getElectrovalence().add(dto.getData().getServiceCharge())); + if (dto.getState() == 2){ + tSettlementConfirmMapper.insert(tSettlementConfirm); + } + return tSettlementConfirm; + } + + @Override + public PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto) { + PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); + List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto); + for (TSettlementConfirm tSettlementConfirm : list) { + tSettlementConfirm.setUid(tSettlementConfirm.getId().toString()); + Partner data = siteClient.getPartnerR(tSettlementConfirm.getPartnerId()).getData(); + List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData(); + if (!data1.isEmpty()){ + tSettlementConfirm.setSiteName(data1.get(0).getName()); + } + if (data!=null){ + tSettlementConfirm.setPartnerName(data.getName()); + } + String format = tSettlementConfirm.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); + String format1 = tSettlementConfirm.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); + tSettlementConfirm.setTime(format+"至"+format1); + + + } + pageInfo.setRecords(list); + return null; + } + + @Override + public SettlementTotalVO settlementTotal(String time) { + SettlementTotalVO res = new SettlementTotalVO(); + List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time); + LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + // 减少一个月 + LocalDateTime minus = parse.minusMonths(1); + List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time); + // 合计 + List<TSettlementConfirm> total = new ArrayList<>(); + + TSettlementConfirm tSettlementConfirm1 = new TSettlementConfirm(); + BigDecimal meteringElectronic = new BigDecimal("0"); + BigDecimal chargingElectronic = new BigDecimal("0"); + BigDecimal lossElectronic = new BigDecimal("0"); + BigDecimal income = new BigDecimal("0"); + BigDecimal venue = new BigDecimal("0"); + BigDecimal metering = new BigDecimal("0"); + BigDecimal clean = new BigDecimal("0"); + BigDecimal maintain = new BigDecimal("0"); + BigDecimal cost = new BigDecimal("0"); + BigDecimal profitMoney = new BigDecimal("0"); + BigDecimal newMoney = new BigDecimal("0"); + BigDecimal newSettlement = new BigDecimal("0"); + BigDecimal supplyElectronic = new BigDecimal("0"); + BigDecimal proportionPartner = new BigDecimal("0"); + BigDecimal proportionMoney = new BigDecimal("0"); + BigDecimal totalElectronic = new BigDecimal("0"); + BigDecimal totalService = new BigDecimal("0"); + BigDecimal servicePartner = new BigDecimal("0"); + BigDecimal serviceMoney = new BigDecimal("0"); + BigDecimal sharingAmount = new BigDecimal("0"); + BigDecimal commissionAmount = new BigDecimal("0"); + BigDecimal electrovalence = new BigDecimal("0"); + BigDecimal serviceCharge = new BigDecimal("0"); + BigDecimal orderCommission = new BigDecimal("0"); + BigDecimal vipDiscount = new BigDecimal("0"); + BigDecimal couponDiscount = new BigDecimal("0"); +// tSettlementConfirm1.setIncomePercentage(); +// tSettlementConfirm1.setTotalPercentage(); + tSettlementConfirm1.setElectronicRefund(0); +// 上月成本合计 + BigDecimal beforeCost= new BigDecimal("0"); + // 上月利润合计 + BigDecimal beforeIncome= new BigDecimal("0"); + for (TSettlementConfirm tSettlementConfirm : list1) { + List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData(); + if (!data1.isEmpty()){ + tSettlementConfirm.setSiteName(data1.get(0).getName()); + } + meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic()); + chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic()); + lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic()); + income = income.add(tSettlementConfirm.getIncome()); + venue = venue.add(tSettlementConfirm.getVenue()); + metering = metering.add(tSettlementConfirm.getMetering()); + clean = clean.add(tSettlementConfirm.getClean()); + maintain = maintain.add(tSettlementConfirm.getMaintain()); + cost = cost.add(tSettlementConfirm.getCost()); + profitMoney = profitMoney.add(tSettlementConfirm.getProfitMoney()); + newMoney = newMoney.add(tSettlementConfirm.getNewMoney()); + newSettlement = newSettlement.add(tSettlementConfirm.getNewSettlement()); + supplyElectronic = supplyElectronic.add(tSettlementConfirm.getSupplyElectronic()); + proportionPartner = proportionPartner.add(tSettlementConfirm.getProportionPartner()); + proportionMoney = proportionMoney.add(tSettlementConfirm.getProportionMoney()); + totalElectronic = totalElectronic.add(tSettlementConfirm.getTotalElectronic()); + totalService = totalService.add(tSettlementConfirm.getTotalService()); + servicePartner = servicePartner.add(tSettlementConfirm.getServicePartner()); + serviceMoney = serviceMoney.add(tSettlementConfirm.getServiceMoney()); + sharingAmount = sharingAmount.add(tSettlementConfirm.getSharingAmount()); + commissionAmount = commissionAmount.add(tSettlementConfirm.getCommissionAmount()); + electrovalence = electrovalence.add(tSettlementConfirm.getElectrovalence()); + serviceCharge = serviceCharge.add(tSettlementConfirm.getServiceCharge()); + orderCommission = orderCommission.add(tSettlementConfirm.getOrderCommission()); + vipDiscount = vipDiscount.add(tSettlementConfirm.getVipDiscount()); + couponDiscount = couponDiscount.add(tSettlementConfirm.getCouponDiscount()); + + // 查询结算确认单开始时间和结束时间的单子 + QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>() + .eq("site_id", tSettlementConfirm.getSiteId()) + .eq("recharge_payment_status",2); + switch (tSettlementConfirm.getType()){ + case 1: + eq.between("start_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime()); + break; + case 2: + eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime()); + break; + } + List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq); + Map<String,TChargingOrder> map = new HashMap<>(); + StringBuilder stringBuilder = new StringBuilder(); + for (TChargingOrder tChargingOrder : tChargingOrders) { + stringBuilder.append(tChargingOrder.getCode()).append(","); + } + Long temp = 0L; + if (StringUtils.hasLength(stringBuilder.toString())){ + List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getOrderInfoByCodes(stringBuilder.substring(0,stringBuilder.length()-1)).getData(); + temp+=data6.stream().mapToLong(UploadRealTimeMonitoringData::getCumulative_charging_time).sum(); + } + List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData(); + // 计算充电桩的功率平均值 + BigDecimal bigDecimal = new BigDecimal("0"); + for (TChargingPile datum : data) { + bigDecimal = bigDecimal.add(datum.getRatedPower()); + } + BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(data.size())).setScale(2, RoundingMode.HALF_DOWN); + + tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge())); + // todo 计算利用率 该电站充电桩本月利用率: + //利用率=充电量/(桩数量*功率*时间) + + for (TSettlementConfirm settlementConfirm : list2) { + settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge())); + if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){ + // 电站相同比较收入涨幅跌幅 + BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome()).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")); + tSettlementConfirm.setIncomePercentage(subtract+"%"); + // 比较总利润 收入合计-成本合计 + BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost()); + BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost()); + tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%"); + } + beforeCost = beforeCost.add(settlementConfirm.getCost()); + beforeIncome = beforeIncome.add(settlementConfirm.getIncome()); + + + } + } + TSettlementConfirm tSettlementConfirm = new TSettlementConfirm(); + tSettlementConfirm.setMeteringElectronic(meteringElectronic); + tSettlementConfirm.setChargingElectronic(chargingElectronic); + tSettlementConfirm.setLossElectronic(lossElectronic); + tSettlementConfirm.setIncome(income); + tSettlementConfirm.setVenue(venue); + tSettlementConfirm.setMetering(metering); + tSettlementConfirm.setClean(clean); + tSettlementConfirm.setMaintain(maintain); + tSettlementConfirm.setCost(cost); + tSettlementConfirm.setProfitMoney(profitMoney); + tSettlementConfirm.setNewMoney(newMoney); + tSettlementConfirm.setNewSettlement(newSettlement); + tSettlementConfirm.setSupplyElectronic(supplyElectronic); + tSettlementConfirm.setProportionPartner(proportionPartner); + tSettlementConfirm.setProportionMoney(proportionMoney); + tSettlementConfirm.setTotalElectronic(totalElectronic); + tSettlementConfirm.setTotalService(totalService); + tSettlementConfirm.setServicePartner(servicePartner); + tSettlementConfirm.setServiceMoney(serviceMoney); + tSettlementConfirm.setSharingAmount(sharingAmount); + tSettlementConfirm.setCommissionAmount(commissionAmount); + tSettlementConfirm.setElectrovalence(electrovalence); + tSettlementConfirm.setServiceCharge(serviceCharge); + tSettlementConfirm.setOrderCommission(orderCommission); + tSettlementConfirm.setVipDiscount(vipDiscount); + tSettlementConfirm.setCouponDiscount(couponDiscount); + // 本月 + BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")); + tSettlementConfirm.setIncomePercentage(subtract+"%"); + // 比较总利润 收入合计-成本合计 + BigDecimal subtract1 = income.subtract(cost); + BigDecimal subtract2 = beforeIncome.subtract(beforeCost); + tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%"); + tSettlementConfirm.setIncomePercentage(subtract+"%"); + tSettlementConfirm.setElectronicRefund(0); + // 查询上次汇报数据 进行比对涨幅跌幅 + total.add(tSettlementConfirm); + res.setList1(list1); + res.setList2(total); + return res; + } + + public static void main(String[] args) { +// String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); +// String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); +// System.err.println(format+"至"+format1); +// LocalDateTime parse = LocalDateTime.parse("2024-01-12 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); +// System.err.println(parse.format(DateTimeFormatter.ofPattern("yyyy-dd"))); + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TSettlementConfirmServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TSettlementConfirmServiceImpl.java new file mode 100644 index 0000000..c1f0076 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TSettlementConfirmServiceImpl.java @@ -0,0 +1,34 @@ +package com.ruoyi.order.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.order.api.model.TSettlementConfirm; +import com.ruoyi.order.api.model.TVipOrder; +import com.ruoyi.order.api.query.VipShoppingOrderQuery; +import com.ruoyi.order.dto.SixVipDto; +import com.ruoyi.order.mapper.TSettlementConfirmMapper; +import com.ruoyi.order.mapper.TVipOrderMapper; +import com.ruoyi.order.service.TSettlementConfirmService; +import com.ruoyi.order.service.TVipOrderService; +import com.ruoyi.other.api.domain.TVip; +import com.ruoyi.other.api.feignClient.VipClient; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +/** + * <p> + * 服务实现类 + * </p> + * + * @author xiaochen + * @since 2024-08-07 + */ +@Service +public class TSettlementConfirmServiceImpl extends ServiceImpl<TSettlementConfirmMapper, TSettlementConfirm> implements TSettlementConfirmService { + +} diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml new file mode 100644 index 0000000..00179ec --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.order.mapper.TSettlementConfirmMapper"> + <select id="settlementTotal" resultType="com.ruoyi.order.api.model.TSettlementConfirm"> + select t1.* from + t_settlement_confirm t1 + where 1=1 + <if test="time != null and time!='' "> + AND DATE_FORMAT(t1.start_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m') + </if> + </select> + <select id="settlementList" resultType="com.ruoyi.order.api.model.TSettlementConfirm"> +select t1.* from + t_settlement_confirm t1 +where 1=1 + <if test="req.type != null "> + and t1.type = #{req.type} + </if> + <if test="req.partnerId != null "> + and t1.partnerId = #{req.partnerId} + </if> + <if test="req.type == 1 "> + <if test="req.startTime != null and req.startTime!=''"> + and (t1.start_time between #{req.startTime} and #{req.endTime} + </if> + </if> + <if test="req.siteIds != null and req.siteIds.size() > 0"> + AND t1.site_id IN + <foreach collection="req.siteIds" item="siteId" open="(" separator="," close=")"> + #{siteId} + </foreach> + </if> + <if test="req.type == 2 "> + <if test="req.startTime != null and req.startTime!=''"> + and (t1.end_time between #{req.startTime} and #{req.endTime} + </if> + </if> + </select> +</mapper> -- Gitblit v1.7.1