| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- package com.ydtech.modules.inv.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.ydtech.constants.enums.inv.InvoiceTypeEnum;
- import com.ydtech.core.page.HttpResult;
- import com.ydtech.exception.SystemException;
- import com.ydtech.modules.inv.dao.InvAccountIncoiceMapper;
- import com.ydtech.modules.inv.model.*;
- import com.ydtech.modules.inv.model.vo.InvAccountIncoiceQueryVo;
- import com.ydtech.modules.inv.service.*;
- import com.ydtech.modules.inv.utils.EasyExcelUtils;
- import com.ydtech.utils.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.util.ObjectUtils;
- import java.io.File;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.time.LocalDateTime;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import static com.ydtech.modules.inv.utils.TransferUtils.*;
- /**
- * 发票管理表(InvAccountIncoice)表服务实现类
- *
- * @author makejava
- * @since 2024-01-18 16:01:31
- */
- @Service("invAccountIncoiceService")
- public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceMapper, InvAccountIncoice> implements InvAccountIncoiceService {
- @Autowired
- private InvAccountIncoiceMapper invAccountIncoiceMapper;
- @Autowired
- private InvAccountCardService invAccountCardService;
- @Autowired
- private InvAccountOperateService invAccountOperateService;
- @Autowired
- private InvAccountService invAccountService;
- @Autowired
- private InvAccountOpService invAccountOpService;
- @Value("${upload.file.path}")
- String uploadFilePath;
- @Override
- public HttpResult insertInvAccountIncoice(InvAccountIncoice invAccountIncoice) {
- if (invAccountIncoice.getRevBankCardNum().equals(invAccountIncoice.getOutBankCardNum())) {
- throw new SystemException("无法给本公司开票");
- }
- BigDecimal tax = getBigDecimal(invAccountIncoice);
- //不含税金额
- BigDecimal noHasTax = new BigDecimal(invAccountIncoice.getInvoiceMoney()).subtract(tax);
- invAccountIncoice.setNotPayoutMoney(invAccountIncoice.getInvoiceMoney());
- //税额
- invAccountIncoice.setTax(noHasTax.toString());
- //不含税金额
- invAccountIncoice.setNoHasTax(tax.toString());
- return HttpResult.ok(invAccountIncoiceMapper.insert(invAccountIncoice));
- }
- /**
- * 新增收入
- *
- * @param invAccountIncoice
- * @return
- */
- @Override
- public HttpResult updateInvAccountIncoice(InvAccountIncoice invAccountIncoice) {
- InvAccountIncoice invAccountIncoice1 = invAccountIncoiceMapper.selectById(invAccountIncoice.getInvoiceId());
- //支出卡号
- String outBankCardNum = invAccountIncoice1.getOutBankCardNum();
- //进账卡号
- String entBankCardNum = invAccountIncoice1.getRevBankCardNum();
- //收入卡
- InvAccountCard entCard = invAccountCardService.getById(invAccountIncoice1.getRevBankCardNum());
- //支出卡
- InvAccountCard outCard = invAccountCardService.getById(invAccountIncoice1.getOutBankCardNum());
- //收入账户
- InvAccount revInvAccount = invAccountService.getById(entCard.getAccountId());
- //支出账户
- InvAccount outInvAccount = invAccountService.getById(outCard.getAccountId());
- //收入金额
- String payoutMoney = invAccountIncoice.getPayoutMoney();
- //支出归属
- JSONObject outProfit = invAccountIncoice.getOutProfit();
- //收入归属
- JSONObject entProfit = invAccountIncoice.getEntProfit();
- if (new BigDecimal(invAccountIncoice1.getInvoiceMoney()).subtract(new BigDecimal(invAccountIncoice1.getPayoutMoney()).add(new BigDecimal(payoutMoney))).compareTo(new BigDecimal("0")) < 0) {
- throw new SystemException("进账金额大于开票金额");
- }
- //进账金额
- invAccountIncoice1.setPayoutMoney(new BigDecimal(invAccountIncoice1.getPayoutMoney()).add(new BigDecimal(payoutMoney)).toString());
- invAccountIncoice1.setNotPayoutMoney(new BigDecimal(invAccountIncoice1.getInvoiceMoney()).subtract(new BigDecimal(invAccountIncoice1.getPayoutMoney())).toString());
- invAccountIncoice1.setPayoutTime(invAccountIncoice.getPayoutTime());
- if (invAccountIncoice1.getNotPayoutMoney().equals("0")) {
- invAccountIncoice1.setClearFlag("1");
- }
- //资金流出
- String fundFlow = invAccountIncoice1.getOtherUnit() + "→" + invAccountIncoice1.getInvoiceBy();
- Date date = new Date();
- //收入操作记录
- InvAccountOperate invAccountOperate = new InvAccountOperate();
- invAccountOperate.setEnterCardId(entBankCardNum);
- invAccountOperate.setApplyAmount(payoutMoney);
- invAccountOperate.setRevenueOutlay("0");
- invAccountOperate.setFundFlow(fundFlow);
- invAccountOperate.setPayMethod(invAccountIncoice.getPayMethod());
- invAccountOperate.setCompany(invAccountIncoice1.getOtherUnit());
- invAccountOperate.setFundUse(invAccountIncoice.getFundUse());
- invAccountOperate.setFundFen(invAccountIncoice.getFundFen());
- invAccountOperate.setInvoiceId(invAccountIncoice1.getInvoiceId());
- invAccountOperate.setCreateTime(LocalDateTime.now());
- invAccountOperate.setEntProfit(entProfit);
- invAccountOperate.setDel(String.valueOf(date.getTime()));
- invAccountOperate.setOutCardNum(outCard.getBankCardNum());
- invAccountOperate.setEnterCardNum(entCard.getBankCardNum());
- //支出操作记录
- InvAccountOperate outInvAccountOperate = new InvAccountOperate();
- outInvAccountOperate.setOutCardNum(outBankCardNum);
- outInvAccountOperate.setApplyAmount(payoutMoney);
- outInvAccountOperate.setRevenueOutlay("1");
- outInvAccountOperate.setFundFlow(fundFlow);
- outInvAccountOperate.setPayMethod(invAccountIncoice.getPayMethod());
- outInvAccountOperate.setCompany(invAccountIncoice1.getOtherUnit());
- outInvAccountOperate.setFundUse(invAccountIncoice.getFundUse());
- outInvAccountOperate.setFundFen(invAccountIncoice.getFundFen());
- outInvAccountOperate.setInvoiceId(invAccountIncoice1.getInvoiceId());
- outInvAccountOperate.setCreateTime(LocalDateTime.now());
- outInvAccountOperate.setOutProfit(outProfit);
- outInvAccountOperate.setDel(String.valueOf(date.getTime()));
- outInvAccountOperate.setOutCardNum(outCard.getBankCardNum());
- outInvAccountOperate.setEnterCardNum(entCard.getBankCardNum());
- //放入操作记录list中
- List<InvAccountOperate> invAccountOperateList = new ArrayList<>();
- invAccountOperateList.add(outInvAccountOperate);
- invAccountOperateList.add(invAccountOperate);
- //判断收款方是内部还是外部
- if (outInvAccount.getOuterFlag().equals("0")) {
- if (revInvAccount.getOuterFlag().equals("0")) {
- InvAccountExcel invAccountExcel = new InvAccountExcel();
- invAccountExcel.setApplyAmount(payoutMoney);
- List<InvAccountCard> invAccountCards = insideTransfer(outCard, outInvAccount, entCard, revInvAccount, payoutMoney);
- invAccountCardService.updateBatchById(invAccountCards);
- invAccountOperateService.saveBatch(invAccountOperateList);
- //归属列表
- List<InvAccountOp> list = new ArrayList<>();
- List<InvAccountOp> list1 = invAccountEntOpList(entProfit, revInvAccount, entCard, payoutMoney,invAccountOperateList.get(0).getAccountOperateId());
- List<InvAccountOp> list2 = invAccountOutOpList(outProfit, outInvAccount, outCard, payoutMoney,invAccountOperateList.get(0).getAccountOperateId());
- //将发票id放入 防止撤销发票时对应归属没删掉
- list1.forEach(invAccountOp -> {
- invAccountOp.setInvoiceId(invAccountIncoice1.getInvoiceId());
- });
- list2.forEach(invAccountOp -> {
- invAccountOp.setInvoiceId(invAccountIncoice1.getInvoiceId());
- });
- list.addAll(list1);
- list.addAll(list2);
- invAccountOpService.saveBatch(list);
- } else {
- InvAccountExcel invAccountExcel = new InvAccountExcel();
- invAccountExcel.setOutAccountQuality(revInvAccount.getOuterFlag());
- invAccountExcel.setApplyAmount(payoutMoney);
- List<InvAccountCard> invAccountCards = enterDeTransfer(outCard, outInvAccount, entCard, revInvAccount, payoutMoney);
- invAccountCardService.updateBatchById(invAccountCards);
- invAccountOperateService.saveBatch(invAccountOperateList);
- //归属列表
- List<InvAccountOp> list = new ArrayList<>();
- List<InvAccountOp> list1 = invAccountEntOpList(entProfit, revInvAccount, entCard, payoutMoney,invAccountOperateList.get(0).getAccountOperateId());
- List<InvAccountOp> list2 = invAccountOutOpList(outProfit, outInvAccount, outCard, payoutMoney,invAccountOperateList.get(0).getAccountOperateId());
- //将发票id放入 防止撤销发票时对应归属没删掉
- list1.forEach(invAccountOp -> {
- invAccountOp.setInvoiceId(invAccountIncoice1.getInvoiceId());
- });
- list2.forEach(invAccountOp -> {
- invAccountOp.setInvoiceId(invAccountIncoice1.getInvoiceId());
- });
- list.addAll(list1);
- list.addAll(list2);
- invAccountOpService.saveBatch(list);
- }
- } else {
- //转账给外部重新设置操作
- InvAccountOperate invAccountOperate1 = new InvAccountOperate();
- invAccountOperate1.setOutCardId(invAccountIncoice1.getOutBankCardNum());
- invAccountOperate1.setEnterCardId(invAccountIncoice1.getRevBankCardNum());
- invAccountOperate1.setApplyAmount(payoutMoney);
- invAccountOperate1.setRevenueOutlay("0");
- invAccountOperate1.setFundFlow(fundFlow);
- invAccountOperate1.setPayMethod(invAccountIncoice.getPayMethod());
- invAccountOperate1.setCompany(invAccountIncoice1.getOtherUnit());
- invAccountOperate1.setFundUse(invAccountIncoice.getFundUse());
- invAccountOperate1.setFundFen(invAccountIncoice.getFundFen());
- invAccountOperate1.setInvoiceId(invAccountIncoice1.getInvoiceId());
- invAccountOperate1.setOutProfit(outProfit);
- invAccountOperate1.setEntProfit(entProfit);
- outInvAccountOperate.setEnterCardNum(entCard.getBankCardNum());
- invAccountOperateService.insert(invAccountOperate1);
- }
- return HttpResult.ok(invAccountIncoiceMapper.updateById(invAccountIncoice1));
- }
- public static BigDecimal getBigDecimal(InvAccountIncoice invAccountIncoice) {
- if (invAccountIncoice.getRate().isEmpty()) {
- throw new SystemException("请填写税率");
- }
- if (invAccountIncoice.getInvoiceMoney().isEmpty()) {
- throw new SystemException("请填写开票金额");
- }
- if (invAccountIncoice.getPayoutMoney().isEmpty()) {
- throw new SystemException("请填写进账金额");
- }
- //税率百分数转为小数
- BigDecimal divide = new BigDecimal(invAccountIncoice.getRate()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
- //税额
- return new BigDecimal(invAccountIncoice.getInvoiceMoney()).divide((divide.add(new BigDecimal("1"))), 2, RoundingMode.HALF_UP);
- }
- @Override
- public HttpResult delInvAccountIncoice(InvAccountIncoice invAccountIncoice) {
- //发票信息
- InvAccountIncoice enInvAccountIncoice = invAccountIncoiceMapper.selectById(invAccountIncoice.getInvoiceId());
- //回滚收入
- InvAccountCard enterAccount = invAccountCardService.getById(enInvAccountIncoice.getRevBankCardNum());
- InvAccountCard outAccount = invAccountCardService.getById(enInvAccountIncoice.getOutBankCardNum());
- //新增收入回滚操作
- List<InvAccountCard> invAccount = quashOutsideTransfer(outAccount, enterAccount, new BigDecimal(enInvAccountIncoice.getInvoiceMoney()));
- InvAccountOperate invAccountOperate = new InvAccountOperate();
- invAccountOperate.setRevenueOutlay("1");
- invAccountOperate.setApplyAmount("发票撤销 收入撤销");
- invAccountOperate.setCompany(enInvAccountIncoice.getInvoiceBy());
- LambdaQueryWrapper<InvAccountOperate> lambdaQuery = new LambdaQueryWrapper<>();
- lambdaQuery.eq(InvAccountOperate::getInvoiceId, invAccountIncoice.getInvoiceId());
- LambdaQueryWrapper<InvAccountOperate> lambdaQuery1 = new LambdaQueryWrapper<>();
- lambdaQuery1.eq(InvAccountOperate::getInvoiceId, invAccountIncoice.getInvoiceId());
- LambdaQueryWrapper<InvAccountOp> lambdaQueryWrapper = new LambdaQueryWrapper<>();
- lambdaQueryWrapper.eq(InvAccountOp::getInvoiceId, invAccountIncoice.getInvoiceId());
- try {
- invAccountIncoiceMapper.updateById(invAccountIncoice);
- invAccountCardService.updateBatchById(invAccount);
- invAccountOperateService.remove(lambdaQuery);
- invAccountOperateService.remove(lambdaQuery1);
- invAccountOpService.remove(lambdaQueryWrapper);
- } catch (Exception e) {
- return HttpResult.error("撤销失败");
- }
- return HttpResult.ok("撤销成功");
- }
- @Override
- public String excel(InvAccountIncoiceQueryVo invAccountIncoiceQueryVo) {
- LambdaQueryWrapper<InvAccountIncoice> lambdaQuery = new LambdaQueryWrapper<>();
- lambdaQuery
- .like(!StringUtils.isEmpty(invAccountIncoiceQueryVo.getBiller()), InvAccountIncoice::getBiller, invAccountIncoiceQueryVo.getBiller())
- .like(!StringUtils.isEmpty(invAccountIncoiceQueryVo.getInvoiceBy()), InvAccountIncoice::getInvoiceBy,
- invAccountIncoiceQueryVo.getInvoiceBy())
- .eq(InvAccountIncoice::getDelFlag, "0")
- .eq(!StringUtils.isEmpty(invAccountIncoiceQueryVo.getInvoiceType()), InvAccountIncoice::getInvoiceType,
- invAccountIncoiceQueryVo.getInvoiceType())
- .like(!StringUtils.isEmpty(invAccountIncoiceQueryVo.getOtherUnit()), InvAccountIncoice::getOtherUnit, invAccountIncoiceQueryVo.getOtherUnit());
- if (!ObjectUtils.isEmpty(invAccountIncoiceQueryVo.getInvoiceTime())) {
- lambdaQuery.eq(InvAccountIncoice::getInvoiceTime, invAccountIncoiceQueryVo.getInvoiceTime().toString());
- }
- List<InvAccountIncoice> invAccountIncoices = invAccountIncoiceMapper.selectList(lambdaQuery);
- //解决时间格式报错问题
- invAccountIncoices.forEach(invAccountIncoice -> {
- if (invAccountIncoice.getPayoutTime() != null) {
- invAccountIncoice.setPayoutDate(invAccountIncoice.getPayoutTime().toString());
- }
- if (invAccountIncoice.getInvoiceTime() != null) {
- invAccountIncoice.setInvoiceDate(invAccountIncoice.getInvoiceTime().toString());
- }
- if (invAccountIncoice.getInvoiceType() != null) {
- invAccountIncoice.setInvoiceType(InvoiceTypeEnum.getNameByCode(invAccountIncoice.getInvoiceType()));
- }
- if (invAccountIncoice.getRate() != null) {
- invAccountIncoice.setRate(invAccountIncoice.getRate() + "%");
- }
- });
- File folder = new File(uploadFilePath);
- if (folder.exists()) {
- return EasyExcelUtils.downExcel(uploadFilePath, InvAccountIncoice.class, invAccountIncoices);
- } else {
- if (folder.mkdirs()) {
- return EasyExcelUtils.downExcel(uploadFilePath, InvAccountIncoice.class, invAccountIncoices);
- } else {
- throw new SystemException("文件导出失败");
- }
- }
- }
- }
|