From e9c06867d6ad1e2e668c1e516310aa21f9c816c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?= <14103883+leaf-phos@user.noreply.gitee.com> Date: Sat, 1 Feb 2025 20:35:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=8A=A5=E8=A1=A8=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...er.java => NonNullIntegerTypeHandler.java} | 2 +- ...ndler.java => NonNullLongTypeHandler.java} | 2 +- .../common/domain/vo/LocalDateDecimalVO.java | 6 +- .../ruoyi/common/domain/vo/LongIntegerVO.java | 11 + .../domain/dto/BillDailyAmountQuery.java | 14 +- .../dashboard/mapper/DashboardMapper.xml | 4 +- .../dashboard/service/DashboardService.java | 70 +++++- .../mapper/SmBusinessRecordMapper.xml | 14 +- .../ruoyi/ss/device/mapper/DeviceMapper.xml | 2 +- .../service/impl/StoreAssemblerImpl.java | 58 ++--- .../mapper/TransactionBillMapper.java | 53 ++++- .../mapper/TransactionBillMapper.xml | 49 +++- .../service/TransactionBillService.java | 45 +++- .../impl/TransactionBillServiceImpl.java | 211 +++++++++++------- .../controller/ss/SmDashboardController.java | 44 ++-- 15 files changed, 408 insertions(+), 177 deletions(-) rename smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/{NonNullIntegerTyperHandler.java => NonNullIntegerTypeHandler.java} (93%) rename smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/{NonNullLongTyperHandler.java => NonNullLongTypeHandler.java} (93%) create mode 100644 smart-switch-service/src/main/java/com/ruoyi/common/domain/vo/LongIntegerVO.java diff --git a/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullIntegerTyperHandler.java b/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullIntegerTypeHandler.java similarity index 93% rename from smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullIntegerTyperHandler.java rename to smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullIntegerTypeHandler.java index 8231b1e1..ba1195ba 100644 --- a/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullIntegerTyperHandler.java +++ b/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullIntegerTypeHandler.java @@ -13,7 +13,7 @@ import java.sql.SQLException; * @author wjh * 2024/4/12 */ -public class NonNullIntegerTyperHandler extends BaseTypeHandler { +public class NonNullIntegerTypeHandler extends BaseTypeHandler { @Override public void setNonNullParameter(PreparedStatement ps, int i, Integer parameter, JdbcType jdbcType) throws SQLException { diff --git a/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullLongTyperHandler.java b/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullLongTypeHandler.java similarity index 93% rename from smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullLongTyperHandler.java rename to smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullLongTypeHandler.java index 1cc0df72..390d43cb 100644 --- a/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullLongTyperHandler.java +++ b/smart-switch-ruoyi/smart-switch-system/src/main/java/com/ruoyi/system/mapper/typehandler/NonNullLongTypeHandler.java @@ -13,7 +13,7 @@ import java.sql.SQLException; * @author wjh * 2024/4/12 */ -public class NonNullLongTyperHandler extends BaseTypeHandler { +public class NonNullLongTypeHandler extends BaseTypeHandler { @Override public void setNonNullParameter(PreparedStatement ps, int i, Long parameter, JdbcType jdbcType) throws SQLException { diff --git a/smart-switch-service/src/main/java/com/ruoyi/common/domain/vo/LocalDateDecimalVO.java b/smart-switch-service/src/main/java/com/ruoyi/common/domain/vo/LocalDateDecimalVO.java index d0259891..48ea3e6d 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/common/domain/vo/LocalDateDecimalVO.java +++ b/smart-switch-service/src/main/java/com/ruoyi/common/domain/vo/LocalDateDecimalVO.java @@ -1,13 +1,13 @@ package com.ruoyi.common.domain.vo; -import lombok.Data; - import java.math.BigDecimal; import java.time.LocalDate; +import lombok.Data; + /** * @author wjh - * 2024/12/2 + * 2024/12/2 */ @Data public class LocalDateDecimalVO { diff --git a/smart-switch-service/src/main/java/com/ruoyi/common/domain/vo/LongIntegerVO.java b/smart-switch-service/src/main/java/com/ruoyi/common/domain/vo/LongIntegerVO.java new file mode 100644 index 00000000..14e09a3b --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/common/domain/vo/LongIntegerVO.java @@ -0,0 +1,11 @@ +package com.ruoyi.common.domain.vo; + +import lombok.Data; + +@Data +public class LongIntegerVO { + + private Long key; + + private Integer value; +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/dashboard/domain/dto/BillDailyAmountQuery.java b/smart-switch-service/src/main/java/com/ruoyi/dashboard/domain/dto/BillDailyAmountQuery.java index 1c9b5c20..314e3922 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/dashboard/domain/dto/BillDailyAmountQuery.java +++ b/smart-switch-service/src/main/java/com/ruoyi/dashboard/domain/dto/BillDailyAmountQuery.java @@ -1,14 +1,15 @@ package com.ruoyi.dashboard.domain.dto; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; - import java.time.LocalDate; +import org.springframework.format.annotation.DateTimeFormat; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + /** * @author wjh - * 2024/12/3 + * 2024/12/3 */ @Data public class BillDailyAmountQuery { @@ -24,4 +25,7 @@ public class BillDailyAmountQuery { @ApiModelProperty("渠道ID") private Long channelId; + @ApiModelProperty("店铺ID") + private Long storeId; + } diff --git a/smart-switch-service/src/main/java/com/ruoyi/dashboard/mapper/DashboardMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/dashboard/mapper/DashboardMapper.xml index 54b3bd3b..96074229 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/dashboard/mapper/DashboardMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/dashboard/mapper/DashboardMapper.xml @@ -5,8 +5,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + + diff --git a/smart-switch-service/src/main/java/com/ruoyi/dashboard/service/DashboardService.java b/smart-switch-service/src/main/java/com/ruoyi/dashboard/service/DashboardService.java index 1af696fc..5a60cb70 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/dashboard/service/DashboardService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/dashboard/service/DashboardService.java @@ -3,6 +3,7 @@ package com.ruoyi.dashboard.service; import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.List; @@ -16,11 +17,13 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.MathUtils; import com.ruoyi.common.utils.collection.CollectionUtils; import com.ruoyi.dashboard.domain.dto.BusinessStatisticsQuery; +import com.ruoyi.dashboard.domain.dto.DailyIncomeGroupByStoreQuery; import com.ruoyi.dashboard.domain.dto.ServiceIncomeQuery; import com.ruoyi.dashboard.domain.vo.BonusTrendDetailVO; import com.ruoyi.dashboard.domain.vo.BonusTrendVO; import com.ruoyi.dashboard.domain.vo.BusinessStatisticsByStoreVO; import com.ruoyi.dashboard.domain.vo.BusinessStatisticsVO; +import com.ruoyi.dashboard.domain.vo.DailyIncomeGroupByStoreVO; import com.ruoyi.dashboard.domain.vo.DashboardBonusGroupByMchVO; import com.ruoyi.dashboard.domain.vo.MchRevenueVO; import com.ruoyi.dashboard.domain.vo.ServiceIncomeVO; @@ -76,7 +79,7 @@ import com.ruoyi.ss.user.service.UserService; /** * @author wjh - * 2024/8/6 + * 2024/8/6 */ @Service public class DashboardService { @@ -188,18 +191,21 @@ public class DashboardService { billQuery.setStartDate(query.getStartDate()); billQuery.setEndDate(query.getEndDate()); billQuery.setStatusList(TransactionBillStatus.validWithdrawList()); - List> withdrawList = transactionBillService.selectCommonSumOfMoney(billQuery, TransactionBillGroupBy.create_date.name()); + List> withdrawList = transactionBillService.selectCommonSumOfMoney(billQuery, + TransactionBillGroupBy.create_date.name()); // 查询月费收入 ReceiveBillQuery receiveQuery = new ReceiveBillQuery(); receiveQuery.setStartDate(query.getStartDate()); receiveQuery.setEndDate(query.getEndDate()); receiveQuery.setType(ReceiveBillType.MONTH.getType()); - List> receiveList = receiveBillService.selectCommonSumOfAmount(receiveQuery, ReceiveBillGroupBy.create_date.name()); + List> receiveList = receiveBillService.selectCommonSumOfAmount(receiveQuery, + ReceiveBillGroupBy.create_date.name()); // 查询订单手机号收入 receiveQuery.setType(ReceiveBillType.MOBILE.getType()); - List> mobileList = receiveBillService.selectCommonSumOfAmount(receiveQuery, ReceiveBillGroupBy.create_date.name()); + List> mobileList = receiveBillService.selectCommonSumOfAmount(receiveQuery, + ReceiveBillGroupBy.create_date.name()); // 拼接结果集 List result = new ArrayList<>(); @@ -283,7 +289,6 @@ public class DashboardService { return vo; } - public List businessStatisticsByDevice(BusinessStatisticsQuery query) { query.setBillType(TransactionBillType.RECHARGE.getType()); query.setBillStatusList(TransactionBillStatus.payedOrder()); @@ -459,7 +464,7 @@ public class DashboardService { ReceiveBillQuery receiveQuery = new ReceiveBillQuery(); receiveQuery.setBillDate(date); result.setReceiveAmount(receiveBillService.selectSumOfReceivedAmount(receiveQuery)); - + // 总分成 result.setTotalBonus(MathUtils.addDecimal(result.getUserBonus(), result.getPlatformBonus())); // 分成总退款 @@ -473,11 +478,56 @@ public class DashboardService { // 订单实收和实际分成差额 result.setDifference(MathUtils.subtractDecimal(result.getOrderReceiveAmount(), result.getActualBonus())); // 平台收益 = 平台分成 + 应收账 + 提现服务费 - 平台分成退款 - 渠道成本 - BigDecimal add = MathUtils.addDecimal(result.getPlatformBonus(), result.getReceiveAmount(), result.getWithdrawServiceFee()); - result.setPlatformIncome(MathUtils.subtractDecimal(add, result.getPlatformBonusRefund(), result.getChannelCost())); - + BigDecimal add = MathUtils.addDecimal(result.getPlatformBonus(), result.getReceiveAmount(), + result.getWithdrawServiceFee()); + result.setPlatformIncome( + MathUtils.subtractDecimal(add, result.getPlatformBonusRefund(), result.getChannelCost())); return result; } -} + public List getDailyIncomeGroupByStore(DailyIncomeGroupByStoreQuery query) { + // 查询订单列表 + TransactionBillQuery billQuery = new TransactionBillQuery(); + billQuery.setCreateDateRange(Arrays.asList(query.getDateStart(), query.getDateEnd())); + billQuery.setStatusList(TransactionBillStatus.payedOrder()); + billQuery.setType(TransactionBillType.RECHARGE.getType()); + List billList = transactionBillService.selectDailyMoney(billQuery); + + // 查询退款列表 + RefundQuery refundQuery = new RefundQuery(); + refundQuery.setCreateDateStart(query.getDateStart()); + refundQuery.setCreateDateEnd(query.getDateEnd()); + refundQuery.setStatusList(RefundStatus.successList()); + refundQuery.setPayBillBstType(PayBillBstType.RECHARGE_ORDER.getType()); + List refundList = refundService.selectDailyAmount(refundQuery); + + List result = new ArrayList<>(); + if (query.getDateStart() != null && query.getDateEnd() != null) { + result = CollectionUtils.fillVoids(result, DailyIncomeGroupByStoreVO::getDate, (date) -> { + DailyIncomeGroupByStoreVO vo = new DailyIncomeGroupByStoreVO(); + vo.setDate(date); + // 订单金额 + LocalDateDecimalVO dailyBill = billList.stream().filter(item -> item.getKey().isEqual(date)) + .findFirst().orElse(null); + if (dailyBill == null || dailyBill.getValue() == null) { + vo.setBillMoney(BigDecimal.ZERO); + } else { + vo.setBillMoney(dailyBill.getValue()); + } + // 退款金额 + LocalDateDecimalVO dailyRefund = refundList.stream().filter(item -> item.getKey().isEqual(date)) + .findFirst().orElse(null); + if (dailyRefund == null || dailyRefund.getValue() == null) { + vo.setRefundMoney(BigDecimal.ZERO); + } else { + vo.setRefundMoney(dailyRefund.getValue()); + } + // 实收金额 + vo.setRealAmount(MathUtils.subtractDecimal(vo.getBillMoney(), vo.getRefundMoney())); + return vo; + }, query.getDateStart(), query.getDateEnd()); + } + return result; + } +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/businessRecord/mapper/SmBusinessRecordMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/businessRecord/mapper/SmBusinessRecordMapper.xml index d36dc062..566a3616 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/businessRecord/mapper/SmBusinessRecordMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/businessRecord/mapper/SmBusinessRecordMapper.xml @@ -5,17 +5,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - - - + + + + - + - + - + diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml index d30e6c88..0f7736dd 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml @@ -272,7 +272,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + + + + + + + + + + SELECT LAST_INSERT_ID(); @@ -913,7 +940,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and suit_end_time is null - + + + + + + + + diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java index 3c79cf7b..4ac6fafa 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java @@ -8,7 +8,9 @@ import java.util.concurrent.TimeUnit; import java.util.function.Function; import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.domain.vo.LocalDateDecimalVO; import com.ruoyi.common.domain.vo.LongDecimalVO; +import com.ruoyi.common.domain.vo.LongIntegerVO; import com.ruoyi.dashboard.domain.vo.BillCountVo; import com.ruoyi.ss.device.domain.vo.DeviceVO; import com.ruoyi.ss.payBill.domain.vo.DoPayVO; @@ -33,8 +35,7 @@ import com.ruoyi.ss.transactionBill.domain.vo.UserWithdrawServiceVO; * @author 邱贞招 * @date 2024-02-21 */ -public interface TransactionBillService -{ +public interface TransactionBillService { /** * 查询充值记录 * @@ -85,6 +86,7 @@ public interface TransactionBillService /** * 获取账单统计 + * * @param dto * @return */ @@ -100,6 +102,7 @@ public interface TransactionBillService /** * 取消充值订单 + * * @param billNo 订单编号 * @param status 取消后的状态 */ @@ -114,6 +117,7 @@ public interface TransactionBillService /** * 获取未支付的充值订单 + * * @return 订单列表 */ List selectNoPayedRecharge(); @@ -139,6 +143,7 @@ public interface TransactionBillService /** * 查询商户统计信息 + * * @param dto 查询条件 * @return 统计信息 */ @@ -146,6 +151,7 @@ public interface TransactionBillService /** * 刷新订单支付结果 + * * @param billId */ int refreshPayResult(Long billId); @@ -159,6 +165,7 @@ public interface TransactionBillService /** * 查询设备充值失败列表 + * * @param userId * @return */ @@ -175,13 +182,16 @@ public interface TransactionBillService /** * 查询数量并映射 - * @param query 查询条件 + * + * @param query 查询条件 * @param keyMapper 映射方法 */ - Map selectCountMap(TransactionBillQuery query, Function keyMapper); + Map selectCountMap(TransactionBillQuery query, + Function keyMapper); /** * 蓝牙充值成功 + * * @param billNo * @return */ @@ -194,6 +204,7 @@ public interface TransactionBillService /** * 根据条件更新 + * * @param data * @param query */ @@ -259,10 +270,10 @@ public interface TransactionBillService */ int selectSimpleCount(TransactionBillQuery query); -// /** -// * 支付押金 -// */ -// DoPayVO payDeposit(RechargePayDepositBO bo); + // /** + // * 支付押金 + // */ + // DoPayVO payDeposit(RechargePayDepositBO bo); /** * 查询未支付的分时段订单 @@ -276,12 +287,12 @@ public interface TransactionBillService /** * 查询订单总金额 + * * @param query * @return */ BigDecimal selectSumOfMoney(TransactionBillQuery query); - /** * 结束使用订单 */ @@ -306,6 +317,7 @@ public interface TransactionBillService /** * 收取商户查看用户手机号的价格 + * * @param bill * @return */ @@ -352,4 +364,19 @@ public interface TransactionBillService * 查询服务费 */ BigDecimal selectSumOfServiceCharge(TransactionBillQuery query); + + /** + * 查询订单金额,并按店铺分组 + */ + List selectSumOfMoneyGroupByStoreId(TransactionBillQuery query); + + /** + * 查询订单量,并按店铺分组 + */ + List selectCountGroupByStoreId(TransactionBillQuery query); + + /** + * 查询每日订单金额 + */ + List selectDailyMoney(TransactionBillQuery query); } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java index ddbcd5f4..07682285 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java @@ -28,7 +28,9 @@ import com.github.pagehelper.PageHelper; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.redis.RedisLock; import com.ruoyi.common.core.redis.enums.RedisLockKey; +import com.ruoyi.common.domain.vo.LocalDateDecimalVO; import com.ruoyi.common.domain.vo.LongDecimalVO; +import com.ruoyi.common.domain.vo.LongIntegerVO; import com.ruoyi.common.enums.ServiceCode; import com.ruoyi.common.enums.WithdrawServiceType; import com.ruoyi.common.exception.ServiceException; @@ -152,7 +154,6 @@ public class TransactionBillServiceImpl implements TransactionBillService, After @Autowired private BillDelayedManager billDelayedManager; - @Autowired private RedisLock redisLock; @@ -214,8 +215,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After * @return 充值记录 */ @Override - public TransactionBillVO selectSmTransactionBillByBillId(Long billId) - { + public TransactionBillVO selectSmTransactionBillByBillId(Long billId) { return transactionBillMapper.selectSmTransactionBillByBillId(billId); } @@ -226,8 +226,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After * @return 充值记录 */ @Override - public List selectSmTransactionBillList(TransactionBillQuery smTransactionBillQuery) - { + public List selectSmTransactionBillList(TransactionBillQuery smTransactionBillQuery) { return transactionBillMapper.selectSmTransactionBillList(smTransactionBillQuery); } @@ -238,8 +237,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After * @return 结果 */ @Override - public int insertSmTransactionBill(TransactionBill transactionBill) - { + public int insertSmTransactionBill(TransactionBill transactionBill) { transactionBill.setCreateTime(DateUtils.getNowDate()); transactionBill.setBillNo(String.valueOf(SnowFlakeUtil.newId())); return transactionBillMapper.insertSmTransactionBill(transactionBill); @@ -252,8 +250,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After * @return 结果 */ @Override - public int updateSmTransactionBill(TransactionBill transactionBill) - { + public int updateSmTransactionBill(TransactionBill transactionBill) { return transactionBillMapper.updateSmTransactionBill(transactionBill); } @@ -264,8 +261,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After * @return 结果 */ @Override - public int deleteSmTransactionBillByBillIds(Long[] billIds) - { + public int deleteSmTransactionBillByBillIds(Long[] billIds) { return transactionBillMapper.deleteSmTransactionBillByBillIds(billIds); } @@ -276,13 +272,13 @@ public class TransactionBillServiceImpl implements TransactionBillService, After * @return 结果 */ @Override - public int deleteSmTransactionBillByBillId(Long billId) - { + public int deleteSmTransactionBillByBillId(Long billId) { return transactionBillMapper.deleteSmTransactionBillByBillId(billId); } /** * 查询账单统计 + * * @param dto * @return */ @@ -362,8 +358,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After false, receive.getDescription(), RecordBalanceBstType.RECEIVABLE, - receive.getBillId() - ); + receive.getBillId()); // 修改订单缴费状态 TransactionBill data = new TransactionBill(); @@ -377,7 +372,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return update; }); - return result == null ? 0 :result; + return result == null ? 0 : result; } @Override @@ -434,12 +429,12 @@ public class TransactionBillServiceImpl implements TransactionBillService, After bo.setOrder(order); // 基础信息 - order.setType(TransactionBillType.RECHARGE.getType()); // 类型:充值订单 + order.setType(TransactionBillType.RECHARGE.getType()); // 类型:充值订单 order.setDeviceRechargeStatus(TransactionBillDeviceRechargeStatus.UN_RECHARGE.getStatus()); // 设备状态:未充值 - order.setVersion(2); // 订单版本 + order.setVersion(2); // 订单版本 order.setCloseStatus(RechargeCloseStatus.SUCCESS.getStatus()); order.setCloseResult("预计成功"); - order.setStatus(TransactionBillStatus.UNPAID.getStatus()); // 状态:未支付 + order.setStatus(TransactionBillStatus.UNPAID.getStatus()); // 状态:未支付 // 订单金额 order.setMoney(price.getPayPrice()); order.setDiscountAmount(price.getDiscountAmount()); @@ -492,11 +487,13 @@ public class TransactionBillServiceImpl implements TransactionBillService, After if (store != null) { order.setStoreId(store.getStoreId()); order.setStoreName(store.getName()); - order.setStoreAddress(String.format("%s%s%s%s", store.getProvince(), store.getCity(), store.getCounty(), store.getAddress())); + order.setStoreAddress(String.format("%s%s%s%s", store.getProvince(), store.getCity(), store.getCounty(), + store.getAddress())); } // 支付过期时间 5min - long expireTime = TimeUnit.MILLISECONDS.convert(Constants.BILL_UNPAID_TIMEOUT, Constants.BILL_UNPAID_TIMEUNIT) + System.currentTimeMillis(); + long expireTime = TimeUnit.MILLISECONDS.convert(Constants.BILL_UNPAID_TIMEOUT, Constants.BILL_UNPAID_TIMEUNIT) + + System.currentTimeMillis(); order.setExpireTime(new Date(expireTime)); return order; @@ -554,7 +551,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After if (current == null) { current = BigDecimal.ZERO; } - ServiceUtil.assertion(current.add(dto.getMoney()).compareTo(dailyLimit) > 0, "当前用户提现金额已超过每日限额:" + dailyLimit + "元"); + ServiceUtil.assertion(current.add(dto.getMoney()).compareTo(dailyLimit) > 0, + "当前用户提现金额已超过每日限额:" + dailyLimit + "元"); } // 每日限次 if (StringUtils.hasText(dailyLimitCountStr)) { @@ -567,13 +565,16 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 处理提现手续费 ServiceUtil.assertion(channel == null, "提现渠道不存在"); ServiceUtil.assertion(channel.getEnabled() == null || !channel.getEnabled(), "提现渠道不可用"); - ServiceUtil.assertion(channel.getMinAmount().compareTo(dto.getMoney()) > 0, String.format("提现金额不能低于%s元", channel.getMinAmount())); - ServiceUtil.assertion(channel.getMaxAmount().compareTo(dto.getMoney()) < 0, String.format("提现金额不能高于%s元", channel.getMaxAmount())); + ServiceUtil.assertion(channel.getMinAmount().compareTo(dto.getMoney()) > 0, + String.format("提现金额不能低于%s元", channel.getMinAmount())); + ServiceUtil.assertion(channel.getMaxAmount().compareTo(dto.getMoney()) < 0, + String.format("提现金额不能高于%s元", channel.getMaxAmount())); UserWithdrawServiceVO serviceInfo = this.getUserWithdrawService(user, channel); ServiceUtil.assertion(serviceInfo == null, "服务费配置出错,请联系管理员处理"); ServiceUtil.assertion(StringUtils.isBlank(serviceInfo.getServiceType()), "服务费配置出错,请联系管理员处理"); ServiceUtil.assertion(serviceInfo.getServiceRate() == null, "服务费配置出错,请联系管理员处理"); - ServiceUtil.assertion(!Objects.equals(serviceInfo.getServiceType(), dto.getServiceType()), "服务费收取方式发生变化,请刷新后重试"); + ServiceUtil.assertion(!Objects.equals(serviceInfo.getServiceType(), dto.getServiceType()), + "服务费收取方式发生变化,请刷新后重试"); ServiceUtil.assertion(serviceInfo.getServiceRate().compareTo(dto.getServiceRate()) != 0, "服务费发生变化,请刷新后重试"); // 计算服务费 @@ -581,7 +582,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After ServiceUtil.assertion(BigDecimal.ZERO.compareTo(serviceRecharge) > 0, "服务费不允许小于0"); ServiceUtil.assertion(serviceRecharge.compareTo(dto.getServiceCharge()) != 0, "服务费计算不一致,请重新申请"); // 到账金额 - BigDecimal arrivalAmount = dto.getMoney().subtract(serviceRecharge); // 到账金额 + BigDecimal arrivalAmount = dto.getMoney().subtract(serviceRecharge); // 到账金额 ServiceUtil.assertion(arrivalAmount.compareTo(dto.getArrivalAmount()) != 0, "到账金额计算不一致,请重新申请"); // 创建申请订单 @@ -592,11 +593,12 @@ public class TransactionBillServiceImpl implements TransactionBillService, After bill.setMoney(dto.getMoney()); bill.setArrivalAmount(arrivalAmount); bill.setServiceCharge(serviceRecharge); - bill.setStatus(TransactionBillStatus.WITHDRAW_APPROVING.getStatus()); // 审核中 + bill.setStatus(TransactionBillStatus.WITHDRAW_APPROVING.getStatus()); // 审核中 bill.setAccountNo(account.getAccountNo()); bill.setChannelId(channel.getChannelId()); bill.setWithdrawType(WithdrawType.ONLINE.getType()); - bill.setChannelCost(channel.getCostRate().multiply(bill.getMoney()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)); // 渠道成本 + bill.setChannelCost(channel.getCostRate().multiply(bill.getMoney()).divide(new BigDecimal(100), 2, + RoundingMode.HALF_UP)); // 渠道成本 bill.setAfterBalance(user.getBalance().subtract(dto.getMoney())); // 剩余金额 transactionTemplate.execute(status -> { @@ -605,7 +607,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After ServiceUtil.assertion(insert != 1, "提现申请失败"); // 减少余额,并判断提现金额是否超额(减少的是交易金额) - userService.subtractBalance(userId, bill.getMoney(), String.format("提现申请:%s", bill.getBillNo()), RecordBalanceBstType.WITHDRAW, bill.getBillId()); + userService.subtractBalance(userId, bill.getMoney(), String.format("提现申请:%s", bill.getBillNo()), + RecordBalanceBstType.WITHDRAW, bill.getBillId()); // 若本次提现具有风险,则累计一次风险次数 if (hasRisk) { @@ -616,7 +619,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 异步操作:当提现申请金额免审核且为线上打款时,直接通过 try { - String noverifyAmountStr = sysConfigService.selectConfigByKey(ConfigKey.NOVERIFY_WITHDRAW_SINGLE.getKey()); + String noverifyAmountStr = sysConfigService + .selectConfigByKey(ConfigKey.NOVERIFY_WITHDRAW_SINGLE.getKey()); if (StringUtils.hasText(noverifyAmountStr)) { BigDecimal noverifyAmount = new BigDecimal(noverifyAmountStr); if (noverifyAmount.compareTo(bill.getMoney()) >= 0) { @@ -643,7 +647,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After private BigDecimal calcWithdrawServiceCharge(UserWithdrawServiceVO serviceInfo, BigDecimal money) { BigDecimal serviceRecharge; if (WithdrawServiceType.PERCENT.getType().equals(serviceInfo.getServiceType())) { - serviceRecharge = money.multiply(serviceInfo.getServiceRate()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); // 服务费 + serviceRecharge = money.multiply(serviceInfo.getServiceRate()).divide(new BigDecimal(100), 2, + RoundingMode.HALF_UP); // 服务费 } else if (WithdrawServiceType.FIXED.getType().equals(serviceInfo.getServiceType())) { serviceRecharge = serviceInfo.getServiceRate(); } else { @@ -657,9 +662,11 @@ public class TransactionBillServiceImpl implements TransactionBillService, After * 用户 > 渠道 */ private UserWithdrawServiceVO getUserWithdrawService(SmUserVO user, ChannelWithdrawVO channel) { - if (user != null && StringUtils.hasText(user.getWithdrawServiceType()) && user.getWithdrawServiceRate() != null ) { + if (user != null && StringUtils.hasText(user.getWithdrawServiceType()) + && user.getWithdrawServiceRate() != null) { return new UserWithdrawServiceVO(user.getWithdrawServiceType(), user.getWithdrawServiceRate()); - } else if (channel != null && StringUtils.hasText(channel.getServiceType()) && channel.getServiceRate() != null) { + } else if (channel != null && StringUtils.hasText(channel.getServiceType()) + && channel.getServiceRate() != null) { return new UserWithdrawServiceVO(channel.getServiceType(), channel.getServiceRate()); } return null; @@ -745,7 +752,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After data.setOfflineImage(dto.getOfflineImage()); // 线下打款并且状态为已打款,则修改支付时间为当前 - if (WithdrawType.OFFLINE.getType().equals(dto.getWithdrawType()) && TransactionBillStatus.WITHDRAW_SUCCESS.equals(status)) { + if (WithdrawType.OFFLINE.getType().equals(dto.getWithdrawType()) + && TransactionBillStatus.WITHDRAW_SUCCESS.equals(status)) { data.setPayTime(DateUtils.getNowDate()); } @@ -776,7 +784,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 返还客户余额 TransactionBill bill = transactionBillMapper.selectSmTransactionBillByBillId(dto.getBillId()); ServiceUtil.assertion(bill == null || bill.getUserId() == null, "数据不存在"); - userService.addBalance(bill.getUserId(), bill.getMoney(), String.format("提现驳回: %s", bill.getBillNo()), RecordBalanceBstType.WITHDRAW, bill.getBillId()); + userService.addBalance(bill.getUserId(), bill.getMoney(), String.format("提现驳回: %s", bill.getBillNo()), + RecordBalanceBstType.WITHDRAW, bill.getBillId()); return updateCount; }); @@ -792,12 +801,15 @@ public class TransactionBillServiceImpl implements TransactionBillService, After List list = this.selectCount(dto); // 若startDate与endDate不为空,则将其中间数据补全,不让其为空 - if (dto.getStartDate() != null && dto.getEndDate() != null && Objects.equals(dto.getGroupBy(), TransactionBillGroupBy.create_date.name())) { + if (dto.getStartDate() != null && dto.getEndDate() != null + && Objects.equals(dto.getGroupBy(), TransactionBillGroupBy.create_date.name())) { List newList = new ArrayList<>(); LocalDate i = dto.getStartDate(); while (!i.isAfter(dto.getEndDate())) { Date finalI = DateUtils.toDate(i); - BillCountVo count = list.stream().filter(item -> DateUtils.getYYYY_MM_DD(item.getCreateDate()).equals(DateUtils.getYYYY_MM_DD(finalI))).findFirst().orElse(null); + BillCountVo count = list.stream().filter( + item -> DateUtils.getYYYY_MM_DD(item.getCreateDate()).equals(DateUtils.getYYYY_MM_DD(finalI))) + .findFirst().orElse(null); if (count == null) { count = new BillCountVo(); count.setCreateDate(finalI); @@ -846,9 +858,13 @@ public class TransactionBillServiceImpl implements TransactionBillService, After ServiceUtil.assertion(billId == null, "参数错误,billId不允许为空"); TransactionBillVO bill = transactionBillMapper.selectSmTransactionBillByBillId(billId); - ServiceUtil.assertion(bill == null || !TransactionBillType.RECHARGE.getType().equals(bill.getType()), "不存在ID为%s的充值订单", billId); - ServiceUtil.assertion(!TransactionBillStatus.SUCCESS.getStatus().equals(bill.getStatus()), "订单%s未支付", bill.getBillNo()); - ServiceUtil.assertion(!TransactionBillDeviceRechargeStatus.canRecharge().contains(bill.getDeviceRechargeStatus()), "订单%s当前设备状态不允许充值", bill.getBillNo()); + ServiceUtil.assertion(bill == null || !TransactionBillType.RECHARGE.getType().equals(bill.getType()), + "不存在ID为%s的充值订单", billId); + ServiceUtil.assertion(!TransactionBillStatus.SUCCESS.getStatus().equals(bill.getStatus()), "订单%s未支付", + bill.getBillNo()); + ServiceUtil.assertion( + !TransactionBillDeviceRechargeStatus.canRecharge().contains(bill.getDeviceRechargeStatus()), + "订单%s当前设备状态不允许充值", bill.getBillNo()); // 获取最新设备信息 DeviceVO device = deviceService.selectById(bill.getDeviceId()); @@ -901,7 +917,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After } LocalDateTime now = LocalDateTime.now(); - LocalDateTime startTime = device.getExpireTime() == null || now.isAfter(device.getExpireTime()) ? now : device.getExpireTime(); + LocalDateTime startTime = device.getExpireTime() == null || now.isAfter(device.getExpireTime()) ? now + : device.getExpireTime(); BigDecimal startEle = device.getTotalElectriQuantity(); TransactionBill data = new TransactionBill(); @@ -940,10 +957,13 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 发送命令 boolean res = false; - if (bill.getSuitEnabledVoid() == null || !bill.getSuitEnabledVoid() || bill.getSuitVoidMinute() == null) { + if (bill.getSuitEnabledVoid() == null || !bill.getSuitEnabledVoid() + || bill.getSuitVoidMinute() == null) { res = iotService.setVoice(bill, 0L, "关闭订单语音:" + bill.getBillNo()); } else { - res = iotService.setVoice(bill, bill.getSuitVoidMinute().multiply(BigDecimal.valueOf(60)).longValue(), "开启订单语音:" + bill.getBillNo()); + res = iotService.setVoice(bill, + bill.getSuitVoidMinute().multiply(BigDecimal.valueOf(60)).longValue(), + "开启订单语音:" + bill.getBillNo()); } ServiceUtil.assertion(!res, "设备设置语音失败"); @@ -997,7 +1017,6 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return totalAmount; } - @Override public int endUse(EndUseBO bo) { if (bo == null) { @@ -1010,7 +1029,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After ServiceUtil.assertion(!TransactionBillStatus.SUCCESS.getStatus().equals(order.getStatus()), "当前订单状态不允许结束"); ServiceUtil.assertion(device == null, "设备不存在"); - LocalDateTime now = LocalDateTime.now(); // 结束使用的时间 + LocalDateTime now = LocalDateTime.now(); // 结束使用的时间 // 结束使用的电量:若蓝牙传过来的值为空或者小于当前电量,则使用当前电量,否则使用蓝牙传输的电量(谁大用谁) BigDecimal totalEle = this.calcTotalEle(device, bo.getTotalEle()); @@ -1040,10 +1059,10 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return update; }); - boolean success = result != null && result == 1; // 是否成功 + boolean success = result != null && result == 1; // 是否成功 // 若成功,且为智能模式,则计算需要退款的金额, 若金额 > 0.01 则申请退款 - if ( success && SuitFeeMode.SMART.getMode().equals(order.getSuitFeeMode())) { + if (success && SuitFeeMode.SMART.getMode().equals(order.getSuitFeeMode())) { BigDecimal refundAmount = this.calcRefundAmount(order, now, totalEle); if (BigDecimal.valueOf(0.01).compareTo(refundAmount) < 0) { scheduledExecutorService.schedule(() -> { @@ -1080,7 +1099,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After private BigDecimal calcAmount(TransactionBillVO bill, LocalDateTime endTime, BigDecimal totalEle) { // 计量收费,则获取最新的设备信息 - if(SuitFeeType.COUNT.getType().equals(bill.getSuitFeeType()) || SuitFeeType.TIMING_COUNT.getType().equals(bill.getSuitFeeType())) { + if (SuitFeeType.COUNT.getType().equals(bill.getSuitFeeType()) + || SuitFeeType.TIMING_COUNT.getType().equals(bill.getSuitFeeType())) { DeviceVO device = deviceService.selectById(bill.getDeviceId()); deviceService.pullDeviceInfo(device, null); totalEle = this.calcTotalEle(device, totalEle); @@ -1128,8 +1148,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After */ private BigDecimal calcRefundAmount(TransactionBillVO order, LocalDateTime endTime, BigDecimal totalEle) { - BigDecimal needAmount = this.calcAmount(order, endTime, totalEle); // 需要的金额 - BigDecimal refundAmount = order.getMoney().subtract(needAmount); // 退款金额 + BigDecimal needAmount = this.calcAmount(order, endTime, totalEle); // 需要的金额 + BigDecimal refundAmount = order.getMoney().subtract(needAmount); // 退款金额 // 退款金额不允许大于订单金额 if (refundAmount.compareTo(order.getMoney()) > 0) { @@ -1153,8 +1173,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 智能收费计量收费 else if (SuitFeeType.COUNT.getType().equals(order.getSuitFeeType())) { return this.calcSmartCountAmount(order, totalEle); - } - else { + } else { throw new ServiceException("不支持的智能收费方式"); } } @@ -1174,15 +1193,15 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return BigDecimal.ZERO; } BigDecimal startEle = order.getSuitStartEle(); - BigDecimal usedEle = totalEle.subtract(startEle); // 已使用的电量 - BigDecimal suitEle = new BigDecimal(order.getSuitTime()); // 套餐每周期的电量 + BigDecimal usedEle = totalEle.subtract(startEle); // 已使用的电量 + BigDecimal suitEle = new BigDecimal(order.getSuitTime()); // 套餐每周期的电量 // 计算总使用的周期数,不满足一个周期也算一个周期 BigDecimal totalRound = usedEle.divide(suitEle, 0, RoundingMode.UP); - if (totalRound.compareTo(BigDecimal.ZERO) <= 0 ) { + if (totalRound.compareTo(BigDecimal.ZERO) <= 0) { totalRound = BigDecimal.ONE; } - // 使用金额 = 使用周期数 * 单价 + // 使用金额 = 使用周期数 * 单价 return totalRound.multiply(order.getSuitPrice()); } @@ -1241,7 +1260,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After LocalDateTime plusI = i.plusHours(1); // 当前每分钟平均金额 - BigDecimal minuteAmount = suitGearAmount.get(suitGearTime.get(i.getHour())).divide(BigDecimal.valueOf(60), 2, RoundingMode.HALF_UP); + BigDecimal minuteAmount = suitGearAmount.get(suitGearTime.get(i.getHour())).divide(BigDecimal.valueOf(60), + 2, RoundingMode.HALF_UP); // 计算时间段的金额 LocalDateTime timeA = i.isAfter(startTime) ? i : startTime; @@ -1249,7 +1269,6 @@ public class TransactionBillServiceImpl implements TransactionBillService, After Duration between = Duration.between(timeA, timeB); total = total.add(minuteAmount.multiply(BigDecimal.valueOf(between.toMinutes()))); - i = plusI; } @@ -1258,7 +1277,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After /** * 记录下操作后的余额 - * @param billId 订单id + * + * @param billId 订单id * @param balance 余额 */ private void updateAfterBalance(Long billId, BigDecimal balance) { @@ -1270,6 +1290,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After /** * 取消充值订单 + * * @param billNo 订单编号 * @param status 取消后的状态 */ @@ -1288,8 +1309,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 允许取消的状态 List allowCancel = Arrays.asList( TransactionBillStatus.UNPAID.getStatus(), - TransactionBillStatus.UNPAID_DEPOSIT.getStatus() - ); + TransactionBillStatus.UNPAID_DEPOSIT.getStatus()); ServiceUtil.assertion(!allowCancel.contains(bill.getStatus()), "当前订单状态不允许取消"); Integer result = transactionTemplate.execute(s -> { @@ -1313,7 +1333,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After if (TransactionBillStatus.UNPAID.getStatus().equals(bill.getStatus())) { cancelPay = payBillService.closeByBstId(bill.getBillId(), PayBillBstType.RECHARGE_ORDER.getType()); } else if (TransactionBillStatus.UNPAID_DEPOSIT.getStatus().equals(bill.getStatus())) { - cancelPay = payBillService.closeByBstId(bill.getBillId(), PayBillBstType.RECHARGE_ORDER_DEPOSIT.getType()); + cancelPay = payBillService.closeByBstId(bill.getBillId(), + PayBillBstType.RECHARGE_ORDER_DEPOSIT.getType()); } ServiceUtil.assertion(!cancelPay, "取消支付订单失败"); @@ -1331,7 +1352,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After @Override public List selectNoPayedRecharge() { TransactionBillQuery dto = new TransactionBillQuery(); - dto.setStatusList(Arrays.asList(TransactionBillStatus.UNPAID.getStatus(), TransactionBillStatus.PAYING.getStatus(), TransactionBillStatus.UNPAID_DEPOSIT.getStatus())); + dto.setStatusList(Arrays.asList(TransactionBillStatus.UNPAID.getStatus(), + TransactionBillStatus.PAYING.getStatus(), TransactionBillStatus.UNPAID_DEPOSIT.getStatus())); dto.setType(TransactionBillType.RECHARGE.getType()); return this.selectSmTransactionBillList(dto); } @@ -1368,7 +1390,6 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return selectSmTransactionBillList(dto); } - /** * 查询支付结果,直到过期 * @@ -1390,13 +1411,14 @@ public class TransactionBillServiceImpl implements TransactionBillService, After } // 未支付成功 - List successList = TransactionBillStatus.asList(TransactionBillStatus.SUCCESS, TransactionBillStatus.SUCCESS_DEPOSIT); + List successList = TransactionBillStatus.asList(TransactionBillStatus.SUCCESS, + TransactionBillStatus.SUCCESS_DEPOSIT); if (!successList.contains(newBill.getStatus())) { if (newBill.getExpireTime() != null && new Date().compareTo(newBill.getExpireTime()) < 0) { // 未过期,继续延迟查询 log.info("{}支付失败,未过期,继续延迟刷新", newBill); scheduledExecutorService.schedule(() -> { - this.refreshPayResultBeforeExpire(newBill, delay , timeUnit); + this.refreshPayResultBeforeExpire(newBill, delay, timeUnit); }, delay, timeUnit); } else { log.info("{}支付失败,过期取消订单", newBill); @@ -1412,7 +1434,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After * @param keyMapper 映射方法 */ @Override - public Map selectCountMap(TransactionBillQuery query, Function keyMapper) { + public Map selectCountMap(TransactionBillQuery query, + Function keyMapper) { List list = this.selectCount(query); if (CollectionUtils.isEmptyElement(list)) { return Collections.emptyMap(); @@ -1445,12 +1468,15 @@ public class TransactionBillServiceImpl implements TransactionBillService, After // 校验订单 TransactionBillVO bill = this.selectSmTransactionBillByBillId(dto.getBillId()); ServiceUtil.assertion(bill == null, "ID为%s的订单不存在", dto.getBillId()); - ServiceUtil.assertion(dto.getRefundAmount().compareTo(bill.getMoney()) > 0, "订单编号为%s的订单退款金额不允许大于订单金额", bill.getBillNo()); - ServiceUtil.assertion(!TransactionBillStatus.canRefund().contains(bill.getStatus()), "订单编号为%s的订单状态不允许退款", bill.getBillNo()); + ServiceUtil.assertion(dto.getRefundAmount().compareTo(bill.getMoney()) > 0, "订单编号为%s的订单退款金额不允许大于订单金额", + bill.getBillNo()); + ServiceUtil.assertion(!TransactionBillStatus.canRefund().contains(bill.getStatus()), "订单编号为%s的订单状态不允许退款", + bill.getBillNo()); // 是否判断订单已完成 if (dto.getCheckFinish() != null && dto.getCheckFinish()) { - ServiceUtil.assertion(bill.getIsFinished() == null || !bill.getIsFinished(), "订单编号为%s的订单未完成,不允许退款", bill.getBillNo()); + ServiceUtil.assertion(bill.getIsFinished() == null || !bill.getIsFinished(), "订单编号为%s的订单未完成,不允许退款", + bill.getBillNo()); } // 拼接分成列表 @@ -1460,7 +1486,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After Integer result = transactionTemplate.execute(status -> { // 分成方按照比例扣减余额 - BigDecimal refundAmount = dto.getRefundAmount(); // 总退款金额 + BigDecimal refundAmount = dto.getRefundAmount(); // 总退款金额 int updateRefundBonus = this.updateRefundBonus(bonusList, refundAmount, bill.getMoney()); ServiceUtil.assertion(updateRefundBonus == 0 || updateRefundBonus > bonusList.size(), "商户余额更新失败"); @@ -1480,9 +1506,10 @@ public class TransactionBillServiceImpl implements TransactionBillService, After /** * 更新分成的退款金额 - * @param bonusList 分成列表 + * + * @param bonusList 分成列表 * @param refundAmount 本次退款金额 - * @param billAmount 订单总金额 + * @param billAmount 订单总金额 */ private int updateRefundBonus(List bonusList, BigDecimal refundAmount, BigDecimal billAmount) { if (CollectionUtils.isEmptyElement(bonusList)) { @@ -1499,7 +1526,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After } // 计算该分成记录的可退金额 = 分配金额 - 已退金额 - BigDecimal availableRefund = bonus.getAmount().subtract(bonus.getRefundAmount() == null ? BigDecimal.ZERO : bonus.getRefundAmount()); + BigDecimal availableRefund = bonus.getAmount() + .subtract(bonus.getRefundAmount() == null ? BigDecimal.ZERO : bonus.getRefundAmount()); if (availableRefund.compareTo(BigDecimal.ZERO) <= 0) { continue; // 跳过已无可退金额的记录 } @@ -1556,12 +1584,11 @@ public class TransactionBillServiceImpl implements TransactionBillService, After if (bonus.getToBalance() != null && bonus.getToBalance()) { if (BonusArrivalType.userList().contains(bonus.getArrivalType())) { userService.subtractBalance( - bonus.getArrivalId(), - bonus.getRefundAmount(), - String.format("订单退款:%s", bonus.getBillNo()), - RecordBalanceBstType.RECHARGE, - bonus.getBillId() - ); + bonus.getArrivalId(), + bonus.getRefundAmount(), + String.format("订单退款:%s", bonus.getBillNo()), + RecordBalanceBstType.RECHARGE, + bonus.getBillId()); } else if (BonusArrivalType.deptList().contains(bonus.getArrivalType())) { // deptService相关逻辑暂时不处理 } @@ -1569,7 +1596,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After } update++; } - + // 创建分成退款记录 List bonusRefundList = bonusRefundConverter.toPo(refundList); int insertBonusRefund = bonusRefundService.batchInsert(bonusRefundList); @@ -1692,7 +1719,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After } // 其余订单,同步时长 else { - CommandResponse res = deviceService.syncTime(device.getDeviceId(), LocalDateTime.now(), "时长订单" + bill.getBillNo() + "临时开启"); + CommandResponse res = deviceService.syncTime(device.getDeviceId(), LocalDateTime.now(), + "时长订单" + bill.getBillNo() + "临时开启"); return res != null && res.isSuccess() ? 1 : 0; } } else { @@ -1808,7 +1836,9 @@ public class TransactionBillServiceImpl implements TransactionBillService, After ServiceUtil.assertion(update != 1, "修改提现状态失败,提现状态已发生改变"); // 将提现金额退回用户 - userService.addBalance(withdraw.getUserId(), withdraw.getMoney(), String.format("提现%s打款失败", withdraw.getBillNo()), RecordBalanceBstType.WITHDRAW, transfer.getBstId()); + userService.addBalance(withdraw.getUserId(), withdraw.getMoney(), + String.format("提现%s打款失败", withdraw.getBillNo()), RecordBalanceBstType.WITHDRAW, + transfer.getBstId()); return update; }); @@ -1829,4 +1859,19 @@ public class TransactionBillServiceImpl implements TransactionBillService, After public BigDecimal selectSumOfServiceCharge(TransactionBillQuery query) { return transactionBillMapper.selectSumOfServiceCharge(query); } + + @Override + public List selectSumOfMoneyGroupByStoreId(TransactionBillQuery query) { + return transactionBillMapper.selectSumOfMoneyGroupByStoreId(query); + } + + @Override + public List selectCountGroupByStoreId(TransactionBillQuery query) { + return transactionBillMapper.selectCountGroupByStoreId(query); + } + + @Override + public List selectDailyMoney(TransactionBillQuery query) { + return transactionBillMapper.selectDailyMoney(query); + } } diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmDashboardController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmDashboardController.java index 62228f18..1eb98bce 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmDashboardController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/SmDashboardController.java @@ -1,5 +1,16 @@ package com.ruoyi.web.controller.ss; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.ValidGroup; @@ -8,6 +19,7 @@ import com.ruoyi.common.domain.vo.LocalDateDecimalVO; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.collection.CollectionUtils; import com.ruoyi.dashboard.domain.dto.BillDailyAmountQuery; +import com.ruoyi.dashboard.domain.dto.DailyIncomeGroupByStoreQuery; import com.ruoyi.dashboard.domain.dto.ServiceIncomeQuery; import com.ruoyi.dashboard.domain.vo.BriefVo; import com.ruoyi.dashboard.domain.vo.DashboardBonusGroupByMchVO; @@ -29,22 +41,14 @@ import com.ruoyi.ss.transactionBill.domain.TransactionBillQuery; import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillGroupBy; import com.ruoyi.ss.transactionBill.domain.enums.TransactionBillStatus; import com.ruoyi.ss.transactionBill.service.TransactionBillService; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import io.swagger.annotations.ApiOperation; /** * 报表Controller + * * @author 辉 - * 2024/3/6 + * 2024/3/6 */ @RestController @RequestMapping("/system/dashboard") @@ -90,6 +94,7 @@ public class SmDashboardController extends BaseController { /** * 获取账单分时统计数据 + * * @param dto 查询条件 * @return 统计数据 */ @@ -161,6 +166,7 @@ public class SmDashboardController extends BaseController { payQuery.setPayDateEnd(query.getDateEnd()); payQuery.setStatusList(PayBillStatus.payedList()); payQuery.setChannelId(query.getChannelId()); + payQuery.setStoreId(query.getStoreId()); List payList = payBillService.selectDailyAmount(payQuery); RefundQuery refundQuery = new RefundQuery(); @@ -168,6 +174,7 @@ public class SmDashboardController extends BaseController { refundQuery.setCreateDateEnd(query.getDateEnd()); refundQuery.setStatusList(RefundStatus.successList()); refundQuery.setChannelId(query.getChannelId()); + refundQuery.setStoreId(query.getStoreId()); List refundList = refundService.selectDailyAmount(refundQuery); List list = new ArrayList<>(); @@ -176,14 +183,16 @@ public class SmDashboardController extends BaseController { PayDailyAmountVO vo = new PayDailyAmountVO(); vo.setDate(date); - LocalDateDecimalVO pay = payList.stream().filter(item -> date.isEqual(item.getKey())).findFirst().orElse(null); + LocalDateDecimalVO pay = payList.stream().filter(item -> date.isEqual(item.getKey())).findFirst() + .orElse(null); if (pay == null) { vo.setTotal(BigDecimal.ZERO); } else { vo.setTotal(pay.getValue()); } - LocalDateDecimalVO refund = refundList.stream().filter(item -> date.isEqual(item.getKey())).findFirst().orElse(null); + LocalDateDecimalVO refund = refundList.stream().filter(item -> date.isEqual(item.getKey())).findFirst() + .orElse(null); if (refund == null) { vo.setRefund(BigDecimal.ZERO); } else { @@ -207,4 +216,13 @@ public class SmDashboardController extends BaseController { List list = dashboardService.selectBonusGroupByMch(query); return getDataTable(list); } + + /** + * 按店铺统计营收 + */ + @GetMapping("/dailyIncomeGroupByStore") + public AjaxResult getDailyIncomeGroupByStore(DailyIncomeGroupByStoreQuery query) { + return success(dashboardService.getDailyIncomeGroupByStore(query)); + } + }