liusheng
2023-11-08 dc0ce40d1ae331a054017ae322da930f07094f52
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
@@ -6,14 +6,19 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.LockSupport;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.tax.TaxtUtils;
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.utils.bean.DtoConversionUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.*;
import com.ruoyi.project.mapper.*;
@@ -21,7 +26,9 @@
import com.ruoyi.project.service.IServiceFunddetailService;
import com.ruoyi.project.service.IServiceFunddetailSharedService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -104,6 +111,9 @@
        if (serviceFund.getUploadtime() != null) {
            wrappers.eq(ServiceFund::getUploadtime, serviceFund.getUploadtime());
        }
        if (serviceFund.getFlowlevel() != null) {
            wrappers.eq(ServiceFund::getFlowlevel, serviceFund.getFlowlevel());
        }
        return this.list(wrappers);
    }
@@ -154,7 +164,14 @@
            //数据发送给财务
            uploadOAFileAndUpdateDb(serviceFunddetailShareds.get(i));
        }
        boolean result = detailSharedService.saveBatch(serviceFunddetailShareds);
        boolean result = false;
        for (ServiceFunddetailShared serviceFunddetailShared : serviceFunddetailShareds) {
            if (ObjectUtils.isNotEmpty(serviceFunddetailShared)) {
                result = detailSharedService.save(serviceFunddetailShared);
            } else {
                log.info("serviceFunddetailShared为空了!!!");
            }
        }
        return result;
    }
@@ -648,8 +665,8 @@
    }
    @Override
    public List<SpFinancialExpensesFundOut> getListBypower(String PAUSERNO, Integer PAFUNDTYPE, String PAAPPLICANT, String PAAPPLICATIONBEGTIME, String PAAPPLICATIONENDTIME, String PADEPARTMENT, Integer CHECKFLAG, Integer APPLYTYPE) {
        return serviceFundMapper.getListBypower(PAUSERNO, PAFUNDTYPE, PAAPPLICANT, PAAPPLICATIONBEGTIME, PAAPPLICATIONENDTIME, PADEPARTMENT, CHECKFLAG, APPLYTYPE);
    public List<SpFinancialExpensesFundOut> getListBypower(String PAUSERNO, Integer PAFUNDTYPE, String PAAPPLICANT, String PAAPPLICATIONBEGTIME, String PAAPPLICATIONENDTIME, String PADEPARTMENT, Integer CHECKFLAG, Integer APPLYTYPE, Integer CHECKSTATUS, String donorname) {
        return serviceFundMapper.getListBypower(PAUSERNO, PAFUNDTYPE, PAAPPLICANT, PAAPPLICATIONBEGTIME, PAAPPLICATIONENDTIME, PADEPARTMENT, CHECKFLAG, APPLYTYPE, CHECKSTATUS, donorname);
    }
    @Override
@@ -667,17 +684,12 @@
    }
    @Override
    @Transactional
    @Transactional(rollbackFor = Exception.class)
    public Long addOrUpdateNew(ServiceFundVO serviceFundVO) {
        Long id = null;
        //将数据保存到fund表
        if (serviceFundVO.getId() == null) {
            save(serviceFundVO);
            id = serviceFundVO.getId();
        } else {
            updateById(serviceFundVO);
            id = serviceFundVO.getId();
        }
        id = saveFund(serviceFundVO);
        List<ServiceFunddetailVO> serviceFunddetails = serviceFundVO.getServiceFunddetails();
        if (CollectionUtils.isEmpty(serviceFunddetails)) {
            System.out.println("serviceFunddetails为空喽");
@@ -690,6 +702,9 @@
            if (!CollectionUtils.isEmpty(serviceFunddetailVO.getAnnexfilesList())) {
                serviceFunddetailVO.setAnnexfiles(JSON.toJSONString(serviceFunddetailVO.getAnnexfilesList()));
            }
            if (!CollectionUtils.isEmpty(serviceFunddetailVO.getInvoicefilesList())) {
                serviceFunddetailVO.setInvoicefiles(JSON.toJSONString(serviceFunddetailVO.getInvoicefilesList()));
            }
            ServiceFunddetail serviceFunddetail = DtoConversionUtils.sourceToTarget(serviceFunddetailVO, ServiceFunddetail.class);
            if (serviceFunddetailVO.getId() == null) {
@@ -701,6 +716,148 @@
        return id;
    }
    @Override
    public Map<String, Long> performance(ServiceFundVO serviceFundVO) {
        Long id = null;
        //将数据保存到fund表
        id = saveFund(serviceFundVO);
        List<ServiceFunddetailVO> serviceFunddetails = serviceFundVO.getServiceFunddetails();
        if (CollectionUtils.isEmpty(serviceFunddetails)) {
            System.out.println("serviceFunddetails为空喽");
            return null;
        }
        //总税前
        Double pretaxcosts = 0.00;
        //总税后
        Double taxedcosts = 0.00;
        for (ServiceFunddetailVO serviceFunddetailVO : serviceFunddetails) {
            serviceFunddetailVO.setFundid(id);
            ServiceFunddetail serviceFunddetail = DtoConversionUtils.sourceToTarget(serviceFunddetailVO, ServiceFunddetail.class);
            Map<String, Double> performance = serviceFunddetailService.performance(serviceFunddetail);
            if (!performance.isEmpty()) {
                Double amount = performance.get("amount");
                Double taxedamount = performance.get("taxedamount");
                pretaxcosts = pretaxcosts + amount;
                taxedcosts = taxedcosts + taxedamount;
            }
            serviceFundVO.setPretaxcost(pretaxcosts);
            serviceFundVO.setTaxedcost(taxedcosts);
            updateById(serviceFundVO);
        }
        Map map = new HashMap();
        map.put("fundId", id);
        return map;
    }
    @Override
    public Boolean totaltax(TotalTaxVO totalTaxVO) {
        if (totalTaxVO.getIsTaxAfter() == null) {
            //如何为空,默认当没有算过税,进行合计
            totalTaxVO.setIsTaxAfter(0);
        }
        List<ServiceFunddetail> serviceFunddetails = serviceFunddetailMapper.totlaTax(totalTaxVO.getFundids());
        if (CollectionUtils.isEmpty(serviceFunddetails)) {
            throw new BaseException("查询的详情数据为空");
        }
        //用于返回excel
        List<ServiceFunddetailExcel> serviceFunddetailList = new ArrayList<>();
        //打印excel
        ExcelUtil<ServiceFunddetailExcel> util = new ExcelUtil<ServiceFunddetailExcel>(ServiceFunddetailExcel.class);
        if (totalTaxVO.getIsTaxAfter() == 1) {
            //通过受益人名称,将税前、税后的值相加
            Map<String, Double> sumAmount = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname, Collectors.summingDouble(ServiceFunddetail::getAmount)));
            Map<String, Double> sumTaxdAmount = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname, Collectors.summingDouble(ServiceFunddetail::getTaxedamount)));
            for (String key : sumAmount.keySet()) {
                ServiceFunddetailExcel serviceFunddetailExcel = new ServiceFunddetailExcel();
                serviceFunddetailExcel.setAmount(sumAmount.getOrDefault(key, 0.0));
                serviceFunddetailExcel.setTaxedamount(sumTaxdAmount.getOrDefault(key, 0.0));
                for (ServiceFunddetail serviceFunddetail2 : serviceFunddetails) {
                    if (serviceFunddetail2.getBeneficiaryname().equals(key)) {
                        serviceFunddetailExcel.setIdcardno(serviceFunddetail2.getIdcardno());
                        serviceFunddetailExcel.setBankcardno(serviceFunddetail2.getBankcardno());
                        serviceFunddetailExcel.setBeneficiaryname(serviceFunddetail2.getBeneficiaryname());
                        serviceFunddetailExcel.setDepositbank(serviceFunddetail2.getDepositbank());
                        serviceFunddetailExcel.setBranchbankname(serviceFunddetail2.getBranchbankname());
                        serviceFunddetailExcel.setDonorname(serviceFunddetail2.getDonorname());
                        serviceFunddetailExcel.setPhone(serviceFunddetail2.getPhone());
                        break;
                    }
                }
                serviceFunddetailList.add(serviceFunddetailExcel);
            }
            //打印算过税之后的,合计excel
            util.exportExcel(serviceFunddetailList, "合计个税(税后)");
        } else {
            a:
            for (ServiceFunddetail serviceFunddetail : serviceFunddetails) {
                ServiceFunddetailExcel sfeBefore = new ServiceFunddetailExcel();
                ServiceFunddetailExcel sfeAfter = new ServiceFunddetailExcel();
                for (ServiceFunddetailExcel serviceFunddetailExcel : serviceFunddetailList) {
                    //判断一下,该受益人是否已经计算过,已经计算过了,就不算了
                    if (serviceFunddetail.getBeneficiaryname().trim().equals(serviceFunddetailExcel.getBeneficiaryname().trim())) {
                        continue a;
                    }
                }
                for (ServiceFunddetail serviceFunddetail2 : serviceFunddetails) {
                    if (StringUtils.isEmpty(serviceFunddetail2.getServicesscopename())) {
                        throw new BaseException("服务说明为空,请检查后再计算");
                    }
                    if (serviceFunddetail.getBeneficiaryname().equals(serviceFunddetail2.getBeneficiaryname()) && !(serviceFunddetail2.getServicesscopename().equals("税后"))) {
                        //累计税前
                        sfeBefore.setIdcardno(serviceFunddetail2.getIdcardno());
                        sfeBefore.setBankcardno(serviceFunddetail2.getBankcardno());
                        sfeBefore.setBeneficiaryname(serviceFunddetail2.getBeneficiaryname());
                        sfeBefore.setDepositbank(serviceFunddetail2.getDepositbank());
                        sfeBefore.setBranchbankname(serviceFunddetail2.getBranchbankname());
                        sfeBefore.setDonorname(serviceFunddetail2.getDonorname());
                        sfeBefore.setPhone(serviceFunddetail2.getPhone());
                        if (sfeBefore.getAmount() == null) {
                            sfeBefore.setAmount(serviceFunddetail2.getAmount());
                        } else {
                            sfeBefore.setAmount(sfeBefore.getAmount() + serviceFunddetail2.getAmount());
                        }
                        sfeBefore.setTaxedamount(null);
                    } else if (serviceFunddetail.getBeneficiaryname().equals(serviceFunddetail2.getBeneficiaryname()) && serviceFunddetail2.getServicesscopename().equals("税后")) {
                        //累计税后
                        sfeAfter.setIdcardno(serviceFunddetail2.getIdcardno());
                        sfeAfter.setBankcardno(serviceFunddetail2.getBankcardno());
                        sfeAfter.setBeneficiaryname(serviceFunddetail2.getBeneficiaryname());
                        sfeAfter.setDepositbank(serviceFunddetail2.getDepositbank());
                        sfeAfter.setBranchbankname(serviceFunddetail2.getBranchbankname());
                        sfeAfter.setDonorname(serviceFunddetail2.getDonorname());
                        sfeAfter.setPhone(serviceFunddetail2.getPhone());
                        sfeAfter.setAmount(null);
                        if (sfeAfter.getTaxedamount() == null) {
                            sfeAfter.setTaxedamount(serviceFunddetail2.getTaxedamount());
                        } else {
                            sfeAfter.setTaxedamount(sfeAfter.getTaxedamount() + serviceFunddetail2.getTaxedamount());
                        }
                    }
                }
                //将计算好的税前总值、税后总值,放到List中
                if (ObjectUtils.isNotEmpty(sfeBefore.getBeneficiaryname())) serviceFunddetailList.add(sfeBefore);
                if (ObjectUtils.isNotEmpty(sfeAfter.getBeneficiaryname())) serviceFunddetailList.add(sfeAfter);
            }
            //打印算税之前的,合计excel
            util.exportExcel(serviceFunddetailList, "合计个税(税前)");
        }
        return true;
    }
    int uploadOAFileAndUpdateDb(ServiceFunddetailShared remShare) {
        //上传OA文件
@@ -725,8 +882,24 @@
        String filePath = RuoYiConfig.getUploadPath();
        String strFUrl = "http://129.88.242.39:8899/seeyon/rest/attachment?token=" + strRes;
        List<RbDetailFile> parseArray2 = new ArrayList<>();
        List<RbDetailFile> invoicefilesList = new ArrayList<>();
        //普通附件
        List<RbDetailFile> parseArray = JSON.parseArray(remShare.getAnnexfiles(), RbDetailFile.class);
        log.info("parseArray的值 : {}", parseArray);
        //发票附件
        List<RbDetailFile> invoicefilesArray = JSON.parseArray(remShare.getInvoicefiles(), RbDetailFile.class);
        log.info("parseArray的值 : {}, invoicefilesArray的值 : {},", parseArray, invoicefilesArray);
        //普通附件
        uploadFile(filePath, strFUrl, parseArray2, parseArray, remShare, "1");
        //发票附件
        uploadFile(filePath, strFUrl, invoicefilesList, invoicefilesArray, remShare, "2");
        return 0;
    }
    private Integer uploadFile(String filePath, String strFUrl, List<RbDetailFile> parseArray2, List<RbDetailFile> parseArray, ServiceFunddetailShared remShare, String flag) {
        if (!CollectionUtils.isEmpty(parseArray)) {
            for (int i = 0; i < parseArray.size(); i++) {
                RbDetailFile rbDetailFile = parseArray.get(i);
@@ -742,7 +915,7 @@
                    String struploadResult = HttpClientKit.sendPostWithFile(filetest, strFUrl);
                    log.info("第三方传回的数据: {}", struploadResult);
                    if (StringUtils.isEmpty(struploadResult)) {
                        log.info("HttpClientKit.sendPostWithFile 请求为空了 filetest:{},  strFUrl:{} ", filetest, strFUrl);
                        log.error("HttpClientKit.sendPostWithFile 请求为空了 filetest:{},  strFUrl:{} ", filetest, strFUrl);
                        return 0;
                    }
                    //获取fileid
@@ -758,12 +931,17 @@
                }
                parseArray2.add(rbDetailFile);
            }
            remShare.setAnnexfiles(JSON.toJSONString(parseArray2));
            if (flag.equals("1")) {
                //如果flag为1,则是普通
                remShare.setAnnexfiles(JSON.toJSONString(parseArray2));
            } else if (flag.equals("2")) {
                //如果flag为2,则是发票
                remShare.setInvoicefiles(JSON.toJSONString(parseArray2));
            }
            log.info("ServiceReimbursementdetailShared 是否加上了fileid : {}", remShare);
        }
        return 0;
    }
//    int uploadOAFileAndUpdateDb(ServiceFundShared remShare) {
//        //上传OA文件
@@ -857,4 +1035,18 @@
//        return 0;
//    }
    public long saveFund(ServiceFundVO serviceFundVO) {
        Long id = null;
        //将数据保存到fund表
        if (ObjectUtils.isNotEmpty(serviceFundVO) && serviceFundVO.getId() == null) {
            serviceFundVO.setCheckstatus(serviceFundVO.getCheckstatus() == null ? 1 : 2);
            save(serviceFundVO);
            id = serviceFundVO.getId();
        } else {
            updateById(serviceFundVO);
            id = serviceFundVO.getId();
        }
        return id;
    }
}