Commit 91f4dd4b authored by hanfeng's avatar hanfeng

Merge branch 'master-modify-cutAmount' into dev

parents 9e3587e5 c43fa74d
......@@ -7,6 +7,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
......@@ -15,7 +16,9 @@ import java.util.Date;
* @author Administrator
*/
@Data
public class DailyOrderStatistics {
public class DailyOrderStatistics implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
......
......@@ -13,9 +13,15 @@ import java.math.BigDecimal;
@Data
@Table(name = "daily_travel_order_statistics")
public class DailyTravelOrderStatistics extends DailyOrderStatistics {
/**
* 违约总额
*/
@Column(name = "default_money ")
private BigDecimal defaultMoney ;
/**
* 取消订单总
* 退还订单金
*/
@Column(name = "penal_sum")
private BigDecimal penalSum;
@Column(name = "return_gmv")
private BigDecimal returnGmv;
}
......@@ -17,27 +17,28 @@ import java.util.Date;
/**
* 每日租车订单统计
*
* @author Administrator
*/
@Data
@Table(name = "daily_vehicle_order_statistics")
public class DailyVehicleOrderStatistics extends DailyOrderStatistics{
public class DailyVehicleOrderStatistics extends DailyOrderStatistics {
/**
* 预交押金总额
*/
@Column(name = "security_deposit")
private BigDecimal securityDeposit;
private BigDecimal securityDeposit;
/**
* 退还押金总额
*/
@Column(name = "refund_security_deposit")
private BigDecimal refundSecurityDeposit;
private BigDecimal refundSecurityDeposit;
/**
* 赔偿总额
* 损坏赔偿总额
*/
@Column(name = "compensation")
private BigDecimal compensation;
......@@ -46,19 +47,25 @@ public class DailyVehicleOrderStatistics extends DailyOrderStatistics{
* 违章总额
*/
@Column(name = "forfeit")
private BigDecimal violationMoney;
private BigDecimal violationMoney;
/**
* 延期总
* 退还订单金
*/
@Column(name = "postpone")
private BigDecimal postpone;
@Column(name = "return_gmv")
private BigDecimal returnGmv;
/**
* 取消订单扣款总额
* 违约总额
*/
@Column(name = "penal_sum")
private BigDecimal penalSum;
@Column(name = "default_money ")
private BigDecimal defaultMoney ;
/**
* 消费金总额
*/
@Column(name = "total_expenditure")
private BigDecimal totalExpenditure;
}
......@@ -12,48 +12,58 @@ import java.math.BigDecimal;
*/
@Data
@ApiModel(value = "订单统计实体")
@ApiModel(value = "历史订单统计实体")
public class OrderStatistics {
/**
* 月成交总金额
* 历史交总金额
*/
@ApiModelProperty(value = "月成交总金额")
@ApiModelProperty(value = "历史交总金额")
private BigDecimal totalGmv;
/**
* 押金总额
* 历史押金总额
*/
@ApiModelProperty(value = "押金总额")
@ApiModelProperty(value = "历史押金总额")
private BigDecimal totalSecurityDeposit;
/**
* 退还押金总额
* 历史退还押金总额
*/
@ApiModelProperty(value = "退还押金总额")
@ApiModelProperty(value = "历史退还押金总额")
private BigDecimal totalRefundSecurityDeposit;
/**
* 赔偿总额
* 历史赔偿总额
*/
@ApiModelProperty(value = "赔偿总额")
@ApiModelProperty(value = "历史赔偿总额")
private BigDecimal totalCompensation;
/**
* 违章总额
* 历史违章总额
*/
@ApiModelProperty(value = "违章总额")
@ApiModelProperty(value = "历史违章总额")
private BigDecimal totalForfeit;
/**
* 历史订单退款
*/
@ApiModelProperty(value = "历史订单退款")
private BigDecimal totalReturnGmv;
/**
* 月取消订单扣款总额
* 历史延期扣款总额
*/
@ApiModelProperty(value = "月取消订单扣款总额")
private BigDecimal totalPenalSum;
@ApiModelProperty(value = "历史延期扣款总额")
private BigDecimal totalDefaultMoney;
/**
* 月延期扣款总额
* 历史实际消费总额
*/
@ApiModelProperty(value = "月延期扣款总额")
private BigDecimal totalPostpone;
@ApiModelProperty(value = "实际消费总额")
private BigDecimal totalExpenditure;
}
package com.xxfc.platform.order.pojo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class HomePageOrderData {
/**
* 订单总额
*/
private BigDecimal totalOrders;
/**
* 为退还押金总额
*/
private BigDecimal totalOutstandingDeposit;
/**
* 额外赔款
*/
private BigDecimal additionalIndemnity;
}
package com.xxfc.platform.order.pojo.account;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xxfc.platform.order.entity.OrderAccount;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.Column;
@Data
public class OrderAccountDTO extends OrderAccount {
@Column(name = "companyId")
private Integer companyId;
@Column(name = "oneDay")
private String oneDay;
}
package com.xxfc.platform.order.biz;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.google.common.collect.Lists;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.DailyMembersOrderStatistics;
import com.xxfc.platform.order.entity.OrderAccount;
import com.xxfc.platform.order.entity.OrderStatistics;
import com.xxfc.platform.order.mapper.DailyMembersOrderStatisticsMapper;
import com.xxfc.platform.order.pojo.account.OrderAccountDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -33,31 +42,31 @@ public class DailyMembersOrderStatisticsBiz extends BaseBiz<DailyMembersOrderSta
@Value("${order.day}")
private Integer day;
/**
* 总公司id默认为1
*/
private final Integer OMPANY_ID=1;
@Autowired
private OrderAccountBiz accountBiz;
@Transactional(rollbackFor = Exception.class)
public boolean memberOrderStatistics() {
public boolean saveDailyMembersOrderRecord() {
try {
List<OrderAccountDTO> accountList = accountBiz.getOrderAccountByOrderType(OrderTypeEnum.MEMBER.getCode(), day);
Map<String, Object> travelGmv = mapper.getTravelGmv(day);
if (travelGmv.isEmpty()) {
return true;
}
DailyMembersOrderStatistics MembersStatistics = new DailyMembersOrderStatistics();
BeanUtils.copyProperties(MembersStatistics, travelGmv);
String oneDay = MembersStatistics.getOneDay();
if (StringUtils.isBlank(oneDay)) {
throw new BaseException();
if (CollectionUtils.isNotEmpty(accountList)) {
DailyMembersOrderStatistics orderStatistics = new DailyMembersOrderStatistics();
ArrayList<OrderAccountDetail> orderAccountDetails = getOrderAccountDetail(accountList);
if (CollectionUtils.isNotEmpty(orderAccountDetails)) {
//获取订单总额
BigDecimal gmv = getOrderAmountTotal(orderAccountDetails);
orderStatistics.setGmv(gmv);
orderStatistics.setBranchCompanyId(OMPANY_ID);
orderStatistics.setOneDay(accountList.get(0).getOneDay());
}
insertSelectiveRe(orderStatistics);
}
Example exa = new Example(DailyMembersOrderStatistics.class);
exa.createCriteria().andEqualTo("oneDay", oneDay);
List<DailyMembersOrderStatistics> statistics = selectByExample(exa);
if (CollectionUtils.isEmpty(statistics)) {
insertSelective(MembersStatistics);
}
return true;
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
......@@ -66,6 +75,37 @@ public class DailyMembersOrderStatisticsBiz extends BaseBiz<DailyMembersOrderSta
}
}
/**
* 获取押金和
*
* @param orderAccountDetails
* @return
*/
private BigDecimal getOrderAmountTotal(ArrayList<OrderAccountDetail> orderAccountDetails) {
return orderAccountDetails.stream()
.map(OrderAccountDetail::getOrderAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
/**
* 获取所有订单详情数据
*
* @param orderAccountDTOS
* @return
*/
private ArrayList<OrderAccountDetail> getOrderAccountDetail(List<OrderAccountDTO> orderAccountDTOS) {
ArrayList<OrderAccountDetail> arrayList = Lists.newArrayList();
orderAccountDTOS.parallelStream()
.map(OrderAccount::getAccountDetail)
.forEach(detail -> {
if (StringUtils.isNotBlank(detail)) {
arrayList.add(JSONUtil.toBean(detail, OrderAccountDetail.class));
}
});
return arrayList;
}
@Override
public int insertSelectiveRe(DailyMembersOrderStatistics entity) {
Date date = new Date();
......
......@@ -27,9 +27,9 @@ public class DailyOrderStatisticsBiz extends BaseBiz<DailyOrderStatisticsMapper,
@Scheduled(cron = "0 0 2 * * ?")
public boolean statisticalOrder(){
boolean vehicleFlag = vehicleStatisticsBiz.StatisticsOfCarRentalOrders();
boolean travelFlag = travelStatisticsBiz.StatisticsOfTravelOrders();
boolean membersFlag= membersStatisticsBiz.memberOrderStatistics();
boolean vehicleFlag = vehicleStatisticsBiz.saveDailyVehicleOrderRecord();
boolean travelFlag = travelStatisticsBiz.saveDailyTravelOrderRecord();
boolean membersFlag= membersStatisticsBiz.saveDailyMembersOrderRecord();
if (vehicleFlag&&travelFlag&&membersFlag){
log.info("----statisticalOrder:成功-----");
return true;
......
......@@ -2,20 +2,33 @@ package com.xxfc.platform.order.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.contant.enumerate.RefundTypeEnum;
import com.xxfc.platform.order.entity.DailyTravelOrderStatistics;
import com.xxfc.platform.order.entity.OrderAccount;
import com.xxfc.platform.order.entity.OrderStatistics;
import com.xxfc.platform.order.mapper.DailyTravelOrderStatisticsMapper;
import com.xxfc.platform.order.pojo.account.OrderAccountDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
......@@ -30,64 +43,258 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
@Value("${order.day}")
private Integer day;
@Transactional(rollbackFor = Exception.class)
public boolean StatisticsOfTravelOrders() {
try {
ArrayList<DailyTravelOrderStatistics> objects = new ArrayList<>();
List<DailyTravelOrderStatistics> travelGmv = mapper.getTravelGmv(day);
objects.addAll(travelGmv);
List<DailyTravelOrderStatistics> travelPenalSum = mapper.getTravelPenalSum(day);
objects.addAll(travelPenalSum);
insertByList(objects);
@Autowired
private OrderAccountBiz accountBiz;
// @Transactional(rollbackFor = Exception.class)
// public boolean StatisticsOfTravelOrders() {
// try {
//
// ArrayList<DailyTravelOrderStatistics> objects = new ArrayList<>();
// List<DailyTravelOrderStatistics> travelGmv = mapper.getTravelGmv(day);
// objects.addAll(travelGmv);
// List<DailyTravelOrderStatistics> travelPenalSum = mapper.getTravelPenalSum(day);
// objects.addAll(travelPenalSum);
// insertByList(objects);
//
// return true;
// } catch (Exception e) {
// e.printStackTrace();
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// return false;
// }
// }
//
// private void insertByList(ArrayList<DailyTravelOrderStatistics> objects) throws Exception {
//
// if (CollectionUtils.isNotEmpty(objects)) {
// HashMap<Integer, DailyTravelOrderStatistics> map = new HashMap<>();
// for (DailyTravelOrderStatistics object : objects) {
//
// DailyTravelOrderStatistics statistics = map.get(object.getBranchCompanyId());
// if (statistics == null) {
// statistics = new DailyTravelOrderStatistics();
// map.put(object.getBranchCompanyId(), statistics);
// }
//
// BeanUtil.copyProperties(object, statistics, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
//
// }
// String oneDay = map.entrySet().parallelStream().map(Map.Entry::getValue).collect(Collectors.toList()).get(0).getOneDay();
//
// if (StringUtils.isBlank(oneDay)) {
// throw new BaseException();
// }
// Example exa= new Example(DailyTravelOrderStatistics.class);
// exa.createCriteria().andEqualTo("oneDay",oneDay);
// List<DailyTravelOrderStatistics> statistics= selectByExample(exa);
// if (CollectionUtils.isEmpty(statistics)){
// for (Map.Entry<Integer, DailyTravelOrderStatistics> entry : map.entrySet()) {
// insertSelectiveRe(entry.getValue());
// }
// }else {
// log.error("今日已统计车辆订单,请不要重复统计!");
// }
//
////
//// for (Map.Entry<Integer, DailyTravelOrderStatistics> e : map.entrySet()) {
//// insertSelectiveRe(e.getValue());
//// }
// }
// }
/******************************************************************************************************************************/
/**
* 统计订单并保存到数据库当中
* @return
*/
@Transactional(rollbackFor = Exception.class)
public boolean saveDailyTravelOrderRecord() {
try {
//获取每日订单统计
List<DailyTravelOrderStatistics> orderStatistics = getDailyTravelOrderStatistics();
if (CollectionUtils.isNotEmpty(orderStatistics)) {
for (DailyTravelOrderStatistics orderStatistic : orderStatistics) {
//保存统计
insertSelectiveRe(orderStatistic);
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
log.error(e.getMessage());
return false;
}
}
private void insertByList(ArrayList<DailyTravelOrderStatistics> objects) throws Exception {
private List<DailyTravelOrderStatistics> getDailyTravelOrderStatistics() {
//获取当天所有订单账目
List<OrderAccountDTO> accountList = accountBiz.getOrderAccountByOrderType(OrderTypeEnum.TOUR.getCode(), day);
if (CollectionUtils.isEmpty(accountList)) {
return null;
}
//获取每个分公司,当天所有的订单帐目
HashMap<Integer, List<OrderAccountDTO>> companyIdmap = new HashMap<>();
for (OrderAccountDTO orderAccountDTO : accountList) {
List<OrderAccountDTO> list = companyIdmap.get(orderAccountDTO.getCompanyId());
if (list == null) {
list = new ArrayList<>();
companyIdmap.put(orderAccountDTO.getCompanyId(), list);
}
list.add(orderAccountDTO);
}
if (CollectionUtils.isNotEmpty(objects)) {
HashMap<Integer, DailyTravelOrderStatistics> map = new HashMap<>();
for (DailyTravelOrderStatistics object : objects) {
//获取每个公司当天订单的总数据
ArrayList<DailyTravelOrderStatistics> statistics = new ArrayList<>();
for (Map.Entry<Integer, List<OrderAccountDTO>> integerListEntry : companyIdmap.entrySet()) {
//获取不同类型的账单详情
List<OrderAccountDTO> orderAccountDTOS = integerListEntry.getValue();
if (CollectionUtils.isNotEmpty(orderAccountDTOS)) {
Map<Integer, List<OrderAccountDTO>> typeMap = Maps.newHashMap();
for (OrderAccountDTO orderAccountDTO : orderAccountDTOS) {
List<OrderAccountDTO> list = typeMap.get(orderAccountDTO.getAccountType());
if (list == null) {
list = new ArrayList<>();
companyIdmap.put(orderAccountDTO.getAccountType(), list);
}
list.add(orderAccountDTO);
}
DailyTravelOrderStatistics statistics = map.get(object.getBranchCompanyId());
if (statistics == null) {
statistics = new DailyTravelOrderStatistics();
map.put(object.getBranchCompanyId(), statistics);
if (MapUtils.isNotEmpty(typeMap)) {
//获取该公司当天的账单数据
if (CollectionUtils.isNotEmpty(orderAccountDTOS)) {
DailyTravelOrderStatistics dvos = getStatisticsByOrderAccountDetail(typeMap);
if (dvos != null) {
statistics.add(dvos);
dvos.setBranchCompanyId(integerListEntry.getKey());
dvos.setOneDay(orderAccountDTOS.get(0).getOneDay());
}
}
}
}
}
return statistics;
}
BeanUtil.copyProperties(object, statistics, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
private DailyTravelOrderStatistics getStatisticsByOrderAccountDetail(Map<Integer, List<OrderAccountDTO>> map) {
//获取收入金额
DailyTravelOrderStatistics orderStatistics = getGmvAndSecurityDeposit(map);
//获取扣款和退还金额
refundAndDeductions(map, orderStatistics);
return orderStatistics;
}
/**
* 获取扣款和退款金额
*
* @param map
* @param orderStatistics
*/
private void refundAndDeductions(Map<Integer, List<OrderAccountDTO>> map, DailyTravelOrderStatistics orderStatistics) {
ArrayList<OrderAccountDTO> arrayList = Lists.newArrayList();
for (Integer key : map.keySet()) {
if (!key.equals(RefundTypeEnum.ORDER_FUND.getCode())) {
arrayList.addAll(map.get(key));
}
String oneDay = map.entrySet().parallelStream().map(Map.Entry::getValue).collect(Collectors.toList()).get(0).getOneDay();
}
if (CollectionUtils.isNotEmpty(arrayList)) {
ArrayList<OrderAccountDetail> orderAccountDetail = getOrderAccountDetail(arrayList);
if (CollectionUtils.isNotEmpty(orderAccountDetail)) {
List<OrderAccountDeduction> OrderAccountDeductions = gettDeductions(orderAccountDetail);
//获取违约总额
BigDecimal bigDecimal = get(OrderAccountDeductions, new ArrayList<Integer>() {{
add(DeductionTypeEnum.VIOLATE_CANCEL.getCode());
}});
orderStatistics.setDefaultMoney(bigDecimal);
//订单退还总额
orderStatistics.setReturnGmv(orderStatistics.getGmv().subtract(bigDecimal));
if (StringUtils.isBlank(oneDay)) {
throw new BaseException();
}
Example exa= new Example(DailyTravelOrderStatistics.class);
exa.createCriteria().andEqualTo("oneDay",oneDay);
List<DailyTravelOrderStatistics> statistics= selectByExample(exa);
if (CollectionUtils.isEmpty(statistics)){
for (Map.Entry<Integer, DailyTravelOrderStatistics> entry : map.entrySet()) {
insertSelectiveRe(entry.getValue());
}
}else {
log.error("今日已统计车辆订单,请不要重复统计!");
}
}
private DailyTravelOrderStatistics getGmvAndSecurityDeposit(Map<Integer, List<OrderAccountDTO>> map) {
DailyTravelOrderStatistics orderStatistics = new DailyTravelOrderStatistics();
List<OrderAccountDTO> orderAccountDTOS = map.get(RefundTypeEnum.ORDER_FUND.getCode());
if (CollectionUtils.isNotEmpty(orderAccountDTOS)) {
ArrayList<OrderAccountDetail> orderAccountDetails = getOrderAccountDetail(orderAccountDTOS);
if (CollectionUtils.isNotEmpty(orderAccountDetails)) {
//获取订单总额
BigDecimal gmv = getOrderAmountTotal(orderAccountDetails);
orderStatistics.setGmv(gmv);
}
}
return orderStatistics;
}
//
// for (Map.Entry<Integer, DailyTravelOrderStatistics> e : map.entrySet()) {
// insertSelectiveRe(e.getValue());
// }
/**
* 获取金额详情
*
* @param orderAccountDTOS
* @return
*/
private ArrayList<OrderAccountDetail> getOrderAccountDetail(List<OrderAccountDTO> orderAccountDTOS) {
ArrayList<OrderAccountDetail> arrayList = Lists.newArrayList();
orderAccountDTOS.parallelStream()
.map(OrderAccount::getAccountDetail)
.forEach(detail -> {
if (StringUtils.isNotBlank(detail)) {
arrayList.add(JSONUtil.toBean(detail, OrderAccountDetail.class));
}
});
return arrayList;
}
/**
* 获取订单和
*
* @param orderAccountDetails
* @return
*/
private BigDecimal getOrderAmountTotal(ArrayList<OrderAccountDetail> orderAccountDetails) {
return orderAccountDetails.stream()
.map(OrderAccountDetail::getOrderAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
/**
* 获取赔款数据
*
* @param orderAccountDetails
* @return
*/
private List<OrderAccountDeduction> gettDeductions(ArrayList<OrderAccountDetail> orderAccountDetails) {
ArrayList<OrderAccountDeduction> arrayList = Lists.newArrayList();
for (OrderAccountDetail orderAccountDetail : orderAccountDetails) {
arrayList.addAll(orderAccountDetail.getDeductions());
}
return arrayList;
}
/**
* 根据type获取对应的金额总和
*
* @param OrderAccountDeduction
* @param type 金额类型
* @return
*/
private BigDecimal get(List<OrderAccountDeduction> OrderAccountDeduction, List<Integer> type) {
return OrderAccountDeduction.parallelStream()
.filter(el -> el.getType().equals(type))
.map(com.xxfc.platform.order.pojo.account.OrderAccountDeduction::getAmount)
.reduce(BigDecimal.ZERO,BigDecimal::add);
}
@Override
public int insertSelectiveRe(DailyTravelOrderStatistics entity) {
entity.setCrtTime(new Date());
......
......@@ -2,29 +2,35 @@ package com.xxfc.platform.order.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.db.sql.Order;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.xxfc.platform.order.entity.DailyOrderStatistics;
import com.github.wxiaoqi.security.common.util.JsonUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.contant.enumerate.RefundTypeEnum;
import com.xxfc.platform.order.entity.DailyVehicleOrderStatistics;
import com.xxfc.platform.order.entity.OrderAccount;
import com.xxfc.platform.order.entity.OrderStatistics;
import com.xxfc.platform.order.mapper.DailyVehicleOrderStatisticsMapper;
import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import sun.rmi.runtime.Log;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import javax.print.attribute.standard.MediaSize;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 每日租车订单统计
......@@ -34,185 +40,430 @@ import java.util.stream.Collectors;
@Service
@Slf4j
public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderStatisticsMapper, DailyVehicleOrderStatistics> {
/**
* 延期
*/
private final Integer TYPE_DEFERRED = 1;
/**
* 损坏
*/
private final Integer TYPE_DAMAGE = 2;
/**
* 其他
*/
private final Integer TYPE_OTHER = 3;
/**
* 统计几天前的数据
*/
@Value("${order.day}")
private Integer day;
@Transactional(rollbackFor = Exception.class)
public boolean StatisticsOfCarRentalOrders() {
try {
ArrayList<DailyVehicleOrderStatistics> result = new ArrayList<>();
// 获取每日租车订单成交金和押金总额
List<DailyVehicleOrderStatistics> gmvAndMarginTotal = mapper.getGmvAndMarginTotal(day);
result.addAll(gmvAndMarginTotal);
@Autowired
private OrderAccountBiz accountBiz;
// @Transactional(rollbackFor = Exception.class)
// public boolean StatisticsOfCarRentalOrders() {
//
// try {
//
// ArrayList<DailyVehicleOrderStatistics> result = new ArrayList<>();
//
//// 获取每日租车订单成交金和押金总额
// List<DailyVehicleOrderStatistics> gmvAndMarginTotal = mapper.getGmvAndMarginTotal(day);
// result.addAll(gmvAndMarginTotal);
//
//// 获取取消订单扣款总额
// List<DailyVehicleOrderStatistics> penalSum = mapper.getPenalSum(day);
// result.addAll(penalSum);
//
//// 获取订单退还押金总额
// List<DailyVehicleOrderStatistics> refundSecurityDeposit = mapper.getRefundSecurityDeposit(day);
// result.addAll(refundSecurityDeposit);
//
//// 获取违章查询总和
// List<DailyVehicleOrderStatistics> violationMoney = mapper.getViolationMoney(day);
// result.addAll(violationMoney);
//
//// 获取赔偿和延期JSON字符串
// List<Map> compensationAndPostpone = mapper.getCompensationAndPostpone(day);
//// 获取赔偿和延期JSON字符串转换为map
// List<DailyVehicleOrderStatistics> compensationAndPostpones = getCompensationAndPostpones(compensationAndPostpone);
// result.addAll(compensationAndPostpones);
//
// InsertByList(result);
// return true;
// } catch (Exception e) {
// e.printStackTrace();
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// return false;
// }
//
// }
//
// private void InsertByList(ArrayList<DailyVehicleOrderStatistics> result) throws Exception {
// if (CollectionUtils.isNotEmpty(result)) {
//
// Map<Integer, DailyVehicleOrderStatistics> map = new HashMap<>();
//
// for (DailyVehicleOrderStatistics value : result) {
// Integer branchCompanyId = value.getBranchCompanyId();
// DailyVehicleOrderStatistics statistics = map.get(branchCompanyId);
//
// if (statistics == null) {
// statistics = new DailyVehicleOrderStatistics();
// map.put(branchCompanyId, statistics);
// }
// BeanUtil.copyProperties(
// value,
// statistics,
// CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
// }
//
// String oneDay = map.entrySet().parallelStream().map(Map.Entry::getValue).collect(Collectors.toList()).get(0).getOneDay();
// if (StringUtils.isBlank(oneDay)) {
// throw new BaseException();
// }
// Example exa = new Example(DailyVehicleOrderStatistics.class);
// exa.createCriteria().andEqualTo("oneDay", oneDay);
// List<DailyVehicleOrderStatistics> statistics = selectByExample(exa);
//
// if (CollectionUtils.isEmpty(statistics)) {
// for (Map.Entry<Integer, DailyVehicleOrderStatistics> entry : map.entrySet()) {
// insertSelectiveRe(entry.getValue());
// }
// } else {
// log.error("今日已统计车辆订单,请不要重复统计!");
// }
// }
//
// }
//
//
// /**
// * 获取赔偿总额和延期总额
// */
// private List<DailyVehicleOrderStatistics> getCompensationAndPostpones(List<Map> list) {
//
// if (CollectionUtils.isNotEmpty(list)) {
// //获取分公全部赔偿和延期DedDetailDTO
// HashMap<Integer, List<DedDetailDTO>> map = new HashMap<>();
//
// for (Map value : list) {
// if (value != null) {
//
// //获取分公司id
// Integer branchCompanyId = (Integer) value.get("branchCompanyId");
// List<DedDetailDTO> strings = map.get(branchCompanyId);
// if (strings == null) {
// strings = new ArrayList<DedDetailDTO>();
// map.put(branchCompanyId, strings);
// }
//
// String str = (String) value.get("dedDetail");
//
// if (StringUtils.isNotBlank(str)) {
// List<DedDetailDTO> dedDetailDTOS = JSON.parseArray(str, DedDetailDTO.class);
// if (CollectionUtils.isNotEmpty(dedDetailDTOS)) {
// strings.addAll(dedDetailDTOS);
// }
// }
// }
//
// }
//
//
// List<DailyVehicleOrderStatistics> result = new ArrayList<>();
//
// if (!map.isEmpty()) {
//
// //获取分工对象集合
// for (Map.Entry<Integer, List<DedDetailDTO>> entry : map.entrySet()) {
// DailyVehicleOrderStatistics statistics = new DailyVehicleOrderStatistics();
// //公司id添加到对象当中
// statistics.setBranchCompanyId(entry.getKey());
//
// //获取公司的JSON字符串
// List<DedDetailDTO> sumDedDetailDTOs = entry.getValue();
//
//// 获取赔偿金额总和
// BigDecimal compensation = get(sumDedDetailDTOs, TYPE_DAMAGE);
// statistics.setCompensation(compensation);
//// 获取延期金额总和
// BigDecimal postpone = get(sumDedDetailDTOs, TYPE_DEFERRED);
// statistics.setPostpone(postpone);
////// 其他款项总金额
//// BigDecimal other = get(sumDedDetailDTOs, TYPE_OTHER);
//
// result.add(statistics);
// }
//
// }
//
//
// return result;
// }
// return new ArrayList<>();
// }
/****************************************************************************************************************************/
// 获取取消订单扣款总额
List<DailyVehicleOrderStatistics> penalSum = mapper.getPenalSum(day);
result.addAll(penalSum);
// 获取订单退还押金总额
List<DailyVehicleOrderStatistics> refundSecurityDeposit = mapper.getRefundSecurityDeposit(day);
result.addAll(refundSecurityDeposit);
// 获取违章查询总和
List<DailyVehicleOrderStatistics> violationMoney = mapper.getViolationMoney(day);
result.addAll(violationMoney);
// 获取赔偿和延期JSON字符串
List<Map> compensationAndPostpone = mapper.getCompensationAndPostpone(day);
// 获取赔偿和延期JSON字符串转换为map
List<DailyVehicleOrderStatistics> compensationAndPostpones = getCompensationAndPostpones(compensationAndPostpone);
result.addAll(compensationAndPostpones);
/**
* 根据type获取对应的金额总和
*
* @param OrderAccountDeduction
* @param types 金额类型
* @return
*/
private BigDecimal get(List<OrderAccountDeduction> OrderAccountDeduction, List<Integer> types) {
return OrderAccountDeduction.parallelStream()
.filter(el -> types.contains(el))
.map(com.xxfc.platform.order.pojo.account.OrderAccountDeduction::getAmount)
.reduce(BigDecimal.ZERO,BigDecimal::add);
InsertByList(result);
return true;
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
}
/***
* 添加每日记录
* @param entity
* @return
*/
@Override
public int insertSelectiveRe(DailyVehicleOrderStatistics entity) {
entity.setCrtTime(new Date());
return mapper.insertSelective(entity);
}
private void InsertByList(ArrayList<DailyVehicleOrderStatistics> result) throws Exception {
if (CollectionUtils.isNotEmpty(result)) {
Map<Integer, DailyVehicleOrderStatistics> map = new HashMap<>();
public OrderStatistics findAll(Integer companyId) {
return mapper.monthOrderTotal(companyId);
}
for (DailyVehicleOrderStatistics value : result) {
Integer branchCompanyId = value.getBranchCompanyId();
DailyVehicleOrderStatistics statistics = map.get(branchCompanyId);
/**
* 统计订单并保存到数据库当中
* @return
*/
@Transactional(rollbackFor = Exception.class)
public boolean saveDailyVehicleOrderRecord() {
if (statistics == null) {
statistics = new DailyVehicleOrderStatistics();
map.put(branchCompanyId, statistics);
try {
//获取每日订单统计
List<DailyVehicleOrderStatistics> orderStatistics = getDailyVehicleOrderRecord();
if (CollectionUtils.isNotEmpty(orderStatistics)) {
for (DailyVehicleOrderStatistics orderStatistic : orderStatistics) {
//保存统计
insertSelectiveRe(orderStatistic);
}
BeanUtil.copyProperties(
value,
statistics,
CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
}
String oneDay = map.entrySet().parallelStream().map(Map.Entry::getValue).collect(Collectors.toList()).get(0).getOneDay();
if (StringUtils.isBlank(oneDay)) {
throw new BaseException();
}
Example exa= new Example(DailyVehicleOrderStatistics.class);
exa.createCriteria().andEqualTo("oneDay",oneDay);
List<DailyVehicleOrderStatistics> statistics= selectByExample(exa);
if (CollectionUtils.isEmpty(statistics)){
for (Map.Entry<Integer, DailyVehicleOrderStatistics> entry : map.entrySet()) {
insertSelectiveRe(entry.getValue());
}
}else {
log.error("今日已统计车辆订单,请不要重复统计!");
}
return true;
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
}
/**
* 获取赔偿总额和延期总额
* 获取所有分公司每日统计记录
* @return
*/
private List<DailyVehicleOrderStatistics> getCompensationAndPostpones(List<Map> list) {
private List<DailyVehicleOrderStatistics> getDailyVehicleOrderRecord() {
//获取当天所有订单账目
List<OrderAccountDTO> accountList = accountBiz.getOrderAccountByOrderType(OrderTypeEnum.RENT_VEHICLE.getCode(), day);
if (CollectionUtils.isEmpty(accountList)) {
return null;
}
//获取每个分公司当天所有的订单帐目
HashMap<Integer, List<OrderAccountDTO>> companyIdmap = new HashMap<>();
for (OrderAccountDTO orderAccountDTO : accountList) {
List<OrderAccountDTO> list = companyIdmap.get(orderAccountDTO.getCompanyId());
if (list == null) {
list = new ArrayList<>();
companyIdmap.put(orderAccountDTO.getCompanyId(), list);
}
list.add(orderAccountDTO);
}
if (CollectionUtils.isNotEmpty(list)) {
//获取分公全部赔偿和延期DedDetailDTO
HashMap<Integer, List<DedDetailDTO>> map = new HashMap<>();
//获取每个公司当天订单的总数据
ArrayList<DailyVehicleOrderStatistics> statistics = new ArrayList<>();
for (Map.Entry<Integer, List<OrderAccountDTO>> integerListEntry : companyIdmap.entrySet()) {
//获取不同类型的账单详情
List<OrderAccountDTO> orderAccountDTOS = integerListEntry.getValue();
if (CollectionUtils.isNotEmpty(orderAccountDTOS)) {
Map<Integer, List<OrderAccountDTO>> typeMap = Maps.newHashMap();
for (OrderAccountDTO orderAccountDTO : orderAccountDTOS) {
for (Map value : list) {
if (value != null) {
List<OrderAccountDTO> list = typeMap.get(orderAccountDTO.getAccountType());
if (list == null) {
list = new ArrayList<>();
companyIdmap.put(orderAccountDTO.getAccountType(), list);
//获取分公司id
Integer branchCompanyId = (Integer) value.get("branchCompanyId");
List<DedDetailDTO> strings = map.get(branchCompanyId);
if (strings == null) {
strings = new ArrayList<DedDetailDTO>();
map.put(branchCompanyId, strings);
}
list.add(orderAccountDTO);
}
String str = (String) value.get("dedDetail");
if (StringUtils.isNotBlank(str)) {
List<DedDetailDTO> dedDetailDTOS = JSON.parseArray(str, DedDetailDTO.class);
if (CollectionUtils.isNotEmpty(dedDetailDTOS)) {
strings.addAll(dedDetailDTOS);
if (MapUtils.isNotEmpty(typeMap)) {
//获取该公司当天的账单数据
if (CollectionUtils.isNotEmpty(orderAccountDTOS)) {
DailyVehicleOrderStatistics dvos = getStatisticsByOrderAccountDetail(typeMap);
if (dvos != null) {
statistics.add(dvos);
dvos.setBranchCompanyId(integerListEntry.getKey());
dvos.setOneDay(orderAccountDTOS.get(0).getOneDay());
}
}
}
}
}
return statistics;
}
List<DailyVehicleOrderStatistics> result = new ArrayList<>();
if (!map.isEmpty()) {
//获取分工对象集合
for (Map.Entry<Integer, List<DedDetailDTO>> entry : map.entrySet()) {
DailyVehicleOrderStatistics statistics = new DailyVehicleOrderStatistics();
//公司id添加到对象当中
statistics.setBranchCompanyId(entry.getKey());
/**
* 获取该分公司的统计数据
* @param map
* @return
*/
private DailyVehicleOrderStatistics getStatisticsByOrderAccountDetail(Map<Integer, List<OrderAccountDTO>> map) {
//获取收入金额
DailyVehicleOrderStatistics orderStatistics = getGmvAndSecurityDeposit(map);
//获取扣款和退还金额
refundAndDeductions(map, orderStatistics);
return orderStatistics;
//获取公司的JSON字符串
List<DedDetailDTO> sumDedDetailDTOs = entry.getValue();
}
// 获取赔偿金额总和
BigDecimal compensation = get(sumDedDetailDTOs, TYPE_DAMAGE);
statistics.setCompensation(compensation);
// 获取延期金额总和
BigDecimal postpone = get(sumDedDetailDTOs, TYPE_DEFERRED);
statistics.setPostpone(postpone);
//// 其他款项总金额
// BigDecimal other = get(sumDedDetailDTOs, TYPE_OTHER);
/**
* 获取扣款和退款金额
*
* @param map
* @param orderStatistics
*/
private void refundAndDeductions(Map<Integer, List<OrderAccountDTO>> map, DailyVehicleOrderStatistics orderStatistics) {
ArrayList<OrderAccountDTO> arrayList = Lists.newArrayList();
for (Integer key : map.keySet()) {
if (!key.equals(RefundTypeEnum.ORDER_FUND.getCode())) {
arrayList.addAll(map.get(key));
}
}
if (CollectionUtils.isNotEmpty(arrayList)) {
ArrayList<OrderAccountDetail> orderAccountDetail = getOrderAccountDetail(arrayList);
if (CollectionUtils.isNotEmpty(orderAccountDetail)) {
//获取退还订总额
BigDecimal returnGmv = getOrderAmountTotal(orderAccountDetail);
orderStatistics.setReturnGmv(returnGmv);
//获取退还押金总额
BigDecimal refundSecurityDeposit = getDepositAmountTotal(orderAccountDetail);
orderStatistics.setRefundSecurityDeposit(refundSecurityDeposit);
List<OrderAccountDeduction> OrderAccountDeductions = gettDeductions(orderAccountDetail);
//获取违章总额
orderStatistics.setViolationMoney(get(OrderAccountDeductions, new ArrayList<Integer>(){{
add(DeductionTypeEnum.VIOLATE_TRAFFIC_DEDUCT.getCode());
}}));
//获取损坏赔偿总额
orderStatistics.setCompensation(get(OrderAccountDeductions,new ArrayList<Integer>(){{
add(DeductionTypeEnum.DAMAGES.getCode());
}} ));
//获取违约总额
ArrayList<Integer> types = Lists.newArrayList();
types.add(DeductionTypeEnum.VIOLATE_ADVANCE.getCode());
types.add(DeductionTypeEnum.VIOLATE_CANCEL.getCode());
types.add(DeductionTypeEnum.VIOLATE_DELAY.getCode());
orderStatistics.setDefaultMoney(get(OrderAccountDeductions,types));
//消费金额
orderStatistics.setTotalExpenditure(get(OrderAccountDeductions,new ArrayList<Integer>(){{
add(DeductionTypeEnum.EXTRA.getCode());
}}));
}
}
}
result.add(statistics);
}
/**
* 获取订单总额和预交押金总额
*
* @param map
* @return
*/
private DailyVehicleOrderStatistics getGmvAndSecurityDeposit(Map<Integer, List<OrderAccountDTO>> map) {
DailyVehicleOrderStatistics orderStatistics = new DailyVehicleOrderStatistics();
List<OrderAccountDTO> orderAccountDTOS = map.get(RefundTypeEnum.ORDER_FUND.getCode());
}
if (CollectionUtils.isNotEmpty(orderAccountDTOS)) {
ArrayList<OrderAccountDetail> orderAccountDetails = getOrderAccountDetail(orderAccountDTOS);
if (CollectionUtils.isNotEmpty(orderAccountDetails)) {
//获取订单总额
BigDecimal gmv = getOrderAmountTotal(orderAccountDetails);
orderStatistics.setGmv(gmv);
//获取押金总额
BigDecimal securityDeposit = getDepositAmountTotal(orderAccountDetails);
orderStatistics.setSecurityDeposit(securityDeposit);
return result;
}
}
return new ArrayList<>();
return orderStatistics;
}
/**
* 获取订单和
*
* @param orderAccountDetails
* @return
*/
private BigDecimal getDepositAmountTotal(ArrayList<OrderAccountDetail> orderAccountDetails) {
return orderAccountDetails.stream()
.map(OrderAccountDetail::getDepositAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
/**
* 根据type获取对应的金额总
* 获取押金
*
* @param sumDedDetailDTOs
* @param type 金额类型
* @param orderAccountDetails
* @return
*/
private BigDecimal get(List<DedDetailDTO> sumDedDetailDTOs, Integer type) {
if (CollectionUtils.isNotEmpty(sumDedDetailDTOs)) {
BigDecimal aggregateAmount = sumDedDetailDTOs.stream()
.filter(d -> type.equals(d.getType()))
.map(DedDetailDTO::getCost)
.reduce(BigDecimal.ZERO, BigDecimal::add);
return aggregateAmount;
private BigDecimal getOrderAmountTotal(ArrayList<OrderAccountDetail> orderAccountDetails) {
return orderAccountDetails.stream()
.map(OrderAccountDetail::getOrderAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
/**
* 获取赔款数据
*
* @param orderAccountDetails
* @return
*/
private List<OrderAccountDeduction> gettDeductions(ArrayList<OrderAccountDetail> orderAccountDetails) {
ArrayList<OrderAccountDeduction> arrayList = Lists.newArrayList();
for (OrderAccountDetail orderAccountDetail : orderAccountDetails) {
arrayList.addAll(orderAccountDetail.getDeductions());
}
return BigDecimal.ZERO;
return arrayList;
}
/**
* 获取金额详情
*
* @param orderAccountDTOS
* @return
*/
private ArrayList<OrderAccountDetail> getOrderAccountDetail(List<OrderAccountDTO> orderAccountDTOS) {
ArrayList<OrderAccountDetail> arrayList = Lists.newArrayList();
orderAccountDTOS.parallelStream()
.map(OrderAccount::getAccountDetail)
.forEach(detail -> {
if (StringUtils.isNotBlank(detail)) {
arrayList.add(JSONUtil.toBean(detail, OrderAccountDetail.class));
}
});
@Override
public int insertSelectiveRe(DailyVehicleOrderStatistics entity) {
entity.setCrtTime(new Date());
return mapper.insertSelective(entity);
return arrayList;
}
public OrderStatistics findAll(Integer companyId) {
return mapper.monthOrderTotal(companyId);
}
}
......@@ -13,6 +13,7 @@ import com.xxfc.platform.order.biz.inner.OrderMsgBiz;
import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
......@@ -353,4 +354,24 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
log.error("crosstown.getViolateDetail() crosstown id :"+crosstown.getId() +" 转换失败");
}
}
/**
* 获取每日订单账目,用于统计
* @param code
* @param day
* @return
*/
public List<OrderAccountDTO> getOrderAccountByOrderType(Integer code, Integer day) {
return mapper.getOrderAccountByOrderType(code,day);
}
}
\ No newline at end of file
package com.xxfc.platform.order.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.order.entity.OrderStatistics;
import com.xxfc.platform.order.mapper.OrderStatisticsMapper;
import com.xxfc.platform.order.pojo.HomePageOrderData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -26,37 +28,48 @@ public class OrderStatisticsBiz extends BaseBiz<OrderStatisticsMapper, OrderStat
@Autowired
private DailyMembersOrderStatisticsBiz membersBiz;
public OrderStatistics getTotalOrder(Integer companyId) {
OrderStatistics result = new OrderStatistics();
ArrayList<OrderStatistics> orderStatistics = new ArrayList<>();
public HomePageOrderData getTotalOrder(Integer companyId) {
HomePageOrderData result = new HomePageOrderData();
ArrayList<HomePageOrderData> orderStatistics = new ArrayList<>();
OrderStatistics vehicle = vehicleBiz.findAll(companyId);
if (vehicle != null) {
orderStatistics.add(vehicle);
HomePageOrderData data = new HomePageOrderData() {{
setTotalOrders(vehicle.getTotalGmv().subtract(vehicle.getTotalReturnGmv()));
setAdditionalIndemnity(vehicle.getTotalCompensation()
.add(vehicle.getTotalForfeit())
.add(vehicle.getTotalDefaultMoney())
.add(vehicle.getTotalExpenditure().subtract(vehicle.getTotalGmv().subtract(vehicle.getTotalReturnGmv())))
);
}};
orderStatistics.add(data);
}
OrderStatistics tour = TravelBiz.findAll(companyId);
if (vehicle != null) {
orderStatistics.add(tour);
HomePageOrderData data = new HomePageOrderData() {{
setTotalOrders(tour.getTotalGmv().subtract(tour.getTotalReturnGmv()));
setAdditionalIndemnity(tour.getTotalDefaultMoney());
}};
orderStatistics.add(data);
}
OrderStatistics member = membersBiz.findAll(companyId);
if (vehicle != null) {
orderStatistics.add(member);
}
HomePageOrderData data = new HomePageOrderData() {{
setTotalOrders(member.getTotalGmv().subtract(member.getTotalReturnGmv()));
result.setTotalGmv(orderStatistics.stream().map(OrderStatistics::getTotalGmv).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
}};
orderStatistics.add(data);
}
result.setTotalForfeit(orderStatistics.stream().map(OrderStatistics::getTotalForfeit).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalCompensation(orderStatistics.stream().map(OrderStatistics::getTotalCompensation).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalRefundSecurityDeposit(orderStatistics.stream().map(OrderStatistics::getTotalRefundSecurityDeposit).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalSecurityDeposit(orderStatistics.stream().map(OrderStatistics::getTotalSecurityDeposit).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalOrders(orderStatistics.stream().map(HomePageOrderData::getTotalOrders).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalPenalSum(orderStatistics.stream().map(OrderStatistics::getTotalPenalSum).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalOutstandingDeposit(orderStatistics.stream().map(HomePageOrderData::getTotalOutstandingDeposit).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalPostpone(orderStatistics.stream().map(OrderStatistics::getTotalPostpone).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setAdditionalIndemnity(orderStatistics.stream().map(HomePageOrderData::getAdditionalIndemnity).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
return result;
}
......
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderAccount;
import com.xxfc.platform.order.pojo.account.OrderAccountDTO;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 订单帐目
*
......@@ -11,5 +16,6 @@ import tk.mybatis.mapper.common.Mapper;
* @date 2019-09-09 15:51:16
*/
public interface OrderAccountMapper extends Mapper<OrderAccount> {
List<OrderAccountDTO> getOrderAccountByOrderType(@Param("type") Integer type, @Param("day") Integer day);
}
......@@ -12,6 +12,7 @@ import com.xxfc.platform.order.biz.DailyTravelOrderStatisticsBiz;
import com.xxfc.platform.order.biz.DailyVehicleOrderStatisticsBiz;
import com.xxfc.platform.order.biz.OrderStatisticsBiz;
import com.xxfc.platform.order.entity.OrderStatistics;
import com.xxfc.platform.order.pojo.HomePageOrderData;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -88,15 +89,28 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
if (TYPE_VEHICLE.equals(type)) {
OrderStatistics vehicle = vehicleBiz.findAll(companyId);
return ObjectRestResponse.succ(vehicle);
return ObjectRestResponse.succ(new HomePageOrderData(){{
setTotalOrders(vehicle.getTotalGmv().subtract(vehicle.getTotalReturnGmv()));
setAdditionalIndemnity(vehicle.getTotalCompensation()
.add(vehicle.getTotalForfeit())
.add(vehicle.getTotalDefaultMoney())
.add(vehicle.getTotalExpenditure().subtract(vehicle.getTotalGmv().subtract(vehicle.getTotalReturnGmv())))
);
}});
}
if (TYPE_TOUR.equals(type)) {
OrderStatistics tour = TravelBiz.findAll(companyId);
return ObjectRestResponse.succ(tour);
return ObjectRestResponse.succ(new HomePageOrderData(){{
setTotalOrders(tour.getTotalGmv().subtract(tour.getTotalReturnGmv()));
setAdditionalIndemnity(tour.getTotalDefaultMoney());
}});
}
if (TYPE_MEMBER.equals(type)) {
OrderStatistics member = membersBiz.findAll(companyId);
return ObjectRestResponse.succ(member);
return ObjectRestResponse.succ(new HomePageOrderData(){{
setTotalOrders(member.getTotalGmv().subtract(member.getTotalReturnGmv()));
}});
}
if (TYPE_TOTAL.equals(type)) {
......@@ -110,4 +124,6 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
}
}
}
......@@ -17,24 +17,13 @@
<select id="monthOrderTotal" resultType="com.xxfc.platform.order.entity.OrderStatistics">
SELECT
IFNULL(sum(gmv),0) as totalGmv
IFNULL( sum( gmv ), 0 ) AS totalGmv
FROM
(
SELECT
ANY_VALUE(id) AS id ,
ANY_VALUE(branch_company_id) AS branch_company_id,
ANY_VALUE(one_day) AS one_day,
ANY_VALUE(gmv) AS gmv,
ANY_VALUE(crt_time) AS crt_time
FROM
daily_members_order_statistics
GROUP BY
one_day,branch_company_id
) m
daily_vehicle_order_statistics
WHERE
1=1
<if test="companyId != null">
and branch_company_id =#{companyId}
and branch_company_id = #{companyId}
</if>
</select>
......
......@@ -51,26 +51,15 @@
<select id="monthOrderTotal" resultType="com.xxfc.platform.order.entity.OrderStatistics">
SELECT
IFNULL(sum(gmv),0) as totalGmv,
IFNULL(sum(penal_sum) ,0) as totalPenalSum
IFNULL( sum( gmv ), 0 ) AS totalGmv,
IFNULL( sum( default_money ), 0 ) AS totalDefaultMoney,
IFNULL( sum( return_gmv ), 0 ) AS totalReturnGmv
FROM
(
SELECT
ANY_VALUE(id) AS id,
ANY_VALUE(branch_company_id) AS branch_company_id,
ANY_VALUE(one_day) AS one_day,
ANY_VALUE(gmv) AS gmv,
ANY_VALUE(penal_sum) AS penal_sum,
ANY_VALUE(crt_time) AS crt_time
FROM
daily_travel_order_statistics
GROUP BY
one_day,branch_company_id
) o
daily_vehicle_order_statistics
WHERE
1=1
<if test="companyId != null">
and branch_company_id =#{companyId}
and branch_company_id = #{companyId}
</if>
</select>
......
......@@ -79,33 +79,19 @@
v.start_company_id
</select>
<!-- 获取赔偿和延期JSON字符串-->
<!-- -->
<select id="monthOrderTotal" resultType="com.xxfc.platform.order.entity.OrderStatistics">
SELECT
IFNULL(sum(gmv),0) as totalGmv,
(IFNULL(sum(security_deposit),0)-IFNULL(sum(refund_security_deposit) ,0)) as totalSecurityDeposit,
IFNULL(sum(refund_security_deposit) ,0) as totalRefundSecurityDeposit,
IFNULL(sum(compensation) ,0) as totalCompensation,
IFNULL(sum(forfeit) ,0) as totalForfeit,
IFNULL(sum(penal_sum) ,0) as totalPenalSum,
IFNULL(sum(postpone) ,0) as totalPostpone
FROM
(
SELECT
ANY_VALUE(id) as id,
one_day,
branch_company_id,
ANY_VALUE(gmv) AS gmv,
ANY_VALUE(security_deposit) AS security_deposit,
ANY_VALUE(refund_security_deposit) AS refund_security_deposit,
ANY_VALUE(forfeit) AS forfeit,ANY_VALUE(penal_sum) AS penal_sum,
ANY_VALUE(postpone) AS postpone,ANY_VALUE(crt_time) AS crt_time,
ANY_VALUE(compensation) AS compensation
IFNULL( sum( gmv ), 0 ) AS totalGmv,
IFNULL( sum( security_deposit ), 0 ) AS totalSecurityDeposit,
IFNULL( sum( refund_security_deposit ), 0 ) AS totalRefundSecurityDeposit,
IFNULL( sum( forfeit ), 0 ) AS totalForfeit,
IFNULL( sum( compensation ), 0 ) AS totalCompensation,
IFNULL( sum( return_gmv ), 0 ) AS totalReturnGmv,
IFNULL( sum( default_money ), 0 ) AS totalDefaultMoney,
IFNULL( sum( total_expenditure ), 0 ) AS totalExpenditure
FROM
daily_vehicle_order_statistics
GROUP BY
one_day,branch_company_id
) a
WHERE
1=1
<if test="companyId != null">
......
<?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.xxfc.platform.order.mapper.OrderAccountMapper">
<select id="getOrderAccountByOrderType" resultType="com.xxfc.platform.order.pojo.account.OrderAccountDTO">
SELECT
date(DATE_SUB(now(),interval #{day} day)) as oneDay,
a.*
<if test="type != null and type == 1">
, v.start_company_id as companyId
</if>
<if test="type != null and type == 2">
, t.start_company_id as companyId
</if>
FROM
order_account a
LEFT JOIN base_order b ON a.order_id = b.id
<if test="type != null and type==1">
LEFT JOIN order_rent_vehicle_detail v ON b.id = v.order_id
</if>
<if test="type != null and type==2">
LEFT JOIN order_tour_detail t ON b.id = t.order_id
</if>
WHERE
a.account_status=1
AND
b.type = #{type}
AND date( FROM_UNIXTIME( a.crt_time / 1000 ) ) = date( DATE_SUB( now( ), INTERVAL #{day} DAY ) )
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment