|
|
@@ -1,20 +1,18 @@
|
|
|
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.google.gson.JsonElement;
|
|
|
+import com.google.gson.JsonObject;
|
|
|
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.InvAccountCard;
|
|
|
-import com.ydtech.modules.inv.model.InvAccountIncoice;
|
|
|
-import com.ydtech.modules.inv.model.InvAccountOperate;
|
|
|
+import com.ydtech.modules.inv.model.*;
|
|
|
import com.ydtech.modules.inv.model.vo.InvAccountIncoiceQueryVo;
|
|
|
-import com.ydtech.modules.inv.service.InvAccountCardService;
|
|
|
-import com.ydtech.modules.inv.service.InvAccountIncoiceService;
|
|
|
-import com.ydtech.modules.inv.service.InvAccountOperateService;
|
|
|
+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;
|
|
|
@@ -24,7 +22,9 @@ import org.springframework.util.ObjectUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
import static com.ydtech.modules.inv.utils.TransferUtils.*;
|
|
|
|
|
|
@@ -43,6 +43,11 @@ public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceM
|
|
|
private InvAccountCardService invAccountCardService;
|
|
|
@Autowired
|
|
|
private InvAccountOperateService invAccountOperateService;
|
|
|
+ @Autowired
|
|
|
+ private InvAccountService invAccountService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private InvAccountOpService invAccountOpService;
|
|
|
|
|
|
@Value("${upload.file.path}")
|
|
|
String uploadFilePath;
|
|
|
@@ -51,7 +56,7 @@ public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceM
|
|
|
public HttpResult insertInvAccountIncoice(InvAccountIncoice invAccountIncoice) {
|
|
|
BigDecimal tax = getBigDecimal(invAccountIncoice);
|
|
|
//不含税金额
|
|
|
- BigDecimal noHasTax = new BigDecimal(invAccountIncoice.getInvoiceMoney()).subtract(tax);
|
|
|
+ BigDecimal noHasTax = new BigDecimal(invAccountIncoice.getInvoiceMoney()).subtract(tax);
|
|
|
invAccountIncoice.setNotPayoutMoney(invAccountIncoice.getInvoiceMoney());
|
|
|
|
|
|
//税额
|
|
|
@@ -59,11 +64,12 @@ public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceM
|
|
|
//不含税金额
|
|
|
invAccountIncoice.setNoHasTax(tax.toString());
|
|
|
|
|
|
- return HttpResult.ok(invAccountIncoiceMapper.insert(invAccountIncoice));
|
|
|
+ return HttpResult.ok(invAccountIncoiceMapper.insert(invAccountIncoice));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 新增收入
|
|
|
+ *
|
|
|
* @param invAccountIncoice
|
|
|
* @return
|
|
|
*/
|
|
|
@@ -71,56 +77,155 @@ public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceM
|
|
|
public HttpResult updateInvAccountIncoice(InvAccountIncoice invAccountIncoice) {
|
|
|
InvAccountIncoice invAccountIncoice1 = invAccountIncoiceMapper.selectById(invAccountIncoice.getInvoiceId());
|
|
|
|
|
|
- if(new BigDecimal(invAccountIncoice1.getInvoiceMoney()).subtract(new BigDecimal(invAccountIncoice1.getPayoutMoney()).add(new BigDecimal(invAccountIncoice.getPayoutMoney()))).compareTo(new BigDecimal("0")) < 0){
|
|
|
+ if (new BigDecimal(invAccountIncoice1.getInvoiceMoney()).subtract(new BigDecimal(invAccountIncoice1.getPayoutMoney()).add(new BigDecimal(invAccountIncoice.getPayoutMoney()))).compareTo(new BigDecimal("0")) < 0) {
|
|
|
throw new SystemException("进账金额大于开票金额");
|
|
|
}
|
|
|
|
|
|
//进账卡号
|
|
|
- String bankCardNum = invAccountIncoice1.getBankCardNum();
|
|
|
+ String bankCardNum = invAccountIncoice1.getRevBankCardNum();
|
|
|
//进账金额
|
|
|
- String payoutMoney = new BigDecimal(invAccountIncoice.getPayoutMoney()).add(new BigDecimal(invAccountIncoice1.getPayoutMoney())).toString();
|
|
|
- invAccountIncoice1.setPayoutMoney(payoutMoney);
|
|
|
+ String payoutMoney = new BigDecimal(invAccountIncoice.getPayoutMoney()).toString();
|
|
|
+ invAccountIncoice1.setPayoutMoney(new BigDecimal(invAccountIncoice1.getPayoutMoney()).add(new BigDecimal(payoutMoney)).toString());
|
|
|
invAccountIncoice1.setNotPayoutMoney(new BigDecimal(invAccountIncoice1.getInvoiceMoney()).subtract(new BigDecimal(payoutMoney)).toString());
|
|
|
invAccountIncoice1.setPayoutTime(invAccountIncoice.getPayoutTime());
|
|
|
|
|
|
+ if (invAccountIncoice1.getNotPayoutMoney().equals("0")) {
|
|
|
+ invAccountIncoice1.setClearFlag("1");
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
//修改发票增加卡的收入
|
|
|
InvAccountOperate invAccountOperate = new InvAccountOperate();
|
|
|
invAccountOperate.setEnterCardId(bankCardNum);
|
|
|
invAccountOperate.setApplyAmount(payoutMoney);
|
|
|
- invAccountOperate.setRemark(invAccountIncoice1.getRemark());
|
|
|
invAccountOperate.setRevenueOutlay("0");
|
|
|
invAccountOperate.setFundFlow(invAccountIncoice.getFundFlow());
|
|
|
invAccountOperate.setPayMethod(invAccountIncoice.getPayMethod());
|
|
|
invAccountOperate.setCompany(invAccountIncoice1.getOtherUnit());
|
|
|
invAccountOperate.setFundUse(invAccountIncoice.getFundUse());
|
|
|
+ invAccountOperate.setRemark(invAccountIncoice.getRemark());
|
|
|
+ invAccountOperate.setFundFen(invAccountIncoice.getFundFen());
|
|
|
invAccountOperate.setInvoiceId(invAccountIncoice1.getInvoiceId());
|
|
|
+ //计算收入百分比
|
|
|
+ JSONObject entProfit = invAccountIncoice.getEntProfit();
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ for (Map.Entry<String, Object> entry : entProfit.entrySet()) {
|
|
|
+ BigDecimal multiply = new BigDecimal(String.valueOf(entry.getValue())).multiply(new BigDecimal(invAccountIncoice.getPayoutMoney())).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
|
|
|
+ jsonObject.put(entry.getKey(), multiply);
|
|
|
+ }
|
|
|
+ invAccountOperate.setOutProfit(jsonObject);
|
|
|
+ invAccountOperate.setEnterCardId(invAccountIncoice.getRevBankCardNum());
|
|
|
+
|
|
|
+ InvAccount account = invAccountService.getById(invAccountIncoice1.getAccountId());
|
|
|
+ InvAccountCard entCard = invAccountCardService.getById(invAccountIncoice1.getRevBankCardNum());
|
|
|
+ InvAccountCard outCard = invAccountCardService.getById(invAccountIncoice1.getOutBankCardNum());
|
|
|
+
|
|
|
+
|
|
|
+ List<InvAccountOp> list = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, Object> entry:invAccountOperate.getOutProfit().entrySet()){
|
|
|
+ InvAccountOp invAccountOp = new InvAccountOp();
|
|
|
+ invAccountOp.setAccountId(invAccountIncoice1.getAccountId());
|
|
|
+ invAccountOp.setAccountName(account.getAccountName());
|
|
|
+ invAccountOp.setCardNum(entCard.getBankCardNum());
|
|
|
+ invAccountOp.setCardName(entCard.getBankName());
|
|
|
+ invAccountOp.setProfit(entry.getKey());
|
|
|
+ invAccountOp.setMoney(entry.getValue().toString());
|
|
|
+ list.add(invAccountOp);
|
|
|
+ }
|
|
|
|
|
|
- invAccountIncoiceMapper.updateById(invAccountIncoice1);
|
|
|
|
|
|
|
|
|
- return invAccountOperateService.insertIncoice(invAccountOperate,invAccountIncoice1.getBankCardNum());
|
|
|
- }
|
|
|
+ //支出操作
|
|
|
+ InvAccountOperate outInvAccountOperate = new InvAccountOperate();
|
|
|
+ outInvAccountOperate.setEnterCardId(invAccountIncoice1.getOutBankCardNum());
|
|
|
+ outInvAccountOperate.setApplyAmount(payoutMoney);
|
|
|
+ outInvAccountOperate.setRevenueOutlay("1");
|
|
|
+ outInvAccountOperate.setFundFlow(invAccountIncoice.getFundFlow());
|
|
|
+ outInvAccountOperate.setPayMethod(invAccountIncoice.getPayMethod());
|
|
|
+ outInvAccountOperate.setCompany(invAccountIncoice1.getOtherUnit());
|
|
|
+ outInvAccountOperate.setFundUse(invAccountIncoice.getFundUse());
|
|
|
+ outInvAccountOperate.setFundFen(invAccountIncoice.getFundFen());
|
|
|
+ outInvAccountOperate.setRemark(invAccountIncoice.getRemark());
|
|
|
+ outInvAccountOperate.setInvoiceId(invAccountIncoice1.getInvoiceId());
|
|
|
+ //计算支出百分比
|
|
|
+ JSONObject outProfit = invAccountIncoice.getOutProfit();
|
|
|
+ JSONObject outJsonObject = new JSONObject();
|
|
|
+ for (Map.Entry<String, Object> entry : outProfit.entrySet()) {
|
|
|
+ BigDecimal multiply = new BigDecimal(String.valueOf(entry.getValue())).multiply(new BigDecimal(invAccountIncoice.getPayoutMoney())).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
|
|
|
+ outJsonObject.put(entry.getKey(), multiply.negate());
|
|
|
+ }
|
|
|
+ outInvAccountOperate.setOutProfit(outJsonObject);
|
|
|
+ invAccountOperate.setEnterCardId(invAccountIncoice.getOutBankCardNum());
|
|
|
+
|
|
|
+ List<InvAccountOperate> invAccountOperateList = new ArrayList<>();
|
|
|
+ invAccountOperateList.add(outInvAccountOperate);
|
|
|
+ invAccountOperateList.add(invAccountOperate);
|
|
|
+
|
|
|
+
|
|
|
+ for (Map.Entry<String, Object> entry:outInvAccountOperate.getOutProfit().entrySet()){
|
|
|
+ InvAccountOp invAccountOp = new InvAccountOp();
|
|
|
+ invAccountOp.setAccountId(invAccountIncoice1.getAccountId());
|
|
|
+ invAccountOp.setAccountName(account.getAccountName());
|
|
|
+ invAccountOp.setCardNum(outCard.getBankCardNum());
|
|
|
+ invAccountOp.setCardName(outCard.getBankName());
|
|
|
+ invAccountOp.setProfit(entry.getKey());
|
|
|
+ invAccountOp.setMoney(entry.getValue().toString());
|
|
|
+ list.add(invAccountOp);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
+ invAccountOpService.saveBatch(list);
|
|
|
+
|
|
|
+
|
|
|
+ //支出卡号
|
|
|
+ String outBankCardNum = invAccountIncoice1.getOutBankCardNum();
|
|
|
+ //支出账户
|
|
|
+ InvAccountCard outInvAccountCard = invAccountCardService.getById(outBankCardNum);
|
|
|
+ //收入账户
|
|
|
+ InvAccountCard revInvAccountCard = invAccountCardService.getById(bankCardNum);
|
|
|
+ if (outInvAccountCard == null || revInvAccountCard == null) {
|
|
|
+ throw new SystemException("支出账户或收入账户为空");
|
|
|
+ }
|
|
|
+ //判断收款方是内部还是外部
|
|
|
+ InvAccount revInvAccount = invAccountService.getById(revInvAccountCard.getAccountId());
|
|
|
+
|
|
|
+ //转账
|
|
|
+ if (revInvAccount.getOuterFlag().equals("0")) {
|
|
|
+ InvAccountExcel invAccountExcel = new InvAccountExcel();
|
|
|
+ invAccountExcel.setApplyAmount(invAccountIncoice.getPayoutMoney());
|
|
|
+ List<InvAccountCard> invAccountCards = insideTransfer(outInvAccountCard, revInvAccountCard, invAccountExcel);
|
|
|
+ invAccountCardService.updateBatchById(invAccountCards);
|
|
|
+ invAccountOperateService.saveBatch(invAccountOperateList);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ InvAccountExcel invAccountExcel = new InvAccountExcel();
|
|
|
+ invAccountExcel.setOutAccountQuality(revInvAccount.getOuterFlag());
|
|
|
+ invAccountExcel.setApplyAmount(invAccountIncoice.getPayoutMoney());
|
|
|
+ List<InvAccountCard> invAccountCards = enterDeTransfer(outInvAccountCard, revInvAccountCard, invAccountExcel);
|
|
|
+ invAccountCardService.updateBatchById(invAccountCards);
|
|
|
+ invAccountOperateService.saveBatch(invAccountOperateList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return HttpResult.ok(invAccountIncoiceMapper.updateById(invAccountIncoice1));
|
|
|
+ }
|
|
|
|
|
|
|
|
|
private static BigDecimal getBigDecimal(InvAccountIncoice invAccountIncoice) {
|
|
|
- if (invAccountIncoice.getRate().isEmpty()){
|
|
|
+ if (invAccountIncoice.getRate().isEmpty()) {
|
|
|
throw new SystemException("请填写税率");
|
|
|
}
|
|
|
|
|
|
- if (invAccountIncoice.getInvoiceMoney().isEmpty()){
|
|
|
+ if (invAccountIncoice.getInvoiceMoney().isEmpty()) {
|
|
|
throw new SystemException("请填写开票金额");
|
|
|
}
|
|
|
- if (invAccountIncoice.getPayoutMoney().isEmpty()){
|
|
|
+ if (invAccountIncoice.getPayoutMoney().isEmpty()) {
|
|
|
throw new SystemException("请填写进账金额");
|
|
|
}
|
|
|
//税率百分数转为小数
|
|
|
BigDecimal divide = new BigDecimal(invAccountIncoice.getRate()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
|
|
|
//税额
|
|
|
- BigDecimal tax = new BigDecimal(invAccountIncoice.getInvoiceMoney()).divide((divide.add(new BigDecimal("1"))), 2, RoundingMode.HALF_UP);
|
|
|
- return tax;
|
|
|
+ return new BigDecimal(invAccountIncoice.getInvoiceMoney()).divide((divide.add(new BigDecimal("1"))), 2, RoundingMode.HALF_UP);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -128,23 +233,30 @@ public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceM
|
|
|
//发票信息
|
|
|
InvAccountIncoice enInvAccountIncoice = invAccountIncoiceMapper.selectById(invAccountIncoice.getInvoiceId());
|
|
|
//回滚收入
|
|
|
- InvAccountCard enterAccount = invAccountCardService.getById(enInvAccountIncoice.getBankCardNum());
|
|
|
+ InvAccountCard enterAccount = invAccountCardService.getById(enInvAccountIncoice.getRevBankCardNum());
|
|
|
+ InvAccountCard outAccount = invAccountCardService.getById(enInvAccountIncoice.getOutBankCardNum());
|
|
|
|
|
|
//新增收入回滚操作
|
|
|
- InvAccountCard invAccount = quashOutsideTransfer(enterAccount, enInvAccountIncoice);
|
|
|
+ List<InvAccountCard> invAccount = quashOutsideTransfer(outAccount, enterAccount, enInvAccountIncoice);
|
|
|
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());
|
|
|
+
|
|
|
try {
|
|
|
invAccountIncoiceMapper.updateById(invAccountIncoice);
|
|
|
- invAccountCardService.updateById(invAccount);
|
|
|
+ invAccountCardService.updateBatchById(invAccount);
|
|
|
invAccountOperateService.remove(lambdaQuery);
|
|
|
- }catch (Exception e){
|
|
|
+ invAccountOperateService.remove(lambdaQuery1);
|
|
|
+ } catch (Exception e) {
|
|
|
return HttpResult.error("撤销失败");
|
|
|
}
|
|
|
|
|
|
@@ -161,7 +273,7 @@ public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceM
|
|
|
.eq(InvAccountIncoice::getDelFlag, "0")
|
|
|
.eq(!StringUtils.isEmpty(invAccountIncoiceQueryVo.getInvoiceType()), InvAccountIncoice::getInvoiceType,
|
|
|
invAccountIncoiceQueryVo.getInvoiceType())
|
|
|
- .like(!StringUtils.isEmpty(invAccountIncoiceQueryVo.getOtherUnit()), InvAccountIncoice::getOtherUnit,invAccountIncoiceQueryVo.getOtherUnit());
|
|
|
+ .like(!StringUtils.isEmpty(invAccountIncoiceQueryVo.getOtherUnit()), InvAccountIncoice::getOtherUnit, invAccountIncoiceQueryVo.getOtherUnit());
|
|
|
|
|
|
|
|
|
if (!ObjectUtils.isEmpty(invAccountIncoiceQueryVo.getInvoiceTime())) {
|
|
|
@@ -171,20 +283,20 @@ public class InvAccountIncoiceServiceImpl extends ServiceImpl<InvAccountIncoiceM
|
|
|
|
|
|
//解决时间格式报错问题
|
|
|
invAccountIncoices.forEach(invAccountIncoice -> {
|
|
|
- if (invAccountIncoice.getPayoutTime() != null){
|
|
|
+ if (invAccountIncoice.getPayoutTime() != null) {
|
|
|
invAccountIncoice.setPayoutDate(invAccountIncoice.getPayoutTime().toString());
|
|
|
}
|
|
|
- if (invAccountIncoice.getInvoiceTime() != null){
|
|
|
+ if (invAccountIncoice.getInvoiceTime() != null) {
|
|
|
invAccountIncoice.setInvoiceDate(invAccountIncoice.getInvoiceTime().toString());
|
|
|
}
|
|
|
- if (invAccountIncoice.getInvoiceType() != null){
|
|
|
+ if (invAccountIncoice.getInvoiceType() != null) {
|
|
|
invAccountIncoice.setInvoiceType(InvoiceTypeEnum.getNameByCode(invAccountIncoice.getInvoiceType()));
|
|
|
}
|
|
|
- if (invAccountIncoice.getRate() != null){
|
|
|
- invAccountIncoice.setRate(invAccountIncoice.getRate()+"%");
|
|
|
+ if (invAccountIncoice.getRate() != null) {
|
|
|
+ invAccountIncoice.setRate(invAccountIncoice.getRate() + "%");
|
|
|
}
|
|
|
});
|
|
|
- return EasyExcelUtils.downExcel(uploadFilePath,InvAccountIncoice.class,invAccountIncoices);
|
|
|
+ return EasyExcelUtils.downExcel(uploadFilePath, InvAccountIncoice.class, invAccountIncoices);
|
|
|
}
|
|
|
|
|
|
}
|