From 221b72ce4da14b97dc5aa5afe43eae2c68fb88b0 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 18 七月 2025 20:53:21 +0800
Subject: [PATCH] Merge branch 'huliguo' of http://120.76.84.145:10101/gitblit/r/java/ZhengShengXinAdmin into huliguo

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java |  505 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 452 insertions(+), 53 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java
index 126b219..cd4b7a6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java
@@ -1,29 +1,33 @@
 package com.ruoyi.system.service.impl;
 
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.wx.PaymentUtil;
-import com.ruoyi.common.utils.wx.RefundCallbackResult;
-import com.ruoyi.common.utils.wx.RefundResult;
 import com.ruoyi.system.domain.*;
 import com.ruoyi.system.mapper.*;
-import com.ruoyi.system.pojo.dto.AddAgreementDTO;
 import com.ruoyi.system.pojo.dto.FinanceFlowsDTO;
 import com.ruoyi.system.pojo.dto.OrderPageDTO;
-import com.ruoyi.system.pojo.dto.WithdrawPageDTO;
 import com.ruoyi.system.pojo.model.DailyStatistics;
-import com.ruoyi.system.pojo.model.DrawSheet;
 import com.ruoyi.system.pojo.vo.*;
-import com.ruoyi.system.service.AgreementService;
+import com.ruoyi.system.service.CompanyTypeService;
 import com.ruoyi.system.service.OrderService;
+import com.ruoyi.system.wx.RefundCallbackResult;
+import com.ruoyi.system.wx.WechatPayService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.provisioning.UserDetailsManager;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -32,9 +36,8 @@
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 @Slf4j
 @Service
@@ -53,12 +56,22 @@
     private ScheduleMapper scheduleMapper;
     @Resource
     private CompanyMapper companyMapper;
-    @Autowired
-    private SystemConfigMapper systemConfigMapper;
+
     @Autowired
     private AppUserMapper appUserMapper;
-    @Autowired
-    private WithdrawMapper withdrawMapper;
+
+    @Resource
+    private RedisCache redisCache;
+    @Resource
+    private QichachaMapper qichachaMapper;
+
+    @Resource
+    private CompanyTypeService companyTypeService;
+
+
+    @Resource
+    private AccountDetailMapper accountDetailMapper;
+
 
     @Override
     public IPage<OrderPageVO> getOrderPage(OrderPageDTO dto) {
@@ -77,8 +90,11 @@
         List<PermitVO> permitVOs = new ArrayList<>();
         LocalDateTime now = LocalDateTime.now();
         for (Permit permit : permits) {
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            LocalDateTime expireTime = LocalDateTime.parse(permit.getExpireTime(), formatter);
+            DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDate expireDate = LocalDate.parse(permit.getExpireTime(), dateFormatter);
+
+            // 如果需要转为 LocalDateTime(添加默认时间)
+            LocalDateTime expireTime = expireDate.atTime(23,59,59); // 默认00:00:00
             if (now.isAfter(expireTime)) {
                 //过滤 未过期的
                 PermitVO permitVO = new PermitVO();
@@ -98,7 +114,7 @@
         }
         vo.setOpeningBankVOList(openingBankVOs);
 
-        if (vo.getStatus() != 4 && vo.getStatus() != 5) {
+        if (vo.getStatus() != 4 && vo.getStatus() != 5&& vo.getStatus() != 6) {
             return vo;
         }
 
@@ -146,36 +162,352 @@
 
     @Override
     public BusinessVO business(String id) {
+        //先查询数据库中的
         Company company = companyMapper.selectById(id);
         if (null == company || company.getIsDelete() != 0) {
             throw new ServiceException("公司不存在");
         }
         BusinessVO vo = new BusinessVO();
+        // 先查企业工商信息 更新数据
+        JSONObject jsonObject = getQiChaChaBasicDetailsCompany(company.getCompanyName());
+        company.setOperName(jsonObject.getString("OperName"));
+        company.setBelongOrg(jsonObject.getString("BelongOrg"));
+        company.setRegistrationStatus(jsonObject.getString("Status"));
+              company.setRegisteredCapital(jsonObject.getString("RegisteredCapital"));
+        company.setPaidInFunds(jsonObject.getString("PaidUpCapital"));
+        companyMapper.updateById(company);
         BeanUtils.copyProperties(company, vo);
+        vo.setNewRegisteredCapital(company.getRealRegisteredCapital());
         vo.setPlace(company.getCity()+company.getProvince()+company.getArea());
+
+        JSONObject area = (JSONObject) jsonObject.get("Area");
+        vo.setPlace(area.getString("Province")+"-"+area.getString("City")+"-"+area.getString("County"));
+        vo.setCompanyCategoryName(jsonObject.getString("EconKind"));
+
+        String name = companyTypeService.getById(company.getCompanyCategory()).getName();
+        vo.setCompanyCategoryName(name);
         return vo;
     }
 
     @Override
-    public ErrorVO error(String id) {
-        return null;
+    public R  error(String id) {
+        ErrorVO errorVO = new ErrorVO();
+        Company company = companyMapper.selectById(id);
+        if (null == company || company.getIsDelete() != 0) {
+            throw new ServiceException("公司不存在");
+        }
+        JSONObject result = getQiChaChaCompanyExceptionCheck(company.getCompanyName());
+        if("200".equals(result.get("Status"))){
+            //查询成功
+            JSONObject data = (JSONObject) result.get("Result");
+            Integer verifyResult = (Integer) data.get("VerifyResult");
+            errorVO.setVerifyResult(verifyResult);
+            if (verifyResult==1){
+                //该企业有异常数据
+                JSONArray list = (JSONArray) data.get("Data");
+                errorVO.setData(list);
+            }
+            return R.ok(errorVO);
+        }else {
+            //查询失败
+            return R.fail(result.get("Message"));
+        }
+
+    }
+
+
+    /**
+     * 查询工商信息
+     */
+    public  JSONObject getQiChaChaBasicDetailsCompany(String companyName){
+        Object cacheObject = redisCache.getCacheObject("qichacha_" +"basic_"+ companyName);
+        if(cacheObject != null){
+            JSONObject jsonObject = JSONObject.parseObject(cacheObject.toString());
+            return jsonObject;
+        }
+        String url = "https://api.qichacha.com/ECIV4/GetBasicDetailsByName?key=642987ca3faf4a7daeac70463ae22695&keyword="+companyName;
+        HttpRequest get = HttpUtil.createGet(url);
+        String timeStr = String.valueOf(System.currentTimeMillis() / 1000);
+        get.header("Token", SecureUtil.md5("642987ca3faf4a7daeac70463ae22695"+timeStr+"AC776F2957291EAE3B4161702E89A9F3").toUpperCase());
+        get.header("Timespan", timeStr);
+        HttpResponse execute = get.execute();
+        String body = execute.body();
+        JSONObject jsonObject = JSONObject.parseObject(body);
+        if("200".equals(jsonObject.get("Status"))){
+            //查询成功
+            String string = jsonObject.toString();
+            redisCache.setCacheObject("qichacha_"+"basic_"+companyName,string,24, TimeUnit.HOURS);
+            //统计调用次数
+            Qichacha qichacha = new Qichacha();
+            qichacha.setTime(LocalDateTime.now());
+            qichacha.setType(1);//企业异常查询
+            qichachaMapper.insert(qichacha);
+
+            return jsonObject;
+        }
+        return jsonObject;
+    }
+
+    /**
+     * 经营异常核查
+     * @param companyName
+     * @return
+     * VerifyResult  int	数据是否存在(1-存在,0-不存在)
+     * Data  	List<Object>  数据信息
+     * Data:[{
+     *     AddReason  列入经营异常名录原因
+     *     AddDate	列入日期
+     *     RomoveReason  移出经营异常名录原因(保留字段)
+     *     RemoveDate   移出日期(保留字段)
+     *     DecisionOffice  	作出决定机关
+     *     RemoveDecisionOffice  移出决定机关(保留字段)
+     * }]
+     * Status
+     * Message
+     * OrderNumber
+     */
+    public  JSONObject getQiChaChaCompanyExceptionCheck(String companyName){
+        Object cacheObject = redisCache.getCacheObject("qichacha_" + companyName);
+        if(cacheObject != null){
+            JSONObject jsonObject = JSONObject.parseObject(cacheObject.toString());
+            return jsonObject;
+        }
+        String url = "https://api.qichacha.com/ExceptionCheck/GetList?key=642987ca3faf4a7daeac70463ae22695&searchKey="+companyName;
+        HttpRequest get = HttpUtil.createGet(url);
+        String timeStr = String.valueOf(System.currentTimeMillis() / 1000);
+        get.header("Token", SecureUtil.md5("642987ca3faf4a7daeac70463ae22695"+timeStr+"AC776F2957291EAE3B4161702E89A9F3").toUpperCase());
+        get.header("Timespan", timeStr);
+        HttpResponse execute = get.execute();
+        String body = execute.body();
+        JSONObject jsonObject = JSONObject.parseObject(body);
+        if("200".equals(jsonObject.get("Status"))){
+            //查询成功
+            String string = jsonObject.toString();
+            redisCache.setCacheObject("qichacha_"+companyName,string,24, TimeUnit.HOURS);
+            //统计调用次数
+            Qichacha qichacha = new Qichacha();
+            qichacha.setTime(LocalDateTime.now());
+            qichacha.setType(2);//企业异常查询
+            qichachaMapper.insert(qichacha);
+
+            return jsonObject;
+        }
+        return jsonObject;
+    }
+    private  JSONObject getReport(String sign){
+        Object cacheObject = redisCache.getCacheObject("shuimu_" + sign);
+        if(cacheObject != null){
+            JSONObject jsonObject = JSONObject.parseObject(cacheObject.toString());
+            return jsonObject;
+        }
+        HttpRequest post = HttpUtil.createPost("https://shuimui.szsmjr.com/index/index/result");
+        HashMap<String, String> stringStringHashMap = new HashMap<>();
+        stringStringHashMap.put("Origin","https://shuimui.szsmjr.com");
+        post.addHeaders(stringStringHashMap);
+        post.body("{\"sn\":\""+sign+"\"}");
+        HttpResponse execute = post.execute();
+        String body = execute.body();
+        JSONObject jsonObject = JSONObject.parseObject(body);
+        if("1001".equals(jsonObject.get("code"))){
+            //查询成功
+            String string = jsonObject.toString();
+            redisCache.setCacheObject("shuimu_"+sign,string,1, TimeUnit.MINUTES);
+            return jsonObject;
+        }
+        return jsonObject;
+    }
+    @Override
+    public R change(String id) {
+//        System.err.println(getReport("ZZD20250508017232394218445"));
+        ChangeVO changeVO = new ChangeVO();
+        Company companyInfo = companyMapper.selectById(id);
+        if (null == companyInfo || companyInfo.getIsDelete() != 0) {
+            throw new ServiceException("公司不存在");
+        }
+        JSONObject jsonObject=getReport(companyInfo.getLink().split("=")[1]);
+//        JSONObject jsonObject=getReport("ZZD20250508017232394218445");
+        if (!"1001".equals(jsonObject.getString("code"))){
+            return R.fail(jsonObject.get("msg"));
+        }
+        JSONObject data1 = (JSONObject) jsonObject.get("data");
+        JSONObject data2 = (JSONObject) data1.get("data");
+        JSONObject company = (JSONObject) data2.get("company");
+        // 银税互动
+        JSONArray bankAndTaxInteractive = (JSONArray)  company.get("bankAndTaxInteractive");
+        changeVO.setBankAndTaxInteractive(bankAndTaxInteractive);
+        //股东明细
+        JSONArray sharesRatioList = (JSONArray)  company.get("sharesRatioList");
+        changeVO.setSharesRatioList(sharesRatioList);
+        //法人/股东变更
+        JSONArray legalPersonGdChange = (JSONArray) company.get("legalPersonGdChange");
+        changeVO.setLegalPersonGdChange(legalPersonGdChange);
+
+        return R.ok(changeVO);
     }
 
     @Override
-    public ChangeVO change(String id) {
-        return null;
+    public R tax(String id) {
+        TaxVO taxVO = new TaxVO();
+        Company companyInfo = companyMapper.selectById(id);
+        if (null == companyInfo || companyInfo.getIsDelete() != 0) {
+            throw new ServiceException("公司不存在");
+        }
+        JSONObject jsonObject=getReport(companyInfo.getLink().split("=")[1]);
+//        JSONObject jsonObject=getReport("ZZD20250508017232394218445");
+        if (!"1001".equals(jsonObject.getString("code"))){
+            return R.fail(jsonObject.get("msg"));
+        }
+        JSONObject data1 = (JSONObject) jsonObject.get("data");
+        JSONObject data2 = (JSONObject) data1.get("data");
+        JSONObject taxInfo = (JSONObject) data2.get("taxInfo");
+        //税务处罚
+        JSONObject enterprise = (JSONObject) data2.get("enterprise");
+        taxVO.setEnterprise(enterprise);
+        //滞纳金情况
+        JSONArray overdueFineDetailsList = (JSONArray) taxInfo.get("overdueFineDetailsList");
+        taxVO.setOverdueFineDetailsList(overdueFineDetailsList);
+
+        //近四年纳税信息完税表
+        JSONArray taxPrev4yearsTaxInfoDict = (JSONArray) taxInfo.get("taxPrev4yearsTaxInfoDict");
+        taxVO.setTaxPrev4yearsTaxInfoDict(taxPrev4yearsTaxInfoDict);
+
+        //纳税信用等级
+        String taxCreditRating = (String) taxInfo.get("taxCreditRating");
+        taxVO.setTaxCreditRating(taxCreditRating);
+
+        //纳税人种类
+        String taxpayerType = (String) taxInfo.get("taxpayerType");
+        taxVO.setTaxpayerType(taxpayerType);
+
+        //近12月增税销售额
+        JSONObject taxPrevMnMthsAllTaxDclrPrjInfoDict = (JSONObject) taxInfo.get("taxPrevMnMthsAllTaxDclrPrjInfoDict");
+
+        JSONObject taxPrev12mthsAllTaxDclrPrjInfoDict = (JSONObject) taxPrevMnMthsAllTaxDclrPrjInfoDict.get("taxPrev12mthsAllTaxDclrPrjInfoDict");
+        taxVO.setVatTaxShouldsaleAmt12((BigDecimal) taxPrev12mthsAllTaxDclrPrjInfoDict.get("vatTaxShouldsaleAmt"));
+        //近24月增税销售额
+        JSONObject taxPrev24mthsAllTaxDclrPrjInfoDict = (JSONObject) taxPrevMnMthsAllTaxDclrPrjInfoDict.get("taxPrev24mthsAllTaxDclrPrjInfoDict");
+
+        taxVO.setVatTaxShouldsaleAmt24( (BigDecimal) taxPrev24mthsAllTaxDclrPrjInfoDict.get("vatTaxShouldsaleAmt"));
+        JSONObject taxPrevMnMthsTaxInfoDict = (JSONObject) taxInfo.get("taxPrevMnMthsTaxInfoDict");
+
+        //近12月纳税总额(元)
+        JSONObject taxPrev12mthsTaxInfo = (JSONObject) taxPrevMnMthsTaxInfoDict.get("taxPrev12mthsTaxInfo");
+        taxVO.setTaxAmt12( (BigDecimal) taxPrev12mthsTaxInfo.get("taxAmt"));
+
+        //近24月纳税总额(元)
+        JSONObject taxPrev24mthsTaxInfo = (JSONObject) taxPrevMnMthsTaxInfoDict.get("taxPrev24mthsTaxInfo");
+        taxVO.setTaxAmt24( (BigDecimal) taxPrev24mthsTaxInfo.get("taxAmt"));
+
+        //近12月增税应纳额(元)
+        taxVO.setVatTaxShouldpay( (BigDecimal) taxPrev12mthsAllTaxDclrPrjInfoDict.get("vatTaxShouldpay"));
+
+        //近12个月滞纳金金额(元) 次数
+        JSONObject taxPrevMnMthsOverdueFineInfoDict = (JSONObject) taxInfo.get("taxPrevMnMthsOverdueFineInfoDict");
+        JSONObject taxPrev12mthsOverdueFineInfo = (JSONObject) taxPrevMnMthsOverdueFineInfoDict.get("taxPrev12mthsOverdueFineInfo");
+        taxVO.setOverdueFineInfoAmt12( (BigDecimal) taxPrev12mthsOverdueFineInfo.get("overdueFineInfoAmt"));
+        taxVO.setOverdueFineInfoCnt12( (Integer) taxPrev12mthsOverdueFineInfo.get("overdueFineInfoCnt"));
+
+
+        // 近3个月滞纳金金额(元)
+        JSONObject taxPrev3mthsOverdueFineInfo = (JSONObject) taxPrevMnMthsOverdueFineInfoDict.get("taxPrev3mthsOverdueFineInfo");
+        taxVO.setOverdueFineInfoCnt3( (Integer) taxPrev3mthsOverdueFineInfo.get("overdueFineInfoCnt"));
+
+        //近12月0申报月数(月数)
+        JSONObject taxPrevMnMthsAllTaxDclrInfoDict = (JSONObject) taxInfo.get("taxPrevMnMthsAllTaxDclrInfoDict");
+        JSONObject taxPrev12mthsAllTaxDclrInfoDict = (JSONObject) taxPrevMnMthsAllTaxDclrInfoDict.get("taxPrev12mthsAllTaxDclrInfoDict");
+        taxVO.setVatTax0dclrMonCnt( (Integer) taxPrev12mthsAllTaxDclrInfoDict.get("vatTax0dclrMonCnt"));
+
+        return R.ok(taxVO);
     }
 
     @Override
-    public TaxVO tax(String id) {
-        return null;
+    public R invoice(String id) {
+        InvoiceVO vo = new InvoiceVO();
+        Company companyInfo = companyMapper.selectById(id);
+        if (null == companyInfo || companyInfo.getIsDelete() != 0) {
+            throw new ServiceException("公司不存在");
+        }
+        JSONObject jsonObject=getReport(companyInfo.getLink().split("=")[1]);
+//        JSONObject jsonObject=getReport("ZZD20250508017232394218445");
+        if (!"1001".equals(jsonObject.getString("code"))){
+            return R.fail(jsonObject.get("msg"));
+        }
+        JSONObject data1 = (JSONObject) jsonObject.get("data");
+        JSONObject data2 = (JSONObject) data1.get("data");
+        JSONObject invoiceInfo = (JSONObject) data2.get("invoiceInfo");
+        //近45日是否有开票记录
+        vo.setAnyPre45daysFpRcd((Boolean) invoiceInfo.get("anyPre45daysFpRcd"));
+
+        //近一个月开票金额(元)
+        JSONArray f4yPer1mDownFpInfoList = (JSONArray) invoiceInfo.get("f4yPer1mDownFpInfoList");
+        JSONObject f4yPer1mDownFpInfo1 = (JSONObject) f4yPer1mDownFpInfoList.get(1);
+        vo.setHjjeZc1( ObjectToBigDecimal(f4yPer1mDownFpInfo1.get("hjjeZc")) );
+
+
+        JSONObject fpPrevMnMthsDownFpInfoList = (JSONObject) invoiceInfo.get("fpPrevMnMthsDownFpInfoList");
+        JSONObject fpPrev3mthsDownFpInfoList = (JSONObject) fpPrevMnMthsDownFpInfoList.get("fpPrev3mthsDownFpInfoList");
+        //近3个月开票环比增长率
+        vo.setAvgMonJshjYxMomRate3( ObjectToBigDecimal(fpPrev3mthsDownFpInfoList.get("avgMonJshjYxMomRate")) );
+        //近3个月开票金额(元)
+        vo.setHjjeZc3( ObjectToBigDecimal( fpPrev3mthsDownFpInfoList.get("hjjeZc") ));
+
+        JSONObject fpPrev6mthsDownFpInfoList = (JSONObject) fpPrevMnMthsDownFpInfoList.get("fpPrev6mthsDownFpInfoList");
+        //近6个月开票环比增长率
+        vo.setAvgMonJshjYxMomRate6( ObjectToBigDecimal(fpPrev6mthsDownFpInfoList.get("avgMonJshjYxMomRate")) );
+        //近6月开票金额(元)
+        vo.setHjjeZc6( ObjectToBigDecimal(fpPrev6mthsDownFpInfoList.get("hjjeZc"))  );
+
+
+        JSONObject fpPrev12mthsDownFpInfoList = (JSONObject) fpPrevMnMthsDownFpInfoList.get("fpPrev12mthsDownFpInfoList");
+        //近12个月开票环比增长率
+        vo.setAvgMonJshjYxMomRate12( ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("avgMonJshjYxMomRate")) );
+        //近12月开票金额(元)
+        vo.setHjjeZc12( ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("hjjeZc"))  );
+
+        //近24个月开票金额(元)
+        JSONObject fpPrev24mthsDownFpInfoList = (JSONObject) fpPrevMnMthsDownFpInfoList.get("fpPrev24mthsDownFpInfoList");
+        vo.setHjjeZc24( ObjectToBigDecimal(fpPrev24mthsDownFpInfoList.get("hjjeZc") ));
+
+        //近12个月下游客户统计
+        vo.setDownCusCnt3( (Integer) fpPrev3mthsDownFpInfoList.get("downCusCnt"));
+        //近12个月下游客户统计
+        vo.setDownCusCnt12( (Integer) fpPrev12mthsDownFpInfoList.get("downCusCnt"));
+
+        //近12个月下游开票张数
+        vo.setKpslQb( (Integer) fpPrev12mthsDownFpInfoList.get("kpslQb"));
+
+        //近12月作废发票数量占比
+        vo.setKpslFpRatio(ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("kpslFpRatio")));
+
+        //近12月月均开票金额增长率
+        vo.setAvgMonJshjYxYoyRate(ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("avgMonJshjYxYoyRate")) );
+
+        //近12月红冲发票张数占比
+        vo.setKpslHpRatio(ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("kpslHpRatio")));
+
+        //近12个月红冲金额占比
+        vo.setHjjeHpRatio(ObjectToBigDecimal(fpPrev12mthsDownFpInfoList.get("hjjeHpRatio")) );
+
+        //近12个月最大连续未开票间隔天数(销项)
+        vo.setNokpslYxMaxdayCnt((Integer) fpPrev12mthsDownFpInfoList.get("nokpslYxMaxdayCnt"));
+
+        //近三年开票信息报表(元)
+        vo.setF4yPer1mDownFpInfoList(f4yPer1mDownFpInfoList);
+
+        return R.ok(vo);
     }
 
-    @Override
-    public InvoiceVO invoice(String id) {
-        return null;
-    }
+    private BigDecimal ObjectToBigDecimal(Object o) {
+        // 处理不同类型的情况
+        if ( o instanceof BigDecimal) {
+            return (BigDecimal) o;
+        } else if (o instanceof Number) {
+            // 将其他数字类型(如 Integer、Double)转换为 BigDecimal
+            return BigDecimal.valueOf(((Number) o).doubleValue());
 
+        }
+        return BigDecimal.ZERO;
+    }
     @Transactional
     @Override
     public void delete(String id) {
@@ -191,6 +523,7 @@
             //查看订单状态是否为待确认
             Order order = this.baseMapper.selectOne(new LambdaQueryWrapper<Order>()
                     .eq(Order::getCompanyId, company.getId())
+                            .eq(Order::getIsRefund,0)
                     .ne(Order::getStatus,-1));//取消的订单不要
             if (null == order) {
                 throw new ServiceException("订单不存在");
@@ -254,7 +587,7 @@
         if (!company.getStatus().equals(4)){// 4-锁定中
             throw new ServiceException("订单状态错误,不能操作");
         }
-        //查看订单 取消的不要
+        //查看订单
         Order order = this.baseMapper.selectOne(new LambdaQueryWrapper<Order>()
                 .eq(Order::getCompanyId, company.getId())
                 .ne(Order::getStatus,-1));
@@ -262,10 +595,10 @@
             throw new ServiceException("订单不存在");
         }
         //检查状态  3已确认(未付款) 4办理中 5卖家已完成
-        if (!order.getStatus().equals(3)||!order.getStatus().equals(4)||!order.getStatus().equals(5)) {
+        if (!order.getStatus().equals(3)&&!order.getStatus().equals(4)&&!order.getStatus().equals(5)) {
             throw new ServiceException("订单状态错误,不能操作");
         }
-        if (company.getStatus().equals(3)){
+        if (order.getStatus().equals(3)){
             //未付款 直接取消订单
             order.setStatus(-1);
             this.baseMapper.updateById(order);
@@ -275,52 +608,115 @@
             appUserMapper.updateById(user);
             //商品状态修改
             company.setStatus(1);
+            order.setIsRefund(1);
+            order.setRefundTime(LocalDateTime.now());
             companyMapper.updateById(company);
         }else{
+            // 判断是否能退
+            if(order.getShareUserId()!=null){
+                User user = appUserMapper.selectById(order.getShareUserId());
+                if(user.getBalance().doubleValue()<order.getCommissionPrice().doubleValue()){
+                    throw new ServiceException("退款失败,卖家上级余额不足");
+                }
+            }
+
+
             R r = refundPayMoney(order);//退款
             if (200 == r.getCode()) {
-                //退款成功
-                order.setStatus(-1);//订单取消状态
-                order.setIsRefund(1);//退款标志
-                order.setRefundTime(LocalDateTime.now());//退款时间
-                this.updateById(order);
-                //将分佣次数加回
-                User user = appUserMapper.selectById(order.getUserId());
-                user.setInviteNum(user.getInviteNum()+1);
-                appUserMapper.updateById(user);
-                //商品状态修改
-                company.setStatus(1);
-                companyMapper.updateById(company);
+                //退款申请成功
+                log.info("退款申请成功,订单id:{}",order.getId());
             }
         }
     }
 
     @Override
-    public R refundPayMoneyCallback(RefundCallbackResult refundCallbackResult) {
-        String code = refundCallbackResult.getR3_RefundOrderNo().substring(1);
-        log.info("退款回调:{}",code);
-        Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, code));
+    public R refundPayMoneyCallback(String xmlData ) {
+        RefundCallbackResult result = wechatPayService.processRefundCallback(xmlData);
+        if (!result.isSuccess()) {
+            System.out.println("会员退费错误:"+result.getMsg());
+            return R.fail(result.getMsg());
+        }
+        Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, result.getOrderNo()));
         if (null == order || order.getStatus() == -1) {
             return R.ok();
         }
         order.setStatus(-1);
+        order.setIsRefund(1);
+        order.setRefundTime(LocalDateTime.now());
         this.updateById(order);
+        //查找公司
+        Company company = companyMapper.selectById(order.getCompanyId());
+
+        //取消订单
+        order.setStatus(-1);
+        order.setIsRefund(1);
+        order.setRefundTime(LocalDateTime.now());
+        this.baseMapper.updateById(order);
+        //将分佣次数加回
+        User user = appUserMapper.selectById(order.getUserId());
+        User inviter = appUserMapper.selectById(user.getInviteId());
+        if (inviter!=null && inviter.getIsDelete()==0){
+            inviter.setInviteNum(inviter.getInviteNum()+1);
+            appUserMapper.updateById(inviter);
+        }
+
+        //商品状态修改
+        company.setStatus(1);
+        companyMapper.updateById(company);
+
         return R.ok();
     }
     /**
      * 返回订单支付金额
      */
+    @Autowired
+    private WechatPayService wechatPayService;
+    @Transactional
     public R refundPayMoney(Order order) {
         //开始退款
-        BigDecimal paymentAmount = order.getPrice();
         if (BigDecimal.ZERO.compareTo(order.getPrice()) < 0) {//支付的金额是否大于0
             //微信退款
-            RefundResult refund = PaymentUtil.refund(order.getOrderNo(), "R" + order.getOrderNo(), paymentAmount.doubleValue(),
-                    "/system/order/refundPayMoneyCallback");
-            if (!"100".equals(refund.getRa_Status())) {
-                return R.fail(refund.getRc_CodeMsg());//退款失败
+            Map<String,String> map = wechatPayService.refund(order.getOrderNo(), order.getOrderNo(), order.getPrice().toString(), order.getPrice().toString(), "平台取消订单", "/system/order/refundPayMoneyCallback");
+
+            if (!"SUCCESS".equals(map.get("return_code"))) {
+                return R.fail(map.get("return_msg"));//退款失败
             }
         }
+        //查找公司
+        Company company = companyMapper.selectById(order.getCompanyId());
+
+        //取消订单
+        order.setStatus(-1);
+        order.setIsRefund(1);
+        order.setRefundTime(LocalDateTime.now());
+        this.baseMapper.updateById(order);
+
+        //将分佣次数加回
+        User inviter = appUserMapper.selectById(company.getUserId());
+        if (inviter!=null && inviter.getIsDelete()==0){
+            inviter.setInviteNum(inviter.getInviteNum()+1);
+            appUserMapper.updateById(inviter);
+        }
+
+        // 分佣退回
+        if(order.getShareUserId()!=null && order.getCommissionPrice().doubleValue()>0){
+            User user = appUserMapper.selectById(order.getShareUserId());
+            user.setBalance(user.getBalance().subtract(order.getCommissionPrice()));
+            appUserMapper.updateById(user);
+            AccountDetail accountDetail = new AccountDetail();
+            accountDetail.setUserId(order.getShareUserId());
+            accountDetail.setType(2);
+            accountDetail.setCategory(4);
+            accountDetail.setSourceId(order.getId());
+            accountDetail.setMoney(order.getCommissionPrice());
+            accountDetail.setRemark("订单取消分佣退回");
+            accountDetailMapper.insert(accountDetail);
+        }
+
+        //商品状态修改
+        company.setStatus(1);
+        companyMapper.updateById(company);
+
         return R.ok();
     }
 
@@ -369,14 +765,17 @@
     }
 
     @Override
-    public FinanceFlowsTopVO financeTop() {
-        return this.baseMapper.financeTop();
+    public FinanceFlowsTopVO financeTop(FinanceFlowsDTO dto) {
+        FinanceFlowsTopVO financeFlowsTopVO = this.baseMapper.financeTop(dto);
+        return financeFlowsTopVO;
     }
 
     @Override
     public IPage<FinanceFlowsPageVO> flowsPage(FinanceFlowsDTO dto) {
         IPage<FinanceFlowsPageVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
         Long total  = this.baseMapper.countFlowsPage(dto);
+        //分页处理
+        dto.setOffset((dto.getPageNum()-1)*dto.getPageSize());
         IPage<FinanceFlowsPageVO> financeFlowsPageVOIPage = this.baseMapper.flowsPage(page, dto);
         financeFlowsPageVOIPage.setTotal(total);
         return financeFlowsPageVOIPage;

--
Gitblit v1.7.1