Commit eefddff0 by 吕明尚

增加数据统计

parent 8761e6e5
......@@ -17,8 +17,10 @@ import share.system.domain.vo.SOrderVo;
import share.system.request.CreateOrderRequest;
import share.system.request.OrderComputedPriceRequest;
import share.system.request.OrderRefundRequest;
import share.system.request.OrderStatisticsRequest;
import share.system.response.ComputedOrderPriceResponse;
import share.system.response.OrderPayResultResponse;
import share.system.response.OrderStatisticsResponse;
import share.system.service.ISOrderService;
import javax.validation.constraints.NotBlank;
......@@ -140,9 +142,9 @@ public class SOrderController extends BaseController
return R.ok(sOrderService.autoRefund(request));
}
@GetMapping("/statistics")
public R<Object> statistics() {
return R.ok(sOrderService.statistics());
@PostMapping("/statistics")
public R<OrderStatisticsResponse> statistics(@RequestBody OrderStatisticsRequest request) {
return R.ok(sOrderService.statistics(request));
}
}
......@@ -77,4 +77,6 @@ public interface SConsumerCouponMapper extends BaseMapper<SConsumerCoupon>
List<SConsumerCoupon> selectOrderList();
SConsumerCoupon sumPayPrice(@Param("couponIds") List<Long> ids);
List<SConsumerCoupon> selectByIds(@Param("couponIds") List<Long> ids);
}
package share.system.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class OrderStatisticsRequest {
//门店id
private Long storeId;
//开始时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
//结束时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
}
package share.system.response;
import lombok.Data;
import share.system.domain.SOrder;
import java.math.BigDecimal;
import java.util.List;
@Data
public class OrderStatisticsResponse {
//累计流水
private BigDecimal totalFee = BigDecimal.ZERO;
//实际收入
private BigDecimal actualFee = BigDecimal.ZERO;
//门店交易
private BigDecimal storeFee = BigDecimal.ZERO;
//门店交易退款
private BigDecimal storeRefundFee = BigDecimal.ZERO;
//团购金额
private BigDecimal groupFee = BigDecimal.ZERO;
//团购退款
private BigDecimal groupRefundFee = BigDecimal.ZERO;
//平台支付
private BigDecimal platformFee = BigDecimal.ZERO;
//平台退款
private BigDecimal platformRefundFee = BigDecimal.ZERO;
//用户充值
private BigDecimal rechargeFee = BigDecimal.ZERO;
//用户充值退款
private BigDecimal rechargeRefundFee = BigDecimal.ZERO;
//充值余额支付
private BigDecimal rechargeBalance = BigDecimal.ZERO;
//充值余额退款
private BigDecimal rechargeBalanceRefundFee = BigDecimal.ZERO;
//其他消费
private BigDecimal otherFee = BigDecimal.ZERO;
//其他退款
private BigDecimal otherRefundFee = BigDecimal.ZERO;
//美团团购金额
private BigDecimal meituanFee = BigDecimal.ZERO;
//美团团购退款
private BigDecimal meituanRefundFee = BigDecimal.ZERO;
//抖音团购金额
private BigDecimal douyinFee = BigDecimal.ZERO;
//抖音团购退款
private BigDecimal douyinRefundFee = BigDecimal.ZERO;
//积分消费
private BigDecimal integralFee = BigDecimal.ZERO;
//积分退款
private BigDecimal integralRefundFee = BigDecimal.ZERO;
//订单集合
private List<SOrder> orderList;
}
......@@ -95,4 +95,6 @@ public interface ISConsumerCouponService extends IService<SConsumerCoupon>
List<SConsumerCoupon> selectOrderList();
SConsumerCoupon sumPayPrice(List<Long> ids);
List<SConsumerCoupon> selectByIds(List<Long> ids);
}
......@@ -8,12 +8,10 @@ import share.system.domain.SOrder;
import share.system.domain.vo.SOrderDto;
import share.system.domain.vo.SOrderVo;
import share.system.domain.vo.SRoomVo;
import share.system.request.AdminRefundRequest;
import share.system.request.CreateOrderRequest;
import share.system.request.OrderComputedPriceRequest;
import share.system.request.OrderRefundRequest;
import share.system.request.*;
import share.system.response.ComputedOrderPriceResponse;
import share.system.response.OrderPayResultResponse;
import share.system.response.OrderStatisticsResponse;
import java.util.Date;
import java.util.List;
......@@ -216,7 +214,7 @@ public interface ISOrderService extends IService<SOrder>
List<SOrder> selectSOrderByStoreIdAndMaxTime(SOrder orderQuery);
Object statistics();
OrderStatisticsResponse statistics(OrderStatisticsRequest request);
List<Long> couponIds(SOrder sOrder);
......
......@@ -157,6 +157,20 @@ public class OrderRefundServiceImpl extends ServiceImpl<SOrderMapper, SOrder> im
}
}
// private boolean rechargeRefundSaobei(OrderRefundRequest request, Recharge recharge){
// WechatPayInfo wechatPayInfo = wechatPayInfoService.getByNo(recharge.getTerminalTrace());
// if (ObjectUtil.isNull(wechatPayInfo)) {
// throw new BaseException("微信订单不存在!");
// }
// SaobeiRefundVo vo = new SaobeiRefundVo();
// vo.setRefund_fee(String.valueOf(request.getAmount().multiply(BigDecimal.TEN).multiply(BigDecimal.TEN).intValue()));
// vo.setTerminal_trace(BaseUtil.getOrderNo("WXNO"));
// vo.setTerminal_time(DateUtil.nowDate(Constants.DATE_TIME_FORMAT_NUM));
// vo.setOut_trade_no(wechatPayInfo.getTransactionId());
// SaobeiTradeRefundResponse response = saobeiService.refund(vo);
// return ObjectUtil.isNotEmpty(response);
// }
/**
* 扫呗退款-微信(人工退款)
* @param request
......
......@@ -610,6 +610,11 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
return baseMapper.sumPayPrice(ids);
}
@Override
public List<SConsumerCoupon> selectByIds(List<Long> ids) {
return baseMapper.selectByIds(ids);
}
private void extracted(SConsumerCoupon item, BigDecimal bigDecimal, SRoom byId, BigDecimal subtract, SStore sStore) {
//计算价格
BigDecimal multiply = bigDecimal.multiply(byId.getPrice());
......
package share.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.util.ObjectUtil;
......@@ -43,12 +44,10 @@ import share.system.domain.*;
import share.system.domain.vo.*;
import share.system.mapper.SOrderMapper;
import share.system.mapper.SStoreConsumerMapper;
import share.system.request.AdminRefundRequest;
import share.system.request.CreateOrderRequest;
import share.system.request.OrderComputedPriceRequest;
import share.system.request.OrderRefundRequest;
import share.system.request.*;
import share.system.response.ComputedOrderPriceResponse;
import share.system.response.OrderPayResultResponse;
import share.system.response.OrderStatisticsResponse;
import share.system.service.*;
import javax.annotation.Resource;
......@@ -169,6 +168,9 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
@Autowired
private MemberProgressLogService memberProgressLogService;
@Autowired
private RechargeService rechargeService;
private final static Long FIVE = 5L;
......@@ -1820,7 +1822,7 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
// @Transactional(rollbackFor = Exception.class)
@Override
public void paymentSuccessful(SOrder sOrder) {
unLockOrder(sOrder.getRoomId());
ConsumerWallet consumerWallet = consumerWalletService.getOne(new LambdaQueryWrapper<ConsumerWallet>().eq(ConsumerWallet::getConsumerId, sOrder.getConsumerId()));
ConsumerMember consumerMember = consumerMemberService.getOne(new LambdaQueryWrapper<ConsumerMember>().eq(ConsumerMember::getConsumerId, sOrder.getConsumerId()));
logger.debug("订单查询预约时间是否干涉");
......@@ -1915,6 +1917,7 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
}
creatExtracted(consumerWallet, sOrder, consumerMember);
baseMapper.updateSOrder(sOrder);
unLockOrder(sOrder.getRoomId());
if (sOrder.getOrderType().equals(OrderTypeEnum.RENEW.getCode())) {
Map<String, String> map = new HashMap<>();
map.put("orderNo", sOrder.getOrderNo());
......@@ -2902,8 +2905,77 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
@Override
public Object statistics() {
return null;
public OrderStatisticsResponse statistics(OrderStatisticsRequest request) {
List<Recharge> rechargeList = rechargeService.list(new LambdaQueryWrapper<Recharge>()
.ge(Recharge::getCreateTime, request.getStartTime())
.le(Recharge::getCreateTime, request.getEndTime())
);
//获取rechargeList中的所有rechargeAmount的和
BigDecimal rechargeAmount = rechargeList.stream().map(Recharge::getRechargeAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
OrderStatisticsResponse statisticsResponse = new OrderStatisticsResponse();
Map<Long, SConsumerCoupon> map = new HashMap<>();
List<SOrder> orderList = baseMapper.selectList(new LambdaQueryWrapper<SOrder>()
.eq(SOrder::getStoreId, request.getStoreId())
.eq(SOrder::getIsDelete, YesNoEnum.no.getIndex())
.eq(SOrder::getPayStatus, YesNoEnum.yes.getIndex())
.ge(SOrder::getCreateTime, request.getStartTime())
.le(SOrder::getCreateTime, request.getEndTime())
.orderByDesc(SOrder::getCreateTime)
);
//优惠券id集合,去掉为null的
List<Long> ids = orderList.stream().map(SOrder::getCouponId).filter(Objects::nonNull).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(ids)) {
map.putAll(consumerCouponService.selectByIds(ids).stream().collect(Collectors.toMap(SConsumerCoupon::getId, Function.identity())));
}
orderList.stream().forEach(order -> {
if (order.getStatus().equals(OrderStatusEnum.CANCEL.getCode()) && order.getRefundStatus().equals(RefundStatusEnum.REFUNDED.getCode())) {
if (!map.isEmpty()) {
if (ObjectUtil.isNotEmpty(order.getCouponId())) {
SConsumerCoupon sConsumerCoupon = map.get(order.getCouponId());
if (sConsumerCoupon.getCouponType().equals(CouponTypeEnum.CASH.getCode())) {
if (sConsumerCoupon.getPlatformType().equals(PlatformTypeEnum.MEITUAN.getCode())) {
statisticsResponse.setMeituanFee(statisticsResponse.getMeituanFee().add(sConsumerCoupon.getCouponPayPrice()));
} else if (sConsumerCoupon.getPlatformType().equals(PlatformTypeEnum.TIKTOK.getCode())) {
statisticsResponse.setDouyinFee(statisticsResponse.getDouyinFee().add(sConsumerCoupon.getCouponPayPrice()));
}
}
}
}
statisticsResponse.setPlatformFee(statisticsResponse.getPlatformFee().add(order.getPayPrice()));
statisticsResponse.setRechargeBalanceRefundFee(statisticsResponse.getRechargeBalanceRefundFee().add(order.getBalance()));
} else {
statisticsResponse.setPlatformRefundFee(statisticsResponse.getPlatformRefundFee().add(order.getPayPrice()));
statisticsResponse.setRechargeBalance(statisticsResponse.getRechargeBalance().add(order.getBalance()));
if (!map.isEmpty()) {
if (ObjectUtil.isNotEmpty(order.getCouponId())) {
SConsumerCoupon sConsumerCoupon = map.get(order.getCouponId());
if (sConsumerCoupon.getCouponType().equals(CouponTypeEnum.CASH.getCode())) {
if (sConsumerCoupon.getPlatformType().equals(PlatformTypeEnum.MEITUAN.getCode())) {
statisticsResponse.setMeituanRefundFee(statisticsResponse.getMeituanRefundFee().add(sConsumerCoupon.getCouponPayPrice()));
} else if (sConsumerCoupon.getPlatformType().equals(PlatformTypeEnum.TIKTOK.getCode())) {
statisticsResponse.setDouyinRefundFee(statisticsResponse.getDouyinRefundFee().add(sConsumerCoupon.getCouponPayPrice()));
}
}
}
}
}
});
//用户充值
statisticsResponse.setRechargeFee(rechargeAmount);
//美团团购金额+抖音团购金额
statisticsResponse.setGroupFee(statisticsResponse.getMeituanFee().add(statisticsResponse.getDouyinFee()));
//美团团购退款+抖音团购退款
statisticsResponse.setGroupRefundFee(statisticsResponse.getMeituanRefundFee().add(statisticsResponse.getDouyinRefundFee()));
//团购金额+平台支付
statisticsResponse.setStoreFee(statisticsResponse.getGroupFee().add(statisticsResponse.getPlatformFee()));
//团购退款+平台退款
statisticsResponse.setStoreRefundFee(statisticsResponse.getGroupRefundFee().add(statisticsResponse.getPlatformRefundFee()));
//团购金额+平台支付
statisticsResponse.setTotalFee(statisticsResponse.getGroupFee().add(statisticsResponse.getPlatformFee()));
//门店交易-门店交易退款
statisticsResponse.setActualFee(statisticsResponse.getStoreFee().subtract(statisticsResponse.getStoreRefundFee()));
statisticsResponse.setOrderList(orderList);
return statisticsResponse;
}
@Override
......
......@@ -181,6 +181,13 @@
#{id}
</foreach>
</select>
<select id="selectByIds" resultType="share.system.domain.SConsumerCoupon">
<include refid="selectSConsumerCouponVo"/>
where id in
<foreach item="id" collection="couponIds" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<insert id="insertSConsumerCoupon" parameterType="SConsumerCoupon" useGeneratedKeys="true" keyProperty="id">
insert into s_consumer_coupon
......
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