mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 02:55:04 +08:00
查询时间段内的订单分账记录
This commit is contained in:
@@ -1,11 +1,10 @@
|
||||
package com.jsowell.pile.mapper;
|
||||
|
||||
import com.jsowell.pile.domain.OrderSplitRecord;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
public interface OrderSplitRecordMapper {
|
||||
int deleteByPrimaryKey(Integer id);
|
||||
|
||||
@@ -24,4 +23,9 @@ public interface OrderSplitRecordMapper {
|
||||
int insertOrUpdateSelective(OrderSplitRecord record);
|
||||
|
||||
List<OrderSplitRecord> selectByOrderCode(String orderCode);
|
||||
|
||||
List<OrderSplitRecord> queryOrderSplitDataList(@Param("merchantId") String merchantId,
|
||||
@Param("stationId") String stationId,
|
||||
@Param("startTime") String startTime,
|
||||
@Param("endTime") String endTime);
|
||||
}
|
||||
@@ -4,7 +4,8 @@ import com.jsowell.adapay.dto.PaymentConfirmParam;
|
||||
import com.jsowell.adapay.dto.SplitData;
|
||||
import com.jsowell.pile.domain.OrderSplitRecord;
|
||||
import com.jsowell.pile.vo.OrderInfoDetailVO;
|
||||
import com.jsowell.pile.vo.OrderSplitRecordVO;
|
||||
import com.jsowell.pile.vo.web.OrderSplitDailySummaryData;
|
||||
import com.jsowell.pile.vo.web.OrderSplitRecordVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -24,6 +25,11 @@ public interface OrderSplitRecordService {
|
||||
|
||||
// int updateBatchSelective(List<OrderSplitRecord> list);
|
||||
|
||||
/**
|
||||
* 批量保存订单分账记录
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
int batchInsert(List<OrderSplitRecord> list);
|
||||
|
||||
/**
|
||||
@@ -32,5 +38,20 @@ public interface OrderSplitRecordService {
|
||||
void saveOrderSplitRecord(PaymentConfirmParam param, String id, List<SplitData> stationSplitConfigList, OrderInfoDetailVO orderInfoDetailVO);
|
||||
|
||||
List<OrderSplitRecordVO> selectByOrderCode(String orderCode);
|
||||
|
||||
/**
|
||||
* 根据入参拉出时间段内所有订单的分账记录
|
||||
* @param merchantId 运营商id
|
||||
* @param stationId 站点id
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
* @return
|
||||
*/
|
||||
List<OrderSplitRecord> queryOrderSplitRecordList(String merchantId, String stationId, String startTime, String endTime);
|
||||
|
||||
/**
|
||||
* 查询时间段内的订单分账记录
|
||||
*/
|
||||
List<OrderSplitDailySummaryData> queryOrderSplitData(String merchantId, String stationId, String startTime, String endTime);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,23 +1,33 @@
|
||||
package com.jsowell.pile.service.impl;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.jsowell.adapay.dto.PaymentConfirmParam;
|
||||
import com.jsowell.adapay.dto.SplitData;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.enums.DelFlagEnum;
|
||||
import com.jsowell.common.enums.adapay.AdapayStatusEnum;
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.pile.domain.AdapayMemberAccount;
|
||||
import com.jsowell.pile.domain.OrderSplitRecord;
|
||||
import com.jsowell.pile.mapper.OrderSplitRecordMapper;
|
||||
import com.jsowell.pile.service.AdapayMemberAccountService;
|
||||
import com.jsowell.pile.service.OrderSplitRecordService;
|
||||
import com.jsowell.pile.vo.OrderInfoDetailVO;
|
||||
import com.jsowell.pile.vo.OrderSplitRecordVO;
|
||||
import com.jsowell.pile.vo.web.OrderSplitDailySummaryData;
|
||||
import com.jsowell.pile.vo.web.OrderSplitRecordVO;
|
||||
import com.jsowell.pile.vo.web.OtherSplitDetail;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class OrderSplitRecordServiceImpl implements OrderSplitRecordService {
|
||||
@@ -25,6 +35,9 @@ public class OrderSplitRecordServiceImpl implements OrderSplitRecordService {
|
||||
@Resource
|
||||
private OrderSplitRecordMapper orderSplitRecordMapper;
|
||||
|
||||
@Autowired
|
||||
private AdapayMemberAccountService adapayMemberAccountService;
|
||||
|
||||
// @Override
|
||||
// public int deleteByPrimaryKey(Integer id) {
|
||||
// return orderSplitRecordMapper.deleteByPrimaryKey(id);
|
||||
@@ -129,5 +142,115 @@ public class OrderSplitRecordServiceImpl implements OrderSplitRecordService {
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据入参拉出时间段内所有订单的分账记录
|
||||
* @param merchantId 运营商id
|
||||
* @param stationId 站点id
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<OrderSplitRecord> queryOrderSplitRecordList(String merchantId, String stationId, String startTime, String endTime) {
|
||||
/*
|
||||
入参校验规则
|
||||
1. merchantId, startTime, endTime不能为空, stationId可以为空
|
||||
2. startTime不能早于endTime
|
||||
*/
|
||||
if (StringUtils.isBlank(merchantId) || StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
if (DateUtils.parseDate(startTime).after(DateUtils.parseDate(endTime))) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
// 根据入参拉出时间段内所有订单的分账记录
|
||||
return orderSplitRecordMapper.queryOrderSplitDataList(merchantId, stationId, startTime, endTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询时间段内的订单分账记录
|
||||
*/
|
||||
@Override
|
||||
public List<OrderSplitDailySummaryData> queryOrderSplitData(String merchantId, String stationId, String startTime, String endTime) {
|
||||
List<OrderSplitDailySummaryData> resultList = Lists.newArrayList();
|
||||
// 根据入参拉出时间段内所有订单的分账记录
|
||||
List<OrderSplitRecord> orderSplitRecords = this.queryOrderSplitRecordList(merchantId, stationId, startTime, endTime);
|
||||
if (CollectionUtils.isEmpty(orderSplitRecords)) {
|
||||
return resultList;
|
||||
}
|
||||
// 根据merchantId查询汇付账户信息
|
||||
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(merchantId);
|
||||
// 按天分组, 组装结果集 key 为 tradeDate, value 为该天的订单分账记录
|
||||
Map<String, List<OrderSplitRecord>> dailyRecordMap = orderSplitRecords.stream().collect(Collectors.groupingBy(OrderSplitRecord::getTradeDate));
|
||||
// 按天分组 key 为 tradeDate, value 为该天的订单分账记录
|
||||
for (Map.Entry<String, List<OrderSplitRecord>> entry : dailyRecordMap.entrySet()) {
|
||||
String tradeDate = entry.getKey();
|
||||
List<OrderSplitRecord> dailyRecordList = entry.getValue();
|
||||
// dailyRecordList中的订单号集合Set
|
||||
Set<String> orderCodeSet = dailyRecordList.stream().map(OrderSplitRecord::getOrderCode).collect(Collectors.toSet());
|
||||
// 按adapayMemberId 分组 key 为 adapayMemberId, value 为该adapayMemberId的订单分账记录
|
||||
Map<String, List<OrderSplitRecord>> adapayMemberIdRecordMap = dailyRecordList.stream().collect(Collectors.groupingBy(OrderSplitRecord::getAdapayMemberId));
|
||||
OrderSplitDailySummaryData summaryData = new OrderSplitDailySummaryData();
|
||||
summaryData.setTradeDate(tradeDate);
|
||||
summaryData.setMerchantId(merchantId);
|
||||
summaryData.setOrderCount(orderCodeSet.size());
|
||||
BigDecimal totalSettleAmount = BigDecimal.ZERO; // 当天结算金额汇总
|
||||
BigDecimal totalMerchantSplitAmount = BigDecimal.ZERO; // 当天运营商分账金额汇总
|
||||
BigDecimal totalOtherSplitAmount = BigDecimal.ZERO; // 当天其他人分账金额汇总
|
||||
Map<String, List<OrderSplitRecord>> otherSplitDetailMap = Maps.newHashMap(); // 当天其他人分账的记录
|
||||
for (Map.Entry<String, List<OrderSplitRecord>> listEntry : adapayMemberIdRecordMap.entrySet()) {
|
||||
List<OrderSplitRecord> recordList = listEntry.getValue();
|
||||
for (OrderSplitRecord record : recordList) {
|
||||
// 由于存在订单被多家分账, recordList里的订单号是存在重复的, 判断orderCode是否存在orderCodeSet中, 存在则累计totalSettleAmount, 并从orderCodeSet中删除
|
||||
if (orderCodeSet.contains(record.getOrderCode())) {
|
||||
totalSettleAmount = totalSettleAmount.add(record.getSettleAmount());
|
||||
orderCodeSet.remove(record.getOrderCode());
|
||||
}
|
||||
// 区分运营商自己分账的金额, 和他人的分账金额
|
||||
if (adapayMemberAccount != null && adapayMemberAccount.getAdapayMemberId().equals(record.getAdapayMemberId())) {
|
||||
totalMerchantSplitAmount = totalMerchantSplitAmount.add(record.getElectricitySplitAmount()).add(record.getServiceSplitAmount());
|
||||
} else {
|
||||
totalOtherSplitAmount = totalOtherSplitAmount.add(record.getElectricitySplitAmount()).add(record.getServiceSplitAmount());
|
||||
// 他人分账的记录保存到otherSplitDetailMap
|
||||
if (otherSplitDetailMap.containsKey(record.getAdapayMemberId())) {
|
||||
List<OrderSplitRecord> otherSplitDetailList = otherSplitDetailMap.get(record.getAdapayMemberId());
|
||||
otherSplitDetailList.add(record);
|
||||
} else {
|
||||
List<OrderSplitRecord> otherSplitDetailList = Lists.newArrayList();
|
||||
otherSplitDetailList.add(record);
|
||||
otherSplitDetailMap.put(record.getAdapayMemberId(), otherSplitDetailList);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 根据otherSplitDetailMap 组装otherSplitDetailList
|
||||
List<OtherSplitDetail> otherSplitDetailList = Lists.newArrayList();
|
||||
for (Map.Entry<String, List<OrderSplitRecord>> e : otherSplitDetailMap.entrySet()) {
|
||||
String adapayMemberId = e.getKey();
|
||||
List<OrderSplitRecord> recordList = e.getValue();
|
||||
BigDecimal totalElecSplitAmount = BigDecimal.ZERO; // 该adapayMemberId的电度分账金额汇总
|
||||
BigDecimal totalServiceSplitAmount = BigDecimal.ZERO; // 该adapayMemberId的服务分账金额汇总
|
||||
for (OrderSplitRecord record : recordList) {
|
||||
totalElecSplitAmount = totalElecSplitAmount.add(record.getElectricitySplitAmount());
|
||||
totalServiceSplitAmount = totalServiceSplitAmount.add(record.getServiceSplitAmount());
|
||||
}
|
||||
OtherSplitDetail build = OtherSplitDetail.builder()
|
||||
.adapayMemberId(adapayMemberId)
|
||||
.totalSplitAmount(totalElecSplitAmount.add(totalServiceSplitAmount))
|
||||
.totalElecSplitAmount(totalElecSplitAmount)
|
||||
.totalServiceSplitAmount(totalServiceSplitAmount)
|
||||
.adapayMemberName("")
|
||||
.build();
|
||||
otherSplitDetailList.add(build);
|
||||
}
|
||||
summaryData.setOtherSplitDetailList(otherSplitDetailList);
|
||||
summaryData.setTotalSettleAmount(totalSettleAmount);
|
||||
summaryData.setMerchantSplitAmount(totalMerchantSplitAmount);
|
||||
summaryData.setOtherSplitAmount(totalOtherSplitAmount);
|
||||
resultList.add(summaryData);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.jsowell.pile.vo.web;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 订单分账每日汇总数据
|
||||
*/
|
||||
@Data
|
||||
public class OrderSplitDailySummaryData {
|
||||
/**
|
||||
* 交易日期
|
||||
*/
|
||||
private String tradeDate;
|
||||
|
||||
/**
|
||||
* 运营商id
|
||||
*/
|
||||
private String merchantId;
|
||||
|
||||
/**
|
||||
* 订单数量
|
||||
*/
|
||||
private Integer orderCount;
|
||||
|
||||
/**
|
||||
* 订单总消费金额
|
||||
*/
|
||||
private BigDecimal totalOrderAmount;
|
||||
|
||||
/**
|
||||
* 订单总结算金额
|
||||
* 除去不需要分账的金额, 剩下的是结算金额
|
||||
*/
|
||||
private BigDecimal totalSettleAmount;
|
||||
|
||||
/**
|
||||
* 本运营商分账金额
|
||||
*/
|
||||
private BigDecimal merchantSplitAmount;
|
||||
|
||||
/**
|
||||
* 他人分账金额
|
||||
*/
|
||||
private BigDecimal otherSplitAmount;
|
||||
|
||||
/**
|
||||
* 他人分账明细
|
||||
*/
|
||||
private List<OtherSplitDetail> otherSplitDetailList;
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.jsowell.pile.vo;
|
||||
package com.jsowell.pile.vo.web;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.jsowell.pile.vo.web;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 他人分账详情
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class OtherSplitDetail {
|
||||
/**
|
||||
* adapay会员id
|
||||
*/
|
||||
private String adapayMemberId;
|
||||
|
||||
/**
|
||||
* adapay会员名称
|
||||
*/
|
||||
private String adapayMemberName;
|
||||
|
||||
/**
|
||||
* 总电费分账金额
|
||||
*/
|
||||
private BigDecimal totalElecSplitAmount;
|
||||
|
||||
/**
|
||||
* 总服务费分账金额
|
||||
*/
|
||||
private BigDecimal totalServiceSplitAmount;
|
||||
|
||||
/**
|
||||
* 总分账金额
|
||||
*/
|
||||
private BigDecimal totalSplitAmount;
|
||||
}
|
||||
@@ -729,4 +729,16 @@
|
||||
where del_flag = '0'
|
||||
and order_code = #{orderCode,jdbcType=VARCHAR}
|
||||
</select>
|
||||
|
||||
<select id="queryOrderSplitDataList" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from order_split_record
|
||||
where del_flag = '0'
|
||||
and merchant_id = #{merchantId,jdbcType=VARCHAR}
|
||||
<if test="stationId != null and stationId != ''">
|
||||
and station_id = #{stationId,jdbcType=VARCHAR}
|
||||
</if>
|
||||
and trade_date between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user