package com.szwl.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.szwl.feign.SzwlFeign; import com.szwl.mapper.TOrderMapper; import com.szwl.model.bo.R; import com.szwl.model.entity.TAdmin; import com.szwl.model.entity.TEquipment; import com.szwl.model.entity.TOrder; import com.szwl.model.entity.TShandeMch; import com.szwl.mapper.TShandeMchMapper; import com.szwl.service.TShandeMchService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; /** *

* 杉德支付收款信息 服务实现类 *

* * @author wuhs * @since 2022-07-14 */ @Service public class TShandeMchServiceImpl extends ServiceImpl implements TShandeMchService { @Autowired TOrderMapper orderMapper; @Autowired SzwlFeign szwlFeign; //24点更新结算表 @Override public void jiesuan() { //1,查出杉德金额表中今日交易金额大于0的人 // TShandeMchExample example = new TShandeMchExample(); // TShandeMchExample.Criteria criteria = example.createCriteria(); // criteria.andTodayBalanceGreaterThan(0.00f); // List tShandeMches = tShandeMchMapper.selectByExample(example); //2,并把这些人的adminId整合到一个list中 // List list = new ArrayList<>(); // if(tShandeMches.size()>0){ // for(TShandeMch shandeMch : tShandeMches){ // list.add(shandeMch.getAdminId()); // } // } Set set = new HashSet<>(); //昨天起始时间 因为是第二天才去查的 Date startDate = getStartTime(); Date endDate = getEndTime(); //1,找出今天用杉德支付的订单 LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TOrder::getPayPlatform,"1"); query.eq(TOrder::getStatus,1); query.gt(TOrder::getPayDate,startDate); query.lt(TOrder::getPayDate,endDate); List orderList = orderMapper.selectList(query); if(orderList.size()>0){ for(TOrder order:orderList){ set.add(order.getAdminId()); } } //3,根据adminId去order表里查今日的支付,退款的订单 //昨天起始时间 因为是第二天才去查的 // Date startDate = getStartTime(); // Date endDate = getEndTime(); if(set.size()>0){ for(Long adminId : set){ //支付订单 List orderPayList = getOrderlist(startDate,endDate,adminId,1); //退款订单---主要查不是今天支付的退款订单,隔天退款 List orderRefuseList = getOrderlist(startDate,endDate,adminId,3); //根据订单表去更新金额表 if(orderPayList.size()>0){ updateShandeMchList(orderPayList,1); } if(orderRefuseList.size()>0){ updateShandeMchList(orderRefuseList,3); } } } } //根据订单表去更新金额表 private void updateShandeMchList(List orderList, int type) { BigDecimal agencyTotal = new BigDecimal(0.00); BigDecimal merchantTotal = new BigDecimal(0.00); BigDecimal personageTotal = new BigDecimal(0.00); TOrder tOrder = orderList.get(0); TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(tOrder.getAdminId()))); Integer orderType = tOrder.getType(); switch (orderType) { case 1: for(TOrder order:orderList){ BigDecimal agencyProportion = order.getAgencyProportion(); BigDecimal price = order.getPrice(); // 代理分销获得利润 BigDecimal agencyPrice = price.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); agencyTotal = agencyTotal.add(agencyPrice); } //修改金额表的今日金额 TShandeMch shandeMch = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(tOrder.getAdminId()))); BigDecimal settleableBalance = shandeMch.getSettleableBalance(); if(type==1){ settleableBalance = settleableBalance.add(agencyTotal).setScale(2, RoundingMode.HALF_DOWN); } if(type == 3){ settleableBalance = settleableBalance.subtract(agencyTotal).setScale(2, RoundingMode.HALF_DOWN); } shandeMch.setSettleableBalance(settleableBalance); shandeMch.setTodayBalance(BigDecimal.valueOf(0)); shandeMch.setModifyDate(new Date()); szwlFeign.updateShandeMch(shandeMch); break; case 2: for(TOrder order:orderList){ BigDecimal agencyProportion = order.getAgencyProportion(); BigDecimal merchantProportion = order.getMerchantProportion(); BigDecimal price = order.getPrice(); // 代理分销获得利润 BigDecimal agencyPrice = price.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); // 经销商分销获得利润 BigDecimal merchantAmount = price.multiply(merchantProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); agencyTotal = agencyTotal.add(agencyPrice); merchantTotal = merchantTotal.add(merchantAmount); } //修改金额表的今日金额 //省级 TShandeMch shandeMch1 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(admin.getParentId()))); BigDecimal settleableBalance1 = shandeMch1.getSettleableBalance(); if(type==1){ settleableBalance1 = settleableBalance1.add(agencyTotal).setScale(2, RoundingMode.HALF_DOWN); } if(type == 3){ settleableBalance1 = settleableBalance1.subtract(agencyTotal).setScale(2, RoundingMode.HALF_DOWN); } shandeMch1.setSettleableBalance(settleableBalance1); shandeMch1.setTodayBalance(BigDecimal.valueOf(0)); shandeMch1.setModifyDate(new Date()); szwlFeign.updateShandeMch(shandeMch1); //市级 TShandeMch shandeMch2 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(admin.getId()))); BigDecimal settleableBalance2 = shandeMch2.getSettleableBalance(); if(type==1){ settleableBalance2 = settleableBalance2.add(merchantTotal).setScale(2, RoundingMode.HALF_DOWN); } if(type == 3){ settleableBalance2 = settleableBalance2.subtract(merchantTotal).setScale(2, RoundingMode.HALF_DOWN); } shandeMch2.setSettleableBalance(settleableBalance2); shandeMch2.setTodayBalance(BigDecimal.valueOf(0)); shandeMch2.setModifyDate(new Date()); szwlFeign.updateShandeMch(shandeMch2); break; case 3: for(TOrder order:orderList){ BigDecimal agencyProportion = order.getAgencyProportion(); BigDecimal merchantProportion = order.getMerchantProportion(); BigDecimal personageProportion = order.getPersonageProportion(); BigDecimal price = order.getPrice(); // 代理分销获得利润 BigDecimal agencyPrice = price.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); // 经销商分销获得利润 BigDecimal merchantAmount = price.multiply(merchantProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); // 经销商分销获得利润 BigDecimal personageAmount = price.multiply(personageProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); agencyTotal = agencyTotal.add(agencyPrice); merchantTotal = merchantTotal.add(merchantAmount); personageTotal = personageTotal.add(personageAmount); } //修改金额表的今日金额 //省级 TShandeMch shandeMch3 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(admin.getAgencyId()))); BigDecimal settleableBalance3 = shandeMch3.getSettleableBalance(); if(type==1){ settleableBalance3 = settleableBalance3.add(agencyTotal).setScale(2, RoundingMode.HALF_DOWN); } if(type == 3){ settleableBalance3 = settleableBalance3.subtract(agencyTotal).setScale(2, RoundingMode.HALF_DOWN); } shandeMch3.setSettleableBalance(settleableBalance3); shandeMch3.setTodayBalance(BigDecimal.valueOf(0)); shandeMch3.setModifyDate(new Date()); szwlFeign.updateShandeMch(shandeMch3); //市级 ; TShandeMch shandeMch4 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(admin.getMerchantId()))); BigDecimal settleableBalance4 =shandeMch4.getSettleableBalance(); if(type==1){ settleableBalance4 = settleableBalance4.add(merchantTotal).setScale(2, RoundingMode.HALF_DOWN); } if(type == 3){ settleableBalance4 = settleableBalance4.subtract(merchantTotal).setScale(2, RoundingMode.HALF_DOWN); } shandeMch4.setSettleableBalance(settleableBalance4); shandeMch4.setTodayBalance(BigDecimal.valueOf(0)); shandeMch4.setModifyDate(new Date()); szwlFeign.updateShandeMch(shandeMch4); //终端 TShandeMch shandeMch5 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(admin.getId()))); BigDecimal settleableBalance5 =shandeMch5.getSettleableBalance(); if(type==1){ settleableBalance5 = settleableBalance5.add(personageTotal).setScale(2, RoundingMode.HALF_DOWN); } if(type == 3){ settleableBalance5 = settleableBalance5.subtract(personageTotal).setScale(2, RoundingMode.HALF_DOWN); } shandeMch5.setSettleableBalance(settleableBalance5); shandeMch5.setTodayBalance(BigDecimal.valueOf(0)); shandeMch5.setModifyDate(new Date()); szwlFeign.updateShandeMch(shandeMch5); break; } } //查询订单列表 private List getOrderlist(Date startDate, Date endDate, Long adminId, int type) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TOrder::getAdminId,adminId); if(type==1){ query.gt(TOrder::getPayDate,startDate); query.lt(TOrder::getPayDate,endDate); } if(type == 3){ query.gt(TOrder::getRefundDate,startDate); query.lt(TOrder::getRefundDate,endDate); query.lt(TOrder::getPayDate,startDate); } query.eq(TOrder::getStatus,type); query.eq(TOrder::getPayPlatform,"1"); List orderList = orderMapper.selectList(query); return orderList; } private static Date getStartTime() { Calendar todayStart = Calendar.getInstance(); todayStart.add(Calendar.DATE, -1); todayStart.set(Calendar.HOUR_OF_DAY, 0); todayStart.set(Calendar.MINUTE, 0); todayStart.set(Calendar.SECOND, 0); todayStart.set(Calendar.MILLISECOND, 0); return todayStart.getTime(); } private static Date getEndTime() { Calendar todayEnd = Calendar.getInstance(); todayEnd.add(Calendar.DATE, -1); todayEnd.set(Calendar.HOUR_OF_DAY, 23); todayEnd.set(Calendar.MINUTE, 59); todayEnd.set(Calendar.SECOND, 59); todayEnd.set(Calendar.MILLISECOND, 999); return todayEnd.getTime(); } }