From 150a19b58d53ecc56fda26cb6568bc2d8bfc6be6 Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期日, 08 十月 2023 09:59:04 +0800 Subject: [PATCH] UUID --- server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java | 164 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 148 insertions(+), 16 deletions(-) diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java index f3856d5..429e6eb 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/WxBillServiceImpl.java @@ -1,5 +1,6 @@ package com.doumee.service.business.impl; +import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; @@ -7,8 +8,12 @@ import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.core.wx.WxMiniConfig; +import com.doumee.core.wx.WxPayProperties; +import com.doumee.dao.business.WxBillDetailMapper; import com.doumee.dao.business.WxBillMapper; +import com.doumee.dao.business.model.Goodsorder; import com.doumee.dao.business.model.WxBill; +import com.doumee.dao.business.model.WxBillDetail; import com.doumee.service.business.WxBillService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -18,12 +23,15 @@ import com.github.binarywang.wxpay.bean.result.WxPayBillInfo; import com.github.binarywang.wxpay.bean.result.WxPayBillResult; import com.github.binarywang.wxpay.exception.WxPayException; +import org.apache.commons.lang3.StringUtils; +import org.checkerframework.checker.units.qual.C; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.util.Date; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; /** * Service瀹炵幇 @@ -35,6 +43,8 @@ @Autowired private WxBillMapper wxBillMapper; + @Autowired + private WxBillDetailMapper wxBillDetailMapper; @Override public String create(WxBill wxBill) { wxBillMapper.insert(wxBill); @@ -149,22 +159,144 @@ return wxBillMapper.selectCount(wrapper); } @Override - public void getWxBill() { + @Transactional(rollbackFor = {BusinessException.class,Exception.class}) + public void getWxBill(String billDate) { + // 鑾峰彇浜ゆ槗璐﹀崟鏁版嵁 + WxPayDownloadBillRequest request = new WxPayDownloadBillRequest(); +// String billDate = DateUtil.beforeDateToStr(1); + Date ydate = DateUtil.addDaysToDate(new Date(), -1); + request.setBillDate(billDate); + request.setBillType("SUCCESS"); + WxPayBillResult response = null; try { - // 鑾峰彇浜ゆ槗璐﹀崟鏁版嵁 - WxPayDownloadBillRequest request = new WxPayDownloadBillRequest(); - String billDate = DateUtil.beforeDateToStr(1); - request.setBillDate(billDate); - request.setBillType("ALL"); - WxPayBillResult response = WxMiniConfig.wxPayService.downloadBill(request); - if(response !=null){ - List<WxPayBillInfo> detailList = response.getBillInfoList(); - }else{ - throw new BusinessException(ResponseStatus.SERVER_ERROR); - } + response = WxMiniConfig.wxPayService.downloadBill(request); + }catch (WxPayException e){ - } catch (WxPayException e) { - e.printStackTrace(); } + request.setBillType("REFUND"); + //璇锋眰閫�娆惧崟浜ゆ槗璁板綍姹囨�绘暟鎹� + WxPayBillResult responseRefund = null; + try { + responseRefund = WxMiniConfig.wxPayService.downloadBill(request); + }catch (WxPayException e){ + + } + WxBill bill = new WxBill(); + //鏃ユ湡浣滀负涓婚敭 + bill.setId(billDate); + bill.setSumBill(0); + bill.setSumTotalFee(new BigDecimal(0.00)); + bill.setSumSuccessFee(new BigDecimal(0.00)); + bill.setSumRefundFee(new BigDecimal(0.00)); + bill.setSumCouponRefundFee(new BigDecimal(0.00)); + bill.setSumApplyRefundFee(new BigDecimal(0.00)); + bill.setSumCmmsAmt(new BigDecimal(0.00)); + bill.setSumRefundBill(0); + bill.setSumRefundCmmsAmt(new BigDecimal(0.00)); + List<WxBillDetail> detailList = new ArrayList<>(); + if(response !=null){ +// List<WxPayBillInfo> detailList = response.getBillInfoList(); + int totalRefund = 0; + BigDecimal totalRefundAmt = new BigDecimal(0.00); + bill.setSumBill(Integer.parseInt(response.getTotalRecord())); + //璁㈠崟鎬婚噾棰� + 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())); + } + if(responseRefund != null){ + //閫�娆惧崟鎬绘暟绱杩涘叆 +// bill.setSumBill(bill.getSumBill()+(Integer.parseInt(response.getTotalRecord())); + bill.setSumRefundBill(Integer.parseInt(responseRefund.getTotalRecord()));//閫�娆剧殑璁㈠崟鏁� + bill.setSumRefundCmmsAmt(formatStringToDecimal(responseRefund.getTotalPoundageFee()));//閫�娆炬�绘墜缁垂 + bill.setSumCouponRefundFee(formatStringToDecimal(responseRefund.getTotalCouponFee()));//閫�娆炬�绘墜缁垂 + detailList.addAll(getDetialModelByInfo(bill,responseRefund.getBillInfoList())); + } + wxBillMapper.delete(new UpdateWrapper<WxBill>().lambda().eq( WxBill::getId, bill.getId())); + wxBillDetailMapper.delete(new UpdateWrapper<WxBillDetail>().lambda().eq( WxBillDetail::getPid, bill.getId())); + +// getTotalAndIncome(bill,ydate);//缁熻缁撶畻閲戦鍜岃嚜琛岃溅鏀跺叆 + //鎬荤粨绠楅噾棰濓紙鏀舵閲戦-鏀舵鎵嬬画璐�-閫�娆鹃噾棰�-閫�娆炬墜缁垂锛堣礋鏁帮級锛� + bill.setTotal(bill.getSumSuccessFee().subtract(bill.getSumCmmsAmt()).subtract(bill.getSumRefundFee()).subtract(bill.getSumRefundCmmsAmt())); +// //鑷杞︽敹鍏ワ紙鏀舵閲戦-鏀舵鎵嬬画璐�-閫�娆鹃噾棰�-閫�娆炬墜缁垂锛堣礋鏁帮級锛� +// bill.setBikeFee(bill.getSumSuccessFee().subtract(bill.getSumRefundFee())); + wxBillMapper.insert(bill); + if(detailList.size()>0){ + wxBillDetailMapper.insertBatch(detailList); + } + } + private void getTotalAndIncome(WxBill bill,Date date) { + QueryWrapper<Goodsorder> queryWrapper = new QueryWrapper<>(); + queryWrapper.apply("to_char(create_date, 'yyyy-MM-dd') = {0}", date); + queryWrapper.lambda().eq(Goodsorder::getIsdeleted, Constants.ZERO); + queryWrapper.lambda().eq(Goodsorder::getStatus, Constants.goodsorderStatus.over);//宸茬祼绠� + queryWrapper.select("sum(money) as totalMoney","sum(close_money) as totalCloseMoney"); + } + + private List<WxBillDetail> getDetialModelByInfo(WxBill bill, List<WxPayBillInfo> billInfoList) { + List<WxBillDetail> detailList = new ArrayList<>(); + if(billInfoList!=null){ + for (int i = 0; i <billInfoList.size(); i++) { + WxPayBillInfo info =billInfoList.get(i); + WxBillDetail detail = new WxBillDetail(); + detail.setId(UUID.randomUUID().toString()); + detail.setPid(bill.getId()); + detail.setBillDate(DateUtil.getDateFromString2(info.getTradeTime()));//浜ゆ槗鏃堕棿 + detail.setAppid(info.getAppId());//鍏紬璐﹀彿ID + detail.setMchId(info.getMchId());//鍟嗘埛鍙� + detail.setSubMchid(info.getSubMchId());//鐗圭害鍟嗘埛鍙� + detail.setDeviceInfo(info.getDeviceInfo());//璁惧 + + detail.setTransactionId(info.getTransactionId());//寰俊璁㈠崟鍙� + detail.setOutTradeNo(info.getOutTradeNo());//鍟嗘埛璁㈠崟鍙� + detail.setOpenid(info.getOpenId());//鐢ㄦ埛鏍囪瘑 + detail.setBillType(info.getTradeType());//浜ゆ槗绫诲瀷 + detail.setBillStatus(info.getTradeState());//浜ゆ槗鐘舵�� + detail.setBankType(info.getBankType());//浠樻閾惰 + detail.setFeeType(info.getFeeType());//璐у竵绉嶇被 + detail.setSettlementTotalFee(formatStringToDecimal(info.getTotalFee()));//搴旂粨璁㈠崟閲戦 + detail.setCouponFee(formatStringToDecimal(info.getCouponFee()));//浠i噾鍒搁噾棰� + detail.setRefundId(info.getRefundId());//寰俊閫�娆惧崟鍙� + detail.setOutRefundNo(info.getOutRefundNo());//鍟嗘埛閫�娆惧崟鍙� + detail.setRefundFee(formatStringToDecimal(info.getSettlementRefundFee()));//閫�娆鹃噾棰� + detail.setCouponRefundFee(formatStringToDecimal(info.getCouponRefundFee()));//鍏呭�煎埜閫�娆鹃噾棰� + detail.setRefundType(info.getRefundChannel());//閫�娆剧被鍨� + detail.setRefundSuccessStatus(info.getRefundState());//閫�娆剧姸鎬� + detail.setBody(info.getBody());//鍟嗗搧鍚嶇О + detail.setAttach(info.getAttach());//鍟嗘埛鏁版嵁鍖� + detail.setCmmsAmt(formatStringToDecimal(info.getPoundage()));//鎵嬬画璐� + detail.setRate(formatStringToDecimal(info.getPoundageRate().replace("%", "")));//璐圭巼 + detail.setTotalFee(formatStringToDecimal(info.getTotalAmount()));//璁㈠崟閲戦 + detail.setApplyRefundFee(formatStringToDecimal(info.getAppliedRefundAmount()));//鐢宠閫�娆鹃噾棰� + detail.setRateRemark(info.getFeeRemark());//璐圭巼澶囨敞 + 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")){ + //濡傛灉閫�娆炬垚鍔燂紝鎵i櫎閫�娆鹃噾棰� + bill.setBikeFee(bill.getBikeFee().subtract(detail.getApplyRefundFee())); + } + } + detailList.add(detail); + } + } + return detailList; + } + + public static BigDecimal formatStringToDecimal(String str){ + if(str == null){ + return new BigDecimal(0.00); + } + return new BigDecimal(Double.parseDouble(str)); } } -- Gitblit v1.9.3