|
|
@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.core.tool.utils.Func;
|
|
|
import org.springblade.los.Util.IDeptUtils;
|
|
|
import org.springblade.los.basic.business.entity.BusinessType;
|
|
|
import org.springblade.los.basic.business.service.IBusinessTypeService;
|
|
|
@@ -235,7 +236,7 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
|
|
|
data.setBusinessBillNo(item.getBillNo());
|
|
|
data.setBusinessDate(item.getBillDate());
|
|
|
if ("SEA".equals(item.getBusinessType()) || "SIA".equals(item.getBusinessType())
|
|
|
- || "AEA".equals(item.getBusinessType()) || "AIA".equals(item.getBusinessType())) {
|
|
|
+ || "AEA".equals(item.getBusinessType()) || "AIA".equals(item.getBusinessType())) {
|
|
|
Amends amends = amendsList.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(new Amends());
|
|
|
data.setSrcId(amends.getSrcId());
|
|
|
data.setSrcCnName(amends.getSrcCnName());
|
|
|
@@ -510,6 +511,389 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R generateBillBatch(String billsIds) {
|
|
|
+ List<FeeCenter> feeCenterListOld = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenter::getAccStatus, 0));
|
|
|
+ if (feeCenterListOld.isEmpty()) {
|
|
|
+ throw new RuntimeException("没找到可生成账单费用信息");
|
|
|
+ }
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ String deptId = "";
|
|
|
+ String deptName = "";
|
|
|
+ String branchId = deptUtils.getDeptPid() + "";
|
|
|
+ //获取部门ids对应中文名
|
|
|
+ if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
|
|
|
+ deptId = deptUtils.getDeptPid() + "";
|
|
|
+ R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid() + "");
|
|
|
+ if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
|
|
|
+ deptName = String.join(",", res.getData());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Bills> billsList = new ArrayList<>();
|
|
|
+ List<Amends> amendsList = new ArrayList<>();
|
|
|
+ List<Long> ids = Func.toLongList(billsIds);
|
|
|
+ String status = sysClient.getParamService("generate.billing.rules");
|
|
|
+ for (FeeCenter item : feeCenterListOld) {
|
|
|
+ if (1 == item.getAccStatus()) {
|
|
|
+ throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单");
|
|
|
+ }
|
|
|
+ boolean amountStatus = true;
|
|
|
+ if (new BigDecimal("0.00").compareTo(item.getAmount()) > 0) {
|
|
|
+ amountStatus = false;
|
|
|
+ }
|
|
|
+ if ("1".equals(status)) {
|
|
|
+ if (ObjectUtils.isNotNull(item.getPid()) && ObjectUtils.isNotNull(item.getCorpId()) &&
|
|
|
+ ObjectUtils.isNotNull(item.getDc()) && ObjectUtils.isNotNull(item.getElementsId()) && ObjectUtils.isNotNull(item.getCurCode())) {
|
|
|
+ item.setBillKey(item.getPid() + "-" + item.getCorpId() + "-" + item.getDc() + "-" + item.getElementsCode() + "-" + item.getCurCode() + "-" + amountStatus);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("单据号、单位、费用类型、核算要素不能为空");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (ObjectUtils.isNotNull(item.getPid()) && ObjectUtils.isNotNull(item.getCorpId()) &&
|
|
|
+ ObjectUtils.isNotNull(item.getDc()) && ObjectUtils.isNotNull(item.getFeeId()) && ObjectUtils.isNotNull(item.getCurCode())) {
|
|
|
+ item.setBillKey(item.getPid() + "-" + item.getCorpId() + "-" + item.getDc() + "-" + item.getFeeCode() + "-" + item.getCurCode() + "-" + amountStatus);
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("单据号、单位、费用类型、费用名称不能为空");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
|
|
|
+ .eq(BusinessType::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BusinessType::getIsDeleted, 0)
|
|
|
+ .eq(BusinessType::getStatus, 0)
|
|
|
+ .eq(BusinessType::getCode, "HYZD"));
|
|
|
+ if (businessType == null) {
|
|
|
+ throw new RuntimeException("未找到可用业务类型");
|
|
|
+ }
|
|
|
+ List<FeeCenter> reducelList = feeCenterListOld.stream().filter(distinctByKey(FeeCenter::getBillKey)).collect(Collectors.toList());
|
|
|
+ if (ObjectUtils.isNotNull(ids) && !ids.isEmpty()) {
|
|
|
+ billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
|
|
|
+ .eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted, 0)
|
|
|
+ .in(Bills::getId, ids));
|
|
|
+ for (Bills item : billsList) {
|
|
|
+ String texts = "";
|
|
|
+ if (ObjectUtils.isNull(item.getMblno())) {
|
|
|
+ texts = texts + "提单号、";
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNull(item.getVesselId())) {
|
|
|
+ texts = texts + "船名、";
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNull(item.getVoyageNo())) {
|
|
|
+ texts = texts + "航次、";
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNull(item.getPodId())) {
|
|
|
+ texts = texts + "卸货港、";
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNull(item.getCarrierId())) {
|
|
|
+ texts = texts + "船公司、";
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNull(item.getCyId())) {
|
|
|
+ texts = texts + "场站、";
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNotNull(texts)) {
|
|
|
+ throw new RuntimeException("单号:" + item.getBillNo() + "," + texts + "不能为空");
|
|
|
+ }
|
|
|
+ item.setBillingStatus(item.getBillingStatus() + reducelList.size());
|
|
|
+ item.setBillSort(item.getVesselId() + item.getVoyageNo());
|
|
|
+ billsMapper.updateById(item);
|
|
|
+ }
|
|
|
+ if (billsList.stream().filter(distinctByKey(Bills::getBillSort)).count() > 1) {
|
|
|
+ throw new RuntimeException("请选择同一船名航次下的业务生成账单");
|
|
|
+ }
|
|
|
+ amendsList = amendsMapper.selectList(new LambdaQueryWrapper<Amends>()
|
|
|
+ .eq(Amends::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Amends::getIsDeleted, 0)
|
|
|
+ .in(Amends::getId, ids));
|
|
|
+ }
|
|
|
+ for (FeeCenter item : reducelList) {
|
|
|
+ BigDecimal amountCNY = feeCenterListOld.stream()
|
|
|
+ .filter(e -> e.getBillKey().equals(item.getBillKey()) && item.getCurCode().equals(e.getCurCode())
|
|
|
+ && "CNY".equals(e.getCurCode()))
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal amountUSD = feeCenterListOld.stream()
|
|
|
+ .filter(e -> e.getBillKey().equals(item.getBillKey()) && item.getCurCode().equals(e.getCurCode())
|
|
|
+ && "USD".equals(e.getCurCode()))
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ FinAccBills data = new FinAccBills();
|
|
|
+ data.setCreateTime(new Date());
|
|
|
+ data.setCreateUser(AuthUtil.getUserId());
|
|
|
+ data.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ data.setCreateDept(deptId);
|
|
|
+ data.setCreateDeptName(deptName);
|
|
|
+ data.setBranchId(branchId);
|
|
|
+ data.setDeptId(deptUtils.getDeptPid());
|
|
|
+ data.setDeptName(deptName);
|
|
|
+ BusinessBillNo businessBillNo = new BusinessBillNo();
|
|
|
+ businessBillNo.setBusinessTypeId(businessType.getId());
|
|
|
+ businessBillNo.setCode("HYZD");
|
|
|
+ R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
|
|
|
+ if (!clientBillNo.isSuccess()) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成订单编号失败");
|
|
|
+ }
|
|
|
+ data.setBillNo((String) clientBillNo.getData());
|
|
|
+ data.setBillDate(new Date());
|
|
|
+ data.setAccountType("");
|
|
|
+ data.setAccountDc(item.getDc());
|
|
|
+ data.setAccountDate(item.getBillDate());
|
|
|
+ data.setBillKey(item.getBillKey());
|
|
|
+ data.setBusinessType(item.getBusinessType());
|
|
|
+ data.setBusinessBillId(item.getPid());
|
|
|
+ data.setBusinessBillNo(item.getBillNo());
|
|
|
+ data.setBusinessDate(item.getBillDate());
|
|
|
+ if ("SEA".equals(item.getBusinessType()) || "SIA".equals(item.getBusinessType())
|
|
|
+ || "AEA".equals(item.getBusinessType()) || "AIA".equals(item.getBusinessType())) {
|
|
|
+ Amends amends = amendsList.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(new Amends());
|
|
|
+ data.setSrcId(amends.getSrcId());
|
|
|
+ data.setSrcCnName(amends.getSrcCnName());
|
|
|
+ data.setSrcEnName(amends.getSrcEnName());
|
|
|
+ data.setSrcType(amends.getSrcType());
|
|
|
+ data.setOperatorId(amends.getOperatorId());
|
|
|
+ data.setOperatorName(amends.getOperatorName());
|
|
|
+ data.setQuantityCntrDescr(amends.getQuantityCntrDescr());
|
|
|
+ data.setTeamId(amends.getTeamId());
|
|
|
+ data.setTeamName(amends.getTeamName());
|
|
|
+ } else if ("SE".equals(item.getBusinessType()) || "SI".equals(item.getBusinessType())) {
|
|
|
+ Bills bills = billsList.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(new Bills());
|
|
|
+ data.setSrcId(bills.getSrcId());
|
|
|
+ data.setSrcCnName(bills.getSrcCnName());
|
|
|
+ data.setSrcEnName(bills.getSrcEnName());
|
|
|
+ data.setSrcType(bills.getSrcType());
|
|
|
+ data.setOperatorId(bills.getOperatorId());
|
|
|
+ data.setOperatorName(bills.getOperatorName());
|
|
|
+ data.setQuantityCntrDescr(bills.getQuantityCntrDescr());
|
|
|
+ data.setCorpArgreementNo(bills.getCorpArgreementNo());
|
|
|
+ data.setRefno(bills.getRefno());
|
|
|
+ data.setBookingNo(bills.getBookingNo());
|
|
|
+ data.setPolNamePrint(bills.getPolNamePrint());
|
|
|
+ data.setPodNamePrint(bills.getPodNamePrint());
|
|
|
+ data.setTeamId(bills.getTeamId());
|
|
|
+ data.setTeamName(bills.getTeamName());
|
|
|
+ } else {
|
|
|
+ data.setSrcId(item.getSrcId());
|
|
|
+ data.setSrcCnName(item.getSrcCnName());
|
|
|
+ data.setSrcEnName(item.getSrcEnName());
|
|
|
+ data.setSrcType(item.getSrcType());
|
|
|
+ data.setOperatorId(item.getCreateUser());
|
|
|
+ data.setOperatorName(item.getCreateUserName());
|
|
|
+ }
|
|
|
+ data.setPaymode(item.getPaymode());
|
|
|
+ data.setAccelementid(item.getElementsId());
|
|
|
+ data.setAccelementname(item.getElementsCnName());
|
|
|
+ data.setCorpId(item.getCorpId());
|
|
|
+ data.setCorpCnName(item.getCorpCnName());
|
|
|
+ data.setCorpEnName(item.getCorpEnName());
|
|
|
+ data.setBillCorpId(item.getBillCorpId());
|
|
|
+ data.setBillCorpCnName(item.getBillCorpCnName());
|
|
|
+ data.setBillCorpEnName(item.getBillCorpEnName());
|
|
|
+ data.setVesselId(item.getVesselId());
|
|
|
+ data.setVesselCnName(item.getVesselCnName());
|
|
|
+ data.setVesselEnName(item.getVesselEnName());
|
|
|
+ data.setVoyageNo(item.getVoyageNo());
|
|
|
+ data.setMblno(item.getMblno());
|
|
|
+ data.setHblno(item.getHblno());
|
|
|
+ data.setEtd(item.getEtd());
|
|
|
+ data.setEta(item.getEta());
|
|
|
+ data.setPolId(item.getPolId());
|
|
|
+ data.setPolCnName(item.getPolCnName());
|
|
|
+ data.setPolEnName(item.getPolEnName());
|
|
|
+ data.setPodId(item.getPodId());
|
|
|
+ data.setPodCnName(item.getPodCnName());
|
|
|
+ data.setPodCode(item.getPodCode());
|
|
|
+ data.setPodEnName(item.getPodEnName());
|
|
|
+ BigDecimal amountDrLoc = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountCrLoc = new BigDecimal("0.00");
|
|
|
+ if ("CNY".equals(item.getCurCode())) {
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ data.setAmountDr(amountCNY);
|
|
|
+ data.setAmountCr(new BigDecimal("0.00"));
|
|
|
+ } else {
|
|
|
+ data.setAmountCr(amountCNY);
|
|
|
+ data.setAmountDr(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+ data.setAmountDrUsd(new BigDecimal("0.00"));
|
|
|
+ data.setAmountCrUsd(new BigDecimal("0.00"));
|
|
|
+ } else {
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ data.setAmountDrUsd(amountUSD);
|
|
|
+ data.setAmountCrUsd(new BigDecimal("0.00"));
|
|
|
+ } else {
|
|
|
+ data.setAmountDrUsd(new BigDecimal("0.00"));
|
|
|
+ data.setAmountCrUsd(amountUSD);
|
|
|
+ }
|
|
|
+ data.setAmountDr(new BigDecimal("0.00"));
|
|
|
+ data.setAmountCr(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ObjectUtils.isNotNull(data.getAmountCrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
|
|
|
+ BigDecimal crCny = data.getAmountCrUsd().multiply(item.getExrate());
|
|
|
+ amountCrLoc = amountCrLoc.add(data.getAmountCr()).add(crCny);
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNotNull(data.getAmountDrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
|
|
|
+ BigDecimal drCny = data.getAmountDrUsd().multiply(item.getExrate());
|
|
|
+ amountDrLoc = amountDrLoc.add(data.getAmountDr()).add(drCny);
|
|
|
+ }
|
|
|
+ data.setAmountDrLoc(amountDrLoc);
|
|
|
+ data.setAmountCrLoc(amountCrLoc);
|
|
|
+ this.saveOrUpdate(data);
|
|
|
+ finAccBillsList.add(data);
|
|
|
+ List<FeeCenter> feeCenterList1 = feeCenterListOld.stream()
|
|
|
+ .filter(e -> e.getBillKey().equals(item.getBillKey())).collect(Collectors.toList());
|
|
|
+ for (FeeCenter feeCenterItem : feeCenterList1) {
|
|
|
+ feeCenterItem.setAccBillId(data.getId());
|
|
|
+ feeCenterItem.setAccBillNo(data.getBillNo());
|
|
|
+ feeCenterItem.setAccDate(data.getBillDate());
|
|
|
+ feeCenterItem.setAccAmount(amountDrLoc.add(amountCrLoc));
|
|
|
+ feeCenterItem.setAccStatus(1);
|
|
|
+ feeCenterItem.setAccById(AuthUtil.getUserId());
|
|
|
+ feeCenterItem.setAccByName(AuthUtil.getUserName());
|
|
|
+ feeCenterItem.setAuditStatus("2");
|
|
|
+ feeCenterList.add(feeCenterItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
+ return R.data("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R revokeBillBatch(String billsIds) {
|
|
|
+ List<FeeCenter> feeCenterListOld = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenter::getAccStatus, 0));
|
|
|
+ if (feeCenterListOld.isEmpty()) {
|
|
|
+ throw new RuntimeException("没找到可生成账单费用信息");
|
|
|
+ }
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ List<Bills> billsList = new ArrayList<>();
|
|
|
+ List<Long> ids = Func.toLongList(billsIds);
|
|
|
+ if (ObjectUtils.isNotNull(ids) && !ids.isEmpty()) {
|
|
|
+ billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
|
|
|
+ .eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted, 0)
|
|
|
+ .in(Bills::getId, ids));
|
|
|
+ }
|
|
|
+ List<Long> finAccBillsIds = feeCenterListOld.stream().map(FeeCenter::getAccBillId).distinct().collect(Collectors.toList());
|
|
|
+ String finAccBillsBillNo = feeCenterListOld.stream().map(FeeCenter::getBillNo).distinct().collect(Collectors.joining(","));
|
|
|
+ if (!finAccBillsIds.isEmpty()) {
|
|
|
+ List<FinInvoicesItems> finInvoicesItems = finInvoicesItemsMapper.selectList(new LambdaQueryWrapper<FinInvoicesItems>()
|
|
|
+ .eq(FinInvoicesItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinInvoicesItems::getIsDeleted, 0)
|
|
|
+ .in(FinInvoicesItems::getAccBillId, finAccBillsIds));
|
|
|
+ if (!finInvoicesItems.isEmpty()) {
|
|
|
+ List<Long> finInvoicesIds = finInvoicesItems.stream().map(FinInvoicesItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
+ String finInvoices = finInvoicesMapper.selectList(new LambdaQueryWrapper<FinInvoices>()
|
|
|
+ .eq(FinInvoices::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinInvoices::getIsDeleted, 0)
|
|
|
+ .in(FinInvoices::getId, finInvoicesIds)).stream().map(FinInvoices::getBillNo).collect(Collectors.joining(","));
|
|
|
+ throw new RuntimeException("账单已生成发票单,撤销失败! 发票单号为:" + finInvoices);
|
|
|
+ }
|
|
|
+ List<FinStlBillsItems> finStlBillsItemsCHK = finStlBillsItemsMapper.selectList(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .eq(FinStlBillsItems::getItemType, "CHK")
|
|
|
+ .in(FinStlBillsItems::getAccBillId, finAccBillsIds));
|
|
|
+ if (!finStlBillsItemsCHK.isEmpty()) {
|
|
|
+ List<Long> finStlBillsIds = finStlBillsItemsCHK.stream().map(FinStlBillsItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
+ String finStlBills = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
|
|
|
+ .eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBills::getIsDeleted, 0)
|
|
|
+ .in(FinStlBills::getId, finStlBillsIds)).stream().map(FinStlBills::getBillNo).collect(Collectors.joining(","));
|
|
|
+ throw new RuntimeException("账单已生成对账单,撤销失败! 对账单号为:" + finStlBills);
|
|
|
+ }
|
|
|
+ List<FinStlBillsItems> finStlBillsItemsSTLD = finStlBillsItemsMapper.selectList(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .eq(FinStlBillsItems::getItemType, "STL")
|
|
|
+ .eq(FinStlBillsItems::getDc, "D")
|
|
|
+ .in(FinStlBillsItems::getAccBillId, finAccBillsIds));
|
|
|
+ if (!finStlBillsItemsSTLD.isEmpty()) {
|
|
|
+ List<Long> finStlBillsIds = finStlBillsItemsSTLD.stream().map(FinStlBillsItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
+ String finStlBills = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
|
|
|
+ .eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBills::getIsDeleted, 0)
|
|
|
+ .in(FinStlBills::getId, finStlBillsIds)).stream().map(FinStlBills::getBillNo).collect(Collectors.joining(","));
|
|
|
+ throw new RuntimeException("账单已生成收款单,撤销失败! 收款单号为:" + finStlBills);
|
|
|
+ }
|
|
|
+ List<FinStlBillsItems> finStlBillsItemsSTLC = finStlBillsItemsMapper.selectList(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .eq(FinStlBillsItems::getItemType, "STL")
|
|
|
+ .eq(FinStlBillsItems::getDc, "C")
|
|
|
+ .in(FinStlBillsItems::getAccBillId, finAccBillsIds));
|
|
|
+ if (!finStlBillsItemsSTLC.isEmpty()) {
|
|
|
+ List<Long> finStlBillsIds = finStlBillsItemsSTLC.stream().map(FinStlBillsItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
+ String finStlBills = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
|
|
|
+ .eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBills::getIsDeleted, 0)
|
|
|
+ .in(FinStlBills::getId, finStlBillsIds)).stream().map(FinStlBills::getBillNo).collect(Collectors.joining(","));
|
|
|
+ throw new RuntimeException("账单已生成付款单,撤销失败! 付款单号为:" + finStlBills);
|
|
|
+ }
|
|
|
+ List<FinStlBillsItems> finStlBillsItemsFFSQ = finStlBillsItemsMapper.selectList(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .eq(FinStlBillsItems::getItemType, "FFSQ")
|
|
|
+ .in(FinStlBillsItems::getAccBillId, finAccBillsIds));
|
|
|
+ if (!finStlBillsItemsFFSQ.isEmpty()) {
|
|
|
+ List<Long> finStlBillsIds = finStlBillsItemsFFSQ.stream().map(FinStlBillsItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
+ String finStlBills = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
|
|
|
+ .eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBills::getIsDeleted, 0)
|
|
|
+ .in(FinStlBills::getId, finStlBillsIds)).stream().map(FinStlBills::getBillNo).collect(Collectors.joining(","));
|
|
|
+ throw new RuntimeException("账单已付费申请,撤销失败! 付费申请单号为:" + finStlBills);
|
|
|
+ }
|
|
|
+ List<FinVouchersItems> finVouchersItems = finVouchersItemsMapper.selectList(new LambdaQueryWrapper<FinVouchersItems>()
|
|
|
+ .eq(FinVouchersItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinVouchersItems::getIsDeleted, 0)
|
|
|
+ .apply("find_in_set(bill_no,'" + finAccBillsBillNo + "')"));
|
|
|
+ if (!finVouchersItems.isEmpty()) {
|
|
|
+ List<Long> finStlBillsIds = finVouchersItems.stream().map(FinVouchersItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
+ String finVouchers = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
|
|
|
+ .eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBills::getIsDeleted, 0)
|
|
|
+ .in(FinStlBills::getId, finStlBillsIds)).stream().map(FinStlBills::getBillNo).collect(Collectors.joining(","));
|
|
|
+ throw new RuntimeException("账单已生成凭证,撤销失败! 凭证单号为:" + finVouchers);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("未找到账单信息");
|
|
|
+ }
|
|
|
+ this.removeByIds(finAccBillsIds);
|
|
|
+ List<FeeCenter> feeCenterList1 = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .in(FeeCenter::getAccBillId, finAccBillsIds));
|
|
|
+ for (FeeCenter feeCenterItem : feeCenterList1) {
|
|
|
+ if (0 == feeCenterItem.getAccStatus()) {
|
|
|
+ throw new RuntimeException("费用:" + feeCenterItem.getFeeCnName() + "未生成账单,撤销失败");
|
|
|
+ }
|
|
|
+ feeCenterItem.setAccBillId(0L);
|
|
|
+ feeCenterItem.setAccBillNo("");
|
|
|
+ feeCenterItem.setAccDate(null);
|
|
|
+ feeCenterItem.setAccAmount(new BigDecimal("0.00"));
|
|
|
+ feeCenterItem.setAccStatus(0);
|
|
|
+ feeCenterItem.setAccById(0L);
|
|
|
+ feeCenterItem.setAccByName("");
|
|
|
+ feeCenterList.add(feeCenterItem);
|
|
|
+ }
|
|
|
+ feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
+ for (Bills item : billsList) {
|
|
|
+ if (item.getBillingStatus() == 0) {
|
|
|
+ throw new RuntimeException("撤销账单失败");
|
|
|
+ }
|
|
|
+ item.setBillingStatus(item.getBillingStatus() - finAccBillsIds.size());
|
|
|
+ billsMapper.updateById(item);
|
|
|
+ }
|
|
|
+ return R.data("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
|
|
|
Set<Object> seen = ConcurrentHashMap.newKeySet();
|
|
|
return t -> seen.add(keyExtractor.apply(t));
|