ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderRefund.java
@@ -46,6 +46,14 @@ @TableField("refund_amount") private BigDecimal refundAmount; @ApiModelProperty(value = "本次余额退款金额") @TableField("balance_refund_amount") private BigDecimal balanceRefundAmount; @ApiModelProperty(value = "本次第三方退款金额") @TableField("third_refund_amount") private BigDecimal thirdRefundAmount; @ApiModelProperty(value = "退款状态(1=退款中,2=退款成功)") @TableField("refund_status") private Integer refundStatus; @@ -97,6 +105,9 @@ @TableField(exist = false) private Integer type; @ApiModelProperty(value = "充电支付模式:1=余额支付,2=余额组合支付,3=第三方支付") @TableField(exist = false) private Integer payMethod; @ApiModelProperty(value = "第三方支付流水号") @TableField(exist = false) private String serailNumber; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/ChargingOrderQuery.java
@@ -31,6 +31,8 @@ private String endTime; @ApiModelProperty(value = "订单来源 1明星 2快电 3新电途") private Integer orderSource; @ApiModelProperty(value = "支付方式筛选 1微信支付 2支付宝支付 3余额支付") private Integer paymentType; @ApiModelProperty(value = "用户ids 前端忽略") private List<Long> userIds; @ApiModelProperty(value = "站点ids 前端忽略") ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderBalanceIncomeDetailVO.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.order.api.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel(value = "充电桩订单余额收入明细", description = "按兑换码卡包统计余额收入和赠送收入") public class ChargingOrderBalanceIncomeDetailVO { @ApiModelProperty(value = "卡包ID") private Long packageId; @ApiModelProperty(value = "卡包名称") private String packageName; @ApiModelProperty(value = "余额收入") private BigDecimal balanceIncome; @ApiModelProperty(value = "赠送收入") private BigDecimal giftIncome; } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderListVO.java
@@ -18,6 +18,8 @@ private Integer status; @ApiModelProperty(value = "充值支付方式(1=微信,2=支付宝)") private Integer rechargePaymentType; @ApiModelProperty(value = "支付方式(1=余额支付,2=组合支付,3=第三方支付)") private Integer payMethod; @ApiModelProperty(value = "充值支付状态(1=待支付,2=已支付)") private Integer rechargePaymentStatus; @ApiModelProperty(value = "电站id") @@ -62,6 +64,10 @@ private String phone; @ApiModelProperty(value = "充电到账金额") private BigDecimal paymentAmount; @ApiModelProperty(value = "现金支付金额") private BigDecimal thirdPayAmount; @ApiModelProperty(value = "余额支付金额") private BigDecimal balancePayAmount; @ApiModelProperty(value = "充电后剩余金额") private BigDecimal residualAmount; @ApiModelProperty(value = "累计电费") ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java
@@ -23,6 +23,10 @@ private Long chargingSecond; @ApiModelProperty(value = "平台手续费") private BigDecimal platFormMoney; @ApiModelProperty(value = "余额收入") private BigDecimal balanceIncome; @ApiModelProperty(value = "赠送费用") private BigDecimal balanceGiftIncome; @ApiModelProperty(value = "车牌号") private String licensePlate; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingOrderVO.java
@@ -22,4 +22,20 @@ private BigDecimal electronicMoney; @ApiModelProperty(value = "服务费") private BigDecimal serviceMoney; @ApiModelProperty(value = "平台收入汇总") private BigDecimal platformIncomeTotal; @ApiModelProperty(value = "合作商收入汇总") private BigDecimal partnerIncomeTotal; @ApiModelProperty(value = "微信收入") private BigDecimal wechatIncome; @ApiModelProperty(value = "支付宝收入") private BigDecimal alipayIncome; @ApiModelProperty(value = "余额收入") private BigDecimal balanceIncome; @ApiModelProperty(value = "余额赠送") private BigDecimal balanceGiftIncome; @ApiModelProperty(value = "白名单充电收入") private BigDecimal whitelistChargingIncome; @ApiModelProperty(value = "白名单退款") private BigDecimal whitelistRefund; } ruoyi-gateway/src/main/resources/logback.xml
@@ -7,7 +7,8 @@ <contextName>logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 --> <property name="log.path" value="/data/log/app/ruoyi-gateway"/> <!-- <property name="log.path" value="/data/log/app/ruoyi-gateway"/>--> <property name="log.path" value="/Users/mitao/Documents/log/mx_charging_pile/log/app/ruoyi-gateway"/> <!--0. 日志格式和颜色渲染 --> <!-- 彩色日志依赖的渲染类 --> ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -734,6 +734,13 @@ } @RequiresPermissions(value = {"/appUser/select", "/vipList/select"}, logical = Logical.OR) @ApiOperation(value = "用户详情余额明细", tags = {"后台-用户管理-用户列表"}) @PostMapping(value = "/user/balance/page") public R<Page<TExchangeCodeUseRecord>> adminBalanceDetail(@RequestBody ExchangeCodeUseRecordQuery queryDto) { return otherClient.exchangeCodeUseRecordPage(queryDto); } @ApiOperation(value = "余额明细", tags = {"小程序-个人中心"}) @PostMapping(value = "/user/balance/page1") public R<Page<TExchangeCodeUseRecord>> balanceDetail(@RequestBody ExchangeCodeUseRecordQuery queryDto) { ruoyi-service/ruoyi-chargingPile/src/main/resources/logback.xml
@@ -7,7 +7,8 @@ <contextName>logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 --> <property name="log.path" value="/data/log/app/ruoyi-chargingPile"/> <!-- <property name="log.path" value="/data/log/app/ruoyi-chargingPile"/>--> <property name="log.path" value="/Users/mitao/Documents/log/mx_charging_pile/log/app/ruoyi-chargingPile"/> <!--0. 日志格式和颜色渲染 --> <!-- 彩色日志依赖的渲染类 --> ruoyi-service/ruoyi-integration/src/main/resources/logback.xml
@@ -7,7 +7,8 @@ <contextName>logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 --> <property name="log.path" value="/data/log/app/ruoyi-integration"/> <!-- <property name="log.path" value="/data/log/app/ruoyi-integration"/>--> <property name="log.path" value="/Users/mitao/Documents/log/mx_charging_pile/log/app/ruoyi-integration"/> <!--0. 日志格式和颜色渲染 --> <!-- 彩色日志依赖的渲染类 --> ruoyi-service/ruoyi-jianguan/src/main/resources/logback.xml
@@ -7,7 +7,8 @@ <contextName>logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 --> <property name="log.path" value="/data/log/app/ruoyi-jianguan"/> <!-- <property name="log.path" value="/data/log/app/ruoyi-jianguan"/>--> <property name="log.path" value="/Users/mitao/Documents/log/mx_charging_pile/log/app/ruoyi-jianguan"/> <!--0. 日志格式和颜色渲染 --> <!-- 彩色日志依赖的渲染类 --> ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -172,6 +172,9 @@ } } tChargingOrderExport.setPaymentMethod(getPaymentMethod(chargingOrderListVO)); tChargingOrderExport.setCashPayAmount(formatMoney(getCashPayAmount(chargingOrderListVO))); tChargingOrderExport.setBalancePayAmount(formatMoney(getBalancePayAmount(chargingOrderListVO))); if (chargingOrderListVO.getCreateTime()!=null){ String s1 = DateUtils.localDateTimeToString(chargingOrderListVO.getCreateTime()); tChargingOrderExport.setCreateTime(s1); @@ -218,7 +221,6 @@ tChargingOrderExport.setServiceChargePrice(""); tChargingOrderExport.setServiceChargePriceLook(""); tChargingOrderExport.setCumulativeChargingTime(chargingOrderListVO.getChargingSecond() + ""); tChargingOrderExport.setRechargeAmount(chargingOrderListVO.getRechargeAmount().toString()); tChargingOrderExport.setRefundAmount(null != chargingOrderListVO.getRefundAmount() ? chargingOrderListVO.getRefundAmount().toString() : ""); tChargingOrderExport.setStartSoc(chargingOrderListVO.getStartSoc()); tChargingOrderExport.setEndtSoc(chargingOrderListVO.getEndSoc()); @@ -283,6 +285,59 @@ e.printStackTrace(); } } } private String getPaymentMethod(ChargingOrderListVO chargingOrderListVO) { Integer payMethod = chargingOrderListVO.getPayMethod(); String thirdPayName = getThirdPayName(chargingOrderListVO.getRechargePaymentType()); if (Integer.valueOf(1).equals(payMethod)) { return "余额支付"; } if (Integer.valueOf(2).equals(payMethod)) { return thirdPayName.isEmpty() ? "余额支付" : "余额支付+" + thirdPayName; } if (Integer.valueOf(3).equals(payMethod)) { return thirdPayName; } return thirdPayName; } private String getThirdPayName(Integer rechargePaymentType) { if (Integer.valueOf(1).equals(rechargePaymentType)) { return "微信支付"; } if (Integer.valueOf(2).equals(rechargePaymentType) || Integer.valueOf(3).equals(rechargePaymentType)) { return "支付宝支付"; } return ""; } private BigDecimal getCashPayAmount(ChargingOrderListVO chargingOrderListVO) { if (chargingOrderListVO.getThirdPayAmount() != null) { return chargingOrderListVO.getThirdPayAmount(); } if (Integer.valueOf(3).equals(chargingOrderListVO.getPayMethod())) { return nullToZero(chargingOrderListVO.getPaymentAmount()); } return BigDecimal.ZERO; } private BigDecimal getBalancePayAmount(ChargingOrderListVO chargingOrderListVO) { if (chargingOrderListVO.getBalancePayAmount() != null) { return chargingOrderListVO.getBalancePayAmount(); } if (Integer.valueOf(1).equals(chargingOrderListVO.getPayMethod())) { return nullToZero(chargingOrderListVO.getPaymentAmount()); } return BigDecimal.ZERO; } private BigDecimal nullToZero(BigDecimal amount) { return amount == null ? BigDecimal.ZERO : amount; } private String formatMoney(BigDecimal amount) { return nullToZero(amount).setScale(2, RoundingMode.HALF_UP).toPlainString(); } @@ -356,4 +411,3 @@ } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -277,6 +277,11 @@ payOrderInfoDto.setRefundAmount(byId.getRefundAmount()); payOrderInfoDto.setRechargeAmount(byId.getRechargeAmount()); payOrderInfoDto.setFinalAmount(byId.getRechargeAmount().subtract(byId.getRefundAmount())); payOrderInfoDto.setPayMethod(byId.getPayMethod()); payOrderInfoDto.setBalancePayAmount(byId.getBalancePayAmount()); payOrderInfoDto.setThirdPayAmount(byId.getThirdPayAmount()); payOrderInfoDto.setBalanceRefundAmount(byId.getBalanceRefundAmount()); payOrderInfoDto.setThirdRefundAmount(byId.getThirdRefundAmount()); return R.ok(payOrderInfoDto); case 2: TShoppingOrder byId1 = shoppingOrderService.getById(orderId); @@ -525,6 +530,16 @@ } @RequiresPermissions(value = {"/chargingPileOrder"}, logical = Logical.OR) @ResponseBody @PostMapping(value = "/balanceIncomeDetail") @ApiOperation(value = "充电桩订单余额收入明细", tags = {"管理后台-订单管理"}) public AjaxResult<List<ChargingOrderBalanceIncomeDetailVO>> balanceIncomeDetail(@RequestBody ChargingOrderQuery dto) { List<ChargingOrderBalanceIncomeDetailVO> res = chargingOrderService.balanceIncomeDetail(dto); return AjaxResult.success(res); } @RequiresPermissions(value = {"/chargingPileOrder/monitoring_record"}, logical = Logical.OR) @ResponseBody @GetMapping(value = "/chargingOrderInfo") ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderInfoDto.java
@@ -27,6 +27,16 @@ private BigDecimal refundAmount; private BigDecimal rechargeAmount; private BigDecimal finalAmount; @ApiModelProperty("充电支付模式:1=余额支付,2=余额组合支付,3=第三方支付") private Integer payMethod; @ApiModelProperty("余额支付金额") private BigDecimal balancePayAmount; @ApiModelProperty("第三方支付金额") private BigDecimal thirdPayAmount; @ApiModelProperty("余额退款金额") private BigDecimal balanceRefundAmount; @ApiModelProperty("第三方退款金额") private BigDecimal thirdRefundAmount; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/TChargingOrderExport.java
@@ -5,8 +5,6 @@ import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; @Data @ApiModel(value = "充电时段统计-导出") public class TChargingOrderExport implements Serializable { @@ -79,8 +77,12 @@ private String serviceChargePriceLook; @Excel(name = "充电时长(分钟)",width = 30) private String cumulativeChargingTime; @Excel(name = "充值金额",width = 30) private String rechargeAmount; @Excel(name = "支付方式",width = 30) private String paymentMethod; @Excel(name = "现金支付金额",width = 30) private String cashPayAmount; @Excel(name = "余额支付金额",width = 30) private String balancePayAmount; @Excel(name = "退款金额",width = 30) private String refundAmount; @Excel(name = "充电前面soc",width = 30) ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -11,6 +11,7 @@ import com.ruoyi.order.api.query.ChargingOrderQuery; import com.ruoyi.order.api.vo.ChargingOrderListVO; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.api.vo.ChargingOrderBalanceIncomeDetailVO; import com.ruoyi.order.api.vo.TChargingOrderVo; import com.ruoyi.order.dto.*; import com.ruoyi.order.vo.OrderCountByDate; @@ -59,6 +60,11 @@ List<ChargingOrderVO> chargingOrder(@Param("pageInfo") PageInfo<ChargingOrderVO> pageInfo, @Param("req") ChargingOrderQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2,@Param("endTime1") String endTime1,@Param("endTime2") String endTime11); Map<String, Object> chargingOrderNolimit( @Param("req") ChargingOrderQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2,@Param("endTime1") String endTime1,@Param("endTime2") String endTime11); Map<String, Object> chargingOrderFundSummary(@Param("req") ChargingOrderQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2,@Param("endTime1") String endTime1,@Param("endTime2") String endTime11); List<Long> chargingOrderSummaryOrderIds(@Param("req") ChargingOrderQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2,@Param("endTime1") String endTime1,@Param("endTime2") String endTime11); Map<String, Object> exchangeCodeBalanceSummary(@Param("orderIds") List<Long> orderIds); List<Map<String, Object>> exchangeCodeBalanceIncomeByOrderIds(@Param("orderIds") List<Long> orderIds); List<ChargingOrderBalanceIncomeDetailVO> exchangeCodeBalanceIncomeDetail(@Param("orderIds") List<Long> orderIds); List<PayOrderDto> payOrderQuery(@Param("pageInfo")PageInfo<PayOrderDto> pageInfo,@Param("data") PayOrderQueryDto payOrderQueryDto); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -144,6 +144,8 @@ TCharingOrderVO chargingOrder(ChargingOrderQuery dto); List<ChargingOrderBalanceIncomeDetailVO> balanceIncomeDetail(ChargingOrderQuery dto); R<PageInfo<PayOrderDto>> payOrderQuery(PayOrderQueryDto payOrderQueryDto); R<PageInfo<TChargingOrderRefund>> getRefundList(ChargingRefundDto chargingRefundDto); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -474,6 +474,21 @@ } } private void finishManualChargingRefund(TChargingOrder chargingOrder, TChargingOrderRefund refund, BigDecimal refundAmount, BigDecimal balanceRefundAmount, BigDecimal thirdRefundAmount) { chargingOrder.setRefundStatus(2); chargingOrder.setRefundAmount(money(chargingOrder.getRefundAmount()).add(refundAmount)); chargingOrder.setBalanceRefundAmount(money(chargingOrder.getBalanceRefundAmount()).add(balanceRefundAmount)); chargingOrder.setThirdRefundAmount(money(chargingOrder.getThirdRefundAmount()).add(thirdRefundAmount)); this.baseMapper.updateById(chargingOrder); refund.setRefundStatus(2); chargingOrderRefundService.save(refund); if (balanceRefundAmount.compareTo(BigDecimal.ZERO) > 0) { changeUserBalance(chargingOrder.getAppUserId(), balanceRefundAmount); recordBalanceRefund(chargingOrder, balanceRefundAmount, refund.getRefundCode()); } } @Override public AjaxResult paymentChargingOrder(AddChargingOrder addChargingOrder) { Long userId = tokenService.getLoginUserApplet().getUserId(); @@ -1163,6 +1178,8 @@ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue()); chargingOrderRefund.setRefundAmount(totalRefundAmount); chargingOrderRefund.setBalanceRefundAmount(balanceRefundAmount); chargingOrderRefund.setThirdRefundAmount(thirdRefundAmount); chargingOrderRefund.setRefundStatus(1); chargingOrderRefund.setPayType(rechargePaymentType); chargingOrderRefund.setRefundStatus(1); @@ -1190,7 +1207,6 @@ return; } this.updateById(chargingOrder); chargingOrderRefund.setRefundAmount(thirdRefundAmount); if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 1 == rechargePaymentType) { WxPaymentRefundModel model = new WxPaymentRefundModel(); model.setOut_trade_no(chargingOrder.getCode()); @@ -1310,6 +1326,8 @@ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue()); chargingOrderRefund.setRefundAmount(money); chargingOrderRefund.setBalanceRefundAmount(BigDecimal.ZERO); chargingOrderRefund.setThirdRefundAmount(money); chargingOrderRefund.setRefundStatus(1); chargingOrderRefund.setPayType(rechargePaymentType); chargingOrderRefund.setRefundStatus(1); @@ -1413,9 +1431,9 @@ one.setRefundTime(LocalDateTime.now()); chargingOrderRefundService.updateById(one); if (money(order.getBalanceRefundAmount()).compareTo(BigDecimal.ZERO) > 0) { changeUserBalance(order.getAppUserId(), money(order.getBalanceRefundAmount())); recordBalanceRefund(order, money(order.getBalanceRefundAmount()), one.getRefundCode()); if (money(one.getBalanceRefundAmount()).compareTo(BigDecimal.ZERO) > 0) { changeUserBalance(order.getAppUserId(), money(one.getBalanceRefundAmount())); recordBalanceRefund(order, money(one.getBalanceRefundAmount()), one.getRefundCode()); } TChargingOrder chargingOrder = new TChargingOrder(); chargingOrder.setId(one.getChargingOrderId()); @@ -1741,38 +1759,10 @@ // 查询当前登陆人按钮权限 SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData(); Integer roleType = sysUser.getRoleType(); //如果没传siteId,获取当前登陆人所有的siteIds List<Integer> siteIds = new ArrayList<>(); if (dto.getSiteId() == null) { if (userId != null) { List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData(); for (GetSiteListDTO datum : data) { siteIds.add(datum.getId()); } } } else { siteIds.add(dto.getSiteId()); } if (siteIds.isEmpty()) { siteIds.add(-1); } else { if (roleType == 2) { List<Integer> integers = new ArrayList<>(); for (Integer siteId : siteIds) { // 校验有没有这个站点的权限 List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData(); Boolean b = t1.get(1); if (b) { integers.add(siteId); } } siteIds = integers; } } if (siteIds.isEmpty()) siteIds.add(-1); dto.setSiteIds(siteIds); setChargingOrderAuthSiteIds(dto, sysUser, userId, roleType); List<Integer> siteIds = dto.getSiteIds(); List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2); fillChargingOrderBalanceIncome(list); List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list(); for (ChargingOrderVO chargingOrderVO : list) { if (roleType == 2) { @@ -1837,23 +1827,224 @@ } } fillEmptyChargingOrderSummary(tCharingOrderVO); Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto, startTime1, startTime2, endTime1, endTime2); if (null != map) { tCharingOrderVO.setTotal(map.get("total") == null ? BigDecimal.ZERO : (BigDecimal) map.get("total")); tCharingOrderVO.setTime(map.get("time") == null ? 0L : (Long) map.get("time")); tCharingOrderVO.setIncome(map.get("income") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("income")).setScale(2, RoundingMode.HALF_EVEN)); tCharingOrderVO.setElectronicMoney(map.get("electronicMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("electronicMoney")).setScale(2, RoundingMode.HALF_EVEN)); tCharingOrderVO.setServiceMoney(map.get("serviceMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("serviceMoney")).setScale(2, RoundingMode.HALF_EVEN)); tCharingOrderVO.setTotal(getSummaryDecimal(map, "total")); tCharingOrderVO.setTime(getSummaryLong(map, "time")); tCharingOrderVO.setIncome(getSummaryDecimal(map, "income")); tCharingOrderVO.setElectronicMoney(getSummaryDecimal(map, "electronicMoney")); tCharingOrderVO.setServiceMoney(getSummaryDecimal(map, "serviceMoney")); } Map<String, Object> fundMap = this.baseMapper.chargingOrderFundSummary(dto, startTime1, startTime2, endTime1, endTime2); if (null != fundMap) { tCharingOrderVO.setPlatformIncomeTotal(getSummaryDecimal(fundMap, "platformIncomeTotal")); tCharingOrderVO.setPartnerIncomeTotal(getSummaryDecimal(fundMap, "partnerIncomeTotal")); tCharingOrderVO.setWechatIncome(getSummaryDecimal(fundMap, "wechatIncome")); tCharingOrderVO.setAlipayIncome(getSummaryDecimal(fundMap, "alipayIncome")); tCharingOrderVO.setWhitelistChargingIncome(getSummaryDecimal(fundMap, "whitelistChargingIncome")); tCharingOrderVO.setWhitelistRefund(getSummaryDecimal(fundMap, "whitelistRefund")); } Map<String, Object> balanceMap = getExchangeCodeBalanceSummary(dto, startTime1, startTime2, endTime1, endTime2); tCharingOrderVO.setBalanceIncome(getSummaryDecimal(balanceMap, "balanceIncome")); tCharingOrderVO.setBalanceGiftIncome(getSummaryDecimal(balanceMap, "balanceGiftIncome")); pageInfo.setRecords(list); tCharingOrderVO.setList(pageInfo); return tCharingOrderVO; } private void fillChargingOrderBalanceIncome(List<ChargingOrderVO> list) { if (list == null || list.isEmpty()) { return; } List<Long> orderIds = list.stream().map(ChargingOrderVO::getId).filter(Objects::nonNull).collect(Collectors.toList()); if (orderIds.isEmpty()) { return; } Map<Long, Map<String, Object>> incomeMap = new HashMap<>(); List<Map<String, Object>> rows = this.baseMapper.exchangeCodeBalanceIncomeByOrderIds(orderIds); if (rows != null) { for (Map<String, Object> row : rows) { Long orderId = getSummaryLong(row, "orderId"); if (orderId != null) { incomeMap.put(orderId, row); } } } for (ChargingOrderVO item : list) { Map<String, Object> row = incomeMap.get(item.getId()); item.setBalanceIncome(getSummaryDecimal(row, "balanceIncome")); item.setBalanceGiftIncome(getSummaryDecimal(row, "balanceGiftIncome")); } } private void setChargingOrderAuthSiteIds(ChargingOrderQuery dto, SysUser sysUser, Long userId, Integer roleType) { List<Integer> siteIds = new ArrayList<>(); if (dto.getSiteId() == null) { if (userId != null) { List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData(); for (GetSiteListDTO datum : data) { siteIds.add(datum.getId()); } } } else { siteIds.add(dto.getSiteId()); } if (siteIds.isEmpty()) { siteIds.add(-1); } else if (roleType == 2) { List<Integer> integers = new ArrayList<>(); for (Integer siteId : siteIds) { List<Boolean> t1 = partnerClient.getChargingOrderMenu(sysUser.getObjectId(), siteId).getData(); Boolean b = t1.get(1); if (b) { integers.add(siteId); } } siteIds = integers; } if (siteIds.isEmpty()) { siteIds.add(-1); } dto.setSiteIds(siteIds); } @Override public List<ChargingOrderBalanceIncomeDetailVO> balanceIncomeDetail(ChargingOrderQuery dto) { String startTime1 = null; String startTime2 = null; String endTime1 = null; String endTime2 = null; if (StringUtils.hasLength(dto.getStartTime())) { String[] split = dto.getStartTime().split(" - "); startTime1 = split[0]; startTime2 = split[1]; } if (StringUtils.hasLength(dto.getEndTime())) { String[] split = dto.getEndTime().split(" - "); endTime1 = split[0]; endTime2 = split[1]; } if (StringUtils.hasLength(dto.getPhone())) { List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData(); if (data == null || data.isEmpty()) { return new ArrayList<>(); } dto.setUserIds(data); } Long userId = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserClient.getSysUser(userId).getData(); setChargingOrderAuthSiteIds(dto, sysUser, userId, sysUser.getRoleType()); List<Long> orderIds = this.baseMapper.chargingOrderSummaryOrderIds(dto, startTime1, startTime2, endTime1, endTime2); if (orderIds == null || orderIds.isEmpty()) { return new ArrayList<>(); } Map<Long, ChargingOrderBalanceIncomeDetailVO> detailMap = new LinkedHashMap<>(); int batchSize = 500; for (int i = 0; i < orderIds.size(); i += batchSize) { List<Long> batchIds = orderIds.subList(i, Math.min(i + batchSize, orderIds.size())); List<ChargingOrderBalanceIncomeDetailVO> batchList = this.baseMapper.exchangeCodeBalanceIncomeDetail(batchIds); if (batchList == null || batchList.isEmpty()) { continue; } for (ChargingOrderBalanceIncomeDetailVO item : batchList) { Long packageId = item.getPackageId() == null ? 0L : item.getPackageId(); ChargingOrderBalanceIncomeDetailVO detail = detailMap.get(packageId); if (detail == null) { detail = new ChargingOrderBalanceIncomeDetailVO(); detail.setPackageId(item.getPackageId()); detail.setPackageName(item.getPackageName()); detail.setBalanceIncome(BigDecimal.ZERO); detail.setGiftIncome(BigDecimal.ZERO); detailMap.put(packageId, detail); } detail.setBalanceIncome(detail.getBalanceIncome().add(item.getBalanceIncome() == null ? BigDecimal.ZERO : item.getBalanceIncome())); detail.setGiftIncome(detail.getGiftIncome().add(item.getGiftIncome() == null ? BigDecimal.ZERO : item.getGiftIncome())); } } List<ChargingOrderBalanceIncomeDetailVO> result = new ArrayList<>(); for (ChargingOrderBalanceIncomeDetailVO detail : detailMap.values()) { BigDecimal balanceIncome = (detail.getBalanceIncome() == null ? BigDecimal.ZERO : detail.getBalanceIncome()).setScale(2, RoundingMode.HALF_EVEN); BigDecimal giftIncome = (detail.getGiftIncome() == null ? BigDecimal.ZERO : detail.getGiftIncome()).setScale(2, RoundingMode.HALF_EVEN); if (balanceIncome.compareTo(BigDecimal.ZERO) == 0 && giftIncome.compareTo(BigDecimal.ZERO) == 0) { continue; } detail.setBalanceIncome(balanceIncome); detail.setGiftIncome(giftIncome); result.add(detail); } return result; } private void fillEmptyChargingOrderSummary(TCharingOrderVO tCharingOrderVO) { tCharingOrderVO.setTotal(BigDecimal.ZERO); tCharingOrderVO.setTime(0L); tCharingOrderVO.setIncome(BigDecimal.ZERO); tCharingOrderVO.setElectronicMoney(BigDecimal.ZERO); tCharingOrderVO.setServiceMoney(BigDecimal.ZERO); tCharingOrderVO.setPlatformIncomeTotal(BigDecimal.ZERO); tCharingOrderVO.setPartnerIncomeTotal(BigDecimal.ZERO); tCharingOrderVO.setWechatIncome(BigDecimal.ZERO); tCharingOrderVO.setAlipayIncome(BigDecimal.ZERO); tCharingOrderVO.setBalanceIncome(BigDecimal.ZERO); tCharingOrderVO.setBalanceGiftIncome(BigDecimal.ZERO); tCharingOrderVO.setWhitelistChargingIncome(BigDecimal.ZERO); tCharingOrderVO.setWhitelistRefund(BigDecimal.ZERO); } pageInfo.setRecords(list); tCharingOrderVO.setList(pageInfo); return tCharingOrderVO; private Map<String, Object> getExchangeCodeBalanceSummary(ChargingOrderQuery dto, String startTime1, String startTime2, String endTime1, String endTime2) { Map<String, Object> totalMap = new HashMap<>(); totalMap.put("balanceIncome", BigDecimal.ZERO); totalMap.put("balanceGiftIncome", BigDecimal.ZERO); List<Long> orderIds = this.baseMapper.chargingOrderSummaryOrderIds(dto, startTime1, startTime2, endTime1, endTime2); if (orderIds == null || orderIds.isEmpty()) { return totalMap; } BigDecimal balanceIncome = BigDecimal.ZERO; BigDecimal balanceGiftIncome = BigDecimal.ZERO; int batchSize = 500; for (int i = 0; i < orderIds.size(); i += batchSize) { List<Long> batchIds = orderIds.subList(i, Math.min(i + batchSize, orderIds.size())); Map<String, Object> batchMap = this.baseMapper.exchangeCodeBalanceSummary(batchIds); if (batchMap != null) { balanceIncome = balanceIncome.add(getSummaryDecimal(batchMap, "balanceIncome")); balanceGiftIncome = balanceGiftIncome.add(getSummaryDecimal(batchMap, "balanceGiftIncome")); } } totalMap.put("balanceIncome", balanceIncome); totalMap.put("balanceGiftIncome", balanceGiftIncome); return totalMap; } private BigDecimal getSummaryDecimal(Map<String, Object> map, String key) { if (map == null) { return BigDecimal.ZERO; } Object value = map.get(key); if (value == null) { return BigDecimal.ZERO; } if (value instanceof BigDecimal) { return ((BigDecimal) value).setScale(2, RoundingMode.HALF_EVEN); } if (value instanceof Number) { return BigDecimal.valueOf(((Number) value).doubleValue()).setScale(2, RoundingMode.HALF_EVEN); } return new BigDecimal(value.toString()).setScale(2, RoundingMode.HALF_EVEN); } private Long getSummaryLong(Map<String, Object> map, String key) { if (map == null) { return 0L; } Object value = map.get(key); if (value == null) { return 0L; } if (value instanceof Number) { return ((Number) value).longValue(); } return Long.parseLong(value.toString()); } @Override @@ -2994,6 +3185,8 @@ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); chargingOrderRefund.setRefundCode("CDF" + sdf1.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); chargingOrderRefund.setRefundAmount(refundAmount); chargingOrderRefund.setBalanceRefundAmount(balanceRefundAmount); chargingOrderRefund.setThirdRefundAmount(thirdRefundAmount); chargingOrderRefund.setRefundStatus(2); chargingOrderRefund.setPayType(rechargePaymentType); chargingOrderRefund.setCode(chargingOrder.getCode()); @@ -3177,8 +3370,27 @@ chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark()); chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount())); chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount()); BigDecimal manualRefundAmount = money(payOrderQueryDto.getRefundAmount()); BigDecimal refundedThirdAmount = money(tChargingOrder.getThirdRefundAmount()); BigDecimal refundableThirdAmount = money(tChargingOrder.getThirdPayAmount()).subtract(refundedThirdAmount); if (refundableThirdAmount.compareTo(BigDecimal.ZERO) < 0) { refundableThirdAmount = BigDecimal.ZERO; } BigDecimal thirdRefundAmount = isBalancePayMode(tChargingOrder.getPayMethod()) ? manualRefundAmount.min(refundableThirdAmount).setScale(2, RoundingMode.HALF_UP) : manualRefundAmount; BigDecimal balanceRefundAmount = manualRefundAmount.subtract(thirdRefundAmount).setScale(2, RoundingMode.HALF_UP); if (balanceRefundAmount.compareTo(BigDecimal.ZERO) < 0) { balanceRefundAmount = BigDecimal.ZERO; } chargingOrderRefund.setBalanceRefundAmount(balanceRefundAmount); chargingOrderRefund.setThirdRefundAmount(thirdRefundAmount); if (1 == tChargingOrder.getRechargePaymentType()) { if (thirdRefundAmount.compareTo(BigDecimal.ZERO) == 0) { chargingOrderRefund.setRefundSerialNumber("BALANCE"); finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); } else if (1 == tChargingOrder.getRechargePaymentType()) { WxPaymentRefundModel model = new WxPaymentRefundModel(); model.setOut_trade_no(tChargingOrder.getCode()); model.setOut_refund_no(chargingOrderRefund.getRefundCode()); @@ -3186,16 +3398,13 @@ model.setReason("取消订单"); model.setNotify_url("/payment/wx/refund/notify"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue()); amount.setTotal(tChargingOrder.getRechargeAmount().multiply(new BigDecimal(100)).intValue()); amount.setRefund(thirdRefundAmount.multiply(new BigDecimal(100)).intValue()); amount.setTotal((isBalancePayMode(tChargingOrder.getPayMethod()) ? money(tChargingOrder.getThirdPayAmount()) : money(tChargingOrder.getRechargeAmount())).multiply(new BigDecimal(100)).intValue()); amount.setCurrency("CNY"); model.setAmount(amount); R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); if (200 == orderR.getCode()) { tChargingOrder.setRefundStatus(2); tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); this.baseMapper.updateById(tChargingOrder); chargingOrderRefundService.save(chargingOrderRefund); finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); //手续费 Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount"); Object refund_fee1 = amount1.get("refund_fee"); @@ -3205,33 +3414,27 @@ } } if (2 == tChargingOrder.getRechargePaymentType()) { else if (2 == tChargingOrder.getRechargePaymentType()) { RefundReq dto = new RefundReq(); dto.setOutTradeNo(tChargingOrder.getCode()); dto.setOutRequestNo(tChargingOrder.getCode()); dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString()); dto.setRefundAmount(thirdRefundAmount.toString()); dto.setRefundReason("取消订单"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if (null != resp) { chargingOrderRefund.setRefundStatus(2); chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); this.baseMapper.updateById(tChargingOrder); chargingOrderRefundService.save(chargingOrderRefund); finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); } } if (3 == tChargingOrder.getRechargePaymentType()) { else if (3 == tChargingOrder.getRechargePaymentType()) { RefundReq dto = new RefundReq(); dto.setOutTradeNo(tChargingOrder.getRechargeSerialNumber()); dto.setOutRequestNo(tChargingOrder.getCode()); dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString()); dto.setRefundAmount(thirdRefundAmount.toString()); dto.setRefundReason("取消订单"); RefundResp resp = h5AliPaymentClient.refund(dto).getData(); if (null != resp && "10000".equals(resp.getCode())) { chargingOrderRefund.setRefundStatus(2); chargingOrderRefund.setRefundAmount((tChargingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); this.baseMapper.updateById(tChargingOrder); chargingOrderRefundService.save(chargingOrderRefund); finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); } } ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -118,6 +118,15 @@ <if test="req.orderSource != null and req.orderSource == 3 "> and t1.tripartite_platform_name = 'XinDianTu' </if> <if test="req.paymentType != null and req.paymentType == 1 "> and t1.recharge_payment_type = 1 </if> <if test="req.paymentType != null and req.paymentType == 2 "> and t1.recharge_payment_type in (2, 3) </if> <if test="req.paymentType != null and req.paymentType == 3 "> and t1.pay_method in (1, 2) </if> <if test="req.siteId != null "> and t1.site_id = #{req.siteId} </if> @@ -266,6 +275,8 @@ re.refund_title, re.refund_reason, re.refund_amount, re.balance_refund_amount, re.third_refund_amount, re.refund_total_amount, re.refund_time, re.pay_type, @@ -276,6 +287,7 @@ co.create_time as pay_time, co.id as order_id, co.app_user_id as user_id, co.pay_method as pay_method, 1 as type FROM t_charging_order_refund re LEFT JOIN t_charging_order co ON re.charging_order_id = co.id @@ -287,6 +299,8 @@ re.refund_title, re.refund_reason, re.refund_amount, 0 as balance_refund_amount, re.refund_amount as third_refund_amount, re.refund_total_amount, re.refund_time, re.pay_type, @@ -297,6 +311,7 @@ so.create_time as pay_time, so.id as order_id, so.app_user_id as user_id, 3 as pay_method, 2 as type FROM t_shopping_order_refund re LEFT JOIN t_shopping_order so on re.shopping_order_id = so.id @@ -308,6 +323,8 @@ vr.refund_title, vr.refund_reason, vr.refund_amount, 0 as balance_refund_amount, vr.refund_amount as third_refund_amount, vr.refund_total_amount, vr.refund_time, vr.pay_type, @@ -318,6 +335,7 @@ vo.create_time as pay_time, vo.id as order_id, vo.app_user_id as user_id, 3 as pay_method, 3 as type FROM t_vip_order_refund vr LEFT JOIN t_vip_order vo on vr.vip_order_id = vo.id @@ -992,6 +1010,7 @@ b.`name` as siteName, a.`status`, a.recharge_payment_type as rechargePaymentType, a.pay_method as payMethod, a.recharge_payment_status as rechargePaymentStatus, a.site_id as siteId, a.charging_pile_id as chargingPileId, @@ -1014,6 +1033,8 @@ c.license_plate as licensePlate, f.phone, a.payment_amount as paymentAmount, a.third_pay_amount as thirdPayAmount, a.balance_pay_amount as balancePayAmount, e.refund_amount as residualAmount, h.electrovalence as electrovalence, CASE WHEN a.order_source = 1 THEN h.serviceCharge ELSE h.serviceCharge * 0.8 END as serviceCharge, @@ -1090,7 +1111,10 @@ aa.electricity, aa.rechargeAmount, aa.rechargePaymentType, aa.payMethod, aa.paymentAmount, aa.thirdPayAmount, aa.balancePayAmount, aa.electrovalence, aa.serviceCharge, aa.orderSource, @@ -1121,7 +1145,10 @@ b.electricity, b.recharge_amount as rechargeAmount, b.recharge_payment_type as rechargePaymentType, b.pay_method as payMethod, b.payment_amount as paymentAmount, b.third_pay_amount as thirdPayAmount, b.balance_pay_amount as balancePayAmount, b.electrovalence, b.service_charge as serviceCharge, b.order_source as orderSource, @@ -1189,8 +1216,8 @@ and b.end_time between #{endTime1} and #{endTime2} </if> and b.start_time IS NOT NULL and b.end_time is not null ) as aa group by aa.id, aa.`code`, aa.siteId, aa.siteName, aa.orderType, aa.terminalName, aa.electricity, aa.rechargeAmount, aa.paymentAmount, aa.electrovalence, aa.serviceCharge, aa.tripartitePlatformName, aa.startTime, aa.endTime, aa.chargingSecond, aa.startSoc, aa.endSoc, aa.`status`, aa.endMode, aa.phone, aa.licensePlate, aa.orderSource, aa.rechargePaymentType order by aa.startTime desc ) as aa group by aa.id, aa.`code`, aa.siteId, aa.siteName, aa.orderType, aa.terminalName, aa.electricity, aa.rechargeAmount, aa.paymentAmount, aa.thirdPayAmount, aa.balancePayAmount, aa.electrovalence, aa.serviceCharge, aa.tripartitePlatformName, aa.startTime, aa.endTime, aa.chargingSecond, aa.startSoc, aa.endSoc, aa.`status`, aa.endMode, aa.phone, aa.licensePlate, aa.orderSource, aa.rechargePaymentType, aa.payMethod order by aa.startTime desc </select> @@ -2057,23 +2084,7 @@ </select> <select id="chargingOrderNolimit" resultType="map"> select sum(aa.time) as `time`, sum(aa.income) as income, sum(aa.electronicMoney) as electronicMoney, sum(aa.serviceMoney) as serviceMoney, sum(aa.total) as total from ( select b.id, (UNIX_TIMESTAMP(b.end_time) - UNIX_TIMESTAMP(b.start_time)) as time, sum(a.charging_capacity) as total, sum(a.period_electric_price) as electronicMoney, sum(CASE WHEN b.order_source = 1 THEN a.period_service_price ELSE a.period_service_price * 0.8 END) as serviceMoney, sum(a.period_electric_price + (CASE WHEN b.order_source = 1 THEN a.period_service_price ELSE a.period_service_price * 0.8 END)) as income from `charging_pile_order`.t_charging_order_accounting_strategy a left join `charging_pile_order`.t_charging_order b on (a.charging_order_id = b.id) <sql id="ChargingOrderSummaryWhere"> where b.del_flag = 0 and b.recharge_payment_status = 2 and b.start_time IS NOT NULL and b.end_time is not null <if test="null != req.code and req.code!=''"> and b.code LIKE CONCAT('%',#{req.code},'%') @@ -2105,6 +2116,15 @@ <if test="req.orderSource != null and req.orderSource == 3 "> and b.tripartite_platform_name = 'XinDianTu' </if> <if test="req.paymentType != null and req.paymentType == 1 "> and b.recharge_payment_type = 1 </if> <if test="req.paymentType != null and req.paymentType == 2 "> and b.recharge_payment_type in (2, 3) </if> <if test="req.paymentType != null and req.paymentType == 3 "> and b.pay_method in (1, 2) </if> <if test="req.siteId != null "> and b.site_id = #{req.siteId} </if> @@ -2115,16 +2135,110 @@ and b.charging_gun_id = #{req.gunId} </if> <if test="startTime1 != null and startTime1!=''"> and (b.start_time between #{startTime1} and #{startTime2}) and (b.pay_time between #{startTime1} and #{startTime2}) </if> <if test="endTime1 != null and endTime1!=''"> and (b.end_time between #{endTime1} and #{endTime2}) </if> </sql> <select id="chargingOrderNolimit" resultType="map"> select sum(aa.time) as `time`, sum(aa.income) as income, sum(aa.electronicMoney) as electronicMoney, sum(aa.serviceMoney) as serviceMoney, sum(aa.total) as total from ( select b.id, (UNIX_TIMESTAMP(b.end_time) - UNIX_TIMESTAMP(b.start_time)) as time, sum(a.charging_capacity) as total, sum(a.period_electric_price) as electronicMoney, sum(CASE WHEN b.order_source = 1 THEN a.period_service_price ELSE a.period_service_price * 0.8 END) as serviceMoney, sum(a.period_electric_price + (CASE WHEN b.order_source = 1 THEN a.period_service_price ELSE a.period_service_price * 0.8 END)) as income from `charging_pile_order`.t_charging_order_accounting_strategy a left join `charging_pile_order`.t_charging_order b on (a.charging_order_id = b.id) <include refid="ChargingOrderSummaryWhere"/> group by b.id,time ) as aa </select> <select id="chargingOrderFundSummary" resultType="map"> select sum(CASE WHEN aa.recharge_payment_type = 1 and aa.thirdNetAmount > 0 THEN aa.thirdNetAmount ELSE 0 END) as wechatIncome, sum(CASE WHEN aa.recharge_payment_type in (2, 3) and aa.thirdNetAmount > 0 THEN aa.thirdNetAmount ELSE 0 END) as alipayIncome, 0 as balanceIncome, 0 as platformIncomeTotal, 0 as partnerIncomeTotal, 0 as whitelistChargingIncome, 0 as whitelistRefund from ( select b.id, b.recharge_payment_type, IFNULL(b.third_pay_amount, CASE WHEN b.pay_method = 3 THEN IFNULL(b.payment_amount, IFNULL(b.recharge_amount, 0)) ELSE 0 END) - IFNULL(b.third_refund_amount, CASE WHEN b.pay_method = 3 THEN IFNULL(b.refund_amount, 0) ELSE 0 END) as thirdNetAmount from `charging_pile_order`.t_charging_order b <include refid="ChargingOrderSummaryWhere"/> ) as aa </select> <select id="chargingOrderSummaryOrderIds" resultType="java.lang.Long"> select b.id from `charging_pile_order`.t_charging_order b <include refid="ChargingOrderSummaryWhere"/> </select> <select id="exchangeCodeBalanceSummary" resultType="map"> select sum(CASE WHEN change_type = 2 THEN IFNULL(used_amount, 0) WHEN change_type = 3 THEN -IFNULL(used_amount, 0) ELSE 0 END) as balanceIncome, sum(CASE WHEN change_type = 2 THEN IFNULL(gift_used_amount, 0) WHEN change_type = 3 THEN -IFNULL(gift_used_amount, 0) ELSE 0 END) as balanceGiftIncome from `charging_pile_other`.t_exchange_code_use_record where del_flag = 0 and change_type in (2, 3) <if test="orderIds != null and orderIds.size()>0"> and order_id in <foreach collection="orderIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> </select> <select id="exchangeCodeBalanceIncomeByOrderIds" resultType="map"> select order_id as orderId, sum(CASE WHEN change_type = 2 THEN IFNULL(used_amount, 0) WHEN change_type = 3 THEN -IFNULL(used_amount, 0) ELSE 0 END) as balanceIncome, sum(CASE WHEN change_type = 2 THEN IFNULL(gift_used_amount, 0) WHEN change_type = 3 THEN -IFNULL(gift_used_amount, 0) ELSE 0 END) as balanceGiftIncome from `charging_pile_other`.t_exchange_code_use_record where del_flag = 0 and order_id is not null and order_id != 0 and change_type in (2, 3) <if test="orderIds != null and orderIds.size()>0"> and order_id in <foreach collection="orderIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> group by order_id </select> <select id="exchangeCodeBalanceIncomeDetail" resultType="com.ruoyi.order.api.vo.ChargingOrderBalanceIncomeDetailVO"> select p.id as packageId, p.package_name as packageName, sum(CASE WHEN r.change_type = 2 THEN IFNULL(r.used_amount, 0) WHEN r.change_type = 3 THEN -IFNULL(r.used_amount, 0) ELSE 0 END) as balanceIncome, sum(CASE WHEN r.change_type = 2 THEN IFNULL(r.gift_used_amount, 0) WHEN r.change_type = 3 THEN -IFNULL(r.gift_used_amount, 0) ELSE 0 END) as giftIncome from `charging_pile_other`.t_exchange_code_use_record r left join `charging_pile_other`.t_exchange_code_detail d on r.detail_id = d.id left join `charging_pile_other`.t_exchange_code_package p on d.package_id = p.id where r.del_flag = 0 and r.change_type in (2, 3) <if test="orderIds != null and orderIds.size()>0"> and r.order_id in <foreach collection="orderIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> group by p.id, p.package_name having balanceIncome != 0 or giftIncome != 0 order by p.id desc </select> <select id="countOrdersByDate" resultType="com.ruoyi.order.vo.OrderCountByDate"> ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java
@@ -496,7 +496,7 @@ entity.setRemark(dto.getRemark()); entity.setInventory(dto.getInventory()); entity.setUnlimitedReceiveLimit(dto.getUnlimitedReceiveLimit()); entity.setReceiveLimit(Objects.equals(dto.getUnlimitedReceiveLimit(), 1) ? dto.getReceiveLimit() : null); entity.setReceiveLimit(Objects.equals(dto.getUnlimitedReceiveLimit(), 1) ? null : dto.getReceiveLimit()); entity.setFinanceReceivedAmount(defaultMoney(dto.getFinanceReceivedAmount())); entity.setGiftAmount(defaultMoney(dto.getGiftAmount())); entity.setTotalAmount(defaultMoney(dto.getTotalAmount())); @@ -515,7 +515,7 @@ if (dto.getExpireTime() != null && dto.getExpireTime().isBefore(LocalDateTime.now())) { throw new ServiceException("截止领取时间不能早于当前时间"); } if (Objects.equals(dto.getUnlimitedReceiveLimit(), 1) if (!Objects.equals(dto.getUnlimitedReceiveLimit(), 1) && (dto.getReceiveLimit() == null || dto.getReceiveLimit() <= 0)) { throw new ServiceException("请输入领取限制次数"); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ExchangeCodeDetailExportVO.java
@@ -6,7 +6,6 @@ import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @Data @ApiModel("兑换码导出VO") @@ -18,24 +17,12 @@ @Excel(name = "密码", width = 20) private String password; @Excel(name = "金额", width = 20) @Excel(name = "金额(元)", width = 20) private BigDecimal amount; @Excel(name = "数量", width = 15) private Integer quantity; @Excel(name = "状态", replace = {"未绑定_1", "已绑定_2", "已失效_3"}, width = 20) @Excel(name = "绑定状态", replace = {"未绑定_1", "已绑定_2", "已失效_3"}, width = 20) private Integer status; @Excel(name = "绑定手机号", width = 20) @Excel(name = "绑定用户", width = 20) private String bindPhone; @Excel(name = "绑定时间", exportFormat = "yyyy-MM-dd HH:mm:ss", width = 25) private LocalDateTime bindTime; @Excel(name = "失效时间", exportFormat = "yyyy-MM-dd HH:mm:ss", width = 25) private LocalDateTime invalidTime; @Excel(name = "失效原因", width = 25) private String invalidReason; }