From 951cd384e7b81eb7686e303f77992340cc91e6d1 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期二, 10 九月 2024 09:49:01 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 87 ++++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java | 2 ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_cert.pem | 25 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java | 39 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/resources/template/账户结算账单.xlsx | 0 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java | 5 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserMapVO.java | 26 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 41 + ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java | 6 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml | 343 +++++++++++++++++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java | 6 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 274 ++++++++++---- ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillVO.java | 2 ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java | 4 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingOrderMapVO.java | 19 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java | 11 ruoyi-service/ruoyi-payment/src/main/resources/cert/证书使用说明.txt | 18 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java | 64 +++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingOrderPowerMapVO.java | 16 ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml | 1 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountListVO.java | 6 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java | 37 + ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_key.pem | 28 + ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_cert.p12 | 0 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/export/TParkingRecordExport.java | 41 ++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java | 1 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserEvaluateVO.java | 18 30 files changed, 1,018 insertions(+), 113 deletions(-) diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java index 35c5873..61b14b5 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java @@ -3,9 +3,11 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.order.api.feignClient.OrderClient; +import com.ruoyi.order.api.model.ChargingListQuery; import com.ruoyi.order.api.model.TShoppingOrder; import com.ruoyi.order.api.model.TVipOrder; import com.ruoyi.order.api.query.TActivityStatisticsQuery; +import com.ruoyi.order.api.vo.AccountListVO; import com.ruoyi.order.api.vo.TActivityVO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,6 +75,11 @@ return R.fail("查询活动费用统计失败:" + cause.getMessage()); } + @Override + public R<AccountListVO> accountBillList(ChargingListQuery dto) { + return R.fail("账户结算账单导出失败:" + cause.getMessage()); + } + }; } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java index c0f9cd8..c49e25f 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java @@ -4,10 +4,13 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.order.api.factory.OrderFallbackFactory; +import com.ruoyi.order.api.model.ChargingListQuery; import com.ruoyi.order.api.model.TShoppingOrder; import com.ruoyi.order.api.model.TVipOrder; import com.ruoyi.order.api.query.TActivityStatisticsQuery; +import com.ruoyi.order.api.vo.AccountListVO; import com.ruoyi.order.api.vo.TActivityVO; +import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @@ -50,5 +53,8 @@ */ @PostMapping(value = "/t-exchange-order/activityStatistics") public R<TActivityVO> activityStatistics(@RequestBody TActivityStatisticsQuery dto); + @PostMapping(value = "/chargingBill/accountBillList") + @ApiOperation(value = "列表查询", tags = {"管理后台-账户结算账单"}) + R<AccountListVO> accountBillList(@RequestBody ChargingListQuery dto); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountListVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountListVO.java index c6d4056..f2ea33c 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountListVO.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/AccountListVO.java @@ -14,15 +14,17 @@ @ApiModel(value = "ChargingBillListVO对象",description = "充电算帐单列表VO") public class AccountListVO{ @ApiModelProperty(value = "账单数量") - private String billCount; + private Integer billCount; @ApiModelProperty(value = "总入账金额") private BigDecimal totalAmount; @ApiModelProperty(value = "总支付结算金额") private BigDecimal paymentAmount; @ApiModelProperty(value = "总退款结算金额") - private BigDecimal orderAmount; + private BigDecimal refundAmount; @ApiModelProperty(value = "平台手续费") private BigDecimal commissionAmount; + @ApiModelProperty(value = "分佣") + private BigDecimal sharingAmount; @ApiModelProperty(value = "列表数据") private PageInfo<ChargingBillListVO> list; diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java index 9576bec..78139c6 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillListVO.java @@ -34,7 +34,6 @@ private BigDecimal serviceCharge; @ApiModelProperty(value = "平台手续费") private BigDecimal commissionAmount; - @ApiModelProperty(value = "充电电流 度") private BigDecimal chargingCapacity; } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillVO.java index 9ea35ee..2000729 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillVO.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillVO.java @@ -18,6 +18,8 @@ private BigDecimal paymentAmount; @ApiModelProperty(value = "订单总金额") private BigDecimal orderAmount; + @ApiModelProperty(value = "总退款金额") + private BigDecimal refundAmount; @ApiModelProperty(value = "累计电费") private BigDecimal electrovalence; @ApiModelProperty(value = "累计服务费") diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingOrderMapVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingOrderMapVO.java new file mode 100644 index 0000000..b2d3618 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingOrderMapVO.java @@ -0,0 +1,19 @@ +package com.ruoyi.order.api.vo; + +import com.ruoyi.common.core.web.page.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +@Data +public class TCharingOrderMapVO { + @ApiModelProperty("上分饼图") + private List<Map<String,Object>> maps; + @ApiModelProperty("下方折线图") + private List<Map<String,Object>> maps1; +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingOrderPowerMapVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingOrderPowerMapVO.java new file mode 100644 index 0000000..e1d2297 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingOrderPowerMapVO.java @@ -0,0 +1,16 @@ +package com.ruoyi.order.api.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +@Data +public class TCharingOrderPowerMapVO { + @ApiModelProperty("上分折线图") + List<Map<String,Object>> maps; + @ApiModelProperty("下方饼图") + private Map<String,Object> maps1; +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserEvaluateVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserEvaluateVO.java new file mode 100644 index 0000000..9086c3c --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserEvaluateVO.java @@ -0,0 +1,18 @@ +package com.ruoyi.order.api.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class TCharingUserEvaluateVO { + @ApiModelProperty("评价分") + Long aver; + @ApiModelProperty("各个评分数量") + List<Map<String,Object>> evaluate; + @ApiModelProperty("差评数量") + Long blackCount; + +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserMapVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserMapVO.java new file mode 100644 index 0000000..e8859d1 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserMapVO.java @@ -0,0 +1,26 @@ +package com.ruoyi.order.api.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.naming.ldap.PagedResultsControl; +import java.util.List; +import java.util.Map; + +@Data +public class TCharingUserMapVO { + @ApiModelProperty("上分折线图") + private List<Map<String,Object>> map; + @ApiModelProperty("用户标签") + private List<Map<String,Object>> userMaps; + @ApiModelProperty("单位消费") + private List<Map<String, Object>> untiMap; + @ApiModelProperty("会员标签") + private List<Map<String,Object>> vipMaps; + @ApiModelProperty("车辆用途") + private List<Map<String, Object>> carMap; + @ApiModelProperty("车辆品牌") + private List<Map<String, Object>> carBrandMap; + @ApiModelProperty("本地车数量") + private Map<String,Object> localCarMap; +} diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java index 8a3cf05..275a7ff 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/VipFallbackFactory.java @@ -1,5 +1,6 @@ package com.ruoyi.other.api.factory; +import com.ruoyi.account.api.dto.GiveVipDto; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.other.api.domain.TVip; @@ -35,6 +36,11 @@ } @Override + public R giveVip(GiveVipDto giveVipDto) { + return R.fail("赠送会员:" + throwable.getMessage()); + } + + @Override public R<TVip> getInfo1(Integer id) { return R.fail("根据会员id 获取会员信息:" + throwable.getMessage()); } diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java index 7d33fd2..e958ad7 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java @@ -1,5 +1,6 @@ package com.ruoyi.other.api.feignClient; +import com.ruoyi.account.api.dto.GiveVipDto; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -8,6 +9,7 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; /** @@ -37,5 +39,6 @@ @PostMapping(value = "/vip/getInfo") R<TVip> getInfo(@RequestParam("id") Integer id); - + @PostMapping(value = "/t-app-user/user/give/vip") + R giveVip(@RequestBody GiveVipDto giveVipDto); } diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java index b9c18a9..8e634b3 100644 --- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java +++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/vo/PaymentOrder.java @@ -29,5 +29,5 @@ /** * 回调地址 */ - private String notifyUrl ="/"; + private String notifyUrl ="http://192.168.110.80:9000/payment/wx/pay/notify"; } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java index 29c62c9..0382f8a 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java @@ -8,8 +8,10 @@ import com.ruoyi.common.core.utils.WebUtils; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.ExportUidDto; +import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TSettlementConfirm; +import com.ruoyi.order.api.vo.AccountListVO; import com.ruoyi.order.api.vo.ChargingBillListVO; @@ -81,6 +83,8 @@ private final RedisService redisService; @Resource private ChargingOrderClient chargingOrderClient; + @Resource + private OrderClient orderClient; @Resource private SiteClient siteClient; @@ -283,6 +287,39 @@ } return R.ok(); } + @ApiOperation(value = "下载", tags = {"管理后台-账户结算账单"}) + @PutMapping("/downloadAccount") + public R downloadAccount(@RequestBody ChargingListQuery dto,HttpServletResponse response) + { + AccountListVO data = orderClient.accountBillList(dto).getData(); + try { + response.setCharacterEncoding(Constants.UTF8); + response.setContentType("application/vnd.ms-excel"); + response.setHeader("Access-Control-Expose-Headers", "Content-disposition"); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode("账户结算账单", CharEncoding.UTF_8) + ".xlsx"); + } catch (UnsupportedEncodingException e) { + return R.fail("excel导出失败!"); + } + try { + // excel模板封装 + ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream()); + InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" +"账户结算账单" + ".xlsx"); + // 自动释放资源 + try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build(); + excelWriter.fill(new FillWrapper("data1", data.getList().getRecords()), fillConfig, writeSheet); + excelWriter.finish(); + } catch (Exception e) { + return R.fail("excel导出失败!"); + } + } catch (IOException e) { + return R.fail("excel导出失败!"); + } + return R.ok(); + } + @ApiOperation(value = "导出", tags = {"管理后台-结算汇总表"}) @PutMapping("/downloadSettlementTotal") public R downloadSettlementTotal(@RequestBody ExportUidDto uid,HttpServletResponse response) diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java index 9718c4c..fec52ef 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 @@ -1,6 +1,8 @@ package com.ruoyi.chargingPile.controller; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.chargingPile.api.model.TParkingLot; @@ -10,15 +12,30 @@ import com.ruoyi.chargingPile.api.vo.TParkingRecordPageInfoVO; import com.ruoyi.chargingPile.api.vo.TParkingRecordVO; import com.ruoyi.chargingPile.dto.ParkingRecordPageQuery; +import com.ruoyi.chargingPile.export.TParkingRecordExport; import com.ruoyi.chargingPile.service.TParkingLotService; import com.ruoyi.chargingPile.service.TParkingRecordService; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.WebUtils; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.order.api.query.TOrderInvoiceQuery; +import com.ruoyi.order.api.vo.TOrderInvoiceVO; import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; /** * <p> @@ -58,13 +75,54 @@ public R<TParkingRecordPageInfoVO> pageList(@RequestBody ParkingRecordQuery query) { return R.ok(parkingRecordService.pageList(query)); } - + @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "导出") + @PutMapping("/export") + public void export(@RequestBody ParkingRecordQuery query) + { + List<TParkingRecordVO> records = parkingRecordService.pageList(query).getParkingRecordVOS().getRecords(); + List<TParkingRecordExport> orderInvoiceExports = new ArrayList<>(); + for (TParkingRecordVO orderInvoiceVO : records) { + TParkingRecordExport orderInvoiceExport = new TParkingRecordExport(); + BeanUtils.copyProperties(orderInvoiceVO,orderInvoiceExport); + if (orderInvoiceVO.getFreeDuration()!=null){ + orderInvoiceExport.setParkingDuration(orderInvoiceVO.getParkingDuration()-orderInvoiceVO.getFreeDuration()); + }else{ + orderInvoiceExport.setParkingDuration(orderInvoiceVO.getParkingDuration()); + } + if (orderInvoiceVO.getTimeoutAmount()!=null){ + orderInvoiceExport.setAmount(orderInvoiceVO.getOrderAmount().subtract(orderInvoiceVO.getTimeoutAmount())); + }else{ + orderInvoiceExport.setAmount(orderInvoiceVO.getOrderAmount()); + } + orderInvoiceExports.add(orderInvoiceExport); + } + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TParkingRecordExport.class, orderInvoiceExports); + HttpServletResponse response = WebUtils.response(); + response.setContentType("application/vnd.ms-excel"); + 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 { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "详情") @GetMapping(value = "/detail") public R<TParkingRecord> detail(Long id) { - return R.ok(parkingRecordService.getById(id)); - } @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "出场") diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/export/TParkingRecordExport.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/export/TParkingRecordExport.java new file mode 100644 index 0000000..a34bb11 --- /dev/null +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/export/TParkingRecordExport.java @@ -0,0 +1,41 @@ +package com.ruoyi.chargingPile.export; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel(value = "导出充电算帐单-导出") +public class TParkingRecordExport implements Serializable { + + @Excel(name = "账单编号",width = 30) + private String code; + @Excel(name = "站点名称",width = 30) + private String siteName; + @Excel(name = "出场时间",width = 30) + private String outParkingTime; + @Excel(name = "进场时间",width = 30) + private String inParkingTime; + @Excel(name = "车牌号",width = 30) + private String licensePlate; + @Excel(name = "车辆颜色",width = 30) + private String vehicleColor; + @Excel(name = "总费用",width = 30) + private BigDecimal orderAmount; + @Excel(name = "超时占位费",width = 30) + private BigDecimal timeoutAmount; + @Excel(name = "停车费",width = 30) + private BigDecimal amount; + @Excel(name = "免费时长(分钟)",width = 30) + private Integer freeDuration; + @Excel(name = "停车总时长(分钟)",width = 30) + private Integer parkingDuration; + @Excel(name = "收费时长(分钟)",width = 30) + private Integer payDuration; + +} diff --git "a/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\264\246\346\210\267\347\273\223\347\256\227\350\264\246\345\215\225.xlsx" "b/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\264\246\346\210\267\347\273\223\347\256\227\350\264\246\345\215\225.xlsx" new file mode 100644 index 0000000..296d45b --- /dev/null +++ "b/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\264\246\346\210\267\347\273\223\347\256\227\350\264\246\345\215\225.xlsx" Binary files differ diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java index 8209c18..b1e5e06 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java @@ -73,6 +73,17 @@ public R<AccountListVO> accountBillList(@RequestBody ChargingListQuery dto) { AccountListVO accountListVO = new AccountListVO(); ChargingBillVO res = chargingBillService.chargingBillList(dto); + dto.setPageCurr(1); + dto.setPageSize(99999999); + ChargingBillVO res1 = chargingBillService.chargingBillList(dto); + List<ChargingBillListVO> records = res1.getList().getRecords(); + accountListVO.setBillCount(records.size()); + accountListVO.setTotalAmount(res1.getPaymentAmount().subtract(res1.getRefundAmount()).subtract(res1.getCommissionAmount()).subtract(res1.getSharingAmount())); + accountListVO.setPaymentAmount(res1.getPaymentAmount()); + accountListVO.setRefundAmount(res1.getRefundAmount()); + accountListVO.setCommissionAmount(res1.getCommissionAmount()); + accountListVO.setSharingAmount(res1.getSharingAmount()); + accountListVO.setList(res.getList()); return R.ok(accountListVO); } @PostMapping(value = "/chargingBillList") 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 309caee..d12f4b6 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 @@ -40,6 +40,7 @@ import com.ruoyi.order.api.query.ChargingOrderQuery; import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; +import com.ruoyi.order.api.vo.*; import com.ruoyi.order.api.vo.ChargingOrderInfoVO; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; @@ -270,6 +271,7 @@ return chargingOrderService.getRefundList(chargingRefundDto); } + @@ -593,10 +595,10 @@ @ResponseBody @GetMapping(value = "/six/total") @ApiOperation(value = "底部数据分类", tags = {"后台-数据分析-平台收入分析"}) - public R<Map<String,BigDecimal>> total() { + public R<Map<String,Object>> total() { //count近6个月的数据 LocalDate sixBefore = PreviousSixMonths.get(); - Map<String,BigDecimal> map = chargingOrderService.countAll(sixBefore); + Map<String,Object> map = chargingOrderService.countAll(sixBefore); BigDecimal data = parkingLotClient.getRecordAmount(sixBefore).getData(); map.put("parkingAmount",data); BigDecimal data1 = shoppingOrderService.getSumAmount(sixBefore); @@ -668,80 +670,196 @@ -// @ResponseBody -// @PostMapping(value = "/charging/statistics") -// @ApiOperation(value = "统计", tags = {"管理后台-数据分析-充电运营分析"}) -// public R<TCharingOrderVO> watchChargingOrder(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){ -// List<Integer> siteIds =new ArrayList<>(); -// if (statisticsQueryDto.getSiteId()==null) { -// Long userId = SecurityUtils.getUserId(); -// //获取当前登录的siteIds -// List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData(); -// for (GetSiteListDTO datum : data) { -// siteIds.add(datum.getId()); -// } -// }else { -// siteIds.add(statisticsQueryDto.getSiteId()); -// } -// -// -// LocalDate start = null; -// LocalDate end = null; -// if (statisticsQueryDto.getDayType()==1){ -// start = LocalDate.now(); -// -// }else if (statisticsQueryDto.getDayType()==2){ -// LocalDate today = LocalDate.now(); -// -// // 获取本周一的日期 -// LocalDate mondayThisWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); -// -// System.out.println("本周一是: " + mondayThisWeek); -// } -// else if (statisticsQueryDto.getDayType()==3){ -// // 获取当前日期 -// LocalDate today = LocalDate.now(); -// -// // 获取本月1号的日期 -// YearMonth yearMonth = YearMonth.from(today); -// start = yearMonth.atDay(1); -// -// System.out.println("本月1号是: " + start); -// }else if (statisticsQueryDto.getDayType()==4){ -// LocalDate today = LocalDate.now(); -// // 获取当前年份 -// int currentYear = today.getYear(); -// // 获取今年1月1日的日期 -// start = LocalDate.of(currentYear, 1, 1); -// System.out.println("今年1月1日是: " + start); -// }else if (statisticsQueryDto.getDayType()==5){ -// -// // 获取今年1月1日的日期 -// start = statisticsQueryDto.getStartTime(); -// end = statisticsQueryDto.getEndTime(); -// } -// List<TChargingOrder> list = chargingOrderService.lambdaQuery().ge(TChargingOrder::getStartTime, start).le(TChargingOrder::getEndTime, end).in(TChargingOrder::getSiteId, siteIds).list(); -// List<Long> chargingOrderIds = list.stream().map(TChargingOrder::getId).collect(Collectors.toList()); -// //上方饼图 -// List<Map<String,BigDecimal>> maps = chargingOrderService.getSumByType(chargingOrderIds); -// -// if (statisticsQueryDto.getDayType()==1){ -// List<Map<String,BigDecimal>> maps1 = chargingOrderService.getDateData(chargingOrderIds); -// -// }else if (statisticsQueryDto.getDayType()==2){ -// List<Map<String,BigDecimal>> maps1 = chargingOrderService.getWeekData(chargingOrderIds); -// }else if (statisticsQueryDto.getDayType()==3){ -// List<Map<String,BigDecimal>> maps1 = chargingOrderService.getMonthData(chargingOrderIds); -// }else if (statisticsQueryDto.getDayType()==4){ -// List<Map<String,BigDecimal>> maps1 = chargingOrderService.getYearData(chargingOrderIds); -// } -// -// -// -// -// -// -// } + @ResponseBody + @PostMapping(value = "/charging/statistics") + @ApiOperation(value = "统计,充电订单分析", tags = {"管理后台-数据分析-充电运营分析"}) + public R<TCharingOrderMapVO> watchChargingOrder(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){ + List<Integer> siteIds =new ArrayList<>(); + if (statisticsQueryDto.getSiteId()==null) { + Long userId = SecurityUtils.getUserId(); + //获取当前登录的siteIds + List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData(); + for (GetSiteListDTO datum : data) { + siteIds.add(datum.getId()); + } + }else { + siteIds.add(statisticsQueryDto.getSiteId()); + } + TCharingOrderMapVO tCharingOrderMapVO = new TCharingOrderMapVO(); + + + LocalDate start = null; + LocalDate end = null; + if (statisticsQueryDto.getDayType()==1){ + start = LocalDate.now(); + + }else if (statisticsQueryDto.getDayType()==2){ + LocalDate today = LocalDate.now(); + + // 获取本周一的日期 + LocalDate mondayThisWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + + System.out.println("本周一是: " + mondayThisWeek); + } + else if (statisticsQueryDto.getDayType()==3){ + // 获取当前日期 + LocalDate today = LocalDate.now(); + + // 获取本月1号的日期 + YearMonth yearMonth = YearMonth.from(today); + start = yearMonth.atDay(1); + + System.out.println("本月1号是: " + start); + }else if (statisticsQueryDto.getDayType()==4){ + LocalDate today = LocalDate.now(); + // 获取当前年份 + int currentYear = today.getYear(); + // 获取今年1月1日的日期 + start = LocalDate.of(currentYear, 1, 1); + System.out.println("今年1月1日是: " + start); + }else if (statisticsQueryDto.getDayType()==5){ + + // 获取今年1月1日的日期 + start = statisticsQueryDto.getStartTime(); + end = statisticsQueryDto.getEndTime(); + } + List<TChargingOrder> list = chargingOrderService.lambdaQuery().ge(TChargingOrder::getStartTime, start).le(TChargingOrder::getEndTime, end).in(TChargingOrder::getSiteId, siteIds).list(); + List<Long> chargingOrderIds = list.stream().map(TChargingOrder::getId).collect(Collectors.toList()); + //上方饼图 + List<Map<String,Object>> maps = chargingOrderService.getSumByType(chargingOrderIds); + + if (statisticsQueryDto.getDayType()==1){ + List<Map<String,Object>> maps1 = chargingOrderService.getDateData(chargingOrderIds); + tCharingOrderMapVO.setMaps1(maps1); + }else if (statisticsQueryDto.getDayType()==2){ + List<Map<String,Object>> maps1 = chargingOrderService.getWeekData(chargingOrderIds); + tCharingOrderMapVO.setMaps1(maps1); + }else if (statisticsQueryDto.getDayType()==3){ + List<Map<String,Object>> maps1 = chargingOrderService.getMonthData(chargingOrderIds); + tCharingOrderMapVO.setMaps1(maps1); + }else if (statisticsQueryDto.getDayType()==4){ + List<Map<String,Object>> maps1 = chargingOrderService.getYearData(chargingOrderIds); + tCharingOrderMapVO.setMaps1(maps1); + }else if (statisticsQueryDto.getDayType()==5){ + List<Map<String,Object>> maps1 = chargingOrderService.getByDate(chargingOrderIds); + tCharingOrderMapVO.setMaps1(maps1); + } + + + tCharingOrderMapVO.setMaps(maps); + + + return R.ok(tCharingOrderMapVO); + + } + + + @ResponseBody + @PostMapping(value = "/charging/power") + @ApiOperation(value = "功率", tags = {"管理后台-数据分析-充电运营分析"}) + public R<TCharingOrderPowerMapVO> power(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) { + List<Integer> siteIds = new ArrayList<>(); + if (statisticsQueryDto.getSiteId() == null) { + Long userId = SecurityUtils.getUserId(); + //获取当前登录的siteIds + List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData(); + for (GetSiteListDTO datum : data) { + siteIds.add(datum.getId()); + } + } else { + siteIds.add(statisticsQueryDto.getSiteId()); + } + List<Map<String,Object>> maps1 = chargingOrderService.queryPower(siteIds); + + + Map<String,Object> map = chargingOrderService.qureryPowerLevel(siteIds,statisticsQueryDto); + + TCharingOrderPowerMapVO tCharingOrderPowerMapVO = new TCharingOrderPowerMapVO(); + tCharingOrderPowerMapVO.setMaps1(map); + tCharingOrderPowerMapVO.setMaps(maps1); + return R.ok(tCharingOrderPowerMapVO); + + } + + + @ResponseBody + @PostMapping(value = "/charging/users") + @ApiOperation(value = "除电站流量外", tags = {"管理后台-数据分析-充电用户分析"}) + public R<TCharingUserMapVO> users(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){ + + TCharingUserMapVO tCharingUserMapVO = new TCharingUserMapVO(); + //上方折现 + if (statisticsQueryDto.getDayType()==1){ + List<Map<String,Object>> map = chargingOrderService.usersDay(); + tCharingUserMapVO.setMap(map); + }else { + List<Map<String,Object>> map = chargingOrderService.usersByQuery(statisticsQueryDto); + tCharingUserMapVO.setMap(map); + } + + //用户标签 + List<Map<String,Object>> maps = chargingOrderService.getUserTagCount(); + //会员标签 + List<Map<String,Object>> maps1 = chargingOrderService.getVipCount(); + + //单位消费 + List<Map<String, Object>> untiMap = chargingOrderService.unitConsumption(statisticsQueryDto); + + //车辆用途 + List<Map<String, Object>> carMap = chargingOrderService.carUserMethod(); + //车辆品牌 + List<Map<String, Object>> carBrandMap = chargingOrderService.carUserBrand(); + //本地车数量 + Map<String,Object> localCarMap = chargingOrderService.countLocalCar(); + + + tCharingUserMapVO.setUserMaps(maps); + tCharingUserMapVO.setVipMaps(maps1); + tCharingUserMapVO.setUntiMap(untiMap); + tCharingUserMapVO.setCarMap(carMap); + tCharingUserMapVO.setCarBrandMap(carBrandMap); + tCharingUserMapVO.setLocalCarMap(localCarMap); + return R.ok(tCharingUserMapVO); + + } + @ResponseBody + @PostMapping(value = "/charging/sites") + @ApiOperation(value = "电站评价", tags = {"管理后台-数据分析-充电用户分析"}) + public R<TCharingUserEvaluateVO> sites(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){ + List<Integer> siteIds =new ArrayList<>(); + if (statisticsQueryDto.getSiteId()==null) { + Long userId = SecurityUtils.getUserId(); + //获取当前登录的siteIds + List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData(); + for (GetSiteListDTO datum : data) { + siteIds.add(datum.getId()); + } + }else { + siteIds.add(statisticsQueryDto.getSiteId()); + } + //查询评价分 + Long aver = chargingOrderService.getAver(siteIds); + //查询各个分数 + List<Map<String,Object>> evaluate = chargingOrderService.getLevelEvaluate(siteIds); + //查询差评回复数 + Long count = orderEvaluateService.lambdaQuery().isNotNull(TOrderEvaluate::getResponseTime).count(); + TCharingUserEvaluateVO tCharingUserEvaluateVO = new TCharingUserEvaluateVO(); + tCharingUserEvaluateVO.setAver(aver); + tCharingUserEvaluateVO.setEvaluate(evaluate); + tCharingUserEvaluateVO.setBlackCount(count); + + + + //标签 + //查出好评ids +// orderEvaluateService.goodTop(); + + + + + //流量 + return R.ok(tCharingUserEvaluateVO); + } public static void main(String[] args) { // 示例数据 @@ -814,8 +932,8 @@ public void excelEndCharge(@RequestParam("code") String code){ chargingOrderService.excelEndCharge(code); } - - + + /** * 根据车牌号和时间查询有效的充电数据 * @param query diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java index f16019c..4afae07 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java @@ -65,19 +65,46 @@ List<SixCircleDto> circle(@Param("siteIds")List<Integer> siteIds,@Param("sixBefore")LocalDate sixBefore); - Map<String, BigDecimal> countAll(@Param("sixBefore")LocalDate sixBefore); + Map<String, Object> countAll(@Param("sixBefore")LocalDate sixBefore); - List<Map<String, BigDecimal>> getSumByType(@Param("chargingOrderIds")List<Long> chargingOrderIds); + List<Map<String, Object>> getSumByType(@Param("chargingOrderIds")List<Long> chargingOrderIds); - List<Map<String, BigDecimal>> getDateData(List<Long> chargingOrderIds); + List<Map<String, Object>> getDateData(List<Long> chargingOrderIds); - List<Map<String, BigDecimal>> getWeekData(List<Long> chargingOrderIds); + List<Map<String, Object>> getWeekData(List<Long> chargingOrderIds); - List<Map<String, BigDecimal>> getMonthData(List<Long> chargingOrderIds); + List<Map<String, Object>> getMonthData(List<Long> chargingOrderIds); - List<Map<String, BigDecimal>> getYearData(List<Long> chargingOrderIds); + List<Map<String, Object>> getYearData(List<Long> chargingOrderIds); List<ChargingOrderListVO> chargingList(@Param("pageInfo")PageInfo<ChargingOrderListVO> pageInfo, @Param("req") ChargingListQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2, @Param("endTime1")String endTime1, @Param("endTime2")String endTime2); List<ChargingOrderListVO> chargingListNoPage( @Param("req")ChargingListQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2, @Param("endTime1")String endTime1, @Param("endTime2")String endTime2); + List<Map<String, Object>> getByDate(List<Long> chargingOrderIds); + + List<Map<String, Object>> queryPower(List<Integer> siteIds); + + Map<String, Object> queryPowerLevel(@Param("siteIds") List<Integer> siteIds,@Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); + + List<Map<String, Object>> queryOrderCountAndMoneyBySiteIdDate(List<Integer> siteIds); + + List<Map<String, Object>> usersDay(); + + List<Map<String, Object>> usersByQuery(ChargingStatisticsQueryDto statisticsQueryDto); + + List<Map<String, Object>> getUserTagCount(); + + List<Map<String, Object>> getVipCount(); + + List<Map<String, Object>> unitConsumption(ChargingStatisticsQueryDto statisticsQueryDto); + + List<Map<String, Object>> carUserMethod(); + + List<Map<String, Object>> carUserBrand(); + + Map<String, Object> countLocalCar(); + + Long getAver(List<Integer> siteIds); + + List<Map<String, Object>> getLevelEvaluate(List<Integer> siteIds); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java index d62aa72..61aad66 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java @@ -118,17 +118,17 @@ List<SixCircleDto> circle(List<Integer> siteIds,LocalDate sixBefore); - Map<String, BigDecimal> countAll(LocalDate sixBefore); + Map<String, Object> countAll(LocalDate sixBefore); - List<Map<String, BigDecimal>> getSumByType(List<Long> chargingOrderIds); + List<Map<String, Object>> getSumByType(List<Long> chargingOrderIds); - List<Map<String, BigDecimal>> getDateData(List<Long> chargingOrderIds); + List<Map<String, Object>> getDateData(List<Long> chargingOrderIds); - List<Map<String, BigDecimal>> getWeekData(List<Long> chargingOrderIds); + List<Map<String, Object>> getWeekData(List<Long> chargingOrderIds); - List<Map<String, BigDecimal>> getMonthData(List<Long> chargingOrderIds); + List<Map<String, Object>> getMonthData(List<Long> chargingOrderIds); - List<Map<String, BigDecimal>> getYearData(List<Long> chargingOrderIds); + List<Map<String, Object>> getYearData(List<Long> chargingOrderIds); ChargingOrderTimeVO chargingList(ChargingListQuery dto); @@ -157,6 +157,35 @@ */ void excelEndCharge(String orderCode); + List<Map<String, Object>> getByDate(List<Long> chargingOrderIds); + + List<Map<String, Object>> queryPower(List<Integer> siteIds); + + Map<String, Object> qureryPowerLevel(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto); + + List<Map<String, Object>> queryOrderCountAndMoneyBySiteIdDate(List<Integer> siteIds); + + List<Map<String, Object>> usersDay(); + + List<Map<String, Object>> usersByQuery(ChargingStatisticsQueryDto statisticsQueryDto); + + + List<Map<String, Object>> getUserTagCount(); + + List<Map<String, Object>> getVipCount(); + + List<Map<String, Object>> unitConsumption(ChargingStatisticsQueryDto statisticsQueryDto); + + List<Map<String, Object>> carUserMethod(); + + List<Map<String, Object>> carUserBrand(); + + Map<String, Object> countLocalCar(); + + Long getAver(List<Integer> siteIds); + + List<Map<String, Object>> getLevelEvaluate(List<Integer> siteIds); + /** * 根据车牌号和开始时间查询充电数据 diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java index e1cf6a0..e72db84 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java @@ -80,6 +80,7 @@ BigDecimal sharingAmountTotal = new BigDecimal("0"); BigDecimal chargingCapacityTotal = new BigDecimal("0"); BigDecimal discountTotal = new BigDecimal("0"); + BigDecimal refundAmount = new BigDecimal("0"); int orderCount = 0; for (ChargingBillListVO chargingBillListVO : list) { String temp = ""; @@ -243,6 +244,9 @@ electrovalence = electrovalence.add(tChargingOrder.getElectrovalence()); electrovalenceTotal = electrovalenceTotal.add(tChargingOrder.getElectrovalence()); } + if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getRefundStatus() == 2){ + refundAmount = refundAmount.add(tChargingOrder.getRefundAmount()); + } // 累加累计服务费 if (tChargingOrder.getServiceCharge()!=null){ serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge()); 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 6bd6c1c..4ca77f9 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 @@ -644,7 +644,7 @@ model.setOut_trade_no(chargingOrder.getCode()); model.setOut_refund_no(chargingOrderRefund.getRefundCode()); model.setReason("充电失败,取消充电订单"); - model.setNotify_url("http://127.0.0.1:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund"); + model.setNotify_url("http://221.182.45.100:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(rechargeAmount.multiply(new BigDecimal(100)).intValue()); amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); @@ -954,7 +954,7 @@ model.setOut_trade_no(chargingOrder.getCode()); model.setOut_refund_no(chargingOrderRefund.getRefundCode()); model.setReason("充电完成退款"); - model.setNotify_url("http://127.0.0.1:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund"); + model.setNotify_url("http://221.182.45.100:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue()); amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); @@ -1125,32 +1125,32 @@ } @Override - public Map<String, BigDecimal> countAll(LocalDate sixBefore) { + public Map<String, Object> countAll(LocalDate sixBefore) { return this.baseMapper.countAll(sixBefore); } @Override - public List<Map<String, BigDecimal>> getSumByType(List<Long> chargingOrderIds) { + public List<Map<String, Object>> getSumByType(List<Long> chargingOrderIds) { return this.baseMapper.getSumByType(chargingOrderIds); } @Override - public List<Map<String, BigDecimal>> getDateData(List<Long> chargingOrderIds) { + public List<Map<String, Object>> getDateData(List<Long> chargingOrderIds) { return this.baseMapper.getDateData(chargingOrderIds); } @Override - public List<Map<String, BigDecimal>> getWeekData(List<Long> chargingOrderIds) { + public List<Map<String, Object>> getWeekData(List<Long> chargingOrderIds) { return this.baseMapper.getWeekData(chargingOrderIds); } @Override - public List<Map<String, BigDecimal>> getMonthData(List<Long> chargingOrderIds) { + public List<Map<String, Object>> getMonthData(List<Long> chargingOrderIds) { return this.baseMapper.getMonthData(chargingOrderIds); } @Override - public List<Map<String, BigDecimal>> getYearData(List<Long> chargingOrderIds) { + public List<Map<String, Object>> getYearData(List<Long> chargingOrderIds) { return this.baseMapper.getYearData(chargingOrderIds); } @Resource @@ -1612,6 +1612,75 @@ endCharge(orderCode, 0); } + @Override + public List<Map<String, Object>> getByDate(List<Long> chargingOrderIds) { + return this.baseMapper.getByDate(chargingOrderIds); + } + + @Override + public List<Map<String, Object>> queryPower(List<Integer> siteIds) { + return this.baseMapper.queryPower(siteIds); + } + + @Override + public Map<String, Object> qureryPowerLevel(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) { + return this.baseMapper.queryPowerLevel(siteIds,statisticsQueryDto); + } + + @Override + public List<Map<String, Object>> queryOrderCountAndMoneyBySiteIdDate(List<Integer> siteIds) { + return this.baseMapper.queryOrderCountAndMoneyBySiteIdDate(siteIds); + } + + @Override + public List<Map<String, Object>> usersDay() { + return this.baseMapper.usersDay(); + } + + @Override + public List<Map<String, Object>> usersByQuery(ChargingStatisticsQueryDto statisticsQueryDto) { + return this.baseMapper.usersByQuery(statisticsQueryDto); + } + + @Override + public List<Map<String, Object>> getUserTagCount() { + return this.baseMapper.getUserTagCount(); + } + + @Override + public List<Map<String, Object>> getVipCount() { + return this.baseMapper.getVipCount(); + } + + @Override + public List<Map<String, Object>> unitConsumption(ChargingStatisticsQueryDto statisticsQueryDto) { + return this.baseMapper.unitConsumption(statisticsQueryDto); + } + + @Override + public List<Map<String, Object>> carUserMethod() { + return this.baseMapper.carUserMethod(); + } + + @Override + public List<Map<String, Object>> carUserBrand() { + return this.baseMapper.carUserBrand(); + } + + @Override + public Map<String, Object> countLocalCar() { + return this.baseMapper.countLocalCar(); + } + + @Override + public Long getAver(List<Integer> siteIds) { + return this.baseMapper.getAver(siteIds); + } + + @Override + public List<Map<String, Object>> getLevelEvaluate(List<Integer> siteIds) { + return this.baseMapper.getLevelEvaluate(siteIds); + } @Override @@ -1640,7 +1709,7 @@ model.setOut_refund_no(chargingOrderRefund.getRefundCode()); model.setTransaction_id(tChargingOrder.getRechargeSerialNumber()); model.setReason("取消订单"); - model.setNotify_url("http://127.0.0.1:9000/order/t-shopping-order/cancelShoppingOrderWxRefund"); + model.setNotify_url("http://221.182.45.100:9000/order/t-shopping-order/cancelShoppingOrderWxRefund"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue()); amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue()); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java index e3ba3e6..cb41922 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java @@ -364,7 +364,7 @@ model.setTransaction_id(shoppingOrder.getSerialNumber()); model.setOut_refund_no(shoppingOrderRefund.getRefundCode()); model.setReason("取消订单"); - model.setNotify_url("http://127.0.0.1:9000/order/t-shopping-order/cancelShoppingOrderWxRefund"); + model.setNotify_url("http://221.182.45.100:9000/order/t-shopping-order/cancelShoppingOrderWxRefund"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue()); amount.setTotal(shoppingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue()); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java index 53d4fb7..2e2f137 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java @@ -79,6 +79,6 @@ giveVipDto.setUserIds(tVipOrder.getAppUserId().toString()); giveVipDto.setVipId(tVipOrder.getVipId()); giveVipDto.setType(tVipOrder.getVipType()); -// vipClient.giveVip(giveVipDto); + vipClient.giveVip(giveVipDto); } } diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml index a4d0036..946821b 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml @@ -358,7 +358,8 @@ SELECT DATE_FORMAT( create_time, '%Y-%m-%d %H' ) as time, SUM(service_charge) as servicecharge, - SUM(electrovalence) as electrovalence + SUM(electrovalence) as electrovalence, + count(1) as orderCount FROM t_charging_order <where> @@ -380,7 +381,8 @@ SELECT DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, SUM(service_charge) as servicecharge, - SUM(electrovalence) as electrovalence + SUM(electrovalence) as electrovalence, + count(1) as orderCount FROM t_charging_order <where> @@ -402,7 +404,8 @@ SELECT DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, SUM(service_charge) as servicecharge, - SUM(electrovalence) as electrovalence + SUM(electrovalence) as electrovalence, + count(1) as orderCount FROM t_charging_order <where> @@ -424,7 +427,8 @@ SELECT DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, SUM(service_charge) as servicecharge, - SUM(electrovalence) as electrovalence + SUM(electrovalence) as electrovalence, + count(1) as orderCount FROM t_charging_order <where> @@ -443,6 +447,337 @@ </select> + <select id="getByDate" resultType="java.util.Map"> + SELECT + DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, + SUM(service_charge) as servicecharge, + SUM(electrovalence) as electrovalence, + count(1) as orderCount + FROM + t_charging_order + <where> + del_flag = 0 and recharge_payment_status = 2 and ISNULL(refund_status) + <if test="chargingOrderIds != null and chargingOrderIds.size() > 0"> + AND id IN + <foreach collection="chargingOrderIds" item="chargingOrderId" open="(" separator="," close=")"> + #{chargingOrderId} + </foreach> + </if> + </where> + GROUP BY + time + ORDER BY + time + + </select> + <select id="queryPower" resultType="java.util.Map"> + SELECT + 'today' AS data_type, + DATE_FORMAT(create_time, '%Y-%m-%d %H') AS TIME, + SUM(power) AS power + FROM + t_charging_order + WHERE + del_flag = 0 + AND recharge_payment_status = 2 + AND ISNULL(refund_status) + AND DATE(create_time) = CURDATE() + <if test="siteIds != null and siteIds.size() > 0"> + AND site_id IN + <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> + #{siteId} + </foreach> + </if> + GROUP BY + TIME + + UNION ALL + + SELECT + 'yesterday' AS data_type, + DATE_FORMAT(create_time, '%Y-%m-%d %H') AS TIME, + SUM(power) AS power + FROM + t_charging_order + WHERE + del_flag = 0 + AND recharge_payment_status = 2 + AND ISNULL(refund_status) + AND DATE(create_time) = CURDATE() - INTERVAL 1 DAY + <if test="siteIds != null and siteIds.size() > 0"> + AND site_id IN + <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> + #{siteId} + </foreach> + </if> + GROUP BY + TIME + + ORDER BY + TIME; + + + </select> + <select id="queryPowerLevel" resultType="java.util.Map"> + SELECT + count(CASE WHEN power BETWEEN 0 AND 30 THEN 1 ELSE 0 END) AS count_0_30, + count(CASE WHEN power BETWEEN 31 AND 60 THEN 1 ELSE 0 END) AS count_31_60, + count(CASE WHEN power BETWEEN 61 AND 120 THEN 1 ELSE 0 END) AS count_61_120, + count(CASE WHEN power BETWEEN 121 AND 300 THEN 1 ELSE 0 END) AS count_121_300, + count(CASE WHEN power > 300 THEN 1 ELSE 0 END) AS count_above_300 + FROM + t_charging_order + WHERE + del_flag = 0 + AND recharge_payment_status = 2 + AND ISNULL(refund_status) + <if test="siteIds != null and siteIds.size() > 0"> + AND site_id IN + <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> + #{siteId} + </foreach> + </if> + <if test="statisticsQueryDto.dayType =1"> + AND DATE(create_time) = CURDATE() + </if> + <if test="statisticsQueryDto.dayType =2"> + AND WEEKOFYEAR(create_time) = WEEKOFYEAR(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType =3"> + AND MONTH(create_time) = MONTH(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType =4"> + AND YEAR(create_time) = YEAR(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType =5"> + <if test="statisticsQueryDto.startTime != null"> + AND create_time >= #{statisticsQueryDto.startTime} + </if> + <if test="statisticsQueryDto.endTime != null"> + AND create_time <= #{statisticsQueryDto.endTime} + </if> + </if> + + </select> + <select id="usersDay" resultType="java.util.Map"> + SELECT + 'today' AS data_type, + '1' as type, + DATE_FORMAT( create_time, '%Y-%m-%d %H' ) AS TIME, + count(DISTINCT app_user_id) AS counts + FROM + t_charging_order + WHERE + del_flag = 0 + AND recharge_payment_status = 2 + AND ISNULL( refund_status ) + AND DATE ( create_time ) = CURDATE() + GROUP BY + TIME + UNION all + SELECT + 'today' AS data_type, + '2' as type, + DATE_FORMAT( create_time, '%Y-%m-%d %H' ) AS TIME, + count(1) AS counts + FROM + charging_pile_account.t_app_user + WHERE + del_flag = 0 + AND DATE ( create_time ) = CURDATE() + GROUP BY + TIME + </select> + <select id="usersByQuery" resultType="java.util.Map"> + SELECT + 'today' AS data_type, + '1' as type, + DATE_FORMAT( create_time, '%Y-%m-%d' ) AS TIME, + count(DISTINCT app_user_id) AS counts + FROM + t_charging_order + WHERE + del_flag = 0 + AND recharge_payment_status = 2 + AND ISNULL( refund_status ) + <if test="statisticsQueryDto.dayType =1 "> + AND DATE(create_time) = CURDATE() + </if> + <if test="statisticsQueryDto.dayType =2 "> + AND WEEKOFYEAR(create_time) = WEEKOFYEAR(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType =3 "> + AND MONTH(create_time) = MONTH(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType =4"> + AND YEAR(create_time) = YEAR(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType =5"> + <if test="statisticsQueryDto.startTime != null"> + AND create_time >= #{statisticsQueryDto.startTime} + </if> + <if test="statisticsQueryDto.endTime != null"> + AND create_time <= #{statisticsQueryDto.endTime} + </if> + </if> + GROUP BY + TIME + UNION all + SELECT + 'today' AS data_type, + '2' as type, + DATE_FORMAT( create_time, '%Y-%m-%d' ) AS TIME, + count(1) AS counts + FROM + charging_pile_account.t_app_user + WHERE + del_flag = 0 + <if test="statisticsQueryDto.dayType =1 "> + AND DATE(create_time) = CURDATE() + </if> + <if test="statisticsQueryDto.dayType =2 "> + AND WEEKOFYEAR(create_time) = WEEKOFYEAR(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType =3 "> + AND MONTH(create_time) = MONTH(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType =4"> + AND YEAR(create_time) = YEAR(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType =5"> + <if test="statisticsQueryDto.startTime != null"> + AND create_time >= #{statisticsQueryDto.startTime} + </if> + <if test="statisticsQueryDto.endTime != null"> + AND create_time <= #{statisticsQueryDto.endTime} + </if> + </if> + GROUP BY + TIME + + + </select> + <select id="getUserTagCount" resultType="java.util.Map"> + SELECT user_tag_id,COUNT(1) as count from ( + SELECT + a.app_user_id, + a.user_tag_id, + a.create_time + FROM + charging_pile_account.t_app_user_tag a + JOIN ( + SELECT + app_user_id, + MAX(create_time) AS max_create_time + FROM + charging_pile_account.t_app_user_tag + GROUP BY + app_user_id + ) b ON a.app_user_id = b.app_user_id AND a.create_time = b.max_create_time + ) o + GROUP BY o.user_tag_id + </select> + <select id="getVipCount" resultType="java.util.Map"> + SELECT vip_id,count(1) as Counts + FROM charging_pile_account.t_app_user + WHERE del_flag = 0 + GROUP BY vip_id + </select> + <select id="unitConsumption" resultType="java.util.Map"> + SELECT + au.company_id as companyId, + SUM( co.charging_capacity ) as chargingCapacity + FROM + charging_pile_order.t_charging_order co + LEFT JOIN charging_pile_account.t_app_user au ON co.app_user_id = au.id + <where> + co.del_flag = 0 + <if test="statisticsQueryDto.dayType == 1"> + AND DATE( co.create_time ) = CURDATE() + </if> + <if test="statisticsQueryDto.dayType == 2"> + AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() ) + </if> + <if test="statisticsQueryDto.dayType == 3"> + AND MONTH( co.create_time ) = MONTH(CURDATE()) + </if> + <if test="statisticsQueryDto.dayType == 4"> + AND YEAR( co.create_time ) = YEAR(CURDATE() ) + </if> + <if test="statisticsQueryDto.dayType == 5"> + <if test="statisticsQueryDto.startTime != null"> + AND co.create_time >= #{statisticsQueryDto.startTime} + </if> + <if test="statisticsQueryDto.endTime != null"> + AND co.create_time <= #{statisticsQueryDto.endTime} + </if> + </if> + </where> + GROUP BY + au.company_id + </select> + <select id="carUserMethod" resultType="java.util.Map"> + SELECT + count(1) as counts,vehicle_use + from charging_pile_account.t_app_user_car + GROUP BY vehicle_use + </select> + <select id="carUserBrand" resultType="java.util.Map"> + + SELECT + count(1) as counts,vehicle_brand + from charging_pile_account.t_app_user_car + GROUP BY vehicle_brand + </select> + <select id="countLocalCar" resultType="java.util.Map"> + SELECT + SUM(CASE WHEN license_plate LIKE '%川J%' THEN 1 ELSE 0 END) AS localCar, + SUM(CASE WHEN license_plate NOT LIKE '%川J%' THEN 1 ELSE 0 END) AS notLocalCar + FROM + `charging_pile_account`.`t_app_user_car` + WHERE + del_flag = 0 + </select> + <select id="getAver" resultType="java.lang.Long"> + SELECT + ROUND(AVG(te.mark), 2) AS average_mark + FROM + `t_order_evaluate` te + LEFT JOIN t_charging_order co on te.order_id = co.id + WHERE + <if test="siteIds != null and siteIds.size() > 0"> + AND co.site_id IN + <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> + #{siteId} + </foreach> + </if> + te.del_flag = 0 + + </select> + <select id="getLevelEvaluate" resultType="java.util.Map"> + SELECT + CASE + WHEN te.mark BETWEEN 1 AND 2 THEN '1-2' + WHEN te.mark = 3 THEN '3' + WHEN te.mark BETWEEN 4 AND 5 THEN '4-5' + ELSE 'Other' + END AS score_range, + COUNT(*) AS count + FROM + `t_order_evaluate` te + LEFT JOIN t_charging_order co on te.order_id = co.id + WHERE + te.del_flag = 0 + <if test="siteIds != null and siteIds.size() > 0"> + AND co.site_id IN + <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> + #{siteId} + </foreach> + </if> + GROUP BY + score_range + + </select> <select id="chargingList" resultType="com.ruoyi.order.api.vo.ChargingOrderListVO"> select t1.* from t_charging_order t1 where 1=1 diff --git a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml index fe9bde5..f72b520 100644 --- a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml @@ -24,6 +24,7 @@ namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb username: nacos password: nacos + ip: 192.168.110.85 config: # 配置中心地址 server-addr: 192.168.110.169:8848 diff --git a/ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_cert.p12 b/ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_cert.p12 new file mode 100644 index 0000000..735b354 --- /dev/null +++ b/ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_cert.p12 Binary files differ diff --git a/ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_cert.pem b/ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_cert.pem new file mode 100644 index 0000000..7420c3f --- /dev/null +++ b/ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_cert.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEKzCCAxOgAwIBAgIUIsATxGnBh2MW3lonXTp5a2bosAMwDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT +FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg +Q0EwHhcNMjQwOTAzMDYzNDQxWhcNMjkwOTAyMDYzNDQxWjCBhDETMBEGA1UEAwwK +MTY4NDU4NDUxNDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL +DCflm5vlt53mmI7mmJ/mlrDog73mupDnp5HmioDmnInpmZDlhazlj7gxCzAJBgNV +BAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAOyWeURxCZuskSTY7r6dbxTfu1gRdTd2K2PwZnkFy6LBvYTC3Mrw +NK76azRC+QcQAcXRMmZPyeIMNDiD0JUeB4IegjFWxusLSgjvTlCMFL1W62B78cBa +87y7ld8t+P0FIHAUdhe5B5K3VYS7QT89vJ0yiHyAkIZv5QEsH9Tv935MESdD4xVe +YNQ+2wN4MZgCxfh8B5zPi++TA94lmf0ZZWqLEVhFd2ov2C1XToxtfxdhct0o0OG3 +PJYDpaVyYFDNZpzcz9e2WrSfRJHPB81qWY95LWJslszOfGjV4iYdk4kodIW7xPsD +2/HIJl6/VJPHT6McT1b5wWig8N0vcmkTdMsCAwEAAaOBuTCBtjAJBgNVHRMEAjAA +MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2 +Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD +MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC +MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQCR +URHWNrcvXLHvo+o/+qNPT/DNGuHiwL+zMRUGVjlTYNG7KQuB6jrByuRa99VW4H/f +6EHvUCn1j85NfyWD3uFD0uhWtnS/kpULVfKDPq27buhozmLndqVK/BgmYk6AW3gP +m4FV1wIy9p3Rmm6WQWWanoXPYIG0TAk5/iTNH/oE1EAzFFITGZxlk2tgv2cTCQam +IJpfrhIILHiXyTtCShYd0Y9Ip5oLm0keHQ6YyNOV2M9DO0fXpZT33VykpVr8oTqJ +zDISrxyDGXV+1dkgoZ1ZqTmojhRt8VYw5LyVC9PLAo2nUnt8XeFcitXa/5wzJA1r +tEymp0l3CDmY3XwQL9py +-----END CERTIFICATE----- diff --git a/ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_key.pem b/ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_key.pem new file mode 100644 index 0000000..8cab68d --- /dev/null +++ b/ruoyi-service/ruoyi-payment/src/main/resources/cert/apiclient_key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDslnlEcQmbrJEk +2O6+nW8U37tYEXU3ditj8GZ5Bcuiwb2EwtzK8DSu+ms0QvkHEAHF0TJmT8niDDQ4 +g9CVHgeCHoIxVsbrC0oI705QjBS9Vutge/HAWvO8u5XfLfj9BSBwFHYXuQeSt1WE +u0E/PbydMoh8gJCGb+UBLB/U7/d+TBEnQ+MVXmDUPtsDeDGYAsX4fAecz4vvkwPe +JZn9GWVqixFYRXdqL9gtV06MbX8XYXLdKNDhtzyWA6WlcmBQzWac3M/Xtlq0n0SR +zwfNalmPeS1ibJbMznxo1eImHZOJKHSFu8T7A9vxyCZev1STx0+jHE9W+cFooPDd +L3JpE3TLAgMBAAECggEAC80RrXVJ+mboMoNTnVRzBwKF8MWmKCcP0QNbySud1bd+ +QZIKu2Cx8Axzrn6st0p4HCrsLahLNKhRLoR8sgN2cmodKmLetziv77QoHuJt4mfk +g8KK84JV6BMfTauYYN6RmKWcomBLXWkhreY9Qe9NajXsEvHCw8HvFVjjGZcCrFz8 +bG3ULntgqu0UOK/Vue75uzo/6K1ltp7Zjo20OwwYkUef51X+lPtRdoYsny3hw/NR +KzqGr5wjCd+bA2B3oUDpwxotyDuk2JCbdKtqsmabzbLyl+04MkAx3O7XCN+RGeeK +G1H1/YMl+Ddim/1dyBOo4eVAosPEj4sP4Tfzqv8xcQKBgQD44hyEBc71yHDnwmLA +CVgmKmvMa2IR1TmvCo2k+6Dc/KvygaNKZVbcWMeYylAKJmCgLvX8HLFMyNoKGeCf +UTNotx+zQVjizf7S++dSkKEYTwbybZXqSmvWnNDFGzeHHxUjVHcGU2Dki/Uzt9Dh +w7wE0HC+5iGBeFS89OfSwBX9wwKBgQDzWls+dXpXNaSDDWTRqd0pTcpx8D+iWoUr +/qT5QQi8Aclp8TBlU6L+CQ70YTRT/EYKeUivy8WXnzi7BxtswdmASOK1z3/DOFkt +vwdRK3SVkay0vZC7bhJypkwQ7T/ztZiGJFeD4lv6gGwPcPoOdgedZeKTVkP7FB2T +CKK1b0kUWQKBgDenYFcJcXk2pEC/EBP/Qu3t6IMitCBmvOpugrQU7Kjd+5lT8e7N +8Hl/hMqe2v0aDdtkBO+mfuM7ur4tgTQ/FS7iXD1abITzKXuGhvjIjK2B5nzJko98 +qtan5GtfJbCae8CVv7PzayRQQ7mX7ia9/UpaTgvyLCXmgZRrc3eGKqS/AoGBALfw +FAehxFcmtLJZ7VqMih4uLlbwwSh2QzJ9xzSfc3qn3xW0uF/eV9SsBCGzV1oj1M0V +31sBKtjwAHFdbd1GqJ/Od430yR1F+iIZwe4YaoajFWeH4V3KVSdTiytAKJaNLDw4 +O+3zqpItf4AsZNWJYTgXSqsTCU8+ZRw96r4434QBAoGAODEiTnmiMwwiZR12h61o +HMeUi+w7loQkmN6SEmEg0zppvYWOV2LXK9lg/OkGDoSLokUdod/dA60JIG8LEfLM +sGFK/5K+qkTqOPQKlhE7nerqhF4S95lsXy3r2OKv4Cc7mvN8pTZTOIYbEXGrNOvZ +MO5cc2vaWSI6Xm4HoqBe12o= +-----END PRIVATE KEY----- diff --git "a/ruoyi-service/ruoyi-payment/src/main/resources/cert/\350\257\201\344\271\246\344\275\277\347\224\250\350\257\264\346\230\216.txt" "b/ruoyi-service/ruoyi-payment/src/main/resources/cert/\350\257\201\344\271\246\344\275\277\347\224\250\350\257\264\346\230\216.txt" new file mode 100644 index 0000000..9a0aab1 --- /dev/null +++ "b/ruoyi-service/ruoyi-payment/src/main/resources/cert/\350\257\201\344\271\246\344\275\277\347\224\250\350\257\264\346\230\216.txt" @@ -0,0 +1,18 @@ +欢迎使用微信支付! +附件中的三份文件(证书pkcs12格式、证书pem格式、证书密钥pem格式),为接口中强制要求时需携带的证书文件。 +证书属于敏感信息,请妥善保管不要泄露和被他人复制。 +不同开发语言下的证书格式不同,以下为说明指引: + 证书pkcs12格式(apiclient_cert.p12) + 包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份 + 部分安全性要求较高的API需要使用该证书来确认您的调用身份 + windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户号(如:1900006031) + 证书pem格式(apiclient_cert.pem) + 从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制 + 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 + 您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem + 证书密钥pem格式(apiclient_key.pem) + 从apiclient_cert.p12中导出密钥部分的文件,为pem格式 + 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 + 您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem +备注说明: + 由于绝大部分操作系统已内置了微信支付服务器证书的根CA证书, 2018年3月6日后, 不再提供CA证书文件(rootca.pem)下载 \ No newline at end of file -- Gitblit v1.7.1