From ffcaaa7e21b3a33aa2f8321bc198b8586b27dc30 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期日, 04 一月 2026 18:04:46 +0800
Subject: [PATCH] 修改bug
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 242 ++++--
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java | 2
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingSettlementBill.java | 110 +++
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java | 9
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java | 26
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TAccountSettlementStatementMapper.java | 7
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TAccountSettlementStatementServiceImpl.java | 11
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TAccountSettlementStatementMapper.xml | 6
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITAccountSettlementStatementService.java | 7
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java | 6
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 25
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 36
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingSettlementBillService.java | 33
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml | 136 +++
ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java | 5
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java | 2
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml | 2
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java | 745 ++++++++++++++++++--
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java | 20
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TAccountSettlementStatement.java | 80 ++
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java | 381 +++++++---
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingSettlementBillMapper.xml | 82 ++
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java | 2
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingSettlementBillMapper.java | 38 +
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java | 3
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillWapper.java | 53 +
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java | 2
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingSettlementBillServiceImpl.java | 44 +
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java | 10
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java | 2
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java | 9
31 files changed, 1,778 insertions(+), 358 deletions(-)
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java
index 255976e..62a1a48 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java
@@ -46,5 +46,7 @@
private List<Long> carIds;
@ApiModelProperty("站点ids 前端忽略")
private List<Integer> siteIds;
+ @ApiModelProperty("账单周期")
+ private List<String> dateRange;
}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TAccountSettlementStatement.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TAccountSettlementStatement.java
new file mode 100644
index 0000000..412b1ae
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TAccountSettlementStatement.java
@@ -0,0 +1,80 @@
+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 lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 账户结算账单
+ */
+@Data
+@TableName("t_account_settlement_statement")
+public class TAccountSettlementStatement {
+ /**
+ * id
+ */
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+ /**
+ * 站点id,0表示全站
+ */
+ @TableField("site_id")
+ private Integer siteId;
+ /**
+ * 账单周期
+ */
+ @TableField("billing_cycle")
+ private LocalDate billingCycle;
+ /**
+ * 账单状态(1=未出账单,2=已出账单)
+ */
+ @TableField("status")
+ private Integer status;
+ /**
+ * 账单编号
+ */
+ @TableField("code")
+ private String code;
+ /**
+ * 账户类型(1=微信,2=支付宝)
+ */
+ @TableField("account_type")
+ private Integer accountType;
+ /**
+ * 支付结算金额
+ */
+ @TableField("recharge_amount")
+ private BigDecimal rechargeAmount;
+ /**
+ * 退款结算金额
+ */
+ @TableField("refund_amount")
+ private BigDecimal refundAmount;
+ /**
+ * 平台手续费
+ */
+ @TableField("platform_fee")
+ private BigDecimal platformFee;
+ /**
+ * 三方平台分佣
+ */
+ @TableField("tripartite_commission")
+ private BigDecimal tripartiteCommission;
+ /**
+ * 入账金额
+ */
+ @TableField("recorded_amount")
+ private BigDecimal recordedAmount;
+ /**
+ * 账单生成日期
+ */
+ @TableField("create_time")
+ private LocalDateTime createTime;
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingSettlementBill.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingSettlementBill.java
new file mode 100644
index 0000000..8ab91ce
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingSettlementBill.java
@@ -0,0 +1,110 @@
+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 lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 充电结算账单
+ */
+@Data
+@TableName("t_charging_settlement_bill")
+public class TChargingSettlementBill {
+ /**
+ * 主键
+ */
+ @TableId(value = "id", type = IdType.NONE)
+ private Long id;
+ /**
+ * 站点id,0表示全站
+ */
+ @TableField("site_id")
+ private Integer siteId;
+ /**
+ * 站点名称
+ */
+ @TableField(exist = false)
+ private String siteName;
+ /**
+ * 统计日期类型(1=开始时间,2=结束时间)
+ */
+ @TableField("statistical_date_type")
+ private Integer statisticalDateType;
+ /**
+ * 账单周期
+ */
+ @TableField("billing_cycle")
+ private LocalDate billingCycle;
+ /**
+ * 账单状态(1=未出账单,2=已出账单)
+ */
+ @TableField("status")
+ private Integer status;
+ /**
+ * 账单编号
+ */
+ @TableField("code")
+ private String code;
+ /**
+ * 充电时长(秒)
+ */
+ @TableField("charging_duration")
+ private Long chargingDuration;
+ /**
+ * 订单数
+ */
+ @TableField("order_number")
+ private Integer orderNumber;
+ /**
+ * 总金额
+ */
+ @TableField("total_amount")
+ private BigDecimal totalAmount;
+ /**
+ * 优惠券抵扣金额
+ */
+ @TableField("coupon_deduction")
+ private BigDecimal couponDeduction;
+ /**
+ * 平台手续费
+ */
+ @TableField("platform_fee")
+ private BigDecimal platformFee;
+ /**
+ * 三方平台分佣
+ */
+ @TableField("tripartite_commission")
+ private BigDecimal tripartiteCommission;
+ /**
+ * 实收金额
+ */
+ @TableField("funds_received")
+ private BigDecimal fundsReceived;
+ /**
+ * 总电量
+ */
+ @TableField("total_electricity")
+ private BigDecimal totalElectricity;
+ /**
+ * 总电费
+ */
+ @TableField("total_electricity_charge")
+ private BigDecimal totalElectricityCharge;
+ /**
+ * 总服务费
+ */
+ @TableField("total_service_fee")
+ private BigDecimal totalServiceFee;
+ /**
+ * 账单生成日期
+ */
+ @TableField("create_time")
+ private LocalDateTime createTime;
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java
index f732c39..532ee19 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java
@@ -33,6 +33,14 @@
@TableField("id")
private Long id;
+ @ApiModelProperty(value = "支付时间")
+ @TableField("pay_time")
+ private LocalDateTime payTime;
+
+ @ApiModelProperty(value = "支付流水号")
+ @TableField("pay_code")
+ private String payCode;
+
@ApiModelProperty(value = "累计退款金额")
@TableField("pay_amount")
private BigDecimal payAmount;
@@ -40,7 +48,6 @@
@ApiModelProperty(value = "1wx2ali")
@TableField("pay_type")
private Integer payType;
-
@ApiModelProperty(value = "订单id")
@TableField("vip_order_id")
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillWapper.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillWapper.java
new file mode 100644
index 0000000..da4f1f3
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillWapper.java
@@ -0,0 +1,53 @@
+package com.ruoyi.order.api.vo;
+
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.order.api.model.TChargingOrder;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Data
+@ApiModel(value = "ChargingBillVO对象",description = "充电算帐单")
+public class ChargingBillWapper {
+ @ApiModelProperty(value = "充电总度数")
+ private BigDecimal chargingCapacity;
+ @ApiModelProperty(value = "实收金额")
+ private BigDecimal paymentAmount;
+ @ApiModelProperty(value = "订单总金额")
+ private BigDecimal orderAmount;
+ @ApiModelProperty(value = "总退款金额")
+ private BigDecimal refundAmount;
+ @ApiModelProperty(value = "累计电费")
+ private BigDecimal electrovalence;
+ @ApiModelProperty(value = "累计服务费")
+ private BigDecimal serviceCharge;
+ @ApiModelProperty(value = "订单数量")
+ private Integer orderCount;
+ @ApiModelProperty(value = "平台手续费")
+ private BigDecimal commissionAmount;
+ @ApiModelProperty(value = "三方平台分佣")
+ private BigDecimal sharingAmount;
+ @ApiModelProperty(value = "优惠抵扣")
+ private BigDecimal discount;
+ @ApiModelProperty(value = "账单分类 1全站 2各个站点 前端忽略")
+ private String category;
+ @ApiModelProperty(value = "账单类型 月结 前端忽略")
+ private String type;
+ @ApiModelProperty(value = "站点名称 前端忽略")
+ private String siteName;
+ @ApiModelProperty(value = "账单周期 前端忽略")
+ private String billWeek;
+ @ApiModelProperty(value = "账单生成日期 前端忽略")
+ private String createTime;
+ @ApiModelProperty(value = "账单编号 前端忽略")
+ private String code;
+ @ApiModelProperty(value = "充电时长 前端忽略")
+ private String chargingTime;
+ @ApiModelProperty(value = "列表数据")
+ private PageInfo<Map<String, Object>> list;
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
index 108f0ac..72bde3b 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
@@ -11,7 +11,7 @@
* 缓存有效期,默认720(分钟)
*/
public final static long EXPIRATION = 720;
- public final static long EXPIRATION_APPLET = 7 * 24 * 60;
+ public final static long EXPIRATION_APPLET = 365 * 24 * 60;
/**
* 缓存刷新时间,默认120(分钟)
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
index fac99a8..5d7e960 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -80,6 +80,8 @@
@Resource
private ChengDuJianGuanClient chengDuJianGuanClient;
+ @Autowired
+ private TokenService tokenService;
@Autowired
@@ -123,6 +125,8 @@
public AjaxResult<Integer> add(@RequestBody TAccountingStrategyDTO dto) {
if(null != dto.getSiteId()){
dto.setAuditStatus(3);
+ }else{
+ dto.setAuditStatus(1);
}
Boolean flag = accountingStrategyDetailService.isStrategy24Hour(dto.getAccountingStrategyDetails());
if(flag){
@@ -180,6 +184,8 @@
// 删除计费策略明细信息
accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class)
.eq(TAccountingStrategyDetail::getAccountingStrategyId, children.getId()));
+ accountingStrategyService.removeById(children.getId());
+
dto.setAuditStatus(1);
accountingStrategyService.updateById(dto);
// 添加明细
@@ -207,8 +213,10 @@
// 删除计费策略明细信息
accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class)
.eq(TAccountingStrategyDetail::getAccountingStrategyId, dto.getId()));
- dto.setAuditStatus(1);
- accountingStrategyService.updateById(dto);
+ if(null != dto.getSiteId()){
+ dto.setAuditStatus(1);
+ accountingStrategyService.updateById(dto);
+ }
// 添加明细
dto.getAccountingStrategyDetails().forEach(detail -> {
detail.setAccountingStrategyId(dto.getId());
@@ -357,7 +365,6 @@
@ApiOperation(tags = {"后台-申请表单-计费模板审核"},value = "查询计费审核分页列表")
@PostMapping(value = "/auth/pageList")
public AjaxResult<PageInfo<TAccountingStrategyVO>> authPageList(@RequestBody TAccountingStrategyQuery query) {
-
return AjaxResult.ok(accountingStrategyService.pageList1(query));
}
@@ -389,25 +396,24 @@
//如果parentId不为空,则将parentId对应的siteId改为现在的,并且将parenId对应的数据删除
if (byId.getParentId()!=null) {
- TAccountingStrategy one = accountingStrategyService.lambdaQuery().eq(TAccountingStrategy::getId, byId.getParentId()).one();
+ TAccountingStrategy one = accountingStrategyService.getById(byId.getParentId());
byId.setSiteId(one.getSiteId());
//将site表对应的模板id修改为新的这个
List<Site> list = siteService.lambdaQuery().eq(Site::getAccountingStrategyId, one.getId()).list();
- for (Site site : list) {
- site.setAccountingStrategyId(byId.getId());
+ if(!list.isEmpty()){
+ for (Site site : list) {
+ site.setAccountingStrategyId(byId.getId());
+ }
+ siteService.updateBatchById(list);
+ //推送三方平台
+ List<Integer> siteIds = list.stream().filter(s->1 == s.getIsOpenSynchronization()).map(Site::getId).collect(Collectors.toList());
+ if(!siteIds.isEmpty()){
+ tcecClient.notificationStationChange(siteIds);
+ }
}
- siteService.updateBatchById(list);
accountingStrategyService.removeById(one.getId());
-
- //推送三方平台
- List<Integer> siteIds = list.stream().filter(s->1 == s.getIsOpenSynchronization()).map(Site::getId).collect(Collectors.toList());
- if(!siteIds.isEmpty()){
- tcecClient.notificationStationChange(siteIds);
- }
-
}
//硬件
-
List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>()
.eq(TAccountingStrategyDetail::getAccountingStrategyId, byId.getId()).eq(TAccountingStrategyDetail::getDelFlag, 0));
List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, byId.getSiteId()).list();
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java
index efbf492..2d8cf82 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java
@@ -28,6 +28,9 @@
* @return
*/
List<TAccountingStrategyVO> pageList(@Param("query") TAccountingStrategyQuery query, @Param("pageInfo")PageInfo<TAccountingStrategyVO> pageInfo);
+
+
+
List<TAccountingStrategyVO> pageList1(@Param("query") TAccountingStrategyQuery query, @Param("pageInfo")PageInfo<TAccountingStrategyVO> pageInfo);
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java
index f805cd0..2c965cc 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java
@@ -24,6 +24,8 @@
* @return
*/
PageInfo<TAccountingStrategyVO> pageList(TAccountingStrategyQuery query);
+
+
PageInfo<TAccountingStrategyVO> pageList1(TAccountingStrategyQuery query);
/**
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
index 2077b20..71409cd 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
@@ -73,8 +73,6 @@
public PageInfo<TAccountingStrategyVO> pageList1(TAccountingStrategyQuery query) {
PageInfo<TAccountingStrategyVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
List<TAccountingStrategyVO> list = this.baseMapper.pageList1(query,pageInfo);
- List<Integer> parentIds = list.stream().map(TAccountingStrategyVO::getId).collect(Collectors.toList());
-
for (TAccountingStrategyVO tAccountingStrategyVO : list) {
SysUser data = sysUserClient.getSysUser(tAccountingStrategyVO.getUserId()).getData();
tAccountingStrategyVO.setUserName(data.getNickName());
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
index 34cc583..a557970 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
@@ -56,8 +56,6 @@
AND audit_status = #{query.auditStatus}
</if>
AND site_id IS NULL
- AND (parent_id IS NULL OR audit_status = 1 OR audit_status = 2)
-
</where>
ORDER BY create_time DESC
</select>
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
index 6db46cb..4b26ca7 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
@@ -20,10 +20,7 @@
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.order.api.model.*;
import com.ruoyi.order.api.query.TOrderInvoiceQuery;
-import com.ruoyi.order.api.vo.AccountListVO;
-import com.ruoyi.order.api.vo.ChargingBillListVO;
-import com.ruoyi.order.api.vo.ChargingBillVO;
-import com.ruoyi.order.api.vo.TOrderInvoiceVO;
+import com.ruoyi.order.api.vo.*;
import com.ruoyi.order.export.*;
import com.ruoyi.order.service.*;
import com.ruoyi.order.vo.StatisticsOfBatteryVO;
@@ -161,19 +158,28 @@
accountListVO.setOrderList(res.getExportList());
return R.ok(accountListVO);
}
+
+
@RequiresPermissions(value = {"/chargeBill"}, logical = Logical.OR)
@PostMapping(value = "/chargingBillList")
@ApiOperation(value = "充电算帐单列表查询", tags = {"管理后台-充电算账单"})
- public AjaxResult<ChargingBillVO> chargingBillList(@RequestBody ChargingListQuery dto) {
- ChargingBillVO res = chargingBillService.chargingBillList(dto);
+ public AjaxResult<ChargingBillWapper> chargingBillList(@RequestBody ChargingListQuery dto) {
+// ChargingBillVO res = chargingBillService.chargingBillList(dto);
+ ChargingBillWapper res = chargingBillService.chargingBillList2(dto);
return AjaxResult.success(res);
}
+
+
+
@PostMapping(value = "/chargingBillListR")
public R<ChargingBillVO> chargingBillListR(@RequestBody ChargingListQuery dto) {
ChargingBillVO res = chargingBillService.chargingBillList(dto);
return R.ok(res);
}
+
+
+
@GetMapping(value = "/chargingBillListExport")
public R<ChargingBillVO> chargingBillListExport(String uid) {
return R.ok(null);
@@ -186,7 +192,7 @@
public void export(@RequestBody ChargingListQuery dto)
{
- ChargingBillVO res = chargingBillService.chargingBillList(dto);
+ ChargingBillVO res = chargingBillService.chargingBillListExport(dto);
List<ChargingBillListVO> list = res.getList().getRecords();
List<TChargingBillExport> tChargingBillExports = new ArrayList<>();
for (ChargingBillListVO orderInvoiceVO : list) {
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
index 9c4540d..2a03221 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -99,15 +99,15 @@
*/
@ResponseBody
@PostMapping(value = "/shoppingOrderWxRefund")
- public void shoppingOrderWxRefund(@RequestParam("out_trade_no") String out_refund_no,
- @RequestParam("out_trade_no") String refund_id,
- @RequestParam("out_trade_no") String tradeState,
- @RequestParam("out_trade_no") String success_time){
+ public void shoppingOrderWxRefund(@RequestParam("out_refund_no") String out_refund_no,
+ @RequestParam("refund_id") String refund_id,
+ @RequestParam("tradeState") String tradeState,
+ @RequestParam("success_time") String success_time){
if("SUCCESS".equals(tradeState)){
TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, out_refund_no));
one.setRefundSerialNumber(refund_id);
one.setRefundStatus(2);
- one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE")));
+ one.setRefundTime(LocalDateTime.now());
shoppingOrderRefundService.updateById(one);
TShoppingOrder byId = shoppingOrderService.getById(one.getShoppingOrderId());
byId.setStatus(4);
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
index 96b1f7f..15554ef 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
@@ -155,7 +155,7 @@
TVipOrderRefund vipOrderRefund = vipOrderRefundService.getOne(new LambdaUpdateWrapper<TVipOrderRefund>().eq(TVipOrderRefund::getRefundCode, out_refund_no));
vipOrderRefund.setRefundSerialNumber(refund_id);
vipOrderRefund.setRefundStatus(2);
- vipOrderRefund.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE")));
+ vipOrderRefund.setRefundTime(LocalDateTime.now());
vipOrderRefundService.updateById(vipOrderRefund);
TVipOrder vipOrder = vipOrderService.getById(vipOrderRefund.getVipOrderId());
vipOrder.setRefundStatus(2);
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TAccountSettlementStatementMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TAccountSettlementStatementMapper.java
new file mode 100644
index 0000000..f6ab633
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TAccountSettlementStatementMapper.java
@@ -0,0 +1,7 @@
+package com.ruoyi.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.order.api.model.TAccountSettlementStatement;
+
+public interface TAccountSettlementStatementMapper extends BaseMapper<TAccountSettlementStatement> {
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java
index faa0889..e155d8d 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java
@@ -26,10 +26,16 @@
@Param("req") ChargingListQuery dto,
@Param("startTime1")String startTime1,
@Param("startTime2")String startTime2);
+
+
+
List<ChargingBillListVO> chargingBillListNoLimit(
@Param("req") ChargingListQuery dto,
@Param("startTime1")String startTime1,
@Param("startTime2")String startTime2);
+
+
+
List<ChargingBillListVO> chargingBillList1(
@Param("pageInfo") PageInfo<ChargingBillListVO> pageInfo,
@Param("req") ChargingListQuery dto,
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
index 2549d63..f0df172 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -1,6 +1,7 @@
package com.ruoyi.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.dto.ChargingOrderGroup;
import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
import com.ruoyi.common.core.web.page.PageInfo;
@@ -183,4 +184,29 @@
* @return
*/
List<TChargingOrder> findEndChargingOrder();
+
+
+ /**
+ * 获取需要手动修改订单状态的数据
+ * @return
+ */
+ List<TChargingOrder> findUpStatusChargingOrder();
+
+
+ /**
+ * 查询充电算账单数据
+ * @param startTime
+ * @param endTime
+ */
+ List<Map<String, Object>> getChargingSettlementBill(@Param("startTime") String startTime, @Param("endTime") String endTime,
+ @Param("dateType") Integer dateType);
+
+
+ /**
+ * 查询账户结算账单数据
+ * @param startTime
+ * @param endTime
+ */
+ List<Map<String, Object>> getAccountSettlementStatement(@Param("startTime") String startTime, @Param("endTime") String endTime,
+ @Param("rechargePaymentType") Integer rechargePaymentType);
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingSettlementBillMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingSettlementBillMapper.java
new file mode 100644
index 0000000..a6c0d80
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingSettlementBillMapper.java
@@ -0,0 +1,38 @@
+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.TChargingSettlementBill;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface TChargingSettlementBillMapper extends BaseMapper<TChargingSettlementBill> {
+
+
+ /**
+ * 获取列表数据
+ * @param page
+ * @param type 订单分类(1全站 2各个站点)
+ * @param status 状态(1未出账 2已出账)
+ * @param dateRange 账单周期
+ * @return
+ */
+ List<Map<String, Object>> queryList(PageInfo<Map<String, Object>> page, @Param("type") Integer type,
+ @Param("status") Integer status, @Param("dateRange") List<String> dateRange,
+ @Param("statisticalDateType") Integer statisticalDateType, @Param("siteIds") List<Integer> siteIds);
+
+
+ /**
+ * 获取汇总数据
+ * @param type
+ * @param status
+ * @param dateRange
+ * @param statisticalDateType
+ * @return
+ */
+ Map<String, Object> queryListSum(@Param("type") Integer type, @Param("status") Integer status,
+ @Param("dateRange") List<String> dateRange, @Param("statisticalDateType") Integer statisticalDateType,
+ @Param("siteIds") List<Integer> siteIds);
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITAccountSettlementStatementService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITAccountSettlementStatementService.java
new file mode 100644
index 0000000..c6e8a17
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITAccountSettlementStatementService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.order.api.model.TAccountSettlementStatement;
+
+public interface ITAccountSettlementStatementService extends IService<TAccountSettlementStatement> {
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingSettlementBillService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingSettlementBillService.java
new file mode 100644
index 0000000..0a1f973
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingSettlementBillService.java
@@ -0,0 +1,33 @@
+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.TChargingSettlementBill;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ITChargingSettlementBillService extends IService<TChargingSettlementBill> {
+
+
+ /**
+ * 获取列表数据
+ * @param page
+ * @param type
+ * @param status
+ * @param dateRange
+ * @return
+ */
+ List<Map<String, Object>> queryList(PageInfo<Map<String, Object>> page, Integer type, Integer status, List<String> dateRange, Integer statisticalDateType, List<Integer> siteIds);
+
+
+ /**
+ * 获取汇总数据
+ * @param type
+ * @param status
+ * @param dateRange
+ * @param statisticalDateType
+ * @return
+ */
+ Map<String, Object> queryListSum(Integer type, Integer status, List<String> dateRange, Integer statisticalDateType, List<Integer> siteIds);
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java
index 4e4388b..c8ec84f 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java
@@ -4,6 +4,7 @@
import com.ruoyi.order.api.model.TChargingBill;
import com.ruoyi.order.api.vo.ChargingBillVO;
import com.ruoyi.order.api.model.ChargingListQuery;
+import com.ruoyi.order.api.vo.ChargingBillWapper;
/**
* <p>
@@ -16,6 +17,14 @@
public interface TChargingBillService extends IService<TChargingBill> {
ChargingBillVO chargingBillList(ChargingListQuery dto);
+
+
+ ChargingBillWapper chargingBillList2(ChargingListQuery dto);
+
+
ChargingBillVO chargingBillList1(ChargingListQuery dto);
+
+ ChargingBillVO chargingBillListExport(ChargingListQuery dto);
+
}
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 ce49663..8476b6c 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
@@ -363,4 +363,29 @@
* @return
*/
List<TChargingOrder> findEndChargingOrder();
+
+ /**
+ * 获取需要手动修改订单状态的数据
+ * @return
+ */
+ List<TChargingOrder> findUpStatusChargingOrder();
+
+
+
+ /**
+ * 查询充电算账单数据
+ * @param startTime
+ * @param endTime
+ * @param dateType
+ */
+ List<Map<String, Object>> getChargingSettlementBill(String startTime, String endTime, Integer dateType);
+
+
+ /**
+ * 查询账户结算账单数据
+ * @param startTime
+ * @param endTime
+ * @return
+ */
+ List<Map<String, Object>> getAccountSettlementStatement(String startTime, String endTime, Integer rechargePaymentType);
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TAccountSettlementStatementServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TAccountSettlementStatementServiceImpl.java
new file mode 100644
index 0000000..6c71f13
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TAccountSettlementStatementServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.order.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.order.api.model.TAccountSettlementStatement;
+import com.ruoyi.order.mapper.TAccountSettlementStatementMapper;
+import com.ruoyi.order.service.ITAccountSettlementStatementService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TAccountSettlementStatementServiceImpl extends ServiceImpl<TAccountSettlementStatementMapper, TAccountSettlementStatement> implements ITAccountSettlementStatementService {
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
index 529c1fb..e5b8809 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -1,7 +1,6 @@
package com.ruoyi.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserCarClient;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppUser;
@@ -14,40 +13,31 @@
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
-import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.security.service.TokenService;
-import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
-import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.order.api.model.*;
import com.ruoyi.order.api.vo.ChargingBillListVO;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.vo.ChargingBillVO;
+import com.ruoyi.order.api.vo.ChargingBillWapper;
import com.ruoyi.order.mapper.TChargingBillMapper;
import com.ruoyi.order.mapper.TChargingOrderMapper;
-import com.ruoyi.order.service.TChargingBillService;
-import com.ruoyi.order.service.TChargingOrderAccountingStrategyService;
-import com.ruoyi.order.service.TChargingOrderRefundService;
+import com.ruoyi.order.service.*;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
-import com.ruoyi.system.api.model.SysUserRoleVo;
-import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
-import org.omg.CORBA.PRIVATE_MEMBER;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
import java.time.LocalDateTime;
-import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -82,6 +72,12 @@
private TokenService tokenService;
@Resource
private PartnerClient partnerClient;
+ @Resource
+ private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
+ @Resource
+ private TChargingOrderService chargingOrderService;
+ @Resource
+ private ITChargingSettlementBillService chargingSettlementBillService;
@Override
@@ -524,8 +520,6 @@
chargingBillVO.setList(pageInfo);
return chargingBillVO;
}
- @Resource
- private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
@Override
public ChargingBillVO chargingBillList(ChargingListQuery dto) {
@@ -560,34 +554,34 @@
Integer roleType = sysUser.getRoleType();
//如果没传siteId,获取当前登陆人所有的siteIds
List<Integer> siteIds = new ArrayList<>();
- //如果没传siteId,获取当前登陆人所有的siteIds
- if (dto.getSiteId()==null){
- if (userId != null){
- List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
- for (GetSiteListDTO datum : data) {
- siteIds.add(datum.getId());
- }
+ //如果没传siteId,获取当前登陆人所有的siteIds
+ if (dto.getSiteId()==null){
+ if (userId != null){
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
}
- }else {
- siteIds.add(dto.getSiteId());
}
- if (siteIds.isEmpty()){
- siteIds.add(-1);
- }else{
- if (roleType == 2){
- List<Integer> integers = new ArrayList<>();
- for (Integer siteId : siteIds) {
- // 校验有没有这个站点的权限
- List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
+ }else {
+ siteIds.add(dto.getSiteId());
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }else{
+ if (roleType == 2){
+ List<Integer> integers = new ArrayList<>();
+ for (Integer siteId : siteIds) {
+ // 校验有没有这个站点的权限
+ List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
- Boolean b = t1.get(1);
- if (b){
- integers.add(siteId);
- }
+ Boolean b = t1.get(1);
+ if (b){
+ integers.add(siteId);
}
- siteIds = integers;
}
+ siteIds = integers;
}
+ }
if (roleType==1){
siteIds.add(0);
@@ -595,7 +589,7 @@
if (siteIds.isEmpty()){
siteIds.add(-1);
}
- dto.setSiteIds(siteIds);
+ dto.setSiteIds(siteIds);
List<ChargingBillListVO> list = this.baseMapper.chargingBillList(pageInfo,dto,startTime1,startTime2);
List<ChargingBillListVO> list1 = this.baseMapper.chargingBillListNoLimit(dto,startTime1,startTime2);
BigDecimal paymentAmountTotal = new BigDecimal("0");
@@ -761,21 +755,21 @@
chargingSecond+=between;
// 将其转化为xx小时xx分钟xx秒显示 如果是0小时则不展示小时 如果是0分钟则不展示分钟
- // 计算小时、分钟和秒
- long hours = between / 60 / 60;
- long minutes = (between % 3600) / 60;
- long seconds = between % 60; // 如果没有秒数,则默认是0
- StringBuilder result = new StringBuilder();
- if (hours > 0) {
- result.append(hours).append("小时");
- }
- if (minutes > 0) {
- result.append(minutes).append("分钟");
- }
- if (seconds > 0 || result.length() == 0) { // 如果秒数大于0,或者小时和分钟都为0,则显示秒数
- result.append(seconds).append("秒");
- }
- tChargingOrder.setChargingTime(result.toString());
+ // 计算小时、分钟和秒
+ long hours = between / 60 / 60;
+ long minutes = (between % 3600) / 60;
+ long seconds = between % 60; // 如果没有秒数,则默认是0
+ StringBuilder result = new StringBuilder();
+ if (hours > 0) {
+ result.append(hours).append("小时");
+ }
+ if (minutes > 0) {
+ result.append(minutes).append("分钟");
+ }
+ if (seconds > 0 || result.length() == 0) { // 如果秒数大于0,或者小时和分钟都为0,则显示秒数
+ result.append(seconds).append("秒");
+ }
+ tChargingOrder.setChargingTime(result.toString());
}
@@ -806,7 +800,7 @@
}
// 总金额
if (tChargingOrder.getRechargeAmount()!=null){
- orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
+ orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
}
// 累加累计电费
electrovalence = electrovalence.add(electronic_reduce);
@@ -815,17 +809,17 @@
}
// 累加累计服务费
- if (tChargingOrder.getOrderSource().equals(2)) {
- serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
- // 累加平台分佣
- sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
- // 累加实收
- paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN));
- BigDecimal add = electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")));
- tChargingOrder.setTotalAmount(add.toString());
- }else {
- serviceCharge = serviceCharge.add(service_reduce);
- }
+ if (tChargingOrder.getOrderSource().equals(2)) {
+ serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+ // 累加平台分佣
+ sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
+ // 累加实收
+ paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN));
+ BigDecimal add = electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")));
+ tChargingOrder.setTotalAmount(add.toString());
+ }else {
+ serviceCharge = serviceCharge.add(service_reduce);
+ }
// 累加平台手续费
if (tChargingOrder.getRechargeAmount()!=null){
@@ -941,28 +935,28 @@
refundAmountTotal = refundAmountTotal.add(tChargingOrder.getRefundAmount());
}
// 累加累计服务费
- if (tChargingOrder.getOrderSource().equals(2)) {
- serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
- serviceChargeTotal = serviceChargeTotal.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
- // 累加平台分佣
- sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
- sharingAmountTotal = sharingAmountTotal.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
- // 累加实收
- paymentAmount = paymentAmount.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
- paymentAmountTotal = paymentAmountTotal.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
- }else{
- serviceCharge = serviceCharge.add(service_reduce);
- serviceChargeTotal = serviceChargeTotal.add(service_reduce);
- }
- // 累加平台手续费
+ if (tChargingOrder.getOrderSource().equals(2)) {
+ serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+ serviceChargeTotal = serviceChargeTotal.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+ // 累加平台分佣
+ sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
+ sharingAmountTotal = sharingAmountTotal.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
+ // 累加实收
+ paymentAmount = paymentAmount.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
+ paymentAmountTotal = paymentAmountTotal.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
+ }else{
+ serviceCharge = serviceCharge.add(service_reduce);
+ serviceChargeTotal = serviceChargeTotal.add(service_reduce);
+ }
+ // 累加平台手续费
if (tChargingOrder.getOrderAmount()!=null){
commissionAmount = commissionAmount.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
}
// 累加充电度数
- chargingCapacity = chargingCapacity.add(charging_capacity);
- chargingCapacityTotal = chargingCapacityTotal.add(charging_capacity);
+ chargingCapacity = chargingCapacity.add(charging_capacity);
+ chargingCapacityTotal = chargingCapacityTotal.add(charging_capacity);
// 累加优惠金额
if (tChargingOrder.getCouponDiscountAmount()!=null){
discountTotal = discountTotal.add(tChargingOrder.getCouponDiscountAmount());
@@ -986,9 +980,584 @@
return chargingBillVO;
}
- public static void main(String[] args) {
- LocalDateTime localDate = LocalDateTime.now().withMonth(1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
+ @Override
+ public ChargingBillWapper chargingBillList2(ChargingListQuery dto) {
+ if (dto.getState()!=null){
+ if (dto.getState()==1){
+ dto.setState(2);
+ }else {
+ dto.setState(1);
+ }
+ }
+ Integer statisticalDateType = 1;
+ if (StringUtils.hasLength(dto.getEndTime())){
+ statisticalDateType = 2;
+ }
+ Long userId = tokenService.getLoginUser().getUserid();
+ // 查询当前登陆人按钮权限
+ SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+ Integer roleType = sysUser.getRoleType();
+ //如果没传siteId,获取当前登陆人所有的siteIds
+ List<Integer> siteIds = new ArrayList<>();
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }else{
+ if (roleType == 2){
+ List<Integer> integers = new ArrayList<>();
+ for (Integer siteId : siteIds) {
+ // 校验有没有这个站点的权限
+ List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
+ Boolean b = t1.get(1);
+ if (b){
+ integers.add(siteId);
+ }
+ }
+ siteIds = integers;
+ }
+ }
+
+ if (roleType==1){
+ siteIds.add(0);
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }
+ dto.setSiteIds(siteIds);
+
+ PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
+ List<Map<String, Object>> list = chargingSettlementBillService.queryList(pageInfo, dto.getType(), dto.getState(), dto.getDateRange(), statisticalDateType, dto.getSiteIds());
+ ChargingBillWapper chargingBillVO = new ChargingBillWapper();
+ List<Map<String, Object>> pageList = new ArrayList<>();
+ if(null != list){
+ for (Map<String, Object> map : list) {
+ Integer site_id = Integer.valueOf(map.get("site_id").toString());
+ String code = map.get("code").toString();
+ String billingCycle = map.get("billingCycle").toString();
+ String createTime = map.get("createTime").toString();
+ String siteName = 1 == dto.getType() ? "全站" : map.get("siteName").toString();
+ Long charging_duration = Long.valueOf(map.get("charging_duration").toString());
+ Integer order_number = Integer.valueOf(map.get("order_number").toString());
+ String orderAmount = map.get("total_amount").toString();
+ String commissionAmount = map.get("platform_fee").toString();
+ String sharingAmount = map.get("tripartite_commission").toString();
+ String paymentAmount = map.get("funds_received").toString();
+ String chargingCapacity = map.get("total_electricity").toString();
+ String electrovalence = map.get("total_electricity_charge").toString();
+ String serviceCharge = map.get("total_service_fee").toString();
+ Map<String, Object> data1 = new HashMap<>();
+ data1.put("code", code);
+ data1.put("orderState", 2);
+ data1.put("type", dto.getType());
+ data1.put("billWeek", billingCycle);
+ data1.put("billTime", createTime);
+ data1.put("chargingSecond", charging_duration);
+ data1.put("orderCount", order_number);
+ data1.put("siteName", siteName);
+ data1.put("orderAmount", orderAmount);
+ data1.put("commissionAmount", commissionAmount);
+ data1.put("sharingAmount", sharingAmount);
+ data1.put("paymentAmount", paymentAmount);
+ data1.put("chargingCapacity", chargingCapacity);
+ data1.put("electrovalence", electrovalence);
+ data1.put("serviceCharge", serviceCharge);
+ data1.put("authDownLoad", true);
+ if (roleType == 2 && 0 != site_id){
+ // 校验有没有这个站点的权限
+ List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),site_id).getData();
+ data1.put("authDownLoad", t1.get(0));
+ }
+ pageList.add(data1);
+ }
+ }
+
+ Map<String,Object> map = chargingSettlementBillService.queryListSum(dto.getType(), dto.getState(), dto.getDateRange(), statisticalDateType, dto.getSiteIds());
+ BigDecimal chargingCapacity = (null == map || null == map.get("totalElectricity")) ? BigDecimal.ZERO : new BigDecimal(map.get("totalElectricity").toString());
+ BigDecimal paymentAmount = (null == map || null == map.get("fundsReceived")) ? BigDecimal.ZERO : new BigDecimal(map.get("fundsReceived").toString());
+ BigDecimal orderAmount = (null == map || null == map.get("totalAmount")) ? BigDecimal.ZERO : new BigDecimal(map.get("totalAmount").toString());
+ BigDecimal electrovalence = (null == map || null == map.get("totalElectricityCharge")) ? BigDecimal.ZERO : new BigDecimal(map.get("totalElectricityCharge").toString());
+ BigDecimal serviceCharge = (null == map || null == map.get("totalServiceFee")) ? BigDecimal.ZERO : new BigDecimal(map.get("totalServiceFee").toString());
+ Integer orderCount = (null == map || null == map.get("orderNumber")) ? 0 : Integer.valueOf(map.get("orderNumber").toString());
+ BigDecimal commissionAmount = (null == map || null == map.get("platformFee")) ? BigDecimal.ZERO : new BigDecimal(map.get("platformFee").toString());
+ BigDecimal sharingAmount = (null == map || null == map.get("tripartiteCommission")) ? BigDecimal.ZERO : new BigDecimal(map.get("tripartiteCommission").toString());
+ BigDecimal discount = (null == map || null == map.get("couponDeduction")) ? BigDecimal.ZERO : new BigDecimal(map.get("couponDeduction").toString());
+ chargingBillVO.setChargingCapacity(chargingCapacity);
+ chargingBillVO.setPaymentAmount(paymentAmount.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setOrderAmount(orderAmount.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setElectrovalence(electrovalence.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setServiceCharge(serviceCharge.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setOrderCount(orderCount);
+ chargingBillVO.setCommissionAmount(commissionAmount.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setSharingAmount(sharingAmount.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setDiscount(discount.setScale(2, BigDecimal.ROUND_DOWN));
+ pageInfo.setRecords(pageList);
+ chargingBillVO.setList(pageInfo);
+ return chargingBillVO;
}
+ @Override
+ public ChargingBillVO chargingBillListExport(ChargingListQuery dto) {
+ if (dto.getState()!=null){
+ if (dto.getState()==1){
+ dto.setState(2);
+ }else {
+ dto.setState(1);
+ }
+ }
+ ChargingBillVO chargingBillVO = new ChargingBillVO();
+ String startTime1 = null;
+ String startTime2 = null;
+ if (StringUtils.hasLength(dto.getStartTime())){
+ String[] split = dto.getStartTime().split(" - ");
+ startTime1 = split[0];
+ startTime2 = split[1];
+ }
+ List<TChargingOrder> total = chargingOrderList.selectList(new LambdaQueryWrapper<>(TChargingOrder.class)
+ .isNotNull(TChargingOrder::getPayTime));
+ PageInfo<ChargingBillListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
+ List<Site> data6 = siteClient.getSiteAll().getData();
+ List<TChargingGun> gunList = chargingGunClient.getAllGun().getData();
+ List<TChargingPile> pileList = chargingGunClient.getAllPile().getData();
+ List<TAppUser> userList = appUserClient.getAllUser().getData();
+ List<TAppUserCar> carList = appUserCarClient.getAllCar().getData();
+ List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
+
+ Long userId = tokenService.getLoginUser().getUserid();
+ // 查询当前登陆人按钮权限
+ SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+ Integer roleType = sysUser.getRoleType();
+ //如果没传siteId,获取当前登陆人所有的siteIds
+ List<Integer> siteIds = new ArrayList<>();
+ //如果没传siteId,获取当前登陆人所有的siteIds
+ if (dto.getSiteId()==null){
+ if (userId != null){
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ for (GetSiteListDTO datum : data) {
+ siteIds.add(datum.getId());
+ }
+ }
+ }else {
+ siteIds.add(dto.getSiteId());
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }else{
+ if (roleType == 2){
+ List<Integer> integers = new ArrayList<>();
+ for (Integer siteId : siteIds) {
+ // 校验有没有这个站点的权限
+ List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
+
+ Boolean b = t1.get(1);
+ if (b){
+ integers.add(siteId);
+ }
+ }
+ siteIds = integers;
+ }
+ }
+
+ if (roleType==1){
+ siteIds.add(0);
+ }
+ if (siteIds.isEmpty()){
+ siteIds.add(-1);
+ }
+ dto.setSiteIds(siteIds);
+ List<ChargingBillListVO> list = this.baseMapper.chargingBillList(pageInfo,dto,startTime1,startTime2);
+ List<ChargingBillListVO> list1 = this.baseMapper.chargingBillListNoLimit(dto,startTime1,startTime2);
+ BigDecimal paymentAmountTotal = new BigDecimal("0");
+ BigDecimal orderAmountTotal = new BigDecimal("0");
+ BigDecimal electrovalenceTotal = new BigDecimal("0");
+ BigDecimal serviceChargeTotal = new BigDecimal("0");
+ BigDecimal commissionAmountTotal = new BigDecimal("0");
+ BigDecimal sharingAmountTotal = new BigDecimal("0");
+ BigDecimal chargingCapacityTotal = new BigDecimal("0");
+ BigDecimal discountTotal = new BigDecimal("0");
+ BigDecimal refundAmountTotal = new BigDecimal("0");
+ int orderCount = 0;
+
+
+ List<ChargingBillListVO> chargingBillListVOS = new ArrayList<>();
+ for (ChargingBillListVO chargingBillListVO : list) {
+ if (roleType==2 && chargingBillListVO.getSiteId()!=0){
+ chargingBillListVOS.add(chargingBillListVO);
+ }
+ if (roleType ==1 && (siteIds.contains(chargingBillListVO.getSiteId())|| chargingBillListVO.getSiteId()==0)){
+ chargingBillListVOS.add(chargingBillListVO);
+ }
+ }
+ for (ChargingBillListVO chargingBillListVO : chargingBillListVOS) {
+ if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
+ continue;
+ }
+ if (roleType == 2){
+ // 校验有没有这个站点的权限
+ List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),chargingBillListVO.getSiteId()).getData();
+ chargingBillListVO.setAuthDownLoad(t1.get(0));
+ if (chargingBillListVO.getSiteId()==0){
+ continue;
+ }
+ }
+ String temp = "";
+ String temp1 = "";
+ switch (chargingBillListVO.getType()){
+ case 1:
+ temp = "全站账单";
+ temp1 = "全站";
+ break;
+ case 2:
+ temp = "各个站点账单";
+ Site site = data6.stream().filter(e -> e.getId().equals(chargingBillListVO.getSiteId())).findFirst().orElse(null);
+ if(site!=null){
+ temp1 = site.getName();
+ }
+ break;
+ }
+ chargingBillVO.setCategory(temp);
+ chargingBillVO.setSiteName(temp1);
+
+ chargingBillVO.setType("月账单");
+ chargingBillVO.setCode(chargingBillListVO.getCode());
+
+ LocalDateTime billTime = chargingBillListVO.getBillTime();
+ // 将其转化为yyyy-MM格式字符串
+ chargingBillVO.setCreateTime(billTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ // 将billTime减去一个月 转化为yyyy-MM格式字符串
+ chargingBillVO.setBillWeek(billTime.minusMonths(1).format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
+
+ chargingBillListVO.setUid(chargingBillListVO.getId().toString());
+ // 根据账单的出账时间 查询上个月的充电订单
+ LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
+ // 账单周期
+ chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
+ // 获取 LocalDate 对象
+// // 获取该月份的第一天
+ // 获取该月份的最后一天
+ LocalDateTime lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
+ LocalDateTime firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
+ List<TChargingOrder> tChargingOrders = new ArrayList<>();
+ if (chargingBillListVO.getType() == 2){
+ tChargingOrders = total.stream().filter(e -> e.getSiteId().equals(chargingBillListVO.getSiteId()) && e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
+ && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
+ }else{
+ tChargingOrders = total.stream().filter(e -> e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
+ && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
+ }
+ int chargingSecond = 0;
+ BigDecimal paymentAmount = new BigDecimal("0");
+ BigDecimal orderAmount = new BigDecimal("0");
+ BigDecimal electrovalence = new BigDecimal("0");
+ BigDecimal serviceCharge = new BigDecimal("0");
+ BigDecimal commissionAmount = new BigDecimal("0");
+ BigDecimal sharingAmount = new BigDecimal("0");
+ BigDecimal chargingCapacity = new BigDecimal("0");
+ BigDecimal refundAmount = new BigDecimal("0");
+ chargingBillVO.setCategory("");
+ chargingBillListVO.setOrderCount(tChargingOrders.size());
+ chargingBillVO.setExportList(tChargingOrders);
+ int t = 1;
+ for (TChargingOrder tChargingOrder : tChargingOrders) {
+ tChargingOrder.setXuhao(t);
+ t++;
+ if (tChargingOrder.getRechargePaymentType()!=null && tChargingOrder.getRechargePaymentType()==1){
+ chargingBillListVO.setPayTypeName("微信商户");
+ }
+ if (tChargingOrder.getRechargePaymentType()!=null && tChargingOrder.getRechargePaymentType()==2){
+ if (StringUtils.hasLength(chargingBillListVO.getPayTypeName())){
+ chargingBillListVO.setPayTypeName("微信商户+支付宝商户");
+ }else{
+ chargingBillListVO.setPayTypeName("支付宝商户");
+ }
+ }
+ chargingBillVO.setSiteName(data6.stream().filter(e->e.getId().equals(chargingBillListVO.getSiteId())).findFirst().orElse(new Site()).getName());
+ TChargingGun data2 = gunList.stream().filter(e -> e.getId().equals(tChargingOrder.getChargingGunId())).findFirst().orElse(null);
+ TChargingPile data1 = pileList.stream().filter(e -> e.getId().equals(tChargingOrder.getChargingPileId())).findFirst().orElse(null);
+ if (data1!=null && data2!=null){
+ tChargingOrder.setTerminalName(data1.getName()+data2.getName());
+ tChargingOrder.setTerminalCode(data2.getCode());
+ }
+ tChargingOrder.setOrderClassification1("线上订单");
+ tChargingOrder.setRechargePaymentType1("预付");
+ tChargingOrder.setChargingType("充电桩接口充电服务");
+ if (tChargingOrder.getStatus()!=null){
+ switch (tChargingOrder.getStatus()){
+ case 1:
+ tChargingOrder.setStatus1("等待中");
+ break;
+ case 2:
+ tChargingOrder.setStatus1("启动中");
+ break;
+ case 3:
+ tChargingOrder.setStatus1("充电中");
+ break;
+ case 4:
+ tChargingOrder.setStatus1("停止中");
+ break;
+ case 5:
+ tChargingOrder.setStatus1("已结束");
+ break;
+ case 0:
+ tChargingOrder.setStatus1("未知");
+ break;
+ }
+ }
+
+ if (tChargingOrder.getEndMode()!=null){
+ switch (tChargingOrder.getEndMode()){
+ case 1:
+ tChargingOrder.setEndMode1("主动终止");
+ break;
+ case 2:
+ tChargingOrder.setEndMode1("满电终止");
+ break;
+ case 3:
+ tChargingOrder.setEndMode1("费用不足终止");
+ break;
+ case 0:
+ tChargingOrder.setEndMode1("异常终止");
+ break;
+ }
+ }
+
+ tChargingOrder.setDiscount(tChargingOrder.getCouponDiscountAmount()!=null?tChargingOrder.getCouponDiscountAmount().toString():"0");
+ if (tChargingOrder.getStartTime()!=null && tChargingOrder.getEndTime()!=null){
+ LocalDateTime startTime = tChargingOrder.getStartTime();
+ LocalDateTime endTime = tChargingOrder.getEndTime();
+ // 计算时间差 单位秒
+ long between = ChronoUnit.SECONDS.between(startTime, endTime);
+ chargingSecond+=between;
+ // 将其转化为xx小时xx分钟xx秒显示 如果是0小时则不展示小时 如果是0分钟则不展示分钟
+
+ // 计算小时、分钟和秒
+ long hours = between / 60 / 60;
+ long minutes = (between % 3600) / 60;
+ long seconds = between % 60; // 如果没有秒数,则默认是0
+ StringBuilder result = new StringBuilder();
+ if (hours > 0) {
+ result.append(hours).append("小时");
+ }
+ if (minutes > 0) {
+ result.append(minutes).append("分钟");
+ }
+ if (seconds > 0 || result.length() == 0) { // 如果秒数大于0,或者小时和分钟都为0,则显示秒数
+ result.append(seconds).append("秒");
+ }
+ tChargingOrder.setChargingTime(result.toString());
+
+ }
+
+ TAppUser data3 = userList.stream().filter(e -> e.getId().equals(tChargingOrder.getAppUserId())).findFirst().orElse(null);
+ if (tChargingOrder.getAppUserCarId()!=null){
+ TAppUserCar tAppUserCar = carList.stream().filter(e -> e.getId().equals(tChargingOrder.getAppUserCarId())).findFirst().orElse(null);
+ if (tAppUserCar!=null){
+ tChargingOrder.setLicensePlate(tAppUserCar.getLicensePlate());
+ tChargingOrder.setVehicleModel(tAppUserCar.getVehicleModel());
+ }
+ }else{
+ tChargingOrder.setLicensePlate(tChargingOrder.getPlateNum());
+ }
+ if (data3!=null){
+ tChargingOrder.setUserName(data3.getName());
+ tChargingOrder.setPhone(data3.getPhone());
+ }
+ List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.getId())).collect(Collectors.toList());
+ BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal charging_capacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ if ( !tChargingOrder.getOrderSource().equals(2)){
+ // 实收
+ paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce);
+ BigDecimal add = electronic_reduce.add(service_reduce);
+ tChargingOrder.setTotalAmount(add.toString());
+ }
+ // 总金额
+ if (tChargingOrder.getRechargeAmount()!=null){
+ orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
+ }
+ // 累加累计电费
+ electrovalence = electrovalence.add(electronic_reduce);
+ if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getRefundStatus() !=null && tChargingOrder.getRefundStatus() == 2){
+ refundAmount = refundAmount.add(tChargingOrder.getRefundAmount());
+ }
+ // 累加累计服务费
+
+ if (tChargingOrder.getOrderSource().equals(2)) {
+ serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+ // 累加平台分佣
+ sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
+ // 累加实收
+ paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN));
+ BigDecimal add = electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")));
+ tChargingOrder.setTotalAmount(add.toString());
+ }else {
+ serviceCharge = serviceCharge.add(service_reduce);
+ }
+
+ // 累加平台手续费
+ if (tChargingOrder.getRechargeAmount()!=null){
+ commissionAmount = commissionAmount.add(tChargingOrder.getRechargeAmount().multiply(BigDecimal.valueOf(0.006)).setScale(2,BigDecimal.ROUND_DOWN));
+ }
+ // 累加充电度数
+ chargingCapacity = chargingCapacity.add(charging_capacity);
+ }
+ // 将chargingSecond 这是以秒为单位存放的总秒数 将其转化为xx小时xx分钟xx秒
+ int hours = chargingSecond / 3600;
+ int minutes = (chargingSecond % 3600) / 60;
+ int seconds = chargingSecond % 60;
+ // 格式化为字符串
+ String timeString = String.format("%d小时%d分钟%d秒", hours, minutes, seconds);
+ chargingBillVO.setChargingTime(timeString);
+ chargingBillListVO.setOrderAmount(paymentAmount);
+
+ chargingBillListVO.setPaymentAmount(paymentAmount.subtract(sharingAmount).setScale(2,BigDecimal.ROUND_DOWN));
+ chargingBillListVO.setElectrovalence(electrovalence);
+ chargingBillListVO.setServiceCharge(serviceCharge.setScale(2,BigDecimal.ROUND_DOWN));
+ chargingBillListVO.setCommissionAmount(commissionAmount.setScale(2,BigDecimal.ROUND_DOWN));
+ chargingBillListVO.setSharingAmount(sharingAmount.setScale(2,BigDecimal.ROUND_DOWN));
+ chargingBillListVO.setChargingCapacity(chargingCapacity);
+ switch (chargingBillListVO.getType()){
+ case 1:
+ chargingBillListVO.setSiteName("全站");
+ break;
+ case 2:
+ Site site = data6.stream().filter(e -> e.getId().equals(chargingBillListVO.getSiteId())).findFirst().orElse(null);
+ if (site!=null){
+ chargingBillListVO.setSiteName(site.getName());
+ }
+ break;
+ }
+ // 订单数
+ chargingBillListVO.setOrderCount(tChargingOrders.size());
+ // 充电时间秒
+ chargingBillListVO.setChargingSecond(chargingSecond);
+ }
+ for (ChargingBillListVO chargingBillListVO : list1) {
+ if (dto.getType() == 1){
+ if (chargingBillListVO.getSiteId()!=0){
+ continue;
+ }
+ }else{
+ if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
+ continue;
+ }
+ if (chargingBillListVO.getType()==1){
+ continue;
+ }
+ }
+ if (roleType == 2){
+ if (chargingBillListVO.getSiteId()==0){
+ continue;
+ }
+ }
+ LocalDateTime billTime = chargingBillListVO.getBillTime();
+ // 将其转化为yyyy-MM格式字符串
+ chargingBillVO.setCreateTime(billTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ // 将billTime减去一个月 转化为yyyy-MM格式字符串
+ chargingBillVO.setBillWeek(billTime.minusMonths(1).format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
+
+ chargingBillListVO.setUid(chargingBillListVO.getId().toString());
+ // 根据账单的出账时间 查询上个月的充电订单
+ LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
+ // 账单周期
+ chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
+ // 获取 LocalDate 对象
+// // 获取该月份的第一天
+ // 获取该月份的最后一天
+ LocalDateTime lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
+ LocalDateTime firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
+
+ List<TChargingOrder> tChargingOrders = new ArrayList<>();
+ if (chargingBillListVO.getType() == 2){
+ tChargingOrders = total.stream().filter(e -> e.getSiteId().equals(chargingBillListVO.getSiteId()) && e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
+ && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
+ }else{
+ tChargingOrders = total.stream().filter(e -> e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
+ && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
+ }
+ orderCount+=tChargingOrders.size();
+ BigDecimal paymentAmount = new BigDecimal("0");
+ BigDecimal orderAmount = new BigDecimal("0");
+ BigDecimal electrovalence = new BigDecimal("0");
+ BigDecimal serviceCharge = new BigDecimal("0");
+ BigDecimal commissionAmount = new BigDecimal("0");
+ BigDecimal sharingAmount = new BigDecimal("0");
+ BigDecimal chargingCapacity = new BigDecimal("0");
+ chargingBillListVO.setOrderCount(tChargingOrders.size());
+ for (TChargingOrder tChargingOrder : tChargingOrders) {
+ List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.getId())).collect(Collectors.toList());
+ BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal charging_capacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 累加实收金额
+ if (!tChargingOrder.getOrderSource().equals(2)){
+ paymentAmount = paymentAmount.add(electronic_reduce.add(service_reduce));
+ paymentAmountTotal = paymentAmountTotal.add(electronic_reduce.add(service_reduce));
+ }
+ // 累加订单金额
+ if (tChargingOrder.getRechargeAmount()!=null){
+ orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
+ orderAmountTotal = orderAmountTotal.add(tChargingOrder.getRechargeAmount());
+ }
+ // 累加累计电费
+ if (tChargingOrder.getElectrovalence()!=null){
+ electrovalence = electrovalence.add(electronic_reduce);
+ electrovalenceTotal = electrovalenceTotal.add(electronic_reduce);
+ }
+ if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getRefundStatus() !=null && tChargingOrder.getRefundStatus() == 2){
+ refundAmountTotal = refundAmountTotal.add(tChargingOrder.getRefundAmount());
+ }
+ // 累加累计服务费
+ if (tChargingOrder.getOrderSource().equals(2)) {
+ serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+ serviceChargeTotal = serviceChargeTotal.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+ // 累加平台分佣
+ sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
+ sharingAmountTotal = sharingAmountTotal.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
+ // 累加实收
+ paymentAmount = paymentAmount.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
+ paymentAmountTotal = paymentAmountTotal.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
+ }else{
+ serviceCharge = serviceCharge.add(service_reduce);
+ serviceChargeTotal = serviceChargeTotal.add(service_reduce);
+ }
+ // 累加平台手续费
+ if (tChargingOrder.getOrderAmount()!=null){
+ commissionAmount = commissionAmount.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
+ commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
+ }
+
+ // 累加充电度数
+ chargingCapacity = chargingCapacity.add(charging_capacity);
+ chargingCapacityTotal = chargingCapacityTotal.add(charging_capacity);
+ // 累加优惠金额
+ if (tChargingOrder.getCouponDiscountAmount()!=null){
+ discountTotal = discountTotal.add(tChargingOrder.getCouponDiscountAmount());
+ }
+ if (tChargingOrder.getVipDiscountAmount()!=null){
+ discountTotal = discountTotal.add(tChargingOrder.getVipDiscountAmount());
+ }
+ }
+ }
+ chargingBillVO.setChargingCapacity(chargingCapacityTotal);
+ chargingBillVO.setPaymentAmount(paymentAmountTotal.subtract(commissionAmountTotal).subtract(sharingAmountTotal).setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setOrderAmount(orderAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setElectrovalence(electrovalenceTotal.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setServiceCharge(serviceChargeTotal.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setOrderCount(orderCount);
+ chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
+ chargingBillVO.setDiscount(discountTotal.setScale(2, BigDecimal.ROUND_DOWN));
+ pageInfo.setRecords(chargingBillListVOS);
+ chargingBillVO.setList(pageInfo);
+ return chargingBillVO;
+ }
+
+
+
}
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 dea831a..d72d586 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
@@ -785,15 +785,15 @@
});
-// //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
-// Long id = chargingOrder.getId();
-// //执行5分钟的定时任务检测
-// ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
-// scheduler.scheduleAtFixedRate(()->{
-// if(timingDetection(id)){
-// scheduler.shutdown();
-// }
-// }, 5, 1, TimeUnit.SECONDS);
+ //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
+ Long id = chargingOrder.getId();
+ //执行10分钟的定时任务检测
+ ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+ scheduler.scheduleAtFixedRate(()->{
+ if(timingDetection(id)){
+ scheduler.shutdown();
+ }
+ }, 10, 1, TimeUnit.SECONDS);
return AjaxResult.success();
}
@@ -814,14 +814,14 @@
List<PlatformStartChargingReply> data = platformStartChargingReplyService.getPlatformStartChargingReply(code);
log.info(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
Site site = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData().get(0);
- if (data.size() != 0) {
+ if (!data.isEmpty()) {
PlatformStartChargingReply platformStartChargingReply = data.get(1);
Integer startup_result = platformStartChargingReply.getStartup_result();
Integer failure_cause = platformStartChargingReply.getFailure_cause();
Integer counter = counter_map.get(code);
PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
- //5分钟内还未插枪则取消充电,退回金额。
- if (failure_cause == 5 && (null == counter || counter < 1800)) {
+ //10分钟内还未插枪则取消充电,退回金额。
+ if (failure_cause == 5 && (null == counter || counter < 600)) {
counter = (null == counter ? 0 : counter) + 1;
counter_map.put(code, counter);
//启动失败
@@ -837,27 +837,19 @@
//启动失败
preChargeCheck1.setStartupSuccess(3);
preChargeCheck1.setFailureCause(failure_cause);
+ chargingOrder.setStatus(2);
+ chargingOrder.setEndMode(0);
+ this.updateById(chargingOrder);
//启动失败后取消订单,退款操作
refund(code);
- chargingOrder.setStatus(-1);
- chargingOrder.setEndMode(0);
} else {
//启动成功
preChargeCheck1.setStartupSuccess(2);
chargingOrder.setStatus(3);
chargingOrder.setStartTime(LocalDateTime.now());
+ this.updateById(chargingOrder);
}
- this.updateById(chargingOrder);
- if (chargingOrder.getStatus() == 3) {
- //推送监管平台订单状态
- new Thread(() -> {
- ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
- BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
- chargingMessageClient.pushOrderStatus(chargingOrderVo);
- }).start();
- }
-
redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
//推送三方平台订单状态
if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
@@ -865,6 +857,12 @@
}
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
threadPoolExecutor.execute(()->{
+ if (chargingOrder.getStatus() == 3) {
+ //推送监管平台订单状态
+ ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+ BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
+ chargingMessageClient.pushOrderStatus(chargingOrderVo);
+ }
//推送成都监管
NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
vo.setOrderCode(chargingOrder.getCode());
@@ -873,47 +871,77 @@
});
return true;
} else {
- Integer counter = boot_failed_map.get(code);
- log.info(code + ":-------------------未上传开启充电结果-------------------" + counter);
PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
- //5分钟内未启动成功,退回金额。
- if (null == counter || counter < 1800) {
- counter = (null == counter ? 0 : counter) + 1;
- boot_failed_map.put(code, counter);
- //启动失败
- preChargeCheck1.setStartupSuccess(1);
- preChargeCheck1.setFailureCause(0);
+ UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getDataByOrderCode(code, "desc");
+ if(null != uploadRealTimeMonitoringData){
+ //启动成功
+ preChargeCheck1.setStartupSuccess(2);
+ chargingOrder.setStatus(3);
+ chargingOrder.setStartTime(LocalDateTime.now());
+ this.updateById(chargingOrder);
redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
- return false;
+
+ //推送三方平台订单状态
+ if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
+ tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+ }
+ ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
+ threadPoolExecutor.execute(()->{
+ if (chargingOrder.getStatus() == 3) {
+ //推送监管平台订单状态
+ ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+ BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
+ chargingMessageClient.pushOrderStatus(chargingOrderVo);
+ }
+ //推送成都监管
+ NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
+ vo.setOrderCode(chargingOrder.getCode());
+ vo.setChargingGunId(chargingOrder.getChargingGunId());
+ chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
+ });
+ return true;
+ }else{
+ Integer counter = boot_failed_map.get(code);
+ log.info(code + ":-------------------未上传开启充电结果-------------------" + counter);
+ //10分钟内未启动成功,退回金额。
+ if (null == counter || counter < 600) {
+ counter = (null == counter ? 0 : counter) + 1;
+ boot_failed_map.put(code, counter);
+ //启动失败
+ preChargeCheck1.setStartupSuccess(1);
+ preChargeCheck1.setFailureCause(0);
+ redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+ return false;
+ }
+
+ //清除计时器中的无效数据
+ boot_failed_map.remove(code);
+ TChargingOrder order = new TChargingOrder();
+ order.setId(id);
+ order.setAppUserId(chargingOrder.getAppUserId());
+ //启动失败
+ preChargeCheck1.setStartupSuccess(3);
+ preChargeCheck1.setFailureCause(0);
+ order.setStatus(2);
+ order.setEndMode(0);
+ this.updateById(order);
+ //启动失败后取消订单,退款操作
+ refund(code);
+ redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+ //推送三方平台订单状态
+ if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
+ tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+ }
+ ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
+ threadPoolExecutor.execute(()->{
+ //推送成都监管
+ NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
+ vo.setOrderCode(chargingOrder.getCode());
+ vo.setChargingGunId(chargingOrder.getChargingGunId());
+ chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
+ });
+ return true;
}
-
- //清除计时器中的无效数据
- boot_failed_map.remove(code);
- TChargingOrder order = new TChargingOrder();
- order.setId(id);
- order.setAppUserId(chargingOrder.getAppUserId());
- //启动失败
- preChargeCheck1.setStartupSuccess(3);
- preChargeCheck1.setFailureCause(0);
- //启动失败后取消订单,退款操作
- refund(code);
- order.setStatus(-1);
- order.setEndMode(0);
- this.updateById(order);
- redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
- //推送三方平台订单状态
- if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
- tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
- }
- ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
- threadPoolExecutor.execute(()->{
- //推送成都监管
- NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
- vo.setOrderCode(chargingOrder.getCode());
- vo.setChargingGunId(chargingOrder.getChargingGunId());
- chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
- });
- return true;
}
}
@@ -963,15 +991,17 @@
//启动失败
preChargeCheck1.setStartupSuccess(3);
preChargeCheck1.setFailureCause(failure_cause);
+ order.setStatus(2);
+ order.setEndMode(0);
+ this.updateById(order);
//启动失败后取消订单,退款操作
refund(code);
- order.setStatus(-1);
- order.setEndMode(0);
} else {
//启动成功
preChargeCheck1.setStartupSuccess(2);
order.setStatus(3);
order.setStartTime(LocalDateTime.now());
+ this.updateById(order);
TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
chargingGun.setStatus(4);
chargingGunClient.updateChargingGunById(chargingGun);
@@ -981,7 +1011,6 @@
}
}
redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
- this.updateById(order);
if (3 == order.getStatus()) {
//推送监管平台订单状态
@@ -1004,8 +1033,6 @@
tcecClient.notificationStartChargeResult(result);
tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
}
-
-
}
}
@@ -1585,16 +1612,7 @@
if (siteIds.isEmpty()) siteIds.add(-1);
dto.setSiteIds(siteIds);
List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
-
- BigDecimal total = new BigDecimal("0");
- long time = 0L;
- BigDecimal electronicMoney = new BigDecimal("0");
- BigDecimal serviceMoney = new BigDecimal("0");
- BigDecimal commissionMoney = new BigDecimal("0");
-// BigDecimal refundMoney = new BigDecimal("0");
- BigDecimal paymentMoney = new BigDecimal("0");
List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
-
for (ChargingOrderVO chargingOrderVO : list) {
if (roleType == 2) {
for (Integer siteId : siteIds) {
@@ -1662,9 +1680,9 @@
if (null != map) {
tCharingOrderVO.setTotal(map.get("total") == null ? BigDecimal.ZERO : (BigDecimal) map.get("total"));
tCharingOrderVO.setTime(map.get("time") == null ? 0L : (Long) map.get("time"));
- tCharingOrderVO.setIncome((map.get("paymentMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("paymentMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
- tCharingOrderVO.setElectronicMoney((map.get("electronicMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("electronicMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
- tCharingOrderVO.setServiceMoney((map.get("serviceMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("serviceMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ tCharingOrderVO.setIncome(map.get("income") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("income")).setScale(2, RoundingMode.HALF_EVEN));
+ tCharingOrderVO.setElectronicMoney(map.get("electronicMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("electronicMoney")).setScale(2, RoundingMode.HALF_EVEN));
+ tCharingOrderVO.setServiceMoney(map.get("serviceMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("serviceMoney")).setScale(2, RoundingMode.HALF_EVEN));
} else {
tCharingOrderVO.setTotal(BigDecimal.ZERO);
tCharingOrderVO.setTime(0L);
@@ -1770,14 +1788,17 @@
String startTime2 = null;
String endTime1 = null;
String endTime2 = null;
-
- List<TChargingGun> allGun = chargingGunClient.getAllGun().getData();
- List<TChargingPile> allPile = chargingGunClient.getAllPile().getData();
-
+
if (StringUtils.hasLength(dto.getStartTime())) {
String[] split = dto.getStartTime().split(" - ");
startTime1 = split[0];
startTime2 = split[1];
+ }
+
+ if (StringUtils.hasLength(dto.getEndTime())) {
+ String[] split = dto.getEndTime().split(" - ");
+ endTime1 = split[0];
+ endTime2 = split[1];
}
ChargingOrderTimeVO chargingOrderTimeVO = new ChargingOrderTimeVO();
if (StringUtils.hasLength(dto.getPhone())) {
@@ -1967,9 +1988,12 @@
List<ChargingOrderListVO> list = new ArrayList<>();
List<Map<String, Object>> maps = this.baseMapper.chargingList1(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
for (Map<String, Object> map : maps) {
+ if(null == map){
+ continue;
+ }
ChargingOrderListVO chargingOrderListVO = new ChargingOrderListVO();
if (roleType == 2) {
- List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
+ List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), Integer.valueOf(map.get("siteId").toString())).getData();
chargingOrderListVO.setAuthInfo(data.get(0));
chargingOrderListVO.setAuthCurve(data.get(1));
}
@@ -2082,6 +2106,9 @@
List<Map<String, Object>> list1 = this.baseMapper.chargingListSum(dto, startTime1, startTime2, endTime1, endTime2);
chargingOrderTimeVO.setOrderCount(list1.size());
for (Map<String, Object> map : list1) {
+ if(null == map){
+ continue;
+ }
electronic = electronic.add(new BigDecimal(null == map.get("electronic") ? "0" : map.get("electronic").toString()));
paymentAmount = paymentAmount.add(new BigDecimal(null == map.get("paymentAmount") ? "0" : map.get("paymentAmount").toString()));
electrovalence = electrovalence.add(new BigDecimal(null == map.get("electrovalence") ? "0" : map.get("electrovalence").toString()));
@@ -2490,6 +2517,12 @@
chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
+ List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
+ if(!dataList.isEmpty()){
+ vo.setStart_time(sdfs.format(dataList.get(dataList.size() - 1).getCreate_time()) + ".00");
+ vo.setEnd_time(sdfs.format(dataList.get(0).getCreate_time()) + ".00");
+ }
+
//跨天
if (!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])) {
//当天的
@@ -2686,13 +2719,7 @@
}
chargingOrder.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
- List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- if(dataList.isEmpty()){
- chargingOrder.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
- }else{
- chargingOrder.setStartTime(LocalDateTime.parse(sdf.format(dataList.get(dataList.size() - 1).getCreate_time()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
- }
+ chargingOrder.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
chargingOrder.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
chargingOrder.setStatus(5);
chargingOrder.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
@@ -3281,6 +3308,8 @@
vipOrderRefund.setVipOrderId(vipOrder.getId());
vipOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
vipOrderRefund.setRefundStatus(1);
+ vipOrderRefund.setPayTime(vipOrder.getPayTime());
+ vipOrderRefund.setPayCode(vipOrder.getCode());
vipOrderRefund.setPayType(vipOrder.getPaymentType());
vipOrderRefund.setRefundTime(LocalDateTime.now());
vipOrderRefund.setCode(vipOrder.getCode());
@@ -4594,4 +4623,35 @@
public List<TChargingOrder> findEndChargingOrder() {
return this.baseMapper.findEndChargingOrder();
}
+
+ /**
+ * 获取需要手动修改订单状态的数据
+ * @return
+ */
+ @Override
+ public List<TChargingOrder> findUpStatusChargingOrder() {
+ return this.baseMapper.findUpStatusChargingOrder();
+ }
+
+ /**
+ * 查询充电算账单数据
+ * @param startTime
+ * @param endTime
+ */
+ @Override
+ public List<Map<String, Object>> getChargingSettlementBill(String startTime, String endTime, Integer dateType) {
+ return this.baseMapper.getChargingSettlementBill(startTime, endTime, dateType);
+ }
+
+
+ /**
+ * 查询账户结算账单数据
+ * @param startTime
+ * @param endTime
+ * @return
+ */
+ @Override
+ public List<Map<String, Object>> getAccountSettlementStatement(String startTime, String endTime, Integer rechargePaymentType) {
+ return this.baseMapper.getAccountSettlementStatement(startTime, endTime, rechargePaymentType);
+ }
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingSettlementBillServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingSettlementBillServiceImpl.java
new file mode 100644
index 0000000..194880f
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingSettlementBillServiceImpl.java
@@ -0,0 +1,44 @@
+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.TChargingSettlementBill;
+import com.ruoyi.order.mapper.TChargingSettlementBillMapper;
+import com.ruoyi.order.service.ITChargingSettlementBillService;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TChargingSettlementBillServiceImpl extends ServiceImpl<TChargingSettlementBillMapper, TChargingSettlementBill> implements ITChargingSettlementBillService {
+
+
+ /**
+ * 获取列表数据
+ * @param page
+ * @param type 订单分类(1全站 2各个站点)
+ * @param status 状态(1未出账 2已出账)
+ * @param dateRange 账单周期
+ * @return
+ */
+ @Override
+ public List<Map<String, Object>> queryList(PageInfo<Map<String, Object>> page, Integer type, Integer status, List<String> dateRange, Integer statisticalDateType, List<Integer> siteIds) {
+ return this.baseMapper.queryList(page, type, status, dateRange, statisticalDateType, siteIds);
+ }
+
+
+ /**
+ * 获取汇总数据
+ * @param type
+ * @param status
+ * @param dateRange
+ * @param statisticalDateType
+ * @return
+ */
+ @Override
+ public Map<String, Object> queryListSum(Integer type, Integer status, List<String> dateRange, Integer statisticalDateType, List<Integer> siteIds) {
+ return this.baseMapper.queryListSum(type, status, dateRange, statisticalDateType, siteIds);
+ }
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
index b8aa66e..066024d 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -1,14 +1,13 @@
package com.ruoyi.order.util.task;
import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson2.util.UUIDUtils;
-import com.alibaba.nacos.common.utils.UuidUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
import com.ruoyi.account.api.feignClient.AppCouponClient;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient;
-import com.ruoyi.account.api.feignClient.AppUserVipDetailClient;
import com.ruoyi.account.api.model.TAppCoupon;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserIntegralChange;
@@ -18,17 +17,14 @@
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.integration.api.feignClient.ChargingMessageClient;
import com.ruoyi.integration.api.feignClient.ChengDuJianGuanClient;
import com.ruoyi.integration.api.feignClient.TCECClient;
-import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
import com.ruoyi.integration.api.model.TransactionRecord;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.integration.api.vo.ChargingOrderVo;
import com.ruoyi.integration.api.vo.NotificationConnectorChargeStatusVo;
import com.ruoyi.order.api.model.*;
-import com.ruoyi.order.api.vo.AccountingStrategyDetailOrderVo;
import com.ruoyi.order.api.vo.TransactionRecordMessageVO;
import com.ruoyi.order.service.*;
import com.ruoyi.order.util.mongodb.service.TransactionRecordService;
@@ -45,10 +41,7 @@
import com.ruoyi.payment.api.model.RefundResp;
import com.ruoyi.payment.api.model.WxPaymentRefundModel;
import lombok.extern.slf4j.Slf4j;
-import org.apache.logging.log4j.core.util.UuidUtil;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Scheduled;
@@ -64,6 +57,7 @@
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
@@ -80,6 +74,12 @@
@Resource
private TChargingBillService chargingBillService;
+
+ @Resource
+ private ITChargingSettlementBillService chargingSettlementBillService;
+
+ @Resource
+ private ITAccountSettlementStatementService accountSettlementStatementService;
@Resource
private SiteClient siteClient;
@Resource
@@ -137,6 +137,23 @@
@Resource
private ChengDuJianGuanClient chengDuJianGuanClient;
+
+
+ @Scheduled(fixedRate = 1000 * 60)
+ public void taskOneMinutes() {
+ if(null != port && port == 5400){
+ List<TChargingOrder> upStatusChargingOrder = chargingOrderService.findUpStatusChargingOrder();
+ log.info("定时任务执行,查询需要手动修改状态的订单数量:{}", upStatusChargingOrder.size());
+ for (TChargingOrder order : upStatusChargingOrder) {
+ if(2 == order.getStatus()){
+ order.setStatus(-1);
+ }else{
+ order.setStatus(5);
+ }
+ chargingOrderService.updateById(order);
+ }
+ }
+ }
//十分钟循环执行的定时任务
@@ -250,96 +267,16 @@
}
}
-
- @Scheduled(cron = "0 0 0 2 * ?")
+
+ //定时任务添加结算账单汇总数据
+ @Scheduled(cron = "0 30 0 * * ?")
public void taskMonth() {
if(null != port && port == 5400){
- try {
- // 获取上个月的开始和结束日期
- LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
- withDayOfMonth(2);
- String string = firstDayOfLastMonth.toString();
- // 将-替换为空字符串
- string = string.replace("-", "");
- // 生成一次全站订单
- TChargingBill tChargingBill = new TChargingBill();
- // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
- Random random = new Random();
- String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
- .mapToObj(String::valueOf)
- .collect(Collectors.joining()); // 将其连接成一个字符串
- tChargingBill.setCode("JSD"+string+randomDigits );
- tChargingBill.setType(1);
- tChargingBill.setSiteId(0);
- tChargingBill.setBillTime(LocalDateTime.now());
- tChargingBill.setStatus(1);
- tChargingBill.setOrderState(2);
- tChargingBill.setBillType(1);
- System.err.println("定时任务生成充电算帐单:全站");
- chargingBillService.save(tChargingBill);
- // 生成一次全站订单
- TChargingBill tChargingBill1 = new TChargingBill();
- // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
- Random random1 = new Random();
- String randomDigits1 = random1.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
- .mapToObj(String::valueOf)
- .collect(Collectors.joining()); // 将其连接成一个字符串
- tChargingBill1.setCode("JSD"+string+randomDigits1 );
- tChargingBill1.setType(1);
- tChargingBill1.setSiteId(0);
- tChargingBill1.setBillTime(LocalDateTime.now());
- tChargingBill1.setStatus(1);
- tChargingBill1.setOrderState(2);
- tChargingBill1.setBillType(2);
- System.err.println("定时任务生成账户结算帐单:全站");
- chargingBillService.save(tChargingBill1);
- System.err.println("定时任务生成各个站点结算帐单");
- List<Integer> collect = siteClient.getSiteAll().getData().stream().map(Site::getId).collect(Collectors.toList());
- // 充电算帐单
- List<TChargingBill> tChargingBills = new ArrayList<>();
- // 账户结算账单
- List<TChargingBill> tChargingBills1 = new ArrayList<>();
- for (int i = 0; i < collect.size(); i++) {
- TChargingBill tChargingBill2 = new TChargingBill();
- Random random2 = new Random();
- String randomDigits2 = random2.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
- .mapToObj(String::valueOf)
- .collect(Collectors.joining()); // 将其连接成一个字符串
- tChargingBill2.setCode("JSD"+string+randomDigits2+(i+1) );
- tChargingBill2.setType(2);
- List<TChargingOrder> list = chargingOrderService.lambdaQuery()
- .eq(TChargingOrder::getSiteId, collect.get(i)).list();
- if (list.isEmpty()){
- continue;
- }
- tChargingBill2.setSiteId(collect.get(i));
- tChargingBill2.setBillTime(LocalDateTime.now());
- tChargingBill2.setBillType(1);
- tChargingBill2.setStatus(1);
- tChargingBill2.setOrderState(2);
- tChargingBills.add(tChargingBill2);
- TChargingBill tChargingBill3 = new TChargingBill();
- Random random3 = new Random();
- String randomDigits3 = random3.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
- .mapToObj(String::valueOf)
- .collect(Collectors.joining()); // 将其连接成一个字符串
- tChargingBill3.setCode("JSD"+string+randomDigits3+(i+1) );
- tChargingBill3.setType(2);
- tChargingBill3.setSiteId(collect.get(i));
- tChargingBill3.setBillTime(LocalDateTime.now());
- tChargingBill3.setBillType(2);
- tChargingBill3.setStatus(1);
- tChargingBill3.setOrderState(2);
- tChargingBills1.add(tChargingBill3);
- }
- System.err.println("列表"+tChargingBills);
- if (!tChargingBills.isEmpty())chargingBillService.saveBatch(tChargingBills);
- if (!tChargingBills1.isEmpty())chargingBillService.saveBatch(tChargingBills1);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
+ //添加充电算账单汇总数据
+ addChargingSettlementBill();
+ //添加账户结算账单数据
+ addAccountSettlementStatement();
}
}
@@ -348,31 +285,23 @@
public void taskLastDay() {
if(null != port && port == 5400){
try {
- // 获取上个月的开始和结束日期
- LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
- withDayOfMonth(1);
- LocalDate lastDayOfLastMonth = LocalDate.now().minusMonths(1).
- withDayOfMonth(firstDayOfLastMonth.lengthOfMonth());
- // 将 LocalDate 转换为 LocalDateTime,并设定时间为一天的开始
- LocalDateTime startDateTime = firstDayOfLastMonth.atStartOfDay();
- LocalDateTime endDateTime = lastDayOfLastMonth.atTime(23, 59, 59); // 设定到最后一秒
- // 构建查询条件
- LambdaQueryWrapper<TChargingBill> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.ge(TChargingBill::getBillTime,
- Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()))
- .le(TChargingBill::getBillTime,
- Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant())); // 使用 le 包括最后一天的记录
- List<TChargingBill> list = chargingBillService.list(queryWrapper);
- for (TChargingBill tChargingBill : list) {
- tChargingBill.setStatus(2);
+ int dayOfMonth = LocalDate.now().getDayOfMonth();
+ int lastDayOfMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+ //当月最后一天
+ if(dayOfMonth == lastDayOfMonth){
+ //修改充电结算账单为已出账
+ chargingSettlementBillService.update(new UpdateWrapper<TChargingSettlementBill>().set("status", 2).set("create_time", LocalDateTime.now()).eq("status", 1));
+ //修改账户结算账单为已出账
+ accountSettlementStatementService.update(new UpdateWrapper<TAccountSettlementStatement>().set("status", 2).set("create_time", LocalDateTime.now()).eq("status", 1));
}
- chargingBillService.updateBatchById(list);
} catch (Exception e) {
e.printStackTrace();
}
}
}
-
+
+
+
@Override
public void onApplicationEvent(WebServerInitializedEvent event) {
port = event.getWebServer().getPort();
@@ -799,4 +728,226 @@
chargingMessageClient.pushOrderStatus(chargingOrderVo);
}
}
+
+
+ /**
+ * 添加充电算账单汇总数据
+ */
+ public void addChargingSettlementBill(){
+ try {
+ int day = LocalDate.now().getDayOfMonth();
+ int lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+ //时间在当月的2号到当月的最后一天才执行汇总数据和生成新的汇总数据(中间有修改数据的情况)
+ if(2 <= day && day <= lastDay){
+ // 获取上个月的开始和结束日期
+ LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
+ withDayOfMonth(2);
+ String string = firstDayOfLastMonth.toString();
+ // 将-替换为空字符串
+ string = string.replace("-", "");
+
+ //上个月
+ String lastMonth = LocalDate.now().minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
+ //统计数据的开始时间
+ String startTime = lastMonth + "-01 00:00:00";
+ //统计数据的结束时间
+ int lasDay = LocalDate.now().minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+ String endTime = lastMonth + "-" + String.format("%02d", lasDay) + " 23:59:59";
+ LocalDateTime createTime = LocalDateTime.parse(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM")) + "-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+
+ //删除之前生成的汇总数据,在添加最新的汇总数据
+ String format = firstDayOfLastMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+ chargingSettlementBillService.remove(new QueryWrapper<TChargingSettlementBill>().eq("status", 1).last(" and DATE_FORMAT(billing_cycle, '%Y-%m') = '" + format + "'"));
+
+ //循环生成按照开始时间和结束时间分别统计的汇总数据
+ for (int i = 1; i < 3; i++) {
+ TChargingSettlementBill chargingSettlementBill = new TChargingSettlementBill();
+ // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
+ Random random = new Random();
+ String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+ .mapToObj(String::valueOf)
+ .collect(Collectors.joining()); // 将其连接成一个字符串
+ chargingSettlementBill.setSiteId(0);
+ chargingSettlementBill.setStatisticalDateType(i);
+ chargingSettlementBill.setBillingCycle(firstDayOfLastMonth);
+ chargingSettlementBill.setStatus(1);
+ chargingSettlementBill.setCode("JSD"+string+randomDigits);
+
+ //根据业务订单查询汇总数据
+ List<Map<String, Object>> mapList = chargingOrderService.getChargingSettlementBill(startTime, endTime, i);
+ Long chargingDuration = 0L;
+ Integer orderNumber = 0;
+ BigDecimal totalAmount = BigDecimal.ZERO;
+ BigDecimal platformFee = BigDecimal.ZERO;
+ BigDecimal tripartiteCommission = BigDecimal.ZERO;
+ BigDecimal fundsReceived = BigDecimal.ZERO;
+ BigDecimal totalElectricity = BigDecimal.ZERO;
+ BigDecimal totalElectricityCharge = BigDecimal.ZERO;
+ BigDecimal totalServiceFee = BigDecimal.ZERO;
+ BigDecimal couponDeduction = BigDecimal.ZERO;
+ List<TChargingSettlementBill> list = new ArrayList<>();
+ for (Map<String, Object> map : mapList) {
+ Long charging_duration = null == map.get("chargingDuration") ? 0L : Long.valueOf(map.get("chargingDuration").toString());
+ Integer order_number = null == map.get("orderNum") ? 0 : Integer.valueOf(map.get("orderNum").toString());
+ BigDecimal total_amount = null == map.get("totalAmount") ? BigDecimal.ZERO : new BigDecimal(map.get("totalAmount").toString());
+ BigDecimal platform_fee = null == map.get("platformFee") ? BigDecimal.ZERO : new BigDecimal(map.get("platformFee").toString());
+ BigDecimal tripartite_commission = null == map.get("tripartiteCommission") ? BigDecimal.ZERO : new BigDecimal(map.get("tripartiteCommission").toString());
+ BigDecimal funds_received = total_amount.subtract(platform_fee).subtract(tripartite_commission);
+ BigDecimal total_electricity = null == map.get("totalElectricity") ? BigDecimal.ZERO : new BigDecimal(map.get("totalElectricity").toString());
+ BigDecimal total_electricity_charge = null == map.get("totalElectricityCharge") ? BigDecimal.ZERO : new BigDecimal(map.get("totalElectricityCharge").toString());
+ BigDecimal total_service_fee = null == map.get("totalServiceFee") ? BigDecimal.ZERO : new BigDecimal(map.get("totalServiceFee").toString());
+ BigDecimal coupon_deduction = null == map.get("couponDeduction") ? BigDecimal.ZERO : new BigDecimal(map.get("couponDeduction").toString());
+ //构建每个站点的汇总数据
+ TChargingSettlementBill chargingSettlementBill1 = new TChargingSettlementBill();
+ String randomDigits1 = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+ .mapToObj(String::valueOf)
+ .collect(Collectors.joining()); // 将其连接成一个字符串
+ chargingSettlementBill1.setSiteId(Integer.valueOf(map.get("siteId").toString()));
+ chargingSettlementBill1.setStatisticalDateType(i);
+ chargingSettlementBill1.setBillingCycle(firstDayOfLastMonth);
+ chargingSettlementBill1.setStatus(1);
+ chargingSettlementBill1.setCode("JSD"+string+randomDigits1);
+ chargingSettlementBill1.setChargingDuration(charging_duration);
+ chargingSettlementBill1.setOrderNumber(order_number);
+ chargingSettlementBill1.setTotalAmount(total_amount.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill1.setCouponDeduction(coupon_deduction.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill1.setPlatformFee(platform_fee.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill1.setTripartiteCommission(tripartite_commission.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill1.setFundsReceived(funds_received.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill1.setTotalElectricity(total_electricity.setScale(4, RoundingMode.HALF_EVEN));
+ chargingSettlementBill1.setTotalElectricityCharge(total_electricity_charge.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill1.setTotalServiceFee(total_service_fee.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill1.setCreateTime(createTime);
+ list.add(chargingSettlementBill1);
+ //计算全站汇总数据
+ chargingDuration = chargingDuration + charging_duration;
+ orderNumber = orderNumber + order_number;
+ totalAmount = totalAmount.add(total_amount);
+ platformFee = platformFee.add(platform_fee);
+ tripartiteCommission = tripartiteCommission.add(tripartite_commission);
+ fundsReceived = fundsReceived.add(funds_received);
+ totalElectricity = totalElectricity.add(total_electricity);
+ totalElectricityCharge = totalElectricityCharge.add(total_electricity_charge);
+ totalServiceFee = totalServiceFee.add(total_service_fee);
+ couponDeduction = couponDeduction.add(coupon_deduction);
+ }
+
+ chargingSettlementBill.setChargingDuration(chargingDuration);
+ chargingSettlementBill.setOrderNumber(orderNumber);
+ chargingSettlementBill.setTotalAmount(totalAmount.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill.setCouponDeduction(couponDeduction.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill.setPlatformFee(platformFee.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill.setTripartiteCommission(tripartiteCommission.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill.setFundsReceived(fundsReceived.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill.setTotalElectricity(totalElectricity.setScale(4, RoundingMode.HALF_EVEN));
+ chargingSettlementBill.setTotalElectricityCharge(totalElectricityCharge.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill.setTotalServiceFee(totalServiceFee.setScale(2, RoundingMode.HALF_EVEN));
+ chargingSettlementBill.setCreateTime(createTime);
+ chargingSettlementBillService.save(chargingSettlementBill);
+ chargingSettlementBillService.saveBatch(list);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+
+ /**
+ * 添加账户结算账单数据
+ */
+ public void addAccountSettlementStatement(){
+ try {
+ int day = LocalDate.now().getDayOfMonth();
+ int lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+ //时间在当月的2号到当月的最后一天才执行汇总数据和生成新的汇总数据(中间有修改数据的情况)
+ if(2 <= day && day <= lastDay){
+ // 获取上个月的开始和结束日期
+ LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
+ withDayOfMonth(2);
+ String string = firstDayOfLastMonth.toString();
+ // 将-替换为空字符串
+ string = string.replace("-", "");
+
+ //上个月
+ String lastMonth = LocalDate.now().minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
+ //统计数据的开始时间
+ String startTime = lastMonth + "-01 00:00:00";
+ //统计数据的结束时间
+ int lasDay = LocalDate.now().minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+ String endTime = lastMonth + "-" + String.format("%02d", lasDay) + " 23:59:59";
+ LocalDateTime createTime = LocalDateTime.parse(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM")) + "-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+
+ //删除之前生成的汇总数据,在添加最新的汇总数据
+ String format = firstDayOfLastMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+ accountSettlementStatementService.remove(new QueryWrapper<TAccountSettlementStatement>().eq("status", 1).last(" and DATE_FORMAT(billing_cycle, '%Y-%m') = '" + format + "'"));
+
+ //循环生成账户类型分别统计的汇总数据
+ for (int i = 1; i < 3; i++) {
+ TAccountSettlementStatement accountSettlementStatement = new TAccountSettlementStatement();
+ // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
+ Random random = new Random();
+ String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+ .mapToObj(String::valueOf)
+ .collect(Collectors.joining()); // 将其连接成一个字符串
+ accountSettlementStatement.setSiteId(0);
+ accountSettlementStatement.setAccountType(i);
+ accountSettlementStatement.setBillingCycle(firstDayOfLastMonth);
+ accountSettlementStatement.setStatus(1);
+ accountSettlementStatement.setCode("JSD"+string+randomDigits);
+
+ //根据业务订单查询汇总数据
+ List<Map<String, Object>> mapList = chargingOrderService.getAccountSettlementStatement(startTime, endTime, i);
+ BigDecimal rechargeAmount = BigDecimal.ZERO;
+ BigDecimal refundAmount = BigDecimal.ZERO;
+ BigDecimal platformFee = BigDecimal.ZERO;
+ BigDecimal tripartiteCommission = BigDecimal.ZERO;
+ BigDecimal recordedAmount = BigDecimal.ZERO;
+ List<TAccountSettlementStatement> list = new ArrayList<>();
+ for (Map<String, Object> map : mapList) {
+ BigDecimal recharge_amount = null == map.get("rechargeAmount") ? BigDecimal.ZERO : new BigDecimal(map.get("rechargeAmount").toString());
+ BigDecimal refund_amount = null == map.get("refundAmount") ? BigDecimal.ZERO : new BigDecimal(map.get("refundAmount").toString());
+ BigDecimal platform_fee = null == map.get("platformFee") ? BigDecimal.ZERO : new BigDecimal(map.get("platformFee").toString());
+ BigDecimal tripartite_commission = null == map.get("tripartiteCommission") ? BigDecimal.ZERO : new BigDecimal(map.get("tripartiteCommission").toString());
+ BigDecimal recorded_amount = recharge_amount.subtract(refund_amount).subtract(platform_fee).subtract(tripartite_commission);
+ //构建每个站点的汇总数据
+ TAccountSettlementStatement accountSettlementStatement1 = new TAccountSettlementStatement();
+ String randomDigits1 = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+ .mapToObj(String::valueOf)
+ .collect(Collectors.joining()); // 将其连接成一个字符串
+ accountSettlementStatement1.setSiteId(Integer.valueOf(map.get("siteId").toString()));
+ accountSettlementStatement1.setAccountType(i);
+ accountSettlementStatement1.setBillingCycle(firstDayOfLastMonth);
+ accountSettlementStatement1.setStatus(1);
+ accountSettlementStatement1.setCode("JSD"+string+randomDigits1);
+ accountSettlementStatement1.setRechargeAmount(recharge_amount.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement1.setRefundAmount(refund_amount.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement1.setPlatformFee(platform_fee.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement1.setTripartiteCommission(tripartite_commission.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement1.setRecordedAmount(recorded_amount.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement1.setCreateTime(createTime);
+ list.add(accountSettlementStatement1);
+ //计算全站汇总数据
+ rechargeAmount = rechargeAmount.add(recharge_amount);
+ refundAmount = refundAmount.add(refund_amount);
+ platformFee = platformFee.add(platform_fee);
+ tripartiteCommission = tripartiteCommission.add(tripartite_commission);
+ recordedAmount = recordedAmount.add(recorded_amount);
+ }
+
+ accountSettlementStatement.setRechargeAmount(rechargeAmount.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement.setPlatformFee(platformFee.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement.setTripartiteCommission(tripartiteCommission.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement.setRecordedAmount(recordedAmount.setScale(2, RoundingMode.HALF_EVEN));
+ accountSettlementStatement.setCreateTime(createTime);
+ accountSettlementStatementService.save(accountSettlementStatement);
+ accountSettlementStatementService.saveBatch(list);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
}
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TAccountSettlementStatementMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TAccountSettlementStatementMapper.xml
new file mode 100644
index 0000000..2d66002
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TAccountSettlementStatementMapper.xml
@@ -0,0 +1,6 @@
+<?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.TAccountSettlementStatementMapper">
+
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
index 81c0d09..bef8982 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -1039,6 +1039,7 @@
select
aa.id,
aa.`code`,
+ aa.siteId,
aa.siteName,
aa.orderType,
aa.terminalName,
@@ -1069,6 +1070,7 @@
select
b.id,
b.`code`,
+ b.site_id as siteId,
c.`name` as siteName,
b.order_type as orderType,
CONCAT(d.`name`, '-', e.`name`) as terminalName,
@@ -1143,7 +1145,7 @@
and (b.end_time between #{endTime1} and #{endTime2})
</if>
and b.start_time IS NOT NULL
- ) as aa group by aa.id, aa.`code`, aa.siteName, aa.orderType, aa.terminalName, aa.electricity, aa.rechargeAmount, aa.paymentAmount, aa.electrovalence, aa.serviceCharge, aa.tripartitePlatformName,
+ ) as aa group by aa.id, aa.`code`, aa.siteId, aa.siteName, aa.orderType, aa.terminalName, aa.electricity, aa.rechargeAmount, aa.paymentAmount, aa.electrovalence, aa.serviceCharge, aa.tripartitePlatformName,
aa.startTime, aa.endTime, aa.chargingSecond, aa.startSoc, aa.endSoc, aa.`status`, aa.endMode, aa.phone, aa.licensePlate, aa.orderSource, aa.rechargePaymentType order by aa.startTime desc
</select>
@@ -1930,67 +1932,68 @@
<select id="chargingOrderNolimit" resultType="map">
select
- sum(aa.electricity) as total,
- sum(aa.charging_time) as `time`,
- sum(aa.charging_amount) as paymentMoney,
- sum(aa.period_electric_price) as electronicMoney,
- sum(aa.period_service_price) as serviceMoney
+ sum(aa.time) as `time`,
+ sum(aa.income) as income,
+ sum(aa.electronicMoney) as electronicMoney,
+ sum(aa.serviceMoney) as serviceMoney,
+ sum(aa.total) as total
from (
select
- ifnull(a.electricity, 0) as electricity,
- UNIX_TIMESTAMP(ifnull(a.end_time, now())) - UNIX_TIMESTAMP(ifnull(a.start_time, now())) as charging_time,
- ifnull(a.recharge_amount - b.refund_amount, 0) as charging_amount,
- ifnull(c.period_electric_price, 0) as period_electric_price,
- ifnull(c.period_service_price, 0) as period_service_price
- from t_charging_order a
- left join (select charging_order_id, sum(refund_amount) as refund_amount from t_charging_order_refund where refund_status = 2 group by charging_order_id) b on (a.id = b.charging_order_id)
- left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price from t_charging_order_accounting_strategy group by charging_order_id) c on (a.id = c.charging_order_id)
- where a.del_flag = 0
+ b.id,
+ (UNIX_TIMESTAMP(b.end_time) - UNIX_TIMESTAMP(b.start_time)) as time,
+ sum(a.charging_capacity) as total,
+ sum(a.period_electric_price) as electronicMoney,
+ sum(a.period_service_price) as serviceMoney,
+ sum(a.period_electric_price + (CASE WHEN b.order_source = 1 THEN a.period_service_price ELSE a.period_service_price * 0.8 END)) as income
+ from `charging_pile_order`.t_charging_order_accounting_strategy a
+ left join `charging_pile_order`.t_charging_order b on (a.charging_order_id = b.id)
+ where b.del_flag = 0
<if test="null != req.code and req.code!=''">
- and a.code LIKE CONCAT('%',#{req.code},'%')
+ and b.code LIKE CONCAT('%',#{req.code},'%')
</if>
<if test="null != req.userIds and req.userIds.size()>0">
- and a.app_user_id in
+ and b.app_user_id in
<foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
#{item}
</foreach>
</if>
<if test="null != req.siteIds and req.siteIds.size()>0">
- and a.site_id in
+ and b.site_id in
<foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
#{item}
</foreach>
</if>
<if test="req.orderType != null ">
- and a.order_type = #{req.orderType}
+ and b.order_type = #{req.orderType}
</if>
<if test="req.status != null ">
- and a.status = #{req.status}
+ and b.status = #{req.status}
</if>
<if test="req.orderSource != null and req.orderSource == 1 ">
- and (a.order_source = 0 or a.order_source = 1 )
+ and (b.order_source = 0 or b.order_source = 1 )
</if>
<if test="req.orderSource != null and req.orderSource == 2 ">
- and a.tripartite_platform_name = 'KuaiDian'
+ and b.tripartite_platform_name = 'KuaiDian'
</if>
<if test="req.orderSource != null and req.orderSource == 3 ">
- and a.tripartite_platform_name = 'XinDianTu'
+ and b.tripartite_platform_name = 'XinDianTu'
</if>
<if test="req.siteId != null ">
- and a.site_id = #{req.siteId}
+ and b.site_id = #{req.siteId}
</if>
<if test="req.pileId != null ">
- and a.charging_pile_id = #{req.pileId}
+ and b.charging_pile_id = #{req.pileId}
</if>
<if test="req.gunId != null ">
- and a.charging_gun_id = #{req.gunId}
+ and b.charging_gun_id = #{req.gunId}
</if>
<if test="startTime1 != null and startTime1!=''">
- and (a.start_time between #{startTime1} and #{startTime2})
+ and (b.start_time between #{startTime1} and #{startTime2})
</if>
<if test="endTime1 != null and endTime1!=''">
- and (a.end_time between #{endTime1} and #{endTime2})
+ and (b.end_time between #{endTime1} and #{endTime2})
</if>
+ group by b.id,time
) as aa
</select>
@@ -2090,4 +2093,81 @@
FROM
t_charging_order_refund)
</select>
+
+
+ <select id="findUpStatusChargingOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
+ select * from t_charging_order where `status` in (2, 3, 4) and id IN (
+ SELECT
+ charging_order_id
+ FROM
+ t_charging_order_refund)
+ </select>
+
+
+
+
+
+ <select id="getChargingSettlementBill" resultType="map">
+ select
+ aa.siteId,
+ count(aa.orderId) as orderNum,
+ sum(aa.chargingDuration) as chargingDuration,
+ sum(aa.totalAmount) as totalAmount,
+ sum(aa.couponDeduction) as couponDeduction,
+ sum(aa.platformFee) as platformFee,
+ SUM(aa.tripartiteCommission) as tripartiteCommission,
+ sum(aa.totalElectricity) as totalElectricity,
+ sum(aa.totalElectricityCharge) as totalElectricityCharge,
+ sum(aa.totalServiceFee) as totalServiceFee
+ from (
+ select
+ b.id as orderId,
+ b.site_id as siteId,
+ UNIX_TIMESTAMP(b.end_time) - UNIX_TIMESTAMP(b.start_time) as chargingDuration,
+ b.payment_amount as totalAmount,
+ b.coupon_discount_amount as couponDeduction,
+ (CASE WHEN b.order_source != 2 THEN b.recharge_amount * 0.006 ELSE 0 END) as platformFee,
+ sum((CASE WHEN b.order_source = 2 THEN a.period_service_price * 0.2 ELSE 0 END)) as tripartiteCommission,
+ sum(a.charging_capacity) as totalElectricity,
+ sum(a.period_electric_price) as totalElectricityCharge,
+ sum(a.period_service_price) as totalServiceFee
+ from `charging_pile_order`.t_charging_order_accounting_strategy a
+ left join `charging_pile_order`.t_charging_order b on (a.charging_order_id = b.id)
+ where b.`status` = 5 and b.del_flag = 0
+ <if test="null != dateType and 1 == dateType">
+ and b.start_time between #{startTime} and #{endTime}
+ </if>
+ <if test="null != dateType and 2 == dateType">
+ and b.end_time between #{startTime} and #{endTime}
+ </if>
+ group by orderId,siteId, chargingDuration, totalAmount, couponDeduction, platformFee
+ ) as aa group by aa.siteId order by aa.siteId
+ </select>
+
+
+
+ <select id="getAccountSettlementStatement" resultType="map">
+ select
+ aa.site_id as siteId,
+ aa.recharge_payment_type as rechargePaymentType,
+ sum(aa.recharge_amount) as rechargeAmount,
+ sum(aa.refund_amount) as refundAmount,
+ sum(aa.platformFee) as platformFee,
+ sum(aa.tripartiteCommission) as tripartiteCommission
+ from (
+ select
+ b.id as orderId,
+ b.recharge_payment_type,
+ b.site_id,
+ b.recharge_amount,
+ ifnull(c.refund_amount, 0) as refund_amount,
+ (CASE WHEN b.order_source != 2 THEN b.recharge_amount * 0.006 ELSE 0 END) as platformFee,
+ sum((CASE WHEN b.order_source = 2 THEN a.period_service_price * 0.2 ELSE 0 END)) as tripartiteCommission
+ from t_charging_order_accounting_strategy a
+ left join t_charging_order b on (a.charging_order_id = b.id)
+ left join t_charging_order_refund c on (b.id = c.charging_order_id)
+ where b.`status` = 5 and b.del_flag = 0 and b.recharge_payment_type = #{rechargePaymentType} and b.start_time between #{startTime} and #{endTime}
+ group by orderId,recharge_payment_type,site_id,recharge_amount,refund_amount,platformFee
+ ) as aa group by aa.site_id,aa.recharge_payment_type order by aa.site_id
+ </select>
</mapper>
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingSettlementBillMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingSettlementBillMapper.xml
new file mode 100644
index 0000000..bd21d02
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingSettlementBillMapper.xml
@@ -0,0 +1,82 @@
+<?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.TChargingSettlementBillMapper">
+
+ <select id="queryList" resultType="map">
+ select
+ a.*,
+ b.`name` as siteName,
+ DATE_FORMAT(a.billing_cycle, '%Y-%m') as billingCycle,
+ DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%i:%s') as createTime
+ from `charging_pile_order`.t_charging_settlement_bill a
+ left join `charging_pile_service`.t_site b on (a.site_id = b.id)
+ <where>
+ <if test="null != type and 1 == type">
+ and a.site_id = 0
+ </if>
+ <if test="null != type and 2 == type">
+ and a.site_id != 0
+ </if>
+ <if test="null != status">
+ and a.`status` = #{status}
+ </if>
+ <if test="null != statisticalDateType">
+ and a.statistical_date_type = #{statisticalDateType}
+ </if>
+ <if test="null != dateRange and dateRange.size() > 0">
+ and DATE_FORMAT(a.billing_cycle, '%Y-%m') in
+ <foreach collection="dateRange" item="item" index="index" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ </if>
+ <if test="null != siteIds and siteIds.size() > 0">
+ and a.site_id in
+ <foreach collection="siteIds" item="item" index="index" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ </if>
+ </where>
+ order by a.site_id
+ </select>
+
+
+ <select id="queryListSum" resultType="map">
+ select
+ sum(total_electricity) as totalElectricity,
+ sum(funds_received) as fundsReceived,
+ sum(total_amount) as totalAmount,
+ sum(total_electricity_charge) as totalElectricityCharge,
+ sum(total_service_fee) as totalServiceFee,
+ sum(platform_fee) as platformFee,
+ sum(tripartite_commission) as tripartiteCommission,
+ sum(order_number) as orderNumber,
+ sum(coupon_deduction) as couponDeduction
+ from t_charging_settlement_bill
+ <where>
+ <if test="null != type and 1 == type">
+ and site_id = 0
+ </if>
+ <if test="null != type and 2 == type">
+ and site_id != 0
+ </if>
+ <if test="null != status">
+ and `status` = #{status}
+ </if>
+ <if test="null != statisticalDateType">
+ and statistical_date_type = #{statisticalDateType}
+ </if>
+ <if test="null != dateRange and dateRange.size() > 0">
+ and DATE_FORMAT(billing_cycle, '%Y-%m') in
+ <foreach collection="dateRange" item="item" index="index" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ </if>
+ <if test="null != siteIds and siteIds.size() > 0">
+ and site_id in
+ <foreach collection="siteIds" item="item" index="index" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ </if>
+ </where>
+ </select>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
index 24be986..5754f3b 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
@@ -1,5 +1,6 @@
package com.ruoyi.payment.controller;
+import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.type.TypeReference;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -174,8 +175,8 @@
@PostMapping("refund/notify")
public void refundNotify(HttpServletRequest request) throws IOException {
try {
- Map<String, Object> params = wxV3Pay.verifyNotify(request, new TypeReference<Map<String, Object>>() {
- });
+ Map<String, Object> params = wxV3Pay.verifyNotify(request, new TypeReference<Map<String, Object>>() {});
+ log.info("退款结果回调:{}", JSON.toJSONString(params));
// 商户订单号
String out_trade_no = params.get("out_trade_no").toString();
// 商户退款单号
--
Gitblit v1.7.1