From b70eec17ac045cdc2de640092c96037f1e7b0d2e Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期二, 23 六月 2026 16:06:37 +0800
Subject: [PATCH] 新增了部分v2.0 p1功能
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 40
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java | 17
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java | 140 +++--
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/TAccountingStrategyQuery.java | 3
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml | 72 ++
sql/20260618_order_invoice_v2.sql | 69 ++
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/PayOrderExport.java | 49 +
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PartnerListDTO.java | 8
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java | 2
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java | 7
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java | 15
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java | 92 +++
sql/20260616_parking_lot_barrier_brand.sql | 21
sql/20260617_accounting_strategy_partner.sql | 17
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java | 2
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 77 ++
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/PartnerMapper.java | 5
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java | 54 +
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java | 36 +
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java | 5
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java | 12
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java | 2
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml | 45 +
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 87 +++
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetPartnerList.java | 2
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java | 57 +
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java | 4
ruoyi-gateway/src/main/resources/bootstrap.yml | 6
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TAccountingStrategyVO.java | 3
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java | 125 +++-
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 14
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ManageOrderAppealQuery.java | 16
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java | 4
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml | 10
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/TVipOrderExport.java | 34 +
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java | 6
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java | 4
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java | 127 ++++
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java | 8
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java | 83 +++
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordPageQuery.java | 3
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml | 4
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java | 2
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml | 43 +
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java | 9
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java | 6
sql/20260616_partner_type.sql | 21
47 files changed, 1,193 insertions(+), 275 deletions(-)
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
index 75cc7a1..13dad3b 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
@@ -3,6 +3,7 @@
import com.ruoyi.account.api.dto.GiveVipDto;
import com.ruoyi.account.api.dto.SendMessageDTO;
import com.ruoyi.account.api.dto.UploadPdfDTO;
+import com.ruoyi.account.api.dto.UserListQueryDto;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppCoupon;
import com.ruoyi.account.api.model.TAppUser;
@@ -37,6 +38,11 @@
}
@Override
+ public R<List<Long>> getVipUserIds(UserListQueryDto query) {
+ return R.fail("会员列表筛选用户ids失败:" + throwable.getMessage());
+ }
+
+ @Override
public R uploadPdf(UploadPdfDTO dto) {
return R.fail("开票发送邮件失败:"+throwable.getMessage());
}
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
index a175afa..6a23925 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -3,6 +3,7 @@
import com.ruoyi.account.api.dto.GiveVipDto;
import com.ruoyi.account.api.dto.SendMessageDTO;
import com.ruoyi.account.api.dto.UploadPdfDTO;
+import com.ruoyi.account.api.dto.UserListQueryDto;
import com.ruoyi.account.api.model.TAppCoupon;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserAddress;
@@ -25,6 +26,10 @@
@ApiOperation(value = "管理后台-根据手机号查询用户ids", tags = {"管理后台-活动费用统计"})
@PostMapping(value = "/t-app-user/user/getUserIdsByPhone")
public R<List<Long>> getUserIdsByPhone(@RequestParam("phone") String phone);
+
+ @ApiOperation(value = "管理后台-会员列表筛选用户ids", tags = {"管理后台-会员列表"})
+ @PostMapping(value = "/t-app-user/user/vip/userIds")
+ R<List<Long>> getVipUserIds(@RequestBody UserListQueryDto query);
@ApiOperation(value = "管理后台-开票发送邮件", tags = {"管理后台-开票发送邮件"})
@PostMapping(value = "/t-app-user/uploadPdf")
public R uploadPdf(@RequestBody UploadPdfDTO dto);
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PartnerListDTO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PartnerListDTO.java
index 2844a86..397bc76 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PartnerListDTO.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PartnerListDTO.java
@@ -17,6 +17,12 @@
private Integer id;
@ApiModelProperty(value = "合作商名称")
private String name;
+ @ApiModelProperty(value = "合作商类型:1=合作商,2=场地方,3=服务商")
+ private Integer partnerType;
+ @ApiModelProperty(value = "角色id")
+ private Integer roleId;
+ @ApiModelProperty(value = "角色名称")
+ private String roleName;
@ApiModelProperty(value = "合作商电话1")
private String phoneOne;
@ApiModelProperty(value = "注册地址")
@@ -29,4 +35,6 @@
private BigDecimal electricityShareRatio;
@ApiModelProperty(value = "服务费分成比例")
private BigDecimal serviceShareRatio;
+ @ApiModelProperty(value = "场地方合作商分账金额")
+ private BigDecimal venueShareAmount;
}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java
index 29be5e5..c6c2ea0 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java
@@ -45,6 +45,12 @@
@ApiModelProperty(value = "角色id", required = true)
private Integer roleId;
/**
+ * 合作商类型:1=合作商,2=场地方,3=服务商
+ */
+ @TableField("partner_type")
+ @ApiModelProperty(value = "合作商类型:1=合作商,2=场地方,3=服务商", required = true)
+ private Integer partnerType;
+ /**
* 角色名称
*/
@TableField(exist = false)
@@ -81,6 +87,12 @@
@ApiModelProperty(value = "服务费分成比例")
private BigDecimal serviceShareRatio;
/**
+ * 场地方合作商分账金额
+ */
+ @TableField("venue_share_amount")
+ @ApiModelProperty(value = "场地方合作商分账金额")
+ private BigDecimal venueShareAmount;
+ /**
* 注册地址
*/
@TableField("address")
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java
index c9c09f2..908db46 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java
@@ -39,6 +39,10 @@
@TableField("site_id")
private Integer siteId;
+ @ApiModelProperty(value = "归属合作商id")
+ @TableField("partner_id")
+ private Integer partnerId;
+
@ApiModelProperty(value = "申请人id")
@TableField("user_id")
private Long userId;
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java
index 5dbc974..8741283 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java
@@ -54,6 +54,15 @@
@TableField(exist = false)
private String chargingPileName;
+ @TableField(exist = false)
+ private String brand;
+
+ @TableField(exist = false)
+ private String deviceName;
+
+ @TableField(exist = false)
+ private String alarmCode;
+
@ApiModelProperty(value = "状态(1=离线,2=故障)")
@TableField("status")
private Integer status;
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java
index 288c211..00018d6 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java
@@ -38,6 +38,10 @@
@TableField("type")
private Integer type;
+ @ApiModelProperty(value = "道闸品牌(1=顺捷,2=吉联)")
+ @TableField("barrier_brand")
+ private Integer barrierBrand;
+
@ApiModelProperty(value = "车场名称")
@TableField("name")
private String name;
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetPartnerList.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetPartnerList.java
index 0f97179..8a0c19f 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetPartnerList.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetPartnerList.java
@@ -14,4 +14,6 @@
public class GetPartnerList extends BasePage {
@ApiModelProperty(value = "合作商名称")
private String name;
+ @ApiModelProperty(value = "合作商类型:1=合作商,2=场地方,3=服务商")
+ private Integer partnerType;
}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/TAccountingStrategyQuery.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/TAccountingStrategyQuery.java
index 80ffa4d..c5f4b53 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/TAccountingStrategyQuery.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/TAccountingStrategyQuery.java
@@ -14,5 +14,8 @@
@ApiModelProperty(value = "1=待审核一级,2=待审核二级,3=审核通过,4=驳回")
private Integer auditStatus;
+ @ApiModelProperty(value = "归属合作商id")
+ private Integer partnerId;
+
}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TAccountingStrategyVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TAccountingStrategyVO.java
index 40ea660..9e45255 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TAccountingStrategyVO.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TAccountingStrategyVO.java
@@ -24,5 +24,8 @@
@ApiModelProperty(value = "申请人名字")
private String userName;
+ @ApiModelProperty(value = "归属合作商名称")
+ private String partnerName;
+
}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java
index 133959d..9d10938 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java
@@ -42,6 +42,14 @@
@TableField("app_user_id")
private Long appUserId;
+ @ApiModelProperty(value = "站点id")
+ @TableField("site_id")
+ private Integer siteId;
+
+ @ApiModelProperty(value = "合作商id")
+ @TableField("partner_id")
+ private Integer partnerId;
+
@ApiModelProperty(value = "开票订单类型(1=充电订单,2=购物订单,3=兑换订单,4=会员订单)")
@TableField("order_type")
private Integer orderType;
@@ -106,6 +114,10 @@
@TableField("mailbox")
private String mailbox;
+ @ApiModelProperty(value = "备注")
+ @TableField("remark")
+ private String remark;
+
@ApiModelProperty(value = "状态(1=待开票,2=开票中,3=已开票)")
@TableField("status")
private Integer status;
@@ -124,4 +136,9 @@
@TableField("billing_user_id")
private Integer billingUserId;
+ @ApiModelProperty(value = "取消时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @TableField("cancel_time")
+ private LocalDateTime cancelTime;
+
}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java
index d12f20b..505e061 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java
@@ -11,6 +11,9 @@
@ApiModel(value = "发票管理Query")
public class TOrderInvoiceQuery extends TimeRangePageQuery {
+ @ApiModelProperty(value = "开票申请id")
+ private Long id;
+
@ApiModelProperty(value = "开票公司")
private String invoicingCompany;
@@ -25,7 +28,8 @@
@ApiModelProperty(value = "开票方式(1=人工,2=自动)")
private Integer invoicingMethod;
- @ApiModelProperty(value = "状态(1=待开票,2=开票中,3=已开票)")
+
+ @ApiModelProperty(value = "状态(1=待开票,2=开票中,3=已开票,4=已取消)")
private Integer status;
@ApiModelProperty(value = "申请人电话")
@@ -40,4 +44,13 @@
@ApiModelProperty(value = "用户id 前端忽略")
private List<Long> userIds;
+ @ApiModelProperty(value = "站点id")
+ private Integer siteId;
+
+ @ApiModelProperty(value = "合作商id")
+ private Integer partnerId;
+
+ @ApiModelProperty(value = "仅看直营,1=是")
+ private Integer directOnly;
+
}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java
index dd9e4f5..3d50dc5 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java
@@ -34,4 +34,10 @@
@ApiModelProperty("站点名称")
private String siteName;
+ @ApiModelProperty("合作商名称")
+ private String partnerName;
+
+ @ApiModelProperty("经营类型")
+ private Integer businessCategory;
+
}
diff --git a/ruoyi-gateway/src/main/resources/bootstrap.yml b/ruoyi-gateway/src/main/resources/bootstrap.yml
index 4b6a008..7c24fc9 100644
--- a/ruoyi-gateway/src/main/resources/bootstrap.yml
+++ b/ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -23,7 +23,7 @@
nacos:
discovery:
# 服务注册地址
- server-addr: 192.168.110.64:8848
+ server-addr: 192.168.110.80:8848
service: ${spring.application.name}
group: DEFAULT_GROUP
namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
@@ -31,7 +31,7 @@
password: nacos
config:
# 配置中心地址
- server-addr: 192.168.110.64:8848
+ server-addr: 192.168.110.80:8848
namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
username: nacos
password: nacos
@@ -52,7 +52,7 @@
datasource:
ds1:
nacos:
- server-addr: 192.168.110.64:8848
+ server-addr: 192.168.110.80:8848
dataId: sentinel-ruoyi-gateway
groupId: DEFAULT_GROUP
username: nacos
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
index 8035f12..4e970b4 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -9,6 +9,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.dto.*;
import com.ruoyi.account.api.model.*;
@@ -444,17 +445,7 @@
end2 = LocalDateTime.now().plusDays(userListQueryDto.getVipEndTime2());
}
//列表查询
- Page<TAppUser> page = appUserService.lambdaQuery()
- .ge(TAppUser::getVipEndTime, LocalDateTime.now())
- .like(userListQueryDto.getUserPhone() != null && !"".equals(userListQueryDto.getUserPhone()), TAppUser::getPhone, userListQueryDto.getUserPhone())
- .eq(userListQueryDto.getCompanyId() != null, TAppUser::getCompanyId, userListQueryDto.getCompanyId())
- .eq(userListQueryDto.getProvinceCode() != null && !"".equals(userListQueryDto.getProvinceCode()), TAppUser::getProvinceCode, userListQueryDto.getProvinceCode())
- .eq(userListQueryDto.getCityCode() != null && !"".equals(userListQueryDto.getCityCode()), TAppUser::getCityCode, userListQueryDto.getCityCode())
- .eq(userListQueryDto.getStatus() != null, TAppUser::getStatus, userListQueryDto.getStatus())
- .eq(userListQueryDto.getVipTypeId() != null, TAppUser::getVipId, userListQueryDto.getVipTypeId())
- .ge(userListQueryDto.getVipEndTime1() != null, TAppUser::getVipEndTime, end1 )
- .le(userListQueryDto.getVipEndTime2() != null, TAppUser::getVipEndTime, end2)
- .in(!userIds.isEmpty(), TAppUser::getId, userIds)
+ Page<TAppUser> page = buildVipUserQuery(userListQueryDto)
.page(Page.of(userListQueryDto.getPageCurr(), userListQueryDto.getPageSize()));
if (page.getRecords().isEmpty()){
return R.ok(page);
@@ -492,6 +483,47 @@
}
return R.ok(page);
}
+
+ @ApiOperation(value = "会员列表筛选用户ids", tags = {"用户管理-会员列表"})
+ @PostMapping(value = "/user/vip/userIds")
+ public R<List<Long>> vipUserIds(@RequestBody UserListQueryDto userListQueryDto) {
+ List<Long> userIds = buildVipUserQuery(userListQueryDto).list().stream()
+ .map(TAppUser::getId)
+ .collect(Collectors.toList());
+ return R.ok(userIds);
+ }
+
+ private LambdaQueryChainWrapper<TAppUser> buildVipUserQuery(UserListQueryDto userListQueryDto) {
+ if (userListQueryDto == null) {
+ userListQueryDto = new UserListQueryDto();
+ }
+ List<Long> userIds = new ArrayList<>();
+ if (userListQueryDto.getUserTagId() != null){
+ userIds = appUserTagService.lambdaQuery().eq(TAppUserTag::getUserTagId, userListQueryDto.getUserTagId()).list().stream().map(TAppUserTag::getAppUserId).collect(Collectors.toList());
+ if (userIds.isEmpty()) {
+ userIds.add(-1L);
+ }
+ }
+ LocalDateTime end1 = null;
+ LocalDateTime end2 = null ;
+ if (userListQueryDto.getVipEndTime1()!=null) {
+ end1 = LocalDateTime.now().plusDays(userListQueryDto.getVipEndTime1());
+ }
+ if (userListQueryDto.getVipEndTime2()!=null){
+ end2 = LocalDateTime.now().plusDays(userListQueryDto.getVipEndTime2());
+ }
+ return appUserService.lambdaQuery()
+ .ge(TAppUser::getVipEndTime, LocalDateTime.now())
+ .like(userListQueryDto.getUserPhone() != null && !"".equals(userListQueryDto.getUserPhone()), TAppUser::getPhone, userListQueryDto.getUserPhone())
+ .eq(userListQueryDto.getCompanyId() != null, TAppUser::getCompanyId, userListQueryDto.getCompanyId())
+ .eq(userListQueryDto.getProvinceCode() != null && !"".equals(userListQueryDto.getProvinceCode()), TAppUser::getProvinceCode, userListQueryDto.getProvinceCode())
+ .eq(userListQueryDto.getCityCode() != null && !"".equals(userListQueryDto.getCityCode()), TAppUser::getCityCode, userListQueryDto.getCityCode())
+ .eq(userListQueryDto.getStatus() != null, TAppUser::getStatus, userListQueryDto.getStatus())
+ .eq(userListQueryDto.getVipTypeId() != null, TAppUser::getVipId, userListQueryDto.getVipTypeId())
+ .ge(userListQueryDto.getVipEndTime1() != null, TAppUser::getVipEndTime, end1 )
+ .le(userListQueryDto.getVipEndTime2() != null, TAppUser::getVipEndTime, end2)
+ .in(!userIds.isEmpty(), TAppUser::getId, userIds);
+ }
@RequiresPermissions(value = {"/coupon/send"}, logical = Logical.OR)
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
index a3396bf..cd2d053 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
@@ -57,7 +57,7 @@
- @RequiresPermissions(value = {"/balanceSheetRecord", "/partners", "/chargingPile/add", "/chargingPile/select", "/chargingPile/update"}, logical = Logical.OR)
+ @RequiresPermissions(value = {"/balanceSheetRecord", "/partners", "/chargingPile/add", "/chargingPile/select", "/chargingPile/update", "/invoiceManagement"}, logical = Logical.OR)
@ResponseBody
@GetMapping("/getPartnerList")
@ApiOperation(value = "获取合作商列表", tags = {"管理后台-合作商管理"})
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
index 4e7cbe6..c04c493 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -270,7 +270,7 @@
@RequiresPermissions(value = {"/systemUserManagement/update", "/site", "/platformRevenueAnalysis", "/chargingOperationAnalysis",
"/chargingUserAnalysis", "/operationMaintenanceAnalysis", "/chargingEquipmentMonitoring", "/activityExpense", "/chargeEvaluation/list",
- "/parkingLot", "/workbench"}, logical = Logical.OR)
+ "/parkingLot", "/workbench", "/invoiceManagement"}, logical = Logical.OR)
@GetMapping("/getSiteList")
@ApiOperation(value = "获取站点列表", tags = {"管理后台-站点管理"})
public AjaxResult<PageInfo<GetSiteListDTO>> getSiteList(GetSiteList siteList){
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 5d7e960..8c5dd94 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
@@ -11,6 +11,7 @@
import com.ruoyi.chargingPile.api.query.TAccountingStrategyQuery;
import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO;
import com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO;
+import com.ruoyi.chargingPile.service.IPartnerService;
import com.ruoyi.chargingPile.service.ISiteService;
import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService;
import com.ruoyi.chargingPile.service.TAccountingStrategyService;
@@ -73,6 +74,9 @@
private SysUserClient sysUserClient;
@Resource
+ private IPartnerService partnerService;
+
+ @Resource
private IntegrationClient integrationClient;
@Resource
@@ -98,6 +102,10 @@
@ApiOperation(tags = {"后台-计费策略"},value = "查询计费策略分页列表")
@PostMapping(value = "/pageList")
public AjaxResult<PageInfo<TAccountingStrategyVO>> pageList(@RequestBody TAccountingStrategyQuery query) {
+ SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+ if (sysUser != null && Objects.equals(sysUser.getRoleType(), 2)) {
+ query.setPartnerId(sysUser.getObjectId());
+ }
return AjaxResult.ok(accountingStrategyService.pageList(query));
}
@@ -123,6 +131,10 @@
@PostMapping(value = "/add")
@Log(title = "【计费策略】添加计费策略", businessType = BusinessType.INSERT)
public AjaxResult<Integer> add(@RequestBody TAccountingStrategyDTO dto) {
+ String partnerCheck = fillAndCheckPartner(dto);
+ if (partnerCheck != null) {
+ return AjaxResult.error(partnerCheck);
+ }
if(null != dto.getSiteId()){
dto.setAuditStatus(3);
}else{
@@ -162,6 +174,10 @@
@ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理"},value = "修改计费策略")
@PostMapping(value = "/update")
public AjaxResult<String> update(@RequestBody TAccountingStrategyDTO dto) {
+ String partnerCheck = fillAndCheckPartner(dto);
+ if (partnerCheck != null) {
+ return AjaxResult.error(partnerCheck);
+ }
Boolean flag = accountingStrategyDetailService.isStrategy24Hour(dto.getAccountingStrategyDetails());
if(flag){
return AjaxResult.error("计费模板时间设置有误差");
@@ -255,6 +271,7 @@
String twoUserName = sysUserClient.getSysUser(accountingStrategy.getTwoUserId()).getData().getNickName();
accountingStrategyVO.setTwoUserName(twoUserName);
}
+ fillPartnerName(accountingStrategyVO);
return AjaxResult.ok(accountingStrategyVO);
}
@@ -307,7 +324,32 @@
accountingStrategyVO.setAccountingStrategyDetailList(accountingStrategyDetailService.list(Wrappers.lambdaQuery(TAccountingStrategyDetail.class)
.eq(TAccountingStrategyDetail::getAccountingStrategyId, id).eq(TAccountingStrategyDetail::getDelFlag, 0)));
}
+ fillPartnerName(accountingStrategyVO);
return AjaxResult.ok(accountingStrategyVO);
+ }
+
+ private String fillAndCheckPartner(TAccountingStrategyDTO dto) {
+ SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+ if (sysUser != null && Objects.equals(sysUser.getRoleType(), 2)) {
+ Integer objectId = sysUser.getObjectId();
+ if (dto.getPartnerId() != null && !Objects.equals(dto.getPartnerId(), objectId)) {
+ return "合作商账号只能选择自己的合作商";
+ }
+ dto.setPartnerId(objectId);
+ }
+ if (dto.getSiteId() == null && dto.getPartnerId() == null) {
+ return "归属合作商不能为空";
+ }
+ return null;
+ }
+
+ private void fillPartnerName(TAccountingStrategyVO vo) {
+ if (vo.getPartnerId() != null) {
+ Partner partner = partnerService.getById(vo.getPartnerId());
+ if (partner != null) {
+ vo.setPartnerName(partner.getName());
+ }
+ }
}
/**
@@ -365,6 +407,10 @@
@ApiOperation(tags = {"后台-申请表单-计费模板审核"},value = "查询计费审核分页列表")
@PostMapping(value = "/auth/pageList")
public AjaxResult<PageInfo<TAccountingStrategyVO>> authPageList(@RequestBody TAccountingStrategyQuery query) {
+ SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
+ if (sysUser != null && Objects.equals(sysUser.getRoleType(), 2)) {
+ query.setPartnerId(sysUser.getObjectId());
+ }
return AjaxResult.ok(accountingStrategyService.pageList1(query));
}
@@ -493,25 +539,20 @@
electronic = tAccountingStrategyDetail.getElectrovalence();
// 非会员下的服务费
BigDecimal multiply = beforeMoney.multiply(tAccountingStrategyDetail.getServiceCharge()).divide(electronic, 2, RoundingMode.HALF_UP);
- if (byId.getBusinessCategory() == 1){
- // 直营才享受会员折扣
- // 根据电价和预付金额 是否有会员折扣 计算最终服务费
- if (split[1].equals("1")){
- // 抵扣金额
- BigDecimal multiply1 = multiply.multiply(discount);
- if (multiply1.compareTo(discountMoney)>0){
- multiply1 = discountMoney;
- }
- // 普通最终服务费
- res = multiply.subtract(multiply1);
+ res = multiply;
+ // 根据电价和预付金额 是否有会员折扣 计算最终服务费
+ if (split[1].equals("1")){
+ // 抵扣金额
+ BigDecimal multiply1 = multiply.multiply(discount);
+ if (multiply1.compareTo(discountMoney)>0){
+ multiply1 = discountMoney;
}
- if (split[1].equals("2")){
- // 内部会员折扣 最终服务费
- res = discountInner.multiply(multiply);
- }
- }else{
- // 非直营
- res = multiply;
+ // 普通最终服务费
+ res = multiply.subtract(multiply1);
+ }
+ if (split[1].equals("2")){
+ // 内部会员折扣 最终服务费
+ res = discountInner.multiply(multiply);
}
break;
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java
index b47e05b..9b63e18 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java
@@ -75,9 +75,9 @@
@ResponseBody
@GetMapping("/getFaultMessageList")
@ApiOperation(value = "获取故障信息列表数据", tags = {"管理后台-设备监控"})
- public AjaxResult<PageInfo<TFaultMessage>> getFaultMessageList(Integer siteId, BasePage basePage){
+ public AjaxResult<PageInfo<TFaultMessage>> getFaultMessageList(Integer siteId, Integer partnerId, Integer partnerType, Integer alarmType, BasePage basePage){
PageInfo<TFaultMessage> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize());
- List<TFaultMessage> faultMessageList = faultMessageService.getFaultMessageList(pageInfo, siteId);
+ List<TFaultMessage> faultMessageList = faultMessageService.getFaultMessageList(pageInfo, siteId, partnerId, partnerType, alarmType);
pageInfo.setRecords(faultMessageList);
return AjaxResult.success(pageInfo);
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
index a6a753d..170150d 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
@@ -79,75 +79,112 @@
@PostMapping(value = "/page")
public R<Page<TParkingRecord>> page(@RequestBody ParkingRecordPageQuery query) {
Long userid = tokenService.getLoginUser().getUserid();
- SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+ SysUser sysUser = sysUserClient.getSysUser(userid).getData();
Integer roleType = sysUser.getRoleType();
- 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.parkingRecordListMenu(sysUser.getObjectId(),siteId).getData();
-
- Boolean b = t1.get(1);
- if (b){
- integers.add(siteId);
- }
- }
- siteIds = integers;
- }
- }
- if (siteIds.isEmpty()){
+ boolean partnerUser = Objects.equals(roleType, 2);
+ Map<Integer, GetSiteListDTO> visibleSiteMap = getVisibleSiteMap(userid);
+ List<Integer> siteIds = filterParkingRecordSiteIds(sysUser, visibleSiteMap, query);
+ if (siteIds.isEmpty()) {
siteIds.add(-1);
}
- List<TParkingLot> list = parkingLotService.lambdaQuery().in( TParkingLot::getSiteId, siteIds).list();
+
+ List<TParkingLot> list = parkingLotService.lambdaQuery().in(TParkingLot::getSiteId, siteIds).list();
List<Integer> ids = new ArrayList<>();
for (TParkingLot tParkingLot : list) {
ids.add(tParkingLot.getId());
}
-
-
- String s1 = "";
- String s2 = "";
- if (query.getTimePeriod()!=null){
- s1 = query.getTimePeriod().split(" - ")[0];
- s2 = query.getTimePeriod().split(" - ")[1];
+ if (ids.isEmpty()) {
+ ids.add(-1);
}
+
+ String startTime = "";
+ String endTime = "";
+ if (query.getTimePeriod() != null) {
+ String[] timeRange = query.getTimePeriod().split(" - ");
+ startTime = timeRange[0];
+ endTime = timeRange[1];
+ }
+ final String finalStartTime = startTime;
+ final String finalEndTime = endTime;
Page<TParkingRecord> page = parkingRecordService.lambdaQuery()
- .in(null != ids && ids.size() > 0, TParkingRecord::getParkingLotId,ids)
+ .in(TParkingRecord::getParkingLotId, ids)
.like(query.getLicensePlate() != null, TParkingRecord::getLicensePlate, query.getLicensePlate())
.eq(query.getStatus() != null, TParkingRecord::getStatus, query.getStatus())
.eq(query.getOutParkingType() != null, TParkingRecord::getOutParkingType, query.getOutParkingType())
- .between(query.getTimePeriod()!=null,TParkingRecord::getInParkingTime,s1,s2)
- .or()
- .between(query.getTimePeriod()!=null,TParkingRecord::getOutParkingTime,s1,s2)
+ .and(query.getTimePeriod() != null, wrapper -> wrapper
+ .between(TParkingRecord::getInParkingTime, finalStartTime, finalEndTime)
+ .or()
+ .between(TParkingRecord::getOutParkingTime, finalStartTime, finalEndTime))
.orderByDesc(TParkingRecord::getCreateTime)
.page(Page.of(query.getPageCurr(), query.getPageSize()));
for (TParkingRecord record : page.getRecords()) {
TParkingLot byId = parkingLotService.getById(record.getParkingLotId());
record.setUid(record.getId().toString());
- if (byId!=null) {
+ if (byId != null) {
record.setParkName(byId.getName());
- if (roleType==2){
+ record.setSiteId(byId.getSiteId());
+ if (partnerUser) {
List<Boolean> data1 = partnerClient.parkingRecordListMenu(sysUser.getObjectId(), byId.getSiteId()).getData();
- record.setAuthInfo(data1.get(0));
- record.setAuthOut(data1.get(1));
+ record.setAuthInfo(getMenuFlag(data1, 0));
+ record.setAuthOut(getMenuFlag(data1, 1));
}
}
}
return R.ok(page);
}
-
-
- @RequiresPermissions(value = {"/parkingPaymentOrder"}, logical = Logical.OR)
+
+ private Map<Integer, GetSiteListDTO> getVisibleSiteMap(Long userId) {
+ Map<Integer, GetSiteListDTO> siteMap = new HashMap<>();
+ if (userId == null) {
+ return siteMap;
+ }
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+ if (data != null) {
+ for (GetSiteListDTO datum : data) {
+ if (datum.getId() != null) {
+ siteMap.put(datum.getId(), datum);
+ }
+ }
+ }
+ return siteMap;
+ }
+
+ private List<Integer> filterParkingRecordSiteIds(SysUser sysUser, Map<Integer, GetSiteListDTO> visibleSiteMap, ParkingRecordPageQuery query) {
+ List<Integer> siteIds = new ArrayList<>();
+ if (visibleSiteMap == null || visibleSiteMap.isEmpty()) {
+ return siteIds;
+ }
+ boolean partnerUser = sysUser != null && Objects.equals(sysUser.getRoleType(), 2);
+ for (GetSiteListDTO site : visibleSiteMap.values()) {
+ Integer siteId = site.getId();
+ if (siteId == null) {
+ continue;
+ }
+ if (query.getSiteId() != null && !query.getSiteId().equals(siteId)) {
+ continue;
+ }
+ if (query.getPartnerId() != null && !query.getPartnerId().equals(site.getPartnerId())) {
+ continue;
+ }
+ if (query.getSiteType() != null && !query.getSiteType().equals(site.getSiteType())) {
+ continue;
+ }
+ if (partnerUser) {
+ List<Boolean> menuFlags = partnerClient.parkingRecordListMenu(sysUser.getObjectId(), siteId).getData();
+ if (!getMenuFlag(menuFlags, 1)) {
+ continue;
+ }
+ }
+ siteIds.add(siteId);
+ }
+ return siteIds;
+ }
+
+ private boolean getMenuFlag(List<Boolean> menuFlags, int index) {
+ return menuFlags != null && menuFlags.size() > index && Boolean.TRUE.equals(menuFlags.get(index));
+ }
+ @RequiresPermissions(value = {"/parkingPaymentOrder"}, logical = Logical.OR)
@ApiOperation(tags = {"后台-订单管理-停车记录"},value = "停车缴费订单列表")
@PostMapping(value = "/pageList")
public R<TParkingRecordPageInfoVO> pageList(@RequestBody ParkingRecordQuery query) {
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordPageQuery.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordPageQuery.java
index 023e84b..019c271 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordPageQuery.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordPageQuery.java
@@ -14,4 +14,7 @@
String licensePlate;
Integer status;
Integer outParkingType;
+ Integer siteType;
+ Integer partnerId;
+ Integer siteId;
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/PartnerMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/PartnerMapper.java
index c5bd072..b31b854 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/PartnerMapper.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/PartnerMapper.java
@@ -22,4 +22,9 @@
* @return
*/
List<PartnerListDTO> getPartnerList(PageInfo<PartnerListDTO> pageInfo, @Param("item") GetPartnerList partnerList);
+
+ /**
+ * Query built-in role by partner type role name.
+ */
+ Integer getDefaultPartnerRoleId(@Param("roleName") String roleName);
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java
index f85b500..f1e5203 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java
@@ -22,5 +22,5 @@
* @param pageInfo
* @return
*/
- List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, @Param("siteIds") List<Integer> siteIds);
+ List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, @Param("siteIds") List<Integer> siteIds, @Param("partnerId") Integer partnerId, @Param("partnerType") Integer partnerType);
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java
index 4c72b29..8b2beb0 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java
@@ -30,5 +30,5 @@
* @param siteId
* @return
*/
- List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, Integer siteId);
+ List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, Integer siteId, Integer partnerId, Integer partnerType, Integer alarmType);
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
index 8abb955..1fafeec 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
@@ -34,11 +34,6 @@
*/
@Service
public class PartnerServiceImpl extends ServiceImpl<PartnerMapper, Partner> implements IPartnerService {
-
- /**
- * TODO 确认合作商默认角色ID,当前先使用通用角色占位。
- */
- private static final Long PARTNER_DEFAULT_ROLE_ID = 2L;
@Resource
private SysUserClient sysUserClient;
@@ -92,7 +87,7 @@
if(ajaxResult.isError()){
return ajaxResult;
}
- partner.setRoleId(PARTNER_DEFAULT_ROLE_ID.intValue());
+ assignDefaultRole(partner);
Partner one = this.getOne(new LambdaQueryWrapper<Partner>()
.eq(Partner::getCode, partner.getCode())
.eq(Partner::getDelFlag, 0)
@@ -116,7 +111,7 @@
user.setPassword(partner.getPassword());
user.setStatus("0");
user.setDelFlag("0");
- user.setRoleId(PARTNER_DEFAULT_ROLE_ID);
+ user.setRoleId(partner.getRoleId().longValue());
user.setRoleType(2);
user.setPassWordUpdate(new Date());
R<Long> r = sysUserClient.addSysUser(user);
@@ -143,6 +138,9 @@
}
if(StringUtils.isEmpty(partner.getName())){
return AjaxResult.error("合作商名称不能为空");
+ }
+ if(null == partner.getPartnerType()){
+ return AjaxResult.error("合作商类型不能为空");
}
if(StringUtils.isEmpty(partner.getPhoneOne())){
return AjaxResult.error("合作商电话1不能为空");
@@ -180,7 +178,7 @@
if(ajaxResult.isError()){
return ajaxResult;
}
- partner.setRoleId(PARTNER_DEFAULT_ROLE_ID.intValue());
+ assignDefaultRole(partner);
Partner one = this.getOne(new LambdaQueryWrapper<Partner>()
.eq(Partner::getCode, partner.getCode())
.eq(Partner::getDelFlag, 0)
@@ -210,7 +208,7 @@
user.setNickName(partner.getName());
user.setAvatar(partner.getLogoUrl());
user.setPassword(partner.getPassword());
- user.setRoleId(PARTNER_DEFAULT_ROLE_ID);
+ user.setRoleId(partner.getRoleId().longValue());
user.setRoleType(2);
user.setObjectId(partner.getId());
user.setPassWordUpdate(new Date());
@@ -227,7 +225,7 @@
user.setPassword(partner.getPassword());
user.setPassWordUpdate(new Date());
}
- user.setRoleId(PARTNER_DEFAULT_ROLE_ID);
+ user.setRoleId(partner.getRoleId().longValue());
R r = sysUserClient.updateSysUser(user);
if(200 != r.getCode()){
throw new RuntimeException(r.getMsg());
@@ -240,6 +238,24 @@
}
+ private void assignDefaultRole(Partner partner) {
+ String roleName = partnerTypeRoleName(partner.getPartnerType());
+ Integer roleId = this.baseMapper.getDefaultPartnerRoleId(roleName);
+ if (roleId == null) {
+ throw new RuntimeException("系统内置角色【" + roleName + "】不存在,请先配置角色");
+ }
+ partner.setRoleId(roleId);
+ }
+
+ private String partnerTypeRoleName(Integer partnerType) {
+ if (Integer.valueOf(2).equals(partnerType)) {
+ return "场地方";
+ }
+ if (Integer.valueOf(3).equals(partnerType)) {
+ return "服务商";
+ }
+ return "合作商";
+ }
/**
* 删除合作商
* @param ids 合作商id
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
index 756d1f3..1397de1 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
@@ -203,16 +203,22 @@
@Override
public Boolean isStrategyPriceConsistent(List<TAccountingStrategyDetail> accountingStrategyDetails) {
+ Map<Integer, BigDecimal> phaseToElectrovalence = new HashMap<>();
Map<Integer, BigDecimal> phaseToServiceFee = new HashMap<>();
Map<Integer, BigDecimal> phaseToCostServiceFee = new HashMap<>();
for (TAccountingStrategyDetail detail : accountingStrategyDetails) {
Integer type = detail.getType();
+ BigDecimal electrovalence = detail.getElectrovalence();
BigDecimal serviceFee = detail.getServiceCharge();
BigDecimal costServiceCharge = detail.getCostServiceCharge();
if (phaseToServiceFee.containsKey(type)) {
+ BigDecimal existingElectrovalence = phaseToElectrovalence.get(type);
BigDecimal existingFee = phaseToServiceFee.get(type);
BigDecimal existingCostServiceCharge = phaseToCostServiceFee.get(type);
+ if (existingElectrovalence.compareTo(electrovalence) != 0) {
+ return false;
+ }
if (existingFee.compareTo(serviceFee) != 0) {
return false; // 发现不一致的服务费
}
@@ -220,6 +226,7 @@
return false; // 发现不一致的原价服务费
}
} else {
+ phaseToElectrovalence.put(type, electrovalence);
phaseToServiceFee.put(type, serviceFee);
phaseToCostServiceFee.put(type, costServiceCharge);
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
index 46a99af..942ec5b 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -500,8 +500,8 @@
}
List<TChargingGun> total = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getSiteId, siteIds).eq(TChargingGun::getDelFlag, 0));
List<TChargingGun> charging = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getSiteId, siteIds).eq(TChargingGun::getStatus, 4).eq(TChargingGun::getDelFlag, 0));
- BigDecimal ratedPower = total.stream().map(TChargingGun::getRatedPower).reduce(BigDecimal.ZERO, BigDecimal::add);
- BigDecimal realTimePower = charging.stream().map(TChargingGun::getChargingPower).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal ratedPower = sites.stream().map(Site::getRatedPower).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal realTimePower = charging.stream().map(TChargingGun::getChargingPower).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
ChargeMonitoring chargeMonitoring = new ChargeMonitoring();
chargeMonitoring.setPhone(sites.size() == 1 ? sites.get(0).getPhone() : "");
@@ -511,7 +511,7 @@
chargeMonitoring.setNotCharged(total.size() - charging.size());
chargeMonitoring.setRatedPower(ratedPower.setScale(4, RoundingMode.HALF_EVEN));
chargeMonitoring.setRealTimePower(realTimePower.setScale(4, RoundingMode.HALF_EVEN));
- if(ratedPower.equals(BigDecimal.ZERO)){
+ if(ratedPower.compareTo(BigDecimal.ZERO) == 0){
chargeMonitoring.setDemandPowerSatisfactionRate(BigDecimal.ZERO);
}else{
chargeMonitoring.setDemandPowerSatisfactionRate(realTimePower.divide(ratedPower, new MathContext(2, RoundingMode.HALF_EVEN))
@@ -531,14 +531,12 @@
chargeTrend.put("value", value1);
chargeMonitoring.setChargeTrend(chargeTrend);
- //每日利用率=当日充电度数/(桩总功率*24小时)
- List<TChargingPile> list = this.list(new LambdaQueryWrapper<TChargingPile>().in(TChargingPile::getSiteId, siteIds).eq(TChargingPile::getDelFlag, 0));
- BigDecimal v = list.stream().map(TChargingPile::getRatedPower).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_EVEN);
+ // 每日利用率=当日充电度数/(站点变压器额定功率*24小时)
List<Double> data = chargingOrderAccountingStrategyClient.getDailyChargingDegree(6, siteIds).getData();
List<Double> value2 = new ArrayList<>();
- BigDecimal multiply = v.multiply(new BigDecimal(24));
+ BigDecimal multiply = ratedPower.multiply(new BigDecimal(24));
for (Double datum : data) {
- if(list.size() == 0){
+ if(multiply.compareTo(BigDecimal.ZERO) == 0){
value2.add(0D);
}else{
Double datum1 = new BigDecimal(datum).divide(multiply, new MathContext(4, RoundingMode.HALF_EVEN))
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java
index 485546a..f80375a 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java
@@ -25,6 +25,7 @@
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -96,7 +97,10 @@
* @return
*/
@Override
- public List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, Integer siteId) {
+ public List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, Integer siteId, Integer partnerId, Integer partnerType, Integer alarmType) {
+ if (alarmType != null && alarmType != 1) {
+ return Collections.emptyList();
+ }
//校验合作商权限
SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
Integer roleType = sysUser.getRoleType();
@@ -120,7 +124,7 @@
}else{
siteIds.add(siteId);
}
- List<TFaultMessage> faultMessageList = this.baseMapper.getFaultMessageList(pageInfo, siteIds);
+ List<TFaultMessage> faultMessageList = this.baseMapper.getFaultMessageList(pageInfo, siteIds, partnerId, partnerType);
for (TFaultMessage faultMessage : faultMessageList) {
faultMessage.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, faultMessage.getSiteId(), SiteMenu.FAULT_INFORMATION_LIST_DEL));
}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml
index ef3e6e3..9af10a6 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml
@@ -8,11 +8,13 @@
<result column="code" property="code" />
<result column="`name`" property="name" />
<result column="role_id" property="roleId" />
+ <result column="partner_type" property="partnerType" />
<result column="logo_url" property="logoUrl" />
<result column="rate" property="rate" />
<result column="icbc_partner_id" property="icbcPartnerId" />
<result column="electricity_share_ratio" property="electricityShareRatio" />
<result column="service_share_ratio" property="serviceShareRatio" />
+ <result column="venue_share_amount" property="venueShareAmount" />
<result column="address" property="address" />
<result column="phone_one" property="phoneOne" />
<result column="phone_two" property="phoneTwo" />
@@ -27,18 +29,37 @@
<select id="getPartnerList" resultType="com.ruoyi.chargingPile.api.dto.PartnerListDTO">
select
- id,
- name,
- phone_one as phoneOne,
- address,
- account,
- remark,
- electricity_share_ratio as electricityShareRatio,
- service_share_ratio as serviceShareRatio
- from t_partner where del_flag = 0
+ p.id,
+ p.name,
+ p.partner_type as partnerType,
+ p.role_id as roleId,
+ r.role_name as roleName,
+ p.phone_one as phoneOne,
+ p.address,
+ p.account,
+ p.remark,
+ p.electricity_share_ratio as electricityShareRatio,
+ p.service_share_ratio as serviceShareRatio,
+ p.venue_share_amount as venueShareAmount
+ from t_partner p
+ left join charging_pile_other.sys_role r on p.role_id = r.role_id
+ where p.del_flag = 0
<if test="null != item.name and '' != item.name">
- and `name` like CONCAT('%', #{item.name}, '%')
+ and p.`name` like CONCAT('%', #{item.name}, '%')
</if>
- order by create_time desc
+ <if test="null != item.partnerType">
+ and p.partner_type = #{item.partnerType}
+ </if>
+ order by p.create_time desc
+ </select>
+
+ <select id="getDefaultPartnerRoleId" resultType="java.lang.Integer">
+ select role_id
+ from charging_pile_other.sys_role
+ where del_flag = '0'
+ and status = '0'
+ and role_name = #{roleName}
+ order by role_id asc
+ limit 1
</select>
</mapper>
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 a557970..1c7e24c 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
@@ -6,6 +6,7 @@
<resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.TAccountingStrategy">
<id column="id" property="id" />
<result column="site_id" property="siteId" />
+ <result column="partner_id" property="partnerId" />
<result column="`name`" property="name" />
<result column="description" property="description" />
<result column="discount" property="discount" />
@@ -23,48 +24,58 @@
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
- id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,parent_id
+ id, site_id, partner_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,parent_id
</sql>
<select id="pageList" resultType="com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO">
SELECT
- id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,user_id,parent_id
- FROM t_accounting_strategy
+ tas.id, tas.site_id, tas.partner_id as partnerId, tp.name as partnerName, tas.`name`, tas.description, tas.discount,tas.first_user_id,tas.two_user_id,tas.first_remark,tas.two_remark,tas.audit_status,tas.first_audit_time,tas.two_audit_time, tas.create_time, tas.del_flag,tas.user_id,tas.parent_id
+ FROM t_accounting_strategy tas
+ LEFT JOIN t_partner tp ON tas.partner_id = tp.id
<where>
<if test="query.name != null and query.name != ''">
- AND `name` LIKE concat('%',#{query.name}, '%')
+ AND tas.`name` LIKE concat('%',#{query.name}, '%')
</if>
<if test="query.auditStatus != null">
- AND audit_status = #{query.auditStatus}
+ AND tas.audit_status = #{query.auditStatus}
</if>
- AND site_id IS NULL
- AND (parent_id IS NULL OR audit_status = 3 OR audit_status = 4)
- AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
+ <if test="query.partnerId != null">
+ AND tas.partner_id = #{query.partnerId}
+ </if>
+ AND tas.site_id IS NULL
+ AND (tas.parent_id IS NULL OR tas.audit_status = 3 OR tas.audit_status = 4)
+ AND tas.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
</where>
- ORDER BY create_time DESC
+ ORDER BY tas.create_time DESC
</select>
<select id="pageList1" resultType="com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO">
SELECT
- id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,user_id,parent_id
- FROM t_accounting_strategy
+ tas.id, tas.site_id, tas.partner_id as partnerId, tp.name as partnerName, tas.`name`, tas.description, tas.discount,tas.first_user_id,tas.two_user_id,tas.first_remark,tas.two_remark,tas.audit_status,tas.first_audit_time,tas.two_audit_time, tas.create_time, tas.del_flag,tas.user_id,tas.parent_id
+ FROM t_accounting_strategy tas
+ LEFT JOIN t_partner tp ON tas.partner_id = tp.id
<where>
<if test="query.name != null and query.name != ''">
- AND `name` LIKE concat('%',#{query.name}, '%')
+ AND tas.`name` LIKE concat('%',#{query.name}, '%')
</if>
<if test="query.auditStatus != null">
- AND audit_status = #{query.auditStatus}
+ AND tas.audit_status = #{query.auditStatus}
</if>
- AND site_id IS NULL
+ <if test="query.partnerId != null">
+ AND tas.partner_id = #{query.partnerId}
+ </if>
+ AND tas.site_id IS NULL
</where>
- ORDER BY create_time DESC
+ ORDER BY tas.create_time DESC
</select>
<select id="getPlatformAccountingStrategy" resultType="com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO">
SELECT
- id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,parent_id
- FROM t_accounting_strategy where del_flag = 0 and site_id is not null order by create_time desc
+ tas.id, tas.site_id, tas.partner_id as partnerId, tp.name as partnerName, tas.`name`, tas.description, tas.discount,tas.first_user_id,tas.two_user_id,tas.first_remark,tas.two_remark,tas.audit_status,tas.first_audit_time,tas.two_audit_time, tas.create_time, tas.del_flag,tas.parent_id
+ FROM t_accounting_strategy tas
+ LEFT JOIN t_partner tp ON tas.partner_id = tp.id
+ where tas.del_flag = 0 and tas.site_id is not null order by tas.create_time desc
</select>
</mapper>
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml
index 538c633..f8e3e7e 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml
@@ -27,10 +27,14 @@
select
a.*,
b.name as chargingPileName,
+ b.name as deviceName,
+ b.manufacturer as brand,
+ b.code as alarmCode,
c.name as siteName
from t_fault_message a
left join t_charging_pile b on (a.charging_pile_id = b.id)
left join t_site c on (a.site_id = c.id)
+ left join t_partner d on (c.partner_id = d.id)
where a.del_flag = 0
<if test="null != siteIds and siteIds.size() > 0">
and a.site_id in
@@ -38,6 +42,12 @@
#{item}
</foreach>
</if>
+ <if test="partnerId != null">
+ and c.partner_id = #{partnerId}
+ </if>
+ <if test="partnerType != null">
+ and d.partner_type = #{partnerType}
+ </if>
order by a.create_time desc
</select>
</mapper>
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml
index 2d3f922..a03fa8b 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml
@@ -5,6 +5,8 @@
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.TParkingLot">
<id column="id" property="id" />
+ <result column="type" property="type" />
+ <result column="barrier_brand" property="barrierBrand" />
<result column="`name`" property="name" />
<result column="code" property="code" />
<result column="site_id" property="siteId" />
@@ -21,7 +23,7 @@
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
- id, `name`, code, site_id, charge_free_duration, charge_capping, charge_rate, non_charge_free_duration, non_charge_capping, non_charge_rate, remark, create_time, del_flag
+ id, type, barrier_brand, `name`, code, site_id, charge_free_duration, charge_capping, charge_rate, non_charge_free_duration, non_charge_capping, non_charge_rate, remark, create_time, del_flag
</sql>
<select id="pageList" resultType="com.ruoyi.chargingPile.api.vo.TParkingLotVO">
SELECT
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index edce79f..fd39ada 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -1,8 +1,11 @@
package com.ruoyi.order.controller;
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
@@ -49,6 +52,7 @@
import com.ruoyi.order.dto.MyChargingOrderList;
import com.ruoyi.order.dto.OrderEvaluateVo;
import com.ruoyi.order.dto.*;
+import com.ruoyi.order.export.PayOrderExport;
import com.ruoyi.order.service.*;
import com.ruoyi.order.util.PreviousSixMonths;
import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
@@ -72,10 +76,17 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.List;
import java.util.stream.Collectors;
+
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.core.utils.WebUtils;
+import org.apache.poi.ss.usermodel.Workbook;
/**
* <p>
@@ -214,6 +225,82 @@
return chargingOrderService.payOrderQuery(payOrderQueryDto);
}
+ @RequiresPermissions(value = {"/invoiceManagement/select_order", "/invoiceManagement/export", "/paymentOrder/order"}, logical = Logical.OR)
+ @ResponseBody
+ @PutMapping(value = "/pay/order/export")
+ @ApiOperation(value = "导出查看订单列表", tags = {"管理后台-支付订单-订单信息"})
+ @Log(title = "发票管理查看订单导出", businessType = BusinessType.EXPORT)
+ public void exportPayOrder(@RequestBody PayOrderQueryDto payOrderQueryDto) {
+ payOrderQueryDto.setPageCurr(1);
+ payOrderQueryDto.setPageSize(10000);
+ R<PageInfo<PayOrderDto>> result = chargingOrderService.payOrderQuery(payOrderQueryDto);
+ List<PayOrderDto> records = result.getData() == null || result.getData().getRecords() == null
+ ? Collections.emptyList() : result.getData().getRecords();
+ List<PayOrderExport> exports = records.stream().map(this::buildPayOrderExport).collect(Collectors.toList());
+ Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), PayOrderExport.class, exports);
+ HttpServletResponse response = WebUtils.response();
+ response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+ response.setCharacterEncoding("utf-8");
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Cache-Control", "no-cache");
+ try {
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("订单列表.xls", "utf-8"));
+ try (ServletOutputStream outputStream = response.getOutputStream()) {
+ workbook.write(outputStream);
+ }
+ workbook.close();
+ } catch (IOException e) {
+ log.error("导出查看订单列表失败", e);
+ }
+ }
+
+ private PayOrderExport buildPayOrderExport(PayOrderDto dto) {
+ PayOrderExport export = new PayOrderExport();
+ export.setCode(dto.getCode());
+ export.setType(formatPayOrderType(dto.getType()));
+ export.setTitle(dto.getTitle());
+ export.setPhone(dto.getPhone());
+ export.setOrderStatus(dto.getPayTime() != null ? "订单支付成功" : "订单完成");
+ export.setStatus(formatPayOrderStatus(dto.getType(), dto.getStatus()));
+ export.setRefundStatus(dto.getRefundStatus() != null && dto.getRefundStatus() == 1 ? "有退款" : "无退款");
+ export.setRechargeAmount(dto.getRechargeAmount());
+ export.setPaymentAmount(dto.getPaymentAmount());
+ export.setFinalAmount(dto.getFinalAmount());
+ export.setCreateTime(dto.getCreateTime() == null ? null : DateUtils.localDateTimeToString(dto.getCreateTime()));
+ export.setEndTime(dto.getEndTime() == null ? null : DateUtils.localDateTimeToString(dto.getEndTime()));
+ export.setPayTime(dto.getPayTime() == null ? null : DateUtils.localDateTimeToString(dto.getPayTime()));
+ return export;
+ }
+
+ private String formatPayOrderType(Integer type) {
+ if (type == null || type < 1 || type > 4) {
+ return "-";
+ }
+ return new String[]{"充电订单", "购物订单", "vip订单", "停车订单"}[type - 1];
+ }
+
+ private String formatPayOrderStatus(Integer type, Integer status) {
+ if (type == null) {
+ return "-";
+ }
+ if (type == 3) {
+ return "支付成功";
+ }
+ if (status == null) {
+ return "-";
+ }
+ if (type == 1 && status >= 0 && status <= 5) {
+ return new String[]{"未知", "等待中", "启动中", "充电中", "停止中", "已结束"}[status];
+ }
+ if (type == 2 && status >= 1 && status <= 4) {
+ return new String[]{"待发货", "待收货", "已完成", "已取消"}[status - 1];
+ }
+ if (type == 4 && status >= 1 && status <= 3) {
+ return new String[]{"已进场", "已出场", "已缴费出场"}[status - 1];
+ }
+ return "-";
+ }
+
public static List<PayOrderDto> testing5(long total, long current, long size, List<PayOrderDto> str){
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java
index e74b2db..7765dba 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java
@@ -2,17 +2,14 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppUser;
-import com.ruoyi.chargingPile.api.domain.SiteMenu;
import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
import com.ruoyi.chargingPile.api.feignClient.PartnerClient;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
-import com.ruoyi.common.core.web.domain.BasePojo;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
@@ -20,21 +17,14 @@
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.service.TokenService;
-import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.api.model.*;
import com.ruoyi.order.api.query.TOrderAppealQuery;
-import com.ruoyi.order.api.vo.ChargingOrderVO;
import com.ruoyi.order.api.vo.TOrderAppealVO;
import com.ruoyi.order.dto.ManageFeedbackDto;
import com.ruoyi.order.dto.ManageOrderAppealQuery;
import com.ruoyi.order.service.*;
-import com.ruoyi.other.api.feignClient.RoleSiteClient;
-import com.ruoyi.other.api.feignClient.UserSiteClient;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
-import com.ruoyi.system.api.feignClient.SysUserRoleClient;
-import com.ruoyi.system.api.model.SysUserRoleVo;
-import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -72,17 +62,6 @@
private SysUserClient sysUserClient;
@Resource
- private PartnerClient partnerService;
-
- @Resource
- private UserSiteClient userSiteClient;
-
- @Resource
- private RoleSiteClient roleSiteClient;
-
- @Resource
- private SysUserRoleClient sysUserRoleClient;
- @Resource
private PartnerClient partnerClient;
@Autowired
@@ -100,6 +79,9 @@
public R<Page<TOrderAppeal>> managePageList(@RequestBody ManageOrderAppealQuery manageOrderAppealQuery) {
Integer pageCurr = manageOrderAppealQuery.getPageCurr();
Integer pageSize = manageOrderAppealQuery.getPageSize();
+ boolean hasSiteFilter = manageOrderAppealQuery.getSiteId() != null
+ || manageOrderAppealQuery.getPartnerId() != null
+ || manageOrderAppealQuery.getSiteType() != null;
Page<TOrderAppeal> page = orderAppealService.lambdaQuery().eq(manageOrderAppealQuery.getStatus() != null, TOrderAppeal::getStatus, manageOrderAppealQuery.getStatus())
.like(manageOrderAppealQuery.getCode() != null, TOrderAppeal::getCode, manageOrderAppealQuery.getCode())
.like(manageOrderAppealQuery.getPhone() != null, TOrderAppeal::getPhone, manageOrderAppealQuery.getPhone())
@@ -109,56 +91,39 @@
.page(Page.of(1, 99999999));
SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
Integer roleType = sysUser.getRoleType();
+ boolean partnerUser = Objects.equals(roleType, 2);
+ Map<Integer, GetSiteListDTO> visibleSiteMap = partnerUser || hasSiteFilter ? getVisibleSiteMap(sysUser) : Collections.emptyMap();
+ Set<Integer> partnerSiteIds = partnerUser ? getManageAppealSiteIds(sysUser, visibleSiteMap.keySet()) : Collections.emptySet();
List<TOrderAppeal> res = new ArrayList<>();
for (TOrderAppeal record : page.getRecords()) {
- record.setUid(record.getId()+"");
- if (record.getOrderType()!=1){
- res.add(record);
+ record.setUid(record.getId() + "");
+ if (!Objects.equals(record.getOrderType(), 1)) {
+ if (!partnerUser && !hasSiteFilter) {
+ res.add(record);
+ }
continue;
}
- if(roleType!=2){
- res.add(record);
- continue;
- }
- if (roleType == 2 && record.getOrderType()==1){
- List<Integer> siteIds = new ArrayList<>();
- if (sysUser.getUserId() != null){
- List<GetSiteListDTO> data = siteClient.getSiteListByUserId(sysUser.getUserId()).getData();
- for (GetSiteListDTO datum : data) {
- siteIds.add(datum.getId());
- }
- }
- if (siteIds.isEmpty()){
- siteIds.add(-1);
- }else{
- List<Integer> integers = new ArrayList<>();
- for (Integer siteId : siteIds) {
- // 校验有没有这个站点的权限
- List<Boolean> t1= partnerClient.managePageListMenu(sysUser.getObjectId(),siteId).getData();
- Boolean b = t1.get(2);
- if (b){
- integers.add(siteId);
- }
- }
- siteIds = integers;
- }
- if (siteIds.isEmpty()){
- siteIds.add(-1);
- }
- TChargingOrder byId = chargingOrderService.getById(record.getOrderId());
- if (byId!=null&&siteIds.contains(byId.getSiteId())){
- res.add(record);
- // 校验有没有这个站点的权限
- List<Boolean> data = partnerClient.managePageListMenu(sysUser.getObjectId(), byId.getSiteId()).getData();
- record.setAuthInfo(data.get(0));
- record.setAuthHandle(data.get(1));
- }
- if (byId==null){
- record.setAuthInfo(false);
- record.setAuthHandle(false);
- }
+ TChargingOrder chargingOrder = chargingOrderService.getById(record.getOrderId());
+ if (chargingOrder == null) {
+ record.setAuthInfo(false);
+ record.setAuthHandle(false);
+ continue;
}
+
+ Integer siteId = chargingOrder.getSiteId();
+ if (partnerUser && !partnerSiteIds.contains(siteId)) {
+ continue;
+ }
+ if (hasSiteFilter && !matchSiteFilter(siteId, visibleSiteMap, manageOrderAppealQuery)) {
+ continue;
+ }
+ if (partnerUser) {
+ List<Boolean> data = partnerClient.managePageListMenu(sysUser.getObjectId(), siteId).getData();
+ record.setAuthInfo(getMenuFlag(data, 0));
+ record.setAuthHandle(getMenuFlag(data, 1));
+ }
+ res.add(record);
}
List<TOrderAppeal> res1 = testing4(res.size(), pageCurr, pageSize, res);
page.setCurrent(pageCurr);
@@ -167,6 +132,51 @@
page.setRecords(res1);
return R.ok(page);
}
+
+ private Map<Integer, GetSiteListDTO> getVisibleSiteMap(SysUser sysUser) {
+ if (sysUser == null || sysUser.getUserId() == null) {
+ return Collections.emptyMap();
+ }
+ List<GetSiteListDTO> data = siteClient.getSiteListByUserId(sysUser.getUserId()).getData();
+ Map<Integer, GetSiteListDTO> siteMap = new HashMap<>();
+ if (data != null) {
+ for (GetSiteListDTO datum : data) {
+ if (datum.getId() != null) {
+ siteMap.put(datum.getId(), datum);
+ }
+ }
+ }
+ return siteMap;
+ }
+
+ private Set<Integer> getManageAppealSiteIds(SysUser sysUser, Set<Integer> visibleSiteIds) {
+ Set<Integer> siteIds = new HashSet<>();
+ if (sysUser == null || sysUser.getObjectId() == null || visibleSiteIds == null) {
+ return siteIds;
+ }
+ for (Integer siteId : visibleSiteIds) {
+ List<Boolean> menuFlags = partnerClient.managePageListMenu(sysUser.getObjectId(), siteId).getData();
+ if (getMenuFlag(menuFlags, 2)) {
+ siteIds.add(siteId);
+ }
+ }
+ return siteIds;
+ }
+
+ private boolean matchSiteFilter(Integer siteId, Map<Integer, GetSiteListDTO> siteMap, ManageOrderAppealQuery query) {
+ if (query.getSiteId() != null && !query.getSiteId().equals(siteId)) {
+ return false;
+ }
+ GetSiteListDTO site = siteMap.get(siteId);
+ if (query.getPartnerId() != null && (site == null || !query.getPartnerId().equals(site.getPartnerId()))) {
+ return false;
+ }
+ return query.getSiteType() == null || (site != null && query.getSiteType().equals(site.getSiteType()));
+ }
+
+ private boolean getMenuFlag(List<Boolean> menuFlags, int index) {
+ return menuFlags != null && menuFlags.size() > index && Boolean.TRUE.equals(menuFlags.get(index));
+ }
public static List<TOrderAppeal> testing4(long total, long current, long size, List<TOrderAppeal> str){
List<TOrderAppeal> result = new ArrayList<>();
//获取初始化分页结构
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
index cfb6986..d43bb3b 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
@@ -14,6 +14,7 @@
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.api.model.TOrderInvoice;
import com.ruoyi.order.api.query.TOrderInvoiceQuery;
import com.ruoyi.order.api.vo.TOrderInvoiceVO;
@@ -37,7 +38,10 @@
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
+import java.time.LocalDateTime;
import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
/**
* <p>
@@ -86,9 +90,29 @@
TOrderInvoice orderInvoice = orderInvoiceService.getById(dto.getId());
orderInvoice.setInvoiceUrl(dto.getInvoiceUrl());
orderInvoice.setStatus(3);
+ orderInvoice.setBillingTime(LocalDateTime.now());
+ Long userId = SecurityUtils.getUserId();
+ orderInvoice.setBillingUserId(userId == null ? null : userId.intValue());
orderInvoiceService.updateById(orderInvoice);
dto.setMailBox(orderInvoice.getMailbox());
appUserClient.uploadPdf(dto);
+ return AjaxResult.success();
+ }
+
+ @RequiresPermissions(value = {"/invoiceManagement/accept_hear_case"}, logical = Logical.OR)
+ @PostMapping("/cancel")
+ @ApiOperation(value = "取消开票申请", tags = {"管理后台-发票管理"})
+ public AjaxResult<String> cancel(@RequestBody TOrderInvoice dto){
+ TOrderInvoice orderInvoice = orderInvoiceService.getById(dto.getId());
+ if (orderInvoice == null) {
+ return AjaxResult.error("开票申请不存在");
+ }
+ if (Integer.valueOf(3).equals(orderInvoice.getStatus())) {
+ return AjaxResult.error("已完成开票不能取消");
+ }
+ orderInvoice.setStatus(4);
+ orderInvoice.setCancelTime(LocalDateTime.now());
+ orderInvoiceService.updateById(orderInvoice);
return AjaxResult.success();
}
@@ -114,6 +138,9 @@
for (TOrderInvoiceVO orderInvoiceVO : list) {
OrderInvoiceExport orderInvoiceExport = new OrderInvoiceExport();
BeanUtils.copyProperties(orderInvoiceVO,orderInvoiceExport);
+ if (orderInvoiceVO.getCreateTime()!=null){
+ orderInvoiceExport.setApplyTime(DateUtils.localDateTimeToString(orderInvoiceVO.getCreateTime()));
+ }
if (orderInvoiceVO.getBillingTime()!=null){
orderInvoiceExport.setBillingTime(DateUtils.localDateTimeToString(orderInvoiceVO.getBillingTime()));
}
@@ -142,6 +169,71 @@
}
}
}
+
+ /**
+ * 下载开票申请,单个返回 Excel,多个返回 zip。
+ */
+ @RequiresPermissions(value = {"/invoiceManagement/export"}, logical = Logical.OR)
+ @ApiOperation(value = "下载开票申请", tags = {"管理后台-发票管理"})
+ @Log(title = "下载开票申请", businessType = BusinessType.EXPORT)
+ @PutMapping("/downloadApplication")
+ public void downloadApplication(@RequestBody TOrderInvoiceQuery query) {
+ List<TOrderInvoiceVO> list = orderInvoiceService.export(query);
+ HttpServletResponse response = WebUtils.response();
+ try {
+ if (list.size() == 1) {
+ writeInvoiceWorkbook(response, list.get(0), buildInvoiceFileName(list.get(0)));
+ return;
+ }
+ response.setCharacterEncoding("utf-8");
+ response.setContentType("application/zip");
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("开票申请.zip", "utf-8"));
+ try (ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream())) {
+ for (TOrderInvoiceVO invoice : list) {
+ Workbook workbook = buildInvoiceWorkbook(invoice);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ workbook.write(outputStream);
+ workbook.close();
+ zipOutputStream.putNextEntry(new ZipEntry(buildInvoiceFileName(invoice)));
+ zipOutputStream.write(outputStream.toByteArray());
+ zipOutputStream.closeEntry();
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void writeInvoiceWorkbook(HttpServletResponse response, TOrderInvoiceVO invoice, String fileName) throws IOException {
+ response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+ response.setCharacterEncoding("utf-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Cache-Control", "no-cache");
+ Workbook workbook = buildInvoiceWorkbook(invoice);
+ try (ServletOutputStream outputStream = response.getOutputStream()) {
+ workbook.write(outputStream);
+ }
+ workbook.close();
+ }
+
+ private Workbook buildInvoiceWorkbook(TOrderInvoiceVO invoice) {
+ OrderInvoiceExport export = new OrderInvoiceExport();
+ BeanUtils.copyProperties(invoice, export);
+ if (invoice.getCreateTime() != null) {
+ export.setApplyTime(DateUtils.localDateTimeToString(invoice.getCreateTime()));
+ }
+ if (invoice.getBillingTime() != null) {
+ export.setBillingTime(DateUtils.localDateTimeToString(invoice.getBillingTime()));
+ }
+ return ExcelExportUtil.exportExcel(new ExportParams(), OrderInvoiceExport.class, Collections.singletonList(export));
+ }
+
+ private String buildInvoiceFileName(TOrderInvoiceVO invoice) {
+ String title = invoice.getName() == null ? "开票申请" : invoice.getName();
+ String phone = invoice.getUserPhone() == null ? "" : invoice.getUserPhone();
+ return title + phone + ".xls";
+ }
@ResponseBody
@GetMapping("/getMyOrderInvoiceList")
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 5b5e7a3..82c5395 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
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.ruoyi.account.api.dto.GiveVipDto;
+import com.ruoyi.account.api.dto.UserListQueryDto;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils;
@@ -23,6 +24,7 @@
import com.ruoyi.order.api.query.ShoppingOrderQuery;
import com.ruoyi.order.api.query.VipShoppingOrderQuery;
import com.ruoyi.order.dto.TEnterpriseExport;
+import com.ruoyi.order.export.TVipOrderExport;
import com.ruoyi.order.service.TVipOrderRefundService;
import com.ruoyi.order.service.TVipOrderService;
import com.ruoyi.other.api.domain.TEnterpriseUserApplication;
@@ -79,6 +81,7 @@
if (data.isEmpty()){
return AjaxResult.success(new PageInfo<TVipOrder>());
}
+ query.setUserIds(data);
}
PageInfo<TVipOrder> res = vipOrderService.pageList(query);
return AjaxResult.success(res);
@@ -206,6 +209,86 @@
}
+ @RequiresPermissions(value = {"/vipOrder", "/vipOrder/export"}, logical = Logical.OR)
+ @ApiOperation(tags = {"管理后台-会员订单"}, value = "导出")
+ @PutMapping(value = "/exportVipOrder")
+ @Log(title = "会员订单导出", businessType = BusinessType.EXPORT)
+ public void exportVipOrder(@RequestBody VipShoppingOrderQuery query) {
+ if (StringUtils.hasLength(query.getPhone())) {
+ List<Long> data = appUserClient.getUserIdsByPhone(query.getPhone()).getData();
+ if (data.isEmpty()) {
+ writeVipOrderWorkbook(new ArrayList<>());
+ return;
+ }
+ query.setUserIds(data);
+ }
+ query.setPageCurr(1);
+ query.setPageSize(100000);
+ List<TVipOrder> list = vipOrderService.pageList(query).getRecords();
+ List<TVipOrderExport> exports = new ArrayList<>();
+ for (TVipOrder vipOrder : list) {
+ TVipOrderExport export = new TVipOrderExport();
+ BeanUtils.copyProperties(vipOrder, export);
+ export.setCreateTime(DateUtils.localDateTimeToString(vipOrder.getCreateTime()));
+ exports.add(export);
+ }
+ writeVipOrderWorkbook(exports);
+ }
+
+ @RequiresPermissions(value = {"/vipList", "/vipList/export"}, logical = Logical.OR)
+ @ApiOperation(tags = {"管理后台-会员列表"}, value = "导出会员充值订单")
+ @PutMapping(value = "/exportVipOrderByVipUser")
+ @Log(title = "会员列表导出会员充值订单", businessType = BusinessType.EXPORT)
+ public void exportVipOrderByVipUser(@RequestBody UserListQueryDto query) {
+ List<Long> userIds = appUserClient.getVipUserIds(query).getData();
+ if (userIds == null || userIds.isEmpty()) {
+ writeVipOrderWorkbook(new ArrayList<>());
+ return;
+ }
+ VipShoppingOrderQuery orderQuery = new VipShoppingOrderQuery();
+ orderQuery.setUserIds(userIds);
+ if (query != null) {
+ orderQuery.setVipId(query.getVipTypeId());
+ }
+ orderQuery.setPageCurr(1);
+ orderQuery.setPageSize(100000);
+ List<TVipOrder> list = vipOrderService.pageList(orderQuery).getRecords();
+ List<TVipOrderExport> exports = new ArrayList<>();
+ for (TVipOrder vipOrder : list) {
+ TVipOrderExport export = new TVipOrderExport();
+ BeanUtils.copyProperties(vipOrder, export);
+ export.setCreateTime(DateUtils.localDateTimeToString(vipOrder.getCreateTime()));
+ exports.add(export);
+ }
+ writeVipOrderWorkbook(exports);
+ }
+
+ private void writeVipOrderWorkbook(List<TVipOrderExport> exports) {
+ Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TVipOrderExport.class, exports);
+ HttpServletResponse response = WebUtils.response();
+ response.setCharacterEncoding("utf-8");
+ ServletOutputStream outputStream = null;
+ try {
+ String fileName = URLEncoder.encode("会员订单导出.xls", "utf-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+ response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Cache-Control", "no-cache");
+ outputStream = response.getOutputStream();
+ workbook.write(outputStream);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ workbook.close();
+ if (outputStream != null) {
+ outputStream.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ManageOrderAppealQuery.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ManageOrderAppealQuery.java
index a20b5f9..3fbc15a 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ManageOrderAppealQuery.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ManageOrderAppealQuery.java
@@ -6,10 +6,11 @@
import lombok.Data;
@Data
-public class ManageOrderAppealQuery extends BasePage {
- @ApiModelProperty(value = "申诉状态 (1=待处理,2=已处理)")
+public class ManageOrderAppealQuery extends BasePage {
+ @ApiModelProperty(value = "申诉状态(1=待处理,2=已处理)")
@TableField("status")
private Integer status;
+
@ApiModelProperty(value = "订单编号")
@TableField("code")
private String code;
@@ -17,6 +18,15 @@
@ApiModelProperty(value = "手机号")
private String phone;
- @ApiModelProperty(value = "订单类型(1=充电订单,2=购物订单")
+ @ApiModelProperty(value = "订单类型(1=充电订单,2=购物订单)")
private Integer orderType;
+
+ @ApiModelProperty(value = "站点类型")
+ private Integer siteType;
+
+ @ApiModelProperty(value = "合作商id")
+ private Integer partnerId;
+
+ @ApiModelProperty(value = "站点id")
+ private Integer siteId;
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java
index 9434e69..ff8bbfd 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java
@@ -11,69 +11,78 @@
@ApiModel(value = "导出发票")
public class OrderInvoiceExport implements Serializable {
- @Excel(name = "申请单编号",width = 30)
+ @Excel(name = "申请单编号", width = 30)
private String code;
- @Excel(name = "申请日期",width = 30)
+ @Excel(name = "申请日期", width = 30)
+ private String applyTime;
+
+ @Excel(name = "开票日期", width = 30)
private String billingTime;
- @Excel(name = "开票公司",width = 30)
+ @Excel(name = "归属电站", width = 30)
+ private String siteName;
+
+ @Excel(name = "归属合作商", width = 30)
+ private String partnerName;
+
+ @Excel(name = "开票公司", width = 30)
private String invoicingCompany;
- @Excel(name = "发票类型",width = 30)
+ @Excel(name = "发票类型", width = 30)
private String invoiceType;
- @Excel(name = "发票种类",replace = {"纸质发票_1","电子发票_2"},width = 30)
+ @Excel(name = "发票种类", replace = {"纸质发票_1", "电子发票_2"}, width = 30)
private Integer invoiceMaterial;
- @Excel(name = "开票方式",replace = {"人工_1","自动_2"},width = 30)
+ @Excel(name = "开票方式", replace = {"人工_1", "自动_2"}, width = 30)
private Integer invoicingMethod;
- @Excel(name = "开票总金额",width = 30)
+ @Excel(name = "开票总金额", width = 30)
private BigDecimal totalAmount;
- @Excel(name = "服务费",width = 30)
+ @Excel(name = "服务费", width = 30)
private BigDecimal serviceCharge;
- @Excel(name = "服务费税率",width = 30)
+ @Excel(name = "服务费税率", width = 30)
private BigDecimal serviceTariff;
- @Excel(name = "增值服务费",width = 30)
+ @Excel(name = "增值服务费", width = 30)
private BigDecimal addedService;
- @Excel(name = "增值服务费税率",width = 30)
+ @Excel(name = "增值服务费税率", width = 30)
private BigDecimal addedServiceTariff;
-// @Excel(name = "开票订单类型",replace = {"充电订单_1","购物订单_2","兑换订单_3","会员订单_4"},width = 30)
-// private Integer orderType;
-
- @Excel(name = "抬头类型",replace = {"个人_1","企业_2"},width = 30)
+ @Excel(name = "抬头类型", replace = {"个人_1", "企业_2"}, width = 30)
private Integer invoicingObjectType;
- @Excel(name = "发票抬头",width = 30)
+ @Excel(name = "发票抬头", width = 30)
private String name;
- @Excel(name = "开户银行",width = 30)
+ @Excel(name = "开户银行", width = 30)
private String depositBank;
- @Excel(name = "银行账户",width = 30)
+ @Excel(name = "银行账号", width = 30)
private String bankAccount;
- @Excel(name = "公司电话",width = 30)
+ @Excel(name = "公司电话", width = 30)
private String companyPhone;
- @Excel(name = "纳税识别号",width = 30)
+ @Excel(name = "纳税识别号", width = 30)
private String taxIdentificationNumber;
- @Excel(name = "公司地址",width = 30)
+ @Excel(name = "公司地址", width = 30)
private String companyAddress;
- @Excel(name = "邮箱",width = 30)
+ @Excel(name = "邮箱", width = 30)
private String mailbox;
- @Excel(name = "状态",replace = {"待开票_1","开票中_2","已开票_3"},width = 30)
+ @Excel(name = "备注", width = 30)
+ private String remark;
+
+ @Excel(name = "状态", replace = {"待开票_1", "开票中_2", "已开票_3", "已取消_4"}, width = 30)
private Integer status;
- @Excel(name = "用户电话",width = 30)
+ @Excel(name = "用户电话", width = 30)
private String userPhone;
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/PayOrderExport.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/PayOrderExport.java
new file mode 100644
index 0000000..a4e55dc
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/PayOrderExport.java
@@ -0,0 +1,49 @@
+package com.ruoyi.order.export;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class PayOrderExport implements Serializable {
+
+ @Excel(name = "订单编号", width = 30)
+ private String code;
+
+ @Excel(name = "订单类型", width = 20)
+ private String type;
+
+ @Excel(name = "订单标题", width = 30)
+ private String title;
+
+ @Excel(name = "手机号", width = 20)
+ private String phone;
+
+ @Excel(name = "订单状态", width = 20)
+ private String orderStatus;
+
+ @Excel(name = "订单子状态", width = 20)
+ private String status;
+
+ @Excel(name = "有无退款", width = 20)
+ private String refundStatus;
+
+ @Excel(name = "应付金额", width = 20)
+ private Double rechargeAmount;
+
+ @Excel(name = "实付金额", width = 20)
+ private Double paymentAmount;
+
+ @Excel(name = "最终金额", width = 20)
+ private Double finalAmount;
+
+ @Excel(name = "下单时间", width = 30)
+ private String createTime;
+
+ @Excel(name = "订单完成时间", width = 30)
+ private String endTime;
+
+ @Excel(name = "最后支付时间", width = 30)
+ private String payTime;
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/TVipOrderExport.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/TVipOrderExport.java
new file mode 100644
index 0000000..0087e9d
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/TVipOrderExport.java
@@ -0,0 +1,34 @@
+package com.ruoyi.order.export;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "会员订单导出")
+public class TVipOrderExport implements Serializable {
+
+ @Excel(name = "订单号", width = 30)
+ private String code;
+
+ @Excel(name = "购买用户", width = 30)
+ private String userPhone;
+
+ @Excel(name = "会员类型", width = 30)
+ private String name;
+
+ @Excel(name = "会员时长", replace = {"月卡_1", "季卡_2", "年卡_3"}, width = 30)
+ private Integer vipType;
+
+ @Excel(name = "订单金额", width = 30)
+ private BigDecimal orderAmount;
+
+ @Excel(name = "实付", width = 30)
+ private BigDecimal paymentAmount;
+
+ @Excel(name = "购买时间", width = 30)
+ private String createTime;
+}
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 6756bd9..dfd718e 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
@@ -776,25 +776,29 @@
}
TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(accountingStrategyId).getData();
- //直营站点才可以享受会员折扣
- if (!whitelistMatched && !isBalancePayMode(payMethod) && null != appUser.getVipId() && 1 == site.getBusinessCategory()) {
+ //会员折扣支持直营网点和加盟商站点
+ if (!whitelistMatched && !isBalancePayMode(payMethod) && null != appUser.getVipId()) {
TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
- BigDecimal discount = null;
- if (1 == vip.getType()) {
- //普通会员折扣使用积分策略上的折扣,且有最高优惠金额
- discount = accountingStrategy.getDiscount();
- } else {
- //内部会员使用会员信息设置的折扣,没有最高优惠金额
- discount = vip.getDiscount();
- }
- GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
- getAppUserVipDetail.setAppUserId(appUser.getId());
- getAppUserVipDetail.setVipId(appUser.getVipId());
- TAppUserVipDetail vipDetail = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
- if (null != vipDetail) {
- Integer chargeNum = vipDetail.getChargeNum();
- if (0 < chargeNum) {
- chargingOrder.setVipDiscount(discount);
+ if (null != vip) {
+ BigDecimal discount = null;
+ if (Integer.valueOf(1).equals(vip.getType())) {
+ //普通会员折扣使用积分策略上的折扣,且有最高优惠金额
+ discount = accountingStrategy.getDiscount();
+ } else {
+ //内部会员使用会员信息设置的折扣,没有最高优惠金额
+ discount = vip.getDiscount();
+ }
+ if (null != discount) {
+ GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
+ getAppUserVipDetail.setAppUserId(appUser.getId());
+ getAppUserVipDetail.setVipId(appUser.getVipId());
+ TAppUserVipDetail vipDetail = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData();
+ if (null != vipDetail) {
+ Integer chargeNum = vipDetail.getChargeNum();
+ if (null != chargeNum && 0 < chargeNum) {
+ chargingOrder.setVipDiscount(discount);
+ }
+ }
}
}
}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
index 36779b8..f4f4c98 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
@@ -11,6 +11,7 @@
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+import com.ruoyi.chargingPile.api.model.Partner;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -138,6 +139,11 @@
addOrderInvoice.setCode(code);
addOrderInvoice.setStatus(1);
addOrderInvoice.setCreateTime(LocalDateTime.now());
+ fillInvoiceSite(addOrderInvoice, orderIds);
+ if (Integer.valueOf(2).equals(addOrderInvoice.getInvoicingMethod())) {
+ addOrderInvoice.setStatus(3);
+ addOrderInvoice.setBillingTime(LocalDateTime.now());
+ }
this.save(addOrderInvoice);
for (Long orderId : orderIds) {
List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
@@ -166,6 +172,29 @@
lock.unlock();
}
return AjaxResult.success();
+ }
+
+ private void fillInvoiceSite(TOrderInvoice invoice, List<Long> orderIds) {
+ if (!Integer.valueOf(1).equals(invoice.getOrderType()) || CollectionUtils.isEmpty(orderIds)) {
+ return;
+ }
+ List<TChargingOrder> chargingOrders = chargingOrderService.listByIds(orderIds);
+ if (CollectionUtils.isEmpty(chargingOrders)) {
+ return;
+ }
+ Integer siteId = chargingOrders.get(0).getSiteId();
+ invoice.setSiteId(siteId);
+ List<Site> sites = siteClient.getSiteByIds(Collections.singletonList(siteId)).getData();
+ if (!CollectionUtils.isEmpty(sites)) {
+ Site site = sites.get(0);
+ invoice.setPartnerId(site.getPartnerId());
+ if (!Integer.valueOf(1).equals(site.getBusinessCategory()) && site.getPartnerId() != null) {
+ Partner partner = siteClient.getPartnerR(site.getPartnerId()).getData();
+ if (partner != null && org.springframework.util.StringUtils.hasLength(partner.getName())) {
+ invoice.setInvoicingCompany(partner.getName());
+ }
+ }
+ }
}
@@ -291,10 +320,33 @@
tOrderInvoiceVO.setUid(tOrderInvoiceVO.getId().toString());
List<Long> collect = orderInvoiceDetailService.lambdaQuery().eq(TOrderInvoiceDetail::getOrderInvoiceId, tOrderInvoiceVO.getId()).list().stream()
.map(TOrderInvoiceDetail::getOrderId).collect(Collectors.toList());
- Integer siteId = chargingOrderService.listByIds(collect).get(0).getSiteId();
- Site site = siteList.stream().filter(o -> o.getId().equals(siteId)).findFirst().orElse(null);
+ Integer siteId = tOrderInvoiceVO.getSiteId();
+ if (siteId == null && !CollectionUtils.isEmpty(collect) && Integer.valueOf(1).equals(tOrderInvoiceVO.getOrderType())) {
+ List<TChargingOrder> chargingOrders = chargingOrderService.listByIds(collect);
+ if (!CollectionUtils.isEmpty(chargingOrders)) {
+ siteId = chargingOrders.get(0).getSiteId();
+ tOrderInvoiceVO.setSiteId(siteId);
+ }
+ }
+ Site site = null;
+ if (!CollectionUtils.isEmpty(siteList) && siteId != null) {
+ for (Site item : siteList) {
+ if (siteId.equals(item.getId())) {
+ site = item;
+ break;
+ }
+ }
+ }
if(null != site){
tOrderInvoiceVO.setSiteName(site.getName());
+ tOrderInvoiceVO.setPartnerId(site.getPartnerId());
+ tOrderInvoiceVO.setBusinessCategory(site.getBusinessCategory());
+ if (site.getPartnerId() != null) {
+ try {
+ tOrderInvoiceVO.setPartnerName(siteClient.getPartnerR(site.getPartnerId()).getData().getName());
+ } catch (Exception ignored) {
+ }
+ }
}
// 将其全部转化为String
tOrderInvoiceVO.setIds(collect.stream().map(String::valueOf).collect(Collectors.toList()));
@@ -313,18 +365,7 @@
.in(TOrderInvoiceDetail::getOrderInvoiceId, ids));
List<TAppUser> finalTAppUsers = tAppUsers;
- list.forEach(e->{
- if (e.getOrderType()!=null&&e.getOrderType()==1){
- e.setServiceTariff(orderInvoiceDetailList.get(0).getServiceTariff());
- }else{
- e.setServiceTariff(new BigDecimal("0"));
- }
- e.setElectricityTariff(orderInvoiceDetailList.get(0).getElectricityTariff());
- e.setAddedServiceTariff(orderInvoiceDetailList.get(0).getAddedServiceTariff());
- e.setAddedService(orderInvoiceDetailList.stream().filter(t->t.getOrderInvoiceId().equals(e.getId()) &&t.getAddedService()!=null).map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get());
- e.setElectrovalence(orderInvoiceDetailList.stream().filter(t->t.getOrderInvoiceId().equals(e.getId()) &&t.getElectrovalence()!=null).map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get());
- e.setServiceCharge(orderInvoiceDetailList.stream().filter(t->t.getOrderInvoiceId().equals(e.getId()) && t.getServiceCharge()!=null).map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get());
- });
+ list.forEach(e -> fillInvoiceDetailAmount(e, orderInvoiceDetailList));
}
@@ -365,21 +406,63 @@
query.setUserIds(tAppUsers.stream().map(TAppUser::getId).collect(Collectors.toList()));
PageInfo<TOrderInvoiceVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
List<TOrderInvoiceVO> list = this.baseMapper.export(query);
+ if (CollectionUtils.isEmpty(list)) {
+ return list;
+ }
List<Long> ids = list.stream().map(TOrderInvoiceVO::getId).collect(Collectors.toList());
List<TOrderInvoiceDetail> orderInvoiceDetailList = orderInvoiceDetailService.list(new LambdaQueryWrapper<TOrderInvoiceDetail>()
.in(TOrderInvoiceDetail::getOrderInvoiceId, ids));
List<TAppUser> finalTAppUsers = tAppUsers;
list.forEach(e->{
- e.setServiceTariff(orderInvoiceDetailList.get(0).getServiceTariff());
- e.setElectricityTariff(orderInvoiceDetailList.get(0).getElectricityTariff());
- e.setAddedServiceTariff(orderInvoiceDetailList.get(0).getAddedServiceTariff());
- e.setAddedService(orderInvoiceDetailList.stream().filter(t->t.getAddedService()!=null).map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get());
- e.setElectrovalence(orderInvoiceDetailList.stream().filter(t->t.getElectrovalence()!=null).map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get());
- e.setServiceCharge(orderInvoiceDetailList.stream().filter(t->t.getServiceCharge()!=null).map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get());
- if (e.getBillingUserId()!=null){
- e.setUserPhone(finalTAppUsers.stream().filter(m->m.getId().equals(Long.parseLong(e.getBillingUserId().toString()))).findFirst().get().getPhone());
+ fillInvoiceDetailAmount(e, orderInvoiceDetailList);
+ TAppUser appUser = appUserClient.getUserById(e.getAppUserId()).getData();
+ if (appUser != null) {
+ e.setUserPhone(appUser.getPhone());
}
+ fillInvoiceSiteName(e);
});
return list;
}
+
+ private void fillInvoiceDetailAmount(TOrderInvoiceVO invoice, List<TOrderInvoiceDetail> details) {
+ List<TOrderInvoiceDetail> currentDetails = details.stream()
+ .filter(t -> t.getOrderInvoiceId().equals(invoice.getId()))
+ .collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(currentDetails)) {
+ invoice.setServiceTariff(BigDecimal.ZERO);
+ invoice.setElectricityTariff(BigDecimal.ZERO);
+ invoice.setAddedServiceTariff(BigDecimal.ZERO);
+ invoice.setAddedService(BigDecimal.ZERO);
+ invoice.setElectrovalence(BigDecimal.ZERO);
+ invoice.setServiceCharge(BigDecimal.ZERO);
+ return;
+ }
+ TOrderInvoiceDetail first = currentDetails.get(0);
+ invoice.setServiceTariff(Integer.valueOf(1).equals(invoice.getOrderType()) ? first.getServiceTariff() : BigDecimal.ZERO);
+ invoice.setElectricityTariff(first.getElectricityTariff());
+ invoice.setAddedServiceTariff(first.getAddedServiceTariff());
+ invoice.setAddedService(currentDetails.stream().filter(t -> t.getAddedService() != null).map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal.ZERO, BigDecimal::add));
+ invoice.setElectrovalence(currentDetails.stream().filter(t -> t.getElectrovalence() != null).map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal.ZERO, BigDecimal::add));
+ invoice.setServiceCharge(currentDetails.stream().filter(t -> t.getServiceCharge() != null).map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal.ZERO, BigDecimal::add));
+ }
+
+ private void fillInvoiceSiteName(TOrderInvoiceVO invoice) {
+ if (invoice.getSiteId() == null) {
+ return;
+ }
+ List<Site> sites = siteClient.getSiteByIds(Collections.singletonList(invoice.getSiteId())).getData();
+ if (CollectionUtils.isEmpty(sites)) {
+ return;
+ }
+ Site site = sites.get(0);
+ invoice.setSiteName(site.getName());
+ invoice.setPartnerId(site.getPartnerId());
+ invoice.setBusinessCategory(site.getBusinessCategory());
+ if (site.getPartnerId() != null) {
+ try {
+ invoice.setPartnerName(siteClient.getPartnerR(site.getPartnerId()).getData().getName());
+ } catch (Exception ignored) {
+ }
+ }
+ }
}
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml
index 88cea85..e8eec4c 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml
@@ -7,6 +7,8 @@
<id column="id" property="id" />
<result column="code" property="code" />
<result column="app_user_id" property="appUserId" />
+ <result column="site_id" property="siteId" />
+ <result column="partner_id" property="partnerId" />
<result column="order_type" property="orderType" />
<result column="invoicing_company" property="invoicingCompany" />
<result column="invoice_type_id" property="invoiceTypeId"/>
@@ -23,23 +25,28 @@
<result column="total_amount" property="totalAmount" />
<result column="invoice_url" property="invoiceUrl" />
<result column="mailbox" property="mailbox" />
+ <result column="remark" property="remark" />
<result column="status" property="status" />
<result column="create_time" property="createTime" />
<result column="billing_time" property="billingTime" />
<result column="billing_user_id" property="billingUserId" />
+ <result column="cancel_time" property="cancelTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
- id, code, app_user_id, order_type, invoicing_company, invoice_type_id, invoice_type, invoice_material, invoicing_method, invoicing_object_type, name, tax_identification_number, company_address, company_phone, deposit_bank, bank_account, total_amount, invoice_url, mailbox, status, create_time, billing_time, billing_user_id
+ id, code, app_user_id, site_id, partner_id, order_type, invoicing_company, invoice_type_id, invoice_type, invoice_material, invoicing_method, invoicing_object_type, name, tax_identification_number, company_address, company_phone, deposit_bank, bank_account, total_amount, invoice_url, mailbox, remark, status, create_time, billing_time, billing_user_id, cancel_time
</sql>
<select id="pageList" resultType="com.ruoyi.order.api.vo.TOrderInvoiceVO">
- select toi.id, toi.code, toi.app_user_id, toi.order_type, toi.invoicing_company, toi.invoice_type_id, toi.invoice_type, toi.invoice_material,
+ select toi.id, toi.code, toi.app_user_id, toi.site_id, toi.partner_id, toi.order_type, toi.invoicing_company, toi.invoice_type_id, toi.invoice_type, toi.invoice_material,
toi.invoicing_method, toi.invoicing_object_type, toi.name, toi.tax_identification_number, toi.company_address, toi.company_phone,
- toi.deposit_bank, toi.bank_account, toi.total_amount, toi.invoice_url, toi.mailbox, toi.status, toi.create_time, toi.billing_time,
- toi.billing_user_id
+ toi.deposit_bank, toi.bank_account, toi.total_amount, toi.invoice_url, toi.mailbox, toi.remark, toi.status, toi.create_time, toi.billing_time,
+ toi.billing_user_id, toi.cancel_time
from t_order_invoice toi
<where>
+ <if test="query.id != null">
+ AND toi.id = #{query.id}
+ </if>
<if test="query.invoicingCompany != null and query.invoicingCompany != ''">
AND toi.invoicing_company LIKE concat('%',#{query.invoicingCompany},'%')
</if>
@@ -70,6 +77,17 @@
#{userId}
</foreach>
</if>
+ <if test="query.siteId != null">
+ AND toi.site_id = #{query.siteId}
+ </if>
+ <if test="query.partnerId != null">
+ AND toi.partner_id = #{query.partnerId}
+ </if>
+ <if test="query.directOnly != null and query.directOnly == 1">
+ AND toi.site_id IN (
+ SELECT id FROM charging_pile_service.t_site WHERE business_category = 1
+ )
+ </if>
</where>
ORDER BY toi.create_time DESC
</select>
@@ -77,9 +95,13 @@
select
COUNT(CASE WHEN status = 1 THEN 1 END) AS `notAccepted`,
COUNT(CASE WHEN status = 2 THEN 1 END) AS `processing`,
- COUNT(CASE WHEN status = 3 THEN 1 END) AS `finished`
+ COUNT(CASE WHEN status = 3 THEN 1 END) AS `finished`,
+ COUNT(CASE WHEN status = 4 THEN 1 END) AS `cancelled`
from t_order_invoice toi
<where>
+ <if test="query.id != null">
+ AND toi.id = #{query.id}
+ </if>
<if test="query.invoicingCompany != null and query.invoicingCompany != ''">
AND toi.invoicing_company LIKE concat('%',#{query.invoicingCompany},'%')
</if>
@@ -99,23 +121,37 @@
AND toi.name LIKE concat('%',#{query.name},'%')
</if>
<if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
- AND toi.billing_time BETWEEN #{query.startTime} AND #{query.endTime}
+ AND toi.create_time BETWEEN #{query.startTime} AND #{query.endTime}
</if>
<if test="query.userIds != null and query.userIds.size()>0">
AND toi.app_user_id IN
<foreach collection="query.userIds" close=")" open="(" item="userId" separator=",">
#{userId}
</foreach>
+ </if>
+ <if test="query.siteId != null">
+ AND toi.site_id = #{query.siteId}
+ </if>
+ <if test="query.partnerId != null">
+ AND toi.partner_id = #{query.partnerId}
+ </if>
+ <if test="query.directOnly != null and query.directOnly == 1">
+ AND toi.site_id IN (
+ SELECT id FROM charging_pile_service.t_site WHERE business_category = 1
+ )
</if>
</where>
</select>
<select id="export" resultType="com.ruoyi.order.api.vo.TOrderInvoiceVO">
- select toi.id, toi.code, toi.app_user_id, toi.order_type, toi.invoicing_company, toi.invoice_type_id, toi.invoice_type, toi.invoice_material,
+ select toi.id, toi.code, toi.app_user_id, toi.site_id, toi.partner_id, toi.order_type, toi.invoicing_company, toi.invoice_type_id, toi.invoice_type, toi.invoice_material,
toi.invoicing_method, toi.invoicing_object_type, toi.name, toi.tax_identification_number, toi.company_address, toi.company_phone,
- toi.deposit_bank, toi.bank_account, toi.total_amount, toi.invoice_url, toi.mailbox, toi.status, toi.create_time, toi.billing_time,
- toi.billing_user_id
+ toi.deposit_bank, toi.bank_account, toi.total_amount, toi.invoice_url, toi.mailbox, toi.remark, toi.status, toi.create_time, toi.billing_time,
+ toi.billing_user_id, toi.cancel_time
from t_order_invoice toi
<where>
+ <if test="query.id != null">
+ AND toi.id = #{query.id}
+ </if>
<if test="query.invoicingCompany != null and query.invoicingCompany != ''">
AND toi.invoicing_company LIKE concat('%',#{query.invoicingCompany},'%')
</if>
@@ -124,6 +160,9 @@
</if>
<if test="query.invoicingObjectType != null">
AND toi.invoicing_object_type = #{query.invoicingObjectType}
+ </if>
+ <if test="query.status != null">
+ AND toi.status = #{query.status}
</if>
<if test="query.invoiceMaterial != null">
AND toi.invoice_material = #{query.invoiceMaterial}
@@ -135,7 +174,7 @@
AND toi.name LIKE concat('%',#{query.name},'%')
</if>
<if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
- AND toi.billing_time BETWEEN #{query.startTime} AND #{query.endTime}
+ AND toi.create_time BETWEEN #{query.startTime} AND #{query.endTime}
</if>
<if test="query.userIds != null and query.userIds.size()>0">
AND toi.app_user_id IN
@@ -143,8 +182,19 @@
#{userId}
</foreach>
</if>
+ <if test="query.siteId != null">
+ AND toi.site_id = #{query.siteId}
+ </if>
+ <if test="query.partnerId != null">
+ AND toi.partner_id = #{query.partnerId}
+ </if>
+ <if test="query.directOnly != null and query.directOnly == 1">
+ AND toi.site_id IN (
+ SELECT id FROM charging_pile_service.t_site WHERE business_category = 1
+ )
+ </if>
</where>
- ORDER BY toi.billing_time DESC
+ ORDER BY toi.create_time DESC
</select>
</mapper>
diff --git a/sql/20260616_parking_lot_barrier_brand.sql b/sql/20260616_parking_lot_barrier_brand.sql
new file mode 100644
index 0000000..f2d7b07
--- /dev/null
+++ b/sql/20260616_parking_lot_barrier_brand.sql
@@ -0,0 +1,21 @@
+SET @column_exists := (
+ SELECT COUNT(1)
+ FROM information_schema.COLUMNS
+ WHERE TABLE_SCHEMA = DATABASE()
+ AND TABLE_NAME = 't_parking_lot'
+ AND COLUMN_NAME = 'barrier_brand'
+);
+
+SET @ddl := IF(
+ @column_exists = 0,
+ 'ALTER TABLE `t_parking_lot` ADD COLUMN `barrier_brand` int NULL DEFAULT NULL COMMENT ''barrier brand: 1=shunjie, 2=jilian'' AFTER `type`',
+ 'SELECT 1'
+);
+
+PREPARE stmt FROM @ddl;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+
+UPDATE `t_parking_lot`
+SET `barrier_brand` = 2
+WHERE `barrier_brand` IS NULL;
diff --git a/sql/20260616_partner_type.sql b/sql/20260616_partner_type.sql
new file mode 100644
index 0000000..2b2e5ce
--- /dev/null
+++ b/sql/20260616_partner_type.sql
@@ -0,0 +1,21 @@
+SET @column_exists := (
+ SELECT COUNT(1)
+ FROM information_schema.COLUMNS
+ WHERE TABLE_SCHEMA = DATABASE()
+ AND TABLE_NAME = 't_partner'
+ AND COLUMN_NAME = 'partner_type'
+);
+
+SET @ddl := IF(
+ @column_exists = 0,
+ 'ALTER TABLE `t_partner` ADD COLUMN `partner_type` int NULL DEFAULT NULL COMMENT ''partner type: 1=partner, 2=site owner, 3=service provider'' AFTER `role_id`',
+ 'SELECT 1'
+);
+
+PREPARE stmt FROM @ddl;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+
+UPDATE `t_partner`
+SET `partner_type` = 1
+WHERE `partner_type` IS NULL;
diff --git a/sql/20260617_accounting_strategy_partner.sql b/sql/20260617_accounting_strategy_partner.sql
new file mode 100644
index 0000000..3112ea4
--- /dev/null
+++ b/sql/20260617_accounting_strategy_partner.sql
@@ -0,0 +1,17 @@
+SET @column_exists := (
+ SELECT COUNT(1)
+ FROM information_schema.COLUMNS
+ WHERE TABLE_SCHEMA = DATABASE()
+ AND TABLE_NAME = 't_accounting_strategy'
+ AND COLUMN_NAME = 'partner_id'
+);
+
+SET @ddl := IF(
+ @column_exists = 0,
+ 'ALTER TABLE `t_accounting_strategy` ADD COLUMN `partner_id` int NULL DEFAULT NULL COMMENT ''归属合作商id'' AFTER `site_id`',
+ 'SELECT 1'
+);
+
+PREPARE stmt FROM @ddl;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
diff --git a/sql/20260618_order_invoice_v2.sql b/sql/20260618_order_invoice_v2.sql
new file mode 100644
index 0000000..1470bc2
--- /dev/null
+++ b/sql/20260618_order_invoice_v2.sql
@@ -0,0 +1,69 @@
+ALTER TABLE `charging_pile_order`.`t_order_invoice`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+CREATE INDEX `idx_order_invoice_site_id` ON `charging_pile_order`.`t_order_invoice` (`site_id`);
+CREATE INDEX `idx_order_invoice_partner_id` ON `charging_pile_order`.`t_order_invoice` (`partner_id`);
+CREATE INDEX `idx_order_invoice_status` ON `charging_pile_order`.`t_order_invoice` (`status`);
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_0`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_1`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_2`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_3`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_4`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_5`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_6`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_7`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_8`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
+
+ALTER TABLE `charging_pile_order`.`t_order_invoice_9`
+ ADD COLUMN `site_id` int NULL COMMENT '归属电站id' AFTER `app_user_id`,
+ ADD COLUMN `partner_id` int NULL COMMENT '归属合作商id' AFTER `site_id`,
+ ADD COLUMN `remark` varchar(500) NULL COMMENT '备注' AFTER `mailbox`,
+ ADD COLUMN `cancel_time` datetime NULL COMMENT '取消时间' AFTER `billing_user_id`;
--
Gitblit v1.7.1