报表-交易流水
This commit is contained in:
parent
ad1a3b605b
commit
7ec208c6d9
|
|
@ -16,4 +16,5 @@ public class WalletUpdateDTO {
|
|||
private PayChannelEnum payChannelEnum;
|
||||
private PayTypeEnum payTypeEnum;
|
||||
private Long orderNo;
|
||||
private String deviceSn;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,4 +14,5 @@ public class WalletBalanceOperation {
|
|||
private Integer payChannel;
|
||||
private Integer payType;
|
||||
private Long orderNo;
|
||||
private String deviceSn;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -193,7 +193,8 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService {
|
|||
walletUpdateDTO.getAccWalletIdEnum().getKey(),
|
||||
walletUpdateDTO.getAccTradeTypeEnum().getKey(),
|
||||
walletUpdateDTO.getPayChannelEnum().getKey(),
|
||||
walletUpdateDTO.getPayTypeEnum().getKey());
|
||||
walletUpdateDTO.getPayTypeEnum().getKey(),
|
||||
walletUpdateDTO.getDeviceSn());
|
||||
operation.setOperationType(WalletBalanceOperationEnum.ADD_BAL.getKey());
|
||||
operation.setOrderNo(walletUpdateDTO.getOrderNo());
|
||||
acWalletBalanceOperation(operation);
|
||||
|
|
@ -219,7 +220,8 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService {
|
|||
walletUpdateDTO.getAccWalletIdEnum().getKey(),
|
||||
walletUpdateDTO.getAccTradeTypeEnum().getKey(),
|
||||
walletUpdateDTO.getPayChannelEnum().getKey(),
|
||||
walletUpdateDTO.getPayTypeEnum().getKey());
|
||||
walletUpdateDTO.getPayTypeEnum().getKey(),
|
||||
walletUpdateDTO.getDeviceSn());
|
||||
operation.setOperationType(WalletBalanceOperationEnum.REDUCE_BAL.getKey());
|
||||
operation.setOrderNo(walletUpdateDTO.getOrderNo());
|
||||
acWalletBalanceOperation(operation);
|
||||
|
|
@ -230,7 +232,7 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService {
|
|||
}
|
||||
|
||||
private WalletBalanceOperation operationBuilder(BigDecimal amount, Long userId, Integer walletId,
|
||||
Integer tradeType, Integer payChannel, Integer payType) {
|
||||
Integer tradeType, Integer payChannel, Integer payType, String deviceSn) {
|
||||
WalletBalanceOperation operation = new WalletBalanceOperation();
|
||||
operation.setUserId(userId);
|
||||
operation.setAmount(amount);
|
||||
|
|
@ -238,6 +240,7 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService {
|
|||
operation.setTradeType(tradeType);
|
||||
operation.setPayChannel(payChannel);
|
||||
operation.setPayType(payType);
|
||||
operation.setDeviceSn(deviceSn);
|
||||
return operation;
|
||||
}
|
||||
|
||||
|
|
@ -282,6 +285,9 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService {
|
|||
accTrade.setPayState(PayStateEnum.PAY_SUCC.getKey());
|
||||
accTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey());
|
||||
accTrade.setUpdateBy(SecurityUtils.getUsername());
|
||||
accTrade.setWalletBalTotal(walletBalByWalletId);
|
||||
accTrade.setAccAllBal(walletBalByWalletId);
|
||||
accTrade.setMachineSn(operation.getDeviceSn());
|
||||
this.accTradeService.updateAccTrade(accTrade);
|
||||
}catch (Exception ex) {
|
||||
if(Objects.nonNull(tradeId)) {
|
||||
|
|
@ -336,6 +342,7 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService {
|
|||
if(Objects.nonNull(operation.getOrderNo())) {
|
||||
accTrade.setOrderNo(operation.getOrderNo().toString());
|
||||
}
|
||||
accTrade.setMachineSn(operation.getDeviceSn());
|
||||
this.accTradeService.insertAccTrade(accTrade);
|
||||
return tradeId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -251,18 +251,23 @@ public class OrderInfoServiceImpl implements IOrderInfoService
|
|||
|
||||
private void deductFromWallets(OrderInfo orderInfo, BigDecimal subsidyWalletBal) {
|
||||
Long orderNo = orderInfo.getOrderId();
|
||||
String deviceSn = orderInfo.getDeviceSn();
|
||||
if (orderInfo.getRealAmount().compareTo(subsidyWalletBal) <= 0) {
|
||||
deductWalletBalance(orderInfo.getRealAmount(), orderInfo.getUserId(), AccWalletIdEnum.SUBSIDY, orderNo);
|
||||
deductWalletBalance(orderInfo.getRealAmount(), orderInfo.getUserId(), AccWalletIdEnum.SUBSIDY, orderNo, deviceSn);
|
||||
} else if (subsidyWalletBal.compareTo(BigDecimal.ZERO) > 0) {
|
||||
deductWalletBalance(subsidyWalletBal, orderInfo.getUserId(), AccWalletIdEnum.SUBSIDY, orderNo);
|
||||
deductWalletBalance(subsidyWalletBal, orderInfo.getUserId(), AccWalletIdEnum.SUBSIDY, orderNo, deviceSn);
|
||||
BigDecimal remainAmount = orderInfo.getRealAmount().subtract(subsidyWalletBal);
|
||||
deductWalletBalance(remainAmount, orderInfo.getUserId(), AccWalletIdEnum.WALLET, orderNo);
|
||||
deductWalletBalance(remainAmount, orderInfo.getUserId(), AccWalletIdEnum.WALLET, orderNo, deviceSn);
|
||||
} else {
|
||||
deductWalletBalance(orderInfo.getRealAmount(), orderInfo.getUserId(), AccWalletIdEnum.WALLET, orderNo);
|
||||
deductWalletBalance(orderInfo.getRealAmount(), orderInfo.getUserId(), AccWalletIdEnum.WALLET, orderNo, deviceSn);
|
||||
}
|
||||
}
|
||||
|
||||
private void deductWalletBalance(BigDecimal amount, Long userId, AccWalletIdEnum walletIdEnum, Long orderNo) {
|
||||
private void deductWalletBalance(BigDecimal amount,
|
||||
Long userId,
|
||||
AccWalletIdEnum walletIdEnum,
|
||||
Long orderNo,
|
||||
String deviceSn) {
|
||||
WalletUpdateDTO walletUpdateDTO = new WalletUpdateDTO();
|
||||
walletUpdateDTO.setAmount(amount);
|
||||
walletUpdateDTO.setUserId(userId);
|
||||
|
|
@ -271,6 +276,7 @@ public class OrderInfoServiceImpl implements IOrderInfoService
|
|||
walletUpdateDTO.setPayChannelEnum(PayChannelEnum.ACC);
|
||||
walletUpdateDTO.setPayTypeEnum(PayTypeEnum.MEAL_CARD);
|
||||
walletUpdateDTO.setOrderNo(orderNo);
|
||||
walletUpdateDTO.setDeviceSn(deviceSn);
|
||||
accWalletInfoService.clearAccWalletBalance(walletUpdateDTO);
|
||||
}
|
||||
|
||||
|
|
@ -358,6 +364,7 @@ public class OrderInfoServiceImpl implements IOrderInfoService
|
|||
walletUpdateDTO.setPayChannelEnum(PayChannelEnum.ACC);
|
||||
walletUpdateDTO.setPayTypeEnum(PayTypeEnum.MEAL_CARD);
|
||||
walletUpdateDTO.setOrderNo(orderId);
|
||||
walletUpdateDTO.setDeviceSn(orderInfo.getDeviceSn());
|
||||
accWalletInfoService.addAccWalletBalance(walletUpdateDTO);
|
||||
refundAmount = refundAmount.add(accTrade.getActualAmount());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,46 @@
|
|||
package com.bonus.canteen.core.report.controller;
|
||||
|
||||
import com.bonus.canteen.core.order.domain.OrderDetail;
|
||||
import com.bonus.canteen.core.order.service.IOrderDetailService;
|
||||
import com.bonus.canteen.core.report.domain.TradeFlowParam;
|
||||
import com.bonus.canteen.core.report.domain.TradeFlowVO;
|
||||
import com.bonus.canteen.core.report.service.TradeReportService;
|
||||
import com.bonus.common.core.utils.poi.ExcelUtil;
|
||||
import com.bonus.common.core.web.controller.BaseController;
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
import com.bonus.common.core.web.page.TableDataInfo;
|
||||
import com.bonus.common.log.annotation.SysLog;
|
||||
import com.bonus.common.log.enums.OperaType;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 交易报表
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-04-14
|
||||
*/
|
||||
@Controller
|
||||
@RequestMapping("/report/trade")
|
||||
public class TradeReportController extends BaseController
|
||||
{
|
||||
@Autowired
|
||||
private TradeReportService tradeReportService;
|
||||
|
||||
/**
|
||||
* 交易流水
|
||||
*/
|
||||
@PostMapping("/flow")
|
||||
@ResponseBody
|
||||
public TableDataInfo list(TradeFlowParam param)
|
||||
{
|
||||
startPage();
|
||||
List<TradeFlowVO> list = tradeReportService.selectTradeFlow(param);
|
||||
return getDataTable(list);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.bonus.canteen.core.report.domain;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class TradeFlowParam implements Serializable {
|
||||
private Long userId;
|
||||
private String userName;
|
||||
private String phonenumber;
|
||||
private List<Long> deptIdList;
|
||||
@ApiModelProperty("开始时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime startDateTime;
|
||||
@ApiModelProperty("结束时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime endDateTime;
|
||||
|
||||
public TradeFlowParam() {
|
||||
this.endDateTime = LocalDateTime.now().plusDays(7);
|
||||
this.startDateTime = LocalDateTime.now().minusDays(7);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.bonus.canteen.core.report.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class TradeFlowVO implements Serializable {
|
||||
private Long userId;
|
||||
private String userName;
|
||||
private Integer userType;
|
||||
private String phonenumber;
|
||||
private Long deptId;
|
||||
private String deptName;
|
||||
private Double accAllBal;
|
||||
private LocalDateTime tradeTime;
|
||||
private Integer tradeType;
|
||||
private Integer payType;
|
||||
private String machineSn;
|
||||
private String deviceName;
|
||||
private String createBy;
|
||||
private Double income;
|
||||
private Double outcome;
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package com.bonus.canteen.core.report.mapper;
|
||||
|
||||
import com.bonus.canteen.core.report.domain.TradeFlowParam;
|
||||
import com.bonus.canteen.core.report.domain.TradeFlowVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface TradeReportMapper {
|
||||
public List<TradeFlowVO> selectTradeFlow(TradeFlowParam param);
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package com.bonus.canteen.core.report.service;
|
||||
|
||||
import com.bonus.canteen.core.report.domain.TradeFlowParam;
|
||||
import com.bonus.canteen.core.report.domain.TradeFlowVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface TradeReportService {
|
||||
List<TradeFlowVO> selectTradeFlow(TradeFlowParam param);
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package com.bonus.canteen.core.report.service.impl;
|
||||
|
||||
import com.bonus.canteen.core.report.domain.TradeFlowParam;
|
||||
import com.bonus.canteen.core.report.domain.TradeFlowVO;
|
||||
import com.bonus.canteen.core.report.mapper.TradeReportMapper;
|
||||
import com.bonus.canteen.core.report.service.TradeReportService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class TradeReportServiceImpl implements TradeReportService {
|
||||
@Resource
|
||||
TradeReportMapper tradeReportMapper;
|
||||
|
||||
@Override
|
||||
public List<TradeFlowVO> selectTradeFlow(TradeFlowParam param) {
|
||||
return tradeReportMapper.selectTradeFlow(param);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.bonus.canteen.core.report.mapper.TradeReportMapper">
|
||||
<select id="selectTradeFlow" resultType="com.bonus.canteen.core.report.domain.TradeFlowVO">
|
||||
select
|
||||
su.user_id,
|
||||
su.user_name,
|
||||
su.user_type,
|
||||
su.phonenumber,
|
||||
sd.dept_id,
|
||||
sd.dept_name,
|
||||
at2.acc_all_bal,
|
||||
at2.trade_time,
|
||||
at2.trade_type,
|
||||
at2.pay_type,
|
||||
at2.machine_sn,
|
||||
di.device_name,
|
||||
at2.create_by,
|
||||
CASE
|
||||
WHEN at2.trade_type in (10, 20) then
|
||||
at2.actual_amount
|
||||
end as income,
|
||||
CASE
|
||||
WHEN at2.trade_type not in (10, 20) then
|
||||
at2.actual_amount
|
||||
end as outcome
|
||||
from
|
||||
acc_trade at2
|
||||
left join sys_user su on
|
||||
at2.user_id = su.user_id
|
||||
left join sys_dept sd on
|
||||
su.dept_id = sd.dept_id
|
||||
left join device_info di on
|
||||
at2.machine_sn = di.device_sn
|
||||
where
|
||||
at2.trade_time <![CDATA[ >= ]]> #{param.startDateTime}
|
||||
and at2.trade_time <![CDATA[ <= ]]> #{param.endDateTime}
|
||||
<if test="param.deptIdList != null and param.deptIdList.size() > 0">
|
||||
and su.dept_id IN
|
||||
<foreach collection="param.deptIdList" item="deptId" separator="," open="(" close=")">
|
||||
#{deptId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.searchValue != null and param.searchValue != ''">
|
||||
and (
|
||||
su.nick_name = #{param.searchValue}
|
||||
or su.phonenumber = #{param.encryptedSearchValue}
|
||||
or su.user_id like concat('%', #{param.searchValue}, '%')
|
||||
)
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue