Merge branch 'dev' into merge_adapay

# Conflicts:
#	jsowell-pile/src/main/java/com/jsowell/pile/service/ISettleOrderReportService.java
#	jsowell-pile/src/main/java/com/jsowell/pile/service/impl/SettleOrderReportServiceImpl.java
This commit is contained in:
2023-08-29 17:03:24 +08:00
26 changed files with 468 additions and 84 deletions

View File

@@ -23,6 +23,8 @@ import com.jsowell.common.enums.AcquirerEnum;
import com.jsowell.common.enums.InvoiceRecordEnum;
import com.jsowell.common.enums.MemberWalletEnum;
import com.jsowell.common.enums.adapay.AdapayEventEnum;
import com.jsowell.common.enums.uniapp.OccupyOrderPayStatusEnum;
import com.jsowell.common.enums.uniapp.OccupyOrderStatusEnum;
import com.jsowell.common.enums.ykc.*;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.DateUtils;
@@ -1074,6 +1076,15 @@ public class OrderService {
dto.setSubType(MemberWalletEnum.SUBTYPE_TOP_UP.getValue());
dto.setUpdatePrincipalBalance(amount);
memberBasicInfoService.updateMemberBalance(dto);
} else if (StringUtils.equals(type, ScenarioEnum.OCCUPY.getValue())) { // 占桩订单
// 通过订单号查询出占桩订单信息
OrderPileOccupy orderPileOccupy = orderPileOccupyService.queryByOccupyCode(orderCode);
// 订单状态改为 1-订单完成
orderPileOccupy.setStatus(OccupyOrderStatusEnum.ORDER_COMPLETE.getCode());
// 支付状态改为 1-支付完成
orderPileOccupy.setPayStatus(OccupyOrderPayStatusEnum.PAYMENT_COMPLETION.getCode());
orderPileOccupyService.updateByPrimaryKey(orderPileOccupy);
}
}

View File

@@ -103,6 +103,17 @@ public class SettleOrderReportController extends BaseController {
return AjaxResult.success(settleOrderReportService.getMerchantOrderReport(dto));
}
/**
* 查询运营商订单报表V2
* @param dto
* @return
*/
// @PreAuthorize("@ss.hasPermi('pile:merchant:query')")
@PostMapping("/getMerchantOrderReportV2")
public AjaxResult getMerchantOrderReportV2(@RequestBody MerchantOrderReportDTO dto) {
return AjaxResult.success(settleOrderReportService.getMerchantOrderReportV2(dto));
}
/**
* 查询站点订单日报详情
* http://localhost:8080/order/report/getStationOrderReportDetail

View File

@@ -431,6 +431,18 @@ public class SpringBootTestController {
System.out.println(JSON.toJSONString(resultList));
}
@Test
public void testGeneratePileSn() {
// String key = CacheConstants.PILE_SN_GENERATE_KEY + "88";
// redisCache.setCacheObject(key, null);
// Long pileNum = redisCache.getCacheLong(key);
// System.out.println(pileNum);
snUtils.getPileSn("88");
// List<String> list = snUtils.generateSN(2);
// System.out.println(list);
}
@Test
public void testGenerateOccupyPileOrder() {
String memberId = "67569684";

View File

@@ -168,6 +168,9 @@ public class RedisCache {
public Long getCacheLong(final String key) {
Long l = null;
Object cacheObject = getCacheObject(key);
if (Objects.isNull(cacheObject)) {
return null;
}
if (cacheObject instanceof Integer) {
l = ((Integer) cacheObject).longValue();
} else if (cacheObject instanceof Long) {

View File

@@ -7,6 +7,8 @@ public enum ScenarioEnum {
ORDER("order", "支付订单"),
BALANCE("balance", "支付余额"),
OCCUPY("occupy", "占桩订单"),
;
private String value;

View File

@@ -23,7 +23,6 @@ import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.enums.adapay.AdapayStatusEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.enums.ykc.ScenarioEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.AdapayUtil;
import com.jsowell.common.util.StringUtils;
@@ -115,7 +114,7 @@ public class AdapayService {
createAdaPaymentParam.setGoods_title(dto.getGoodsTitle());
createAdaPaymentParam.setGoods_desc(dto.getGoodsDesc()); // 这个字段是微信支付凭证的商品名
Map<String, String> map = Maps.newHashMap();
map.put("type", ScenarioEnum.ORDER.getValue());
map.put("type", dto.getType());
map.put("orderCode", dto.getOrderCode());
map.put("payMode", payMode);
map.put("memberId", dto.getMemberId());

View File

@@ -255,16 +255,19 @@ public class PileStationInfo extends BaseEntity {
/**
* 是否对外开放 0-否1-是)
*/
@Excel(name = "是否对外开放 0-否1-是)")
private String publicFlag;
/**
* 是否营业中0-否1-是)
*/
@Excel(name = "是否营业中0-否1-是)")
private String openFlag;
/**
* 是否对接高德0-否1-是)
*/
@Excel(name = "是否对接高德0-否1-是)")
private String aMapFlag;
/**

View File

@@ -0,0 +1,29 @@
package com.jsowell.pile.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 查询清分账单DTO
*
* @author Lemon
* @Date 2023/8/28 13:47
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetClearingBillDTO {
private Integer pageNum;
private Integer pageSize;
private String merchantId;
private String startTime;
private String endTime;
}

View File

@@ -1,5 +1,6 @@
package com.jsowell.pile.dto;
import com.jsowell.common.enums.ykc.ScenarioEnum;
import lombok.Data;
import java.math.BigDecimal;
@@ -30,6 +31,12 @@ public class PayOrderDTO {
*/
private BigDecimal payAmount;
/**
* @see ScenarioEnum
* 支付场景
*/
private String type;
/**
* 微信支付需要用的code
*/

View File

@@ -11,6 +11,11 @@ public class SettleOrderReportDTO {
*/
private String stationId;
/**
* 运营商id
*/
private String merchantId;
/**
* 交易日期
*/

View File

@@ -1,6 +1,9 @@
package com.jsowell.pile.mapper;
import com.jsowell.pile.domain.ClearingBillInfo;
import com.jsowell.pile.dto.GetClearingBillDTO;
import com.jsowell.pile.vo.web.ClearingBillVO;
import com.jsowell.pile.vo.web.MerchantClearingBillVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -57,4 +60,11 @@ public interface ClearingBillInfoMapper {
List<ClearingBillInfo> selectByMerchantId(@Param("merchantId") String merchantId, @Param("billStatus") String billStatus);
void updateStatus(@Param("clearingBillIds") List<Integer> clearingBillIds, @Param("billStatus") String billStatus);
/**
* 后管用 查询运营商账单列表
* @param dto
* @return
*/
List<MerchantClearingBillVO> getMerchantClearingBillList(GetClearingBillDTO dto);
}

View File

@@ -1,6 +1,8 @@
package com.jsowell.pile.service;
import com.jsowell.pile.domain.ClearingBillInfo;
import com.jsowell.pile.dto.GetClearingBillDTO;
import com.jsowell.pile.vo.web.MerchantClearingBillVO;
import java.util.List;
@@ -22,4 +24,11 @@ public interface ClearingBillInfoService{
List<ClearingBillInfo> selectByMerchantId(String merchantId, String billStatus);
void updateStatus(List<Integer> clearingBillIds, String billStatus);
/**
* 后管用 查询运营商账单列表
* @param dto
* @return
*/
List<MerchantClearingBillVO> getMerchantClearingBillList(GetClearingBillDTO dto);
}

View File

@@ -2,11 +2,13 @@ package com.jsowell.pile.service;
import com.jsowell.common.core.page.PageResponse;
import com.jsowell.pile.domain.SettleOrderReport;
import com.jsowell.pile.dto.GetClearingBillDTO;
import com.jsowell.pile.dto.MerchantOrderReportDTO;
import com.jsowell.pile.dto.SettleOrderReportDTO;
import com.jsowell.pile.vo.web.MerchantOrderReportVO;
import java.util.List;
import java.util.Map;
/**
* 结算订单报Service接口
@@ -76,6 +78,8 @@ public interface ISettleOrderReportService {
*/
MerchantOrderReportVO getMerchantOrderReport(MerchantOrderReportDTO dto);
MerchantOrderReportVO getMerchantOrderReportV2(MerchantOrderReportDTO dto);
int deleteByPrimaryKey(Integer id);
int insert(SettleOrderReport record);
@@ -107,4 +111,14 @@ public interface ISettleOrderReportService {
* @param tradeDate 交易日期
*/
void generateDailyOrderReports(String stationId, String tradeDate);
Map<String, Object> queryUndividedOrder(SettleOrderReportDTO dto);
/**
* 获取运营商清分账单列表
* @param dto
* @return
*/
public PageResponse getMerchantClearingBillList(GetClearingBillDTO dto);
}

View File

@@ -2,8 +2,10 @@ package com.jsowell.pile.service.impl;
import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.ClearingBillInfo;
import com.jsowell.pile.dto.GetClearingBillDTO;
import com.jsowell.pile.mapper.ClearingBillInfoMapper;
import com.jsowell.pile.service.ClearingBillInfoService;
import com.jsowell.pile.vo.web.MerchantClearingBillVO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
@@ -59,4 +61,14 @@ public class ClearingBillInfoServiceImpl implements ClearingBillInfoService{
clearingBillInfoMapper.updateStatus(clearingBillIds, billStatus);
}
/**
* 后管用 查询运营商账单列表
* @param dto
* @return
*/
@Override
public List<MerchantClearingBillVO> getMerchantClearingBillList(GetClearingBillDTO dto) {
return clearingBillInfoMapper.getMerchantClearingBillList(dto);
}
}

View File

@@ -2828,6 +2828,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
// 2023-07-11 全部改为汇付支付
dto.setGoodsTitle("充电费用");
dto.setGoodsDesc("充电桩预付款金额");
dto.setType(ScenarioEnum.ORDER.getValue());
Map<String, Object> weixinMap = adapayService.createPayment(dto);
// 返回微信支付参数

View File

@@ -11,6 +11,7 @@ import com.jsowell.common.enums.uniapp.OccupyOrderPayStatusEnum;
import com.jsowell.common.enums.uniapp.OccupyOrderStatusEnum;
import com.jsowell.common.enums.ykc.OrderPayModeEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.enums.ykc.ScenarioEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.PageUtils;
@@ -443,6 +444,7 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService {
// 返回支付参数
dto.setGoodsTitle("占桩费用");
dto.setGoodsDesc("占桩订单金额");
dto.setType(ScenarioEnum.OCCUPY.getValue());
Map<String, Object> weixinMap = adapayService.createPayment(dto);
resultMap.put("weixinMap", weixinMap);
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付

View File

@@ -13,7 +13,11 @@ import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.PageUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.common.util.id.IdUtils;
import com.jsowell.pile.domain.ClearingBillInfo;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.PileStationInfo;
import com.jsowell.pile.domain.SettleOrderReport;
import com.jsowell.pile.dto.GetClearingBillDTO;
import com.jsowell.pile.dto.MerchantOrderReportDTO;
import com.jsowell.pile.dto.QueryOrderDTO;
import com.jsowell.pile.dto.SettleOrderReportDTO;
@@ -27,6 +31,8 @@ import com.jsowell.pile.service.ISettleOrderReportService;
import com.jsowell.pile.vo.base.SplitSettleAmountVO;
import com.jsowell.pile.vo.web.*;
import lombok.extern.slf4j.Slf4j;
import com.jsowell.pile.service.*;
import com.jsowell.pile.vo.web.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -38,6 +44,7 @@ import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -70,6 +77,12 @@ public class SettleOrderReportServiceImpl implements ISettleOrderReportService {
@Autowired
private ClearingWithdrawInfoService clearingWithdrawInfoService;
@Autowired
private ClearingBillInfoService clearingBillInfoService;
@Autowired
private IPileStationInfoService pileStationInfoService;
/**
* 查询结算订单报
*
@@ -97,30 +110,23 @@ public class SettleOrderReportServiceImpl implements ISettleOrderReportService {
*/
@Override
public PageResponse selectSettleOrderReportDetail(SettleOrderReportDTO dto) {
SettleOrderReport orderReport = selectByStationIdAndDate(dto.getStationId(), dto.getTradeDate());
if (orderReport == null) {
return new PageResponse();
}
String orderCodes = orderReport.getOrderCodes();
if (StringUtils.isBlank(orderCodes)) {
return new PageResponse();
}
List<String> orderCodes = getOrderCodes(dto);
List<String> orderCodeList = Lists.newArrayList(StringUtils.split(orderCodes, ","));
// 查询订单支付信息 分页
int pageNum = dto.getPageNum() != null ? dto.getPageNum() : 1;
int pageSize = dto.getPageSize() != null ? dto.getPageSize() : 10;
PageHelper.startPage(pageNum, pageSize);
List<ClearingBillVO> clearingBillVOList = clearingWithdrawInfoService.selectWithdrawInfoByOrderCodeList(orderCodeList);
List<ClearingBillVO> clearingBillVOList = clearingWithdrawInfoService.selectWithdrawInfoByOrderCodeList(orderCodes);
PageInfo<ClearingBillVO> pageInfo = new PageInfo<>(clearingBillVOList);
// 封装结果集
List<OrderSettleDetailVO> resultList = Lists.newArrayList();
OrderSettleDetailVO vo = null;
String wechatAppId = pileMerchantInfoService.queryAppIdByMerchantId(orderReport.getMerchantId());
String wechatAppId = pileMerchantInfoService.queryAppIdByMerchantId(dto.getMerchantId());
for (ClearingBillVO clearingBillVO : pageInfo.getList()) {
vo = new OrderSettleDetailVO();
vo.setOrderCode(clearingBillVO.getOrderCode());
vo.setSettleAmount(clearingBillVO.getSettleAmount());
String paymentId = clearingBillVO.getPaymentId();
QueryPaymentConfirmDTO build = QueryPaymentConfirmDTO.builder()
.wechatAppId(wechatAppId)
@@ -158,6 +164,51 @@ public class SettleOrderReportServiceImpl implements ISettleOrderReportService {
return pageResponse;
}
/**
* 根据 merchantId 或 stationId 以及交易日期获取订单号
* @param dto
* @return
*/
private List<String> getOrderCodes(SettleOrderReportDTO dto) {
List<String> orderCodeList = new ArrayList<>();
if (StringUtils.isNotBlank(dto.getMerchantId())) {
List<PileStationInfo> stationIdInfos = pileStationInfoService.selectStationListByMerchantId(Long.parseLong(dto.getMerchantId()));
// 收集出站点id
List<String> stationIds = stationIdInfos.stream()
.map(PileStationInfo::getId)
.collect(Collectors.toList())
.stream()
.map(String::valueOf)
.collect(Collectors.toList());
List<SettleOrderReport> list = queryOrderReport(stationIds, dto.getTradeDate(), dto.getTradeDate());
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
List<String> orderCodes = list.stream().map(SettleOrderReport::getOrderCodes)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(orderCodes)) {
return new ArrayList<>();
}
for (String orderCode : orderCodes) {
orderCodeList = Lists.newArrayList(StringUtils.split(orderCode, ","));
}
} else if (StringUtils.isNotBlank(dto.getStationId())){
SettleOrderReport orderReport = selectByStationIdAndDate(dto.getStationId(), dto.getTradeDate());
if (orderReport == null) {
return new ArrayList<>();
}
String orderCodes = orderReport.getOrderCodes();
if (StringUtils.isBlank(orderCodes)) {
return new ArrayList<>();
}
orderCodeList = Lists.newArrayList(StringUtils.split(orderCodes, ","));
dto.setMerchantId(orderReport.getMerchantId());
}
return orderCodeList;
}
@Override
public List<SettleOrderReport> selectByMerchantIdAndDate(String merchantId, String date) {
return settleOrderReportMapper.selectByMerchantIdAndDate(merchantId, date);
@@ -280,6 +331,88 @@ public class SettleOrderReportServiceImpl implements ISettleOrderReportService {
return vo;
}
/**
* 根据运营商id查询订单报表V2
*
* @param dto
* @return
*/
@Override
public MerchantOrderReportVO getMerchantOrderReportV2(MerchantOrderReportDTO dto) {
int pageNum = dto.getPageNum() == null ? 1 : dto.getPageNum();
int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize();
if (StringUtils.isBlank(dto.getStartTime())) {
dto.setStartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.addDays(new Date(), -7)));
}
if (StringUtils.isBlank(dto.getEndTime())) {
dto.setEndTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, new Date()));
}
MerchantOrderReportVO vo = new MerchantOrderReportVO();
MerchantOrderReportVO.MerchantOrderReport report = new MerchantOrderReportVO.MerchantOrderReport();
PageUtils.startPage(pageNum, pageSize);
GetClearingBillDTO clearingBillDTO = GetClearingBillDTO.builder()
.merchantId(dto.getMerchantId())
.startTime(dto.getStartTime())
.endTime(dto.getEndTime())
.pageNum(dto.getPageNum())
.pageSize(dto.getPageSize())
.build();
PageResponse pageResponse = getMerchantClearingBillList(clearingBillDTO);
vo.setPageResponse(pageResponse);
vo.setMerchantId(dto.getMerchantId());
// 进行数据汇总
List<SettleOrderReportVO> list = settleOrderReportMapper.getMerchantOrderReport(dto);
// 用电度数
report.setUseElectricity(list.stream().map(SettleOrderReportVO::getUseElectricity).reduce(BigDecimal.ZERO, BigDecimal::add));
// 充电次数
report.setChargeNum(list.stream().map(SettleOrderReport -> new BigDecimal(SettleOrderReport.getChargeNum())).reduce(BigDecimal.ZERO, BigDecimal::add));
// 充电时长
report.setChargeTime(list.stream().map(SettleOrderReport -> new BigDecimal(SettleOrderReport.getChargeTime())).reduce(BigDecimal.ZERO, BigDecimal::add));
// 电费金额
report.setElectricityAmount(list.stream().map(SettleOrderReportVO::getElectricityAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
// 服务费金额
report.setServiceAmount(list.stream().map(SettleOrderReportVO::getServiceAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
// 收入金额
report.setTotalAmount(list.stream().map(SettleOrderReportVO::getTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
// 虚拟金额
report.setVirtualAmount(list.stream().map(SettleOrderReportVO::getVirtualAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
// 交易金额
report.setTradeAmount(list.stream().map(SettleOrderReportVO::getTradeAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
// 交易手续费
report.setTradeFee(list.stream().map(SettleOrderReportVO::getTradeFee).reduce(BigDecimal.ZERO, BigDecimal::add));
vo.setMerchantOrderReport(report);
return vo;
}
/**
* 获取运营商清分账单列表
* @param dto
* @return
*/
@Override
public PageResponse getMerchantClearingBillList(GetClearingBillDTO dto) {
List<MerchantClearingBillVO> resultList;
int pageNum = dto.getPageNum() == null ? 1 : dto.getPageNum();
int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize();
// 分页
PageUtils.startPage(pageNum, pageSize);
resultList = clearingBillInfoService.getMerchantClearingBillList(dto);
if (CollectionUtils.isEmpty(resultList)) {
return null;
}
PageInfo<MerchantClearingBillVO> pageInfo = new PageInfo<>(resultList);
PageResponse response = PageResponse.builder()
.pageNum(pageInfo.getPageNum())
.pageSize(pageInfo.getPageSize())
.list(pageInfo.getList())
.total(pageInfo.getTotal())
.pages(pageInfo.getPages())
.build();
return response;
}
@Override
public int deleteByPrimaryKey(Integer id) {
return settleOrderReportMapper.deleteByPrimaryKey(id);
@@ -340,6 +473,11 @@ public class SettleOrderReportServiceImpl implements ISettleOrderReportService {
return settleOrderReportMapper.queryOrderReport(stationIdList, startTime, endTime);
}
@Override
public Map<String, Object> queryUndividedOrder(SettleOrderReportDTO dto) {
return null;
}
/**
* 计算站点订单报表
*

View File

@@ -36,20 +36,23 @@ public class SnUtils {
* @param prefix 生成序列号的前缀
* @return
*/
private String getPileSn(String prefix) {
public String getPileSn(String prefix) {
//序列号前缀加特定标识,如系统模块名之类的 防止重复
String key = CacheConstants.PILE_SN_GENERATE_KEY + prefix;
String increResult = null;
try {
String pileNum = redisCache.getCacheObject(key);
if (StringUtils.isBlank(pileNum)) {
// 取缓存
Integer pileNum = redisCache.getCacheObject(key);
if (pileNum == null) {
// 缓存中没有,从数据库中取
PileBasicInfo pileInfo = pileBasicInfoService.getMaxNumPileInfo();
String pileSn = pileInfo.getSn();
// 将前四位截取并将后面转为long
long pileSnNum = Long.parseLong(StringUtils.substring(pileSn, 4, pileSn.length()));
Long pileSnNum = Long.parseLong(StringUtils.substring(pileSn, 4, pileSn.length()));
// String pileSnNum = StringUtils.substring(pileSn, 4, pileSn.length());
// 再将该值存入数据库
redisCache.setCacheObject(key, pileSnNum);
redisCache.setCacheObject(key, pileSnNum.intValue());
}
Long increNum = redisCache.increment(key, 1);
// 年份
@@ -63,11 +66,13 @@ public class SnUtils {
}
public static void main(String[] args) {
String pileSn = "88230000002060";
String substring = StringUtils.substring(pileSn, 4, pileSn.length());
long l = Long.parseLong(substring);
System.out.println(substring);
System.out.println(l);
// String pileSn = "88230000002060";
// String substring = StringUtils.substring(pileSn, 4, pileSn.length());
// long l = Long.parseLong(substring);
// System.out.println(substring);
// System.out.println(l);
Long a = 3147483647L;
}
/**

View File

@@ -3,6 +3,8 @@ package com.jsowell.pile.vo.web;
import com.jsowell.adapay.response.QueryPaymentConfirmDetailResponse;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ClearingBillVO {
/**
@@ -10,6 +12,11 @@ public class ClearingBillVO {
*/
private String orderCode;
/**
* 结算金额
*/
private BigDecimal settleAmount;
/**
* 支付id
*/

View File

@@ -0,0 +1,49 @@
package com.jsowell.pile.vo.web;
import lombok.Data;
/**
* 运营商清分账单VO
*
* @author Lemon
* @Date 2023/8/28 13:30
*/
@Data
public class MerchantClearingBillVO {
// 交易日期
private String tradeDate;
// 账单状态
private String billStatus;
// 清分账单编号
private String clearingBillCode;
// 清分时间
private String clearingTime;
// 运营商id
private String merchantId;
// 运营商名称
private String merchantName;
// 应收金额
private String receivableAmount;
// 应清分金额
private String shouldClearingAmount;
// 实际清分金额
private String actualClearingAmount;
// 手续费
private String feeAmount;
// 可提现金额
private String withdrawAbleAmount;
// 提现单号
private String withdrawCode;
}

View File

@@ -45,5 +45,8 @@ public class MerchantOrderReportVO {
// 虚拟金额
private BigDecimal virtualAmount;
// 白名单支付次数
private BigDecimal whitelistPaymentsNum;
}
}

View File

@@ -2,6 +2,8 @@ package com.jsowell.pile.vo.web;
import lombok.*;
import java.math.BigDecimal;
/**
* 订单结算详情
*/
@@ -19,7 +21,7 @@ public class OrderSettleDetailVO {
/**
* 结算金额
*/
private String settleAmount;
private BigDecimal settleAmount;
/**
* 清分状态
@@ -34,7 +36,7 @@ public class OrderSettleDetailVO {
/**
* 提现状态
* 0-未提现1-现中2-提现到账
* 0-未提现1-现中2-提现到账
*/
private String withdrawStatus;

View File

@@ -268,4 +268,24 @@
#{item,jdbcType=INTEGER}
</foreach>
</update>
<select id="getMerchantClearingBillList" resultType="com.jsowell.pile.vo.web.MerchantClearingBillVO" parameterType="com.jsowell.pile.dto.GetClearingBillDTO">
select
t1.trade_date as tradeDate,
t1.bill_status as billStatus,
t1.clearing_bill_code as clearingBillCode,
t1.clearing_time as clearingTime,
t1.merchant_id as merchantId,
t2.merchant_name as merchantName,
t1.receivable_amount as receivableAmount,
t1.should_clearing_amount as shouldClearingAmount,
t1.actual_clearing_amount as actualClearingAmount,
t1.fee_amount as feeAmount,
t1.withdrawable_amount as withdrawAbleAmount,
t1.withdraw_code as withdrawCode
from clearing_bill_info t1
join pile_merchant_info t2 on t1.merchant_id = t2.id and t1.del_flag = '0'
where t1.merchant_id = #{merchantId,jdbcType=VARCHAR}
and t1.create_time between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
</select>
</mapper>

View File

@@ -453,6 +453,7 @@
select
t1.clearing_bill_code as clearingBillCode,
t2.order_code as orderCode,
t5.settle_amount as settleAmount,
t3.withdraw_code as withdrawCode,
t3.withdraw_status as withdrawStatus,
t4.payment_id as paymentId
@@ -460,6 +461,7 @@
left join clearing_bill_detail t2 on t2.clearing_bill_code = t1.clearing_bill_code and t2.del_flag = '0'
left join clearing_withdraw_info t3 on t3.withdraw_code = t1.withdraw_code and t3.del_flag = '0'
left join adapay_callback_record t4 on t4.order_code = t2.order_code and t4.del_flag = '0'
left join order_basic_info t5 on t5.order_code = t2.order_code and t5.del_flag = '0'
where t1.del_flag = '0'
and t2.order_code in
<foreach collection="orderCodeList" item="orderCode" open="(" separator="," close=")">

View File

@@ -402,9 +402,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getMaxNumPileInfo" resultMap="PileBasicInfoResult">
select
max(id),
id,
sn
from
pile_basic_info
order by
id desc
limit 1
</select>
</mapper>

View File

@@ -3,30 +3,35 @@
<div class="main">
<div class="main-right">
<p class="center">账户余额()</p>
<p class="center number">{{adapayMember.acctBalance}}</p>
<p class="center">:
<p class="center number">{{ adapayMember.acctBalance }}</p>
<p class="center">
:
<span class="text">账户余额 = 可用余额 + 冻结余额</span>
</p>
</div>
<div class="main-right">
<p class="center">可用余额()</p>
<p class="center number">{{adapayMember.avlBalance}}</p>
<el-button type="primary" style="display:block;margin:0 auto" v-if="adapayMember.avlBalance > withdrawalFee" @click="dialogVisible = true">提现申请</el-button>
<p class="center" v-else>:
<span class="text">该余额大于{{withdrawalFee}}元时才可发起取现</span>
<p class="center number">{{ adapayMember.avlBalance }}</p>
<el-button type="primary" style="display: block; margin: 0 auto"
v-if="adapayMember.avlBalance > withdrawalFee" @click="dialogVisible = true">提现申请</el-button>
<p class="center" v-else>
:
<span class="text">该余额大于{{ withdrawalFee }}元时才可发起取现</span>
</p>
</div>
<div class="main-right">
<p class="center">冻结金额()</p>
<p class="center number">{{adapayMember.frzBalance}}</p>
<p class="center ">:
<p class="center number">{{ adapayMember.frzBalance }}</p>
<p class="center">
:
<span class="text">当配置了自动结算功能在每日发起结算时会将可用余额转为冻结金额该部分金额不允许取现</span>
</p>
</div>
<div class="main-right">
<p class="center">昨日日终余额()</p>
<p class="center number">{{adapayMember.lastAvlBalance}}</p>
<p class="center">:
<p class="center number">{{ adapayMember.lastAvlBalance }}</p>
<p class="center">
:
<span class="text"></span>
</p>
</div>
@@ -110,37 +115,38 @@
</el-tab-pane>
<el-tab-pane label="订单流水" name="second">订单流水</el-tab-pane>
</el-tabs> -->
<el-dialog title="提现申请" :visible.sync="dialogVisible" width="33%" :before-close="handleClose">
<el-dialog title="提现申请" :visible.sync="dialogVisible" width="33%">
温馨提示
<div style="font-size:12px;color:gray">
<div style="font-size: 12px; color: gray">
<p>1.提现将在3个工作日内审核到账,节假日审核顺延</p>
<p>2.部分流量方的充电订单存在账期,需要一定周期后才开始执行清分</p>
<p>3.提现为银行自动付款,根据银行要求会收取手续费,请知悉</p>
<p>4.订单收入包含了第三方的分成收入金额,已自动扣除万车充分成金额</p>
</div>
<p>可提现
<span class="number">{{adapayMember.avlBalance}}</span>
<p>
可提现
<span class="number">{{ adapayMember.avlBalance }}</span>
</p>
<p>手续费
<span class="number">{{withdrawalFee.toFixed(2)}}</span>
<p>
手续费
<span class="number">{{ withdrawalFee.toFixed(2) }}</span>
</p>
<p>实际到账
<span class="number">{{adapayMember.avlBalance -withdrawalFee}}</span>
<p>
实际到账
<span class="number">{{ adapayMember.avlBalance - withdrawalFee }}</span>
</p>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submit">提交</el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submit">提交</el-button>
</span>
</el-dialog>
<!-- <button @click="handleClose">aaaaa</button> -->
</div>
</template>
<script>
import {
queryAdapayAccountBalance,withdraw
} from "@/api/adapayMember/adapayMember";
import { queryAdapayAccountBalance, withdraw } from "@/api/adapayMember/adapayMember";
export default {
props:['merchantId'],
props: ["merchantId"],
data() {
return {
activeName: "first",
@@ -148,19 +154,30 @@ export default {
buttonBoolean: false,
//图标,可根据自己的需求匹配
icon: "el-icon-caret-bottom",
createTimeRange:'',
adapayMember:{},
createTimeRange: "",
adapayMember: {},
dialogVisible: false,
withdrawalFee: 5
withdrawalFee: 5,
};
},
methods: {
handleClose(done) {
this.$confirm('确认关闭?')
.then(_ => {
done();
})
.catch(_ => {});
handleClose() {
this.$confirm("确认提交?")
.then((_) => {
let params = {
merchantId: this.merchantId,
cashAmt: this.adapayMember.avlBalance,
};
withdraw(params).then((response) => {
console.log("res 提现金额", response);
if (response.code !== 200) return this.$modal.msgError(response.msg);
this.$modal.msgSuccess("操作成功");
this.getList();
});
this.dialogVisible = false;
})
.catch((_) => { });
},
handleClick(tab, event) {
console.log(tab, event);
@@ -177,18 +194,18 @@ export default {
}
},
// 提现弹窗确定事件
submit(){
let params = {
merchantId: this.merchantId,
cashAmt:this.adapayMember.avlBalance
}
withdraw(params).then((response) =>{
console.log('res 提现金额',response);
if(response.code !== 200) return this.$modal.msgError(response.msg);
this.$modal.msgSuccess("操作成功");
this.getList()
})
this.dialogVisible = false
submit() {
// let params = {
// merchantId: this.merchantId,
// cashAmt: this.adapayMember.avlBalance,
// };
// withdraw(params).then((response) => {
// console.log("res 提现金额", response);
// if (response.code !== 200) return this.$modal.msgError(response.msg);
// this.$modal.msgSuccess("操作成功");
// this.getList();
// });
this.handleClose();
},
getList() {
console.log("this.merchantId", this.merchantId);
@@ -197,49 +214,57 @@ export default {
};
queryAdapayAccountBalance(param).then((response) => {
console.log("查询 queryAdapayAccountBalance", response);
this.adapayMember = response.data;
this.adapayMember = response.data;
});
},
},
created () {
this.getList()
}
created() {
this.getList();
},
};
</script>
<style lang="scss" scoped>
.number{
color:#50bfff;font-size:20px;font-weight: bolder;
.number {
color: #50bfff;
font-size: 20px;
font-weight: bolder;
}
.center{
.center {
text-align: center;
}
.text{
.text {
font-size: 12px;
color: red;
}
.main {
display: flex;
justify-content: space-between;
// align-items: baseline;
.main-right{
.main-right {
width: 310px;
margin-right: 20px;
border: 1px solid #e6ebf5;
border-radius: 10px;
padding: 10px;
transition: all .2s linear;
transition: all 0.2s linear;
}
}
.main-right:hover{
.main-right:hover {
box-shadow: 0 0 5px 3px #999;
}
.bord {
position: relative;
top: 68px;
height: 60px;
border-left: 1px solid gray;
}
.card {
// width: 230px;
padding: 10px;