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