|  |  | 
 |  |  | import org.springframework.util.CollectionUtils; | 
 |  |  |  | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.math.RoundingMode; | 
 |  |  | import java.util.*; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  |         QueryWrapper<WxBillDetail> queryWrapper = new QueryWrapper<>(); | 
 |  |  |         queryWrapper.lambda().ge(param.getStartDate() !=null,WxBillDetail::getPid,DateUtil.getShortDateStr(param.getStartDate())); | 
 |  |  |         queryWrapper.lambda().le(param.getEndDate() !=null,WxBillDetail::getPid,DateUtil.getShortDateStr(param.getEndDate())); | 
 |  |  |         queryWrapper.lambda().ne(WxBillDetail::getAppid, WxMiniConfig.wxPayService.getConfig().getAppId());//非自行车收入统计 | 
 |  |  |         queryWrapper.lambda().ne(WxBillDetail::getAppid, WxMiniConfig.wxPayV2Service.getConfig().getSubAppId());//非自行车收入统计 | 
 |  |  |         queryWrapper.lambda().groupBy(WxBillDetail::getBillStatus); | 
 |  |  |         queryWrapper.select( "count(id) as sum_bill" | 
 |  |  |                 ,"sum(settlement_total_fee) as settlement_total_fee" | 
 |  |  | 
 |  |  |             for(WxBillDetail detail : detailList){ | 
 |  |  |                 if(StringUtils.equals(detail.getBillStatus(), "SUCCESS")){ | 
 |  |  |                     //实收数据 | 
 |  |  |                     bill4.setSumBill(detail.getSumBill());//交易笔数 | 
 |  |  |                     bill4.setSumBill( detail.getSumBill());//交易笔数 | 
 |  |  |                     bill4.setSumSuccessFee(Constants.formatDecimalNum(detail.getSettlementTotalFee()));//交易金额 | 
 |  |  |                     bill4.setSumCmmsAmt(Constants.formatDecimalNum(detail.getCmmsAmt()));//交易手续费 | 
 |  |  |                 } else if(StringUtils.equals(detail.getBillStatus(), "REFUND")){ | 
 |  |  |                 } else if(StringUtils.equals(detail.getBillStatus(), "REFUND") || StringUtils.equals(detail.getBillStatus(), "REVOKED")){ | 
 |  |  |                     //退款数据 | 
 |  |  |                     bill4.setSumRefundBill(detail.getSumBill());//退款笔数 | 
 |  |  |                     bill4.setSumRefundCmmsAmt(Constants.formatDecimalNum(detail.getCmmsAmt()));//退款手续费 | 
 |  |  |                     bill4.setSumRefundBill(Constants.formatIntegerNum(bill4.getSumRefundBill())+detail.getSumBill());//退款笔数 | 
 |  |  |                     bill4.setSumRefundFee(Constants.formatDecimalNum(bill4.getSumRefundFee()).add(Constants.formatDecimalNum(detail.getRefundFee()))); | 
 |  |  |                     bill4.setSumRefundCmmsAmt(Constants.formatDecimalNum(bill4.getSumRefundCmmsAmt()).add(Constants.formatDecimalNum(Constants.formatDecimalNum(detail.getCmmsAmt()))));//退款手续费 | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             //结算金额 | 
 |  |  | 
 |  |  | //        Date ydate = DateUtil.addDaysToDate(new Date(), -1); | 
 |  |  |         request.setBillDate(billDate); | 
 |  |  |         request.setBillType("SUCCESS"); | 
 |  |  |         request.setSubMchId(WxMiniConfig.wxProperties.getSubMchId()); | 
 |  |  |  | 
 |  |  |         WxPayBillResult response = null; | 
 |  |  |         try { | 
 |  |  |             response = WxMiniConfig.wxPayService.downloadBill(request); | 
 |  |  |             response = WxMiniConfig.wxPayV2Service.downloadBill(request); | 
 |  |  |         }catch (WxPayException e){ | 
 |  |  |  | 
 |  |  |         } | 
 |  |  | 
 |  |  |         //请求退款单交易记录汇总数据 | 
 |  |  |         WxPayBillResult responseRefund = null; | 
 |  |  |         try { | 
 |  |  |             responseRefund = WxMiniConfig.wxPayService.downloadBill(request); | 
 |  |  |             responseRefund = WxMiniConfig.wxPayV2Service.downloadBill(request); | 
 |  |  |         }catch (WxPayException e){ | 
 |  |  |  | 
 |  |  |         } | 
 |  |  | 
 |  |  |             bill.setSumTotalFee(formatStringToDecimal(response.getTotalAmount())); | 
 |  |  |             //应结订单总金额 | 
 |  |  |             bill.setSumSuccessFee(formatStringToDecimal(response.getTotalFee())); | 
 |  |  |             //退款总金额 | 
 |  |  |             bill.setSumRefundFee(formatStringToDecimal(response.getTotalFee())); | 
 |  |  |             //退款总金额 | 
 |  |  |             bill.setSumApplyRefundFee(formatStringToDecimal(response.getTotalAppliedRefundFee())); | 
 |  |  |             //交易总手续费金额 | 
 |  |  |             bill.setSumCmmsAmt(formatStringToDecimal(response.getTotalPoundageFee())); | 
 |  |  |             detailList.addAll(getDetialModelByInfo(bill,response.getBillInfoList())); | 
 |  |  | 
 |  |  |             //退款单总数累计进入 | 
 |  |  | //                bill.setSumBill(bill.getSumBill()+(Integer.parseInt(response.getTotalRecord())); | 
 |  |  |             bill.setSumRefundBill(Integer.parseInt(responseRefund.getTotalRecord()));//退款的订单数 | 
 |  |  |             //退款总金额 | 
 |  |  |             bill.setSumRefundFee(formatStringToDecimal(responseRefund.getTotalRefundFee())); | 
 |  |  |             //退款总金额 | 
 |  |  |             bill.setSumApplyRefundFee(formatStringToDecimal(responseRefund.getTotalAppliedRefundFee())); | 
 |  |  |             bill.setSumRefundCmmsAmt(formatStringToDecimal(responseRefund.getTotalPoundageFee()));//退款总手续费 | 
 |  |  |             bill.setSumCouponRefundFee(formatStringToDecimal(responseRefund.getTotalCouponFee()));//退款总手续费 | 
 |  |  |             bill.setSumCouponRefundFee(formatStringToDecimal(responseRefund.getTotalCouponFee()));//退款总金额 | 
 |  |  |             detailList.addAll(getDetialModelByInfo(bill,responseRefund.getBillInfoList())); | 
 |  |  |         } | 
 |  |  |         wxBillMapper.delete(new UpdateWrapper<WxBill>().lambda().eq( WxBill::getId, bill.getId())); | 
 |  |  | 
 |  |  |             //只能同步昨天10之前的数据 | 
 |  |  |             Calendar caln = Calendar.getInstance(); | 
 |  |  |             caln.setTime(ydate); | 
 |  |  |             if(caln.get(Calendar.HOUR_OF_DAY) <= 9){ | 
 |  |  |             if(caln.get(Calendar.HOUR_OF_DAY)  > 10){ | 
 |  |  |                 throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,最近同步时间只能截止到昨天10点前!"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |         if(billInfoList!=null){ | 
 |  |  |             for (int i = 0; i <billInfoList.size(); i++) { | 
 |  |  |                 WxPayBillInfo info =billInfoList.get(i); | 
 |  |  |                 if(StringUtils.equals(info.getTradeType(),"REFUND" ) && !StringUtils.equals(info.getRefundState(),"SUCCESS" )){ | 
 |  |  |                 if((StringUtils.equals(info.getTradeType(),"REFUND" )||StringUtils.equals(info.getTradeType(),"REVOKED" )) && !StringUtils.equals(info.getRefundState(),"SUCCESS" )){ | 
 |  |  |                     //如果是非成功的退款数据,不进行同步 | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  | 
 |  |  |                 detail.setRefundSuccessDate(DateUtil.getDateFromString2(info.getRefundSuccessTime()));//成功退款时间 | 
 |  |  |                 detail.setRefundApplyDate(DateUtil.getDateFromString2(info.getRefundTime())); //申请退款时间 | 
 |  |  |                 //计算自行车收入,匹配来自自行车小程序的所有支付成功和退款成功的金额,作为自行车收入(累计收款金额-累计退款成功金额) | 
 |  |  |                 if(StringUtils.equals(detail.getAppid(), WxMiniConfig.wxPayService.getConfig().getAppId())){ | 
 |  |  |                     //自行车收入累计收款金额 | 
 |  |  |                     bill.setBikeFee(bill.getBikeFee().add(detail.getSettlementTotalFee())); | 
 |  |  |                     if(StringUtils.equals(detail.getRefundSuccessStatus(),"SUCCESS")){ | 
 |  |  |                 if(StringUtils.equals(detail.getAppid(), WxMiniConfig.wxPayV2Service.getConfig().getSubAppId())){ | 
 |  |  |                     //自行车收入累计收款金额(支付成功总金额-退款总金额) | 
 |  |  |                     if(StringUtils.equals(info.getTradeState(),"SUCCESS")){ | 
 |  |  |                         //如果是交易 | 
 |  |  |                         bill.setBikeFee(bill.getBikeFee().add(detail.getSettlementTotalFee())); | 
 |  |  |                         bill.setBikeFee(bill.getBikeFee().subtract(detail.getCmmsAmt()) ); | 
 |  |  |                     }else  if(StringUtils.equals(info.getTradeState(),"REFUND" ) || StringUtils.equals(info.getTradeState(),"REVOKED" )){ | 
 |  |  |                         //如果退款成功,扣除退款金额 | 
 |  |  |                         bill.setBikeFee(bill.getBikeFee().subtract(detail.getApplyRefundFee())); | 
 |  |  |                         bill.setBikeFee(bill.getBikeFee().subtract(detail.getRefundFee()) ); | 
 |  |  |                         bill.setBikeFee(bill.getBikeFee().subtract(detail.getCmmsAmt()) ); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 detailList.add(detail); | 
 |  |  |             } | 
 |  |  |         } |