| | |
| | | package com.by4cloud.platformx.business.service.impl; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import cn.hutool.core.date.DatePattern; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | |
| | | import com.by4cloud.platformx.business.mapper.*; |
| | | import com.by4cloud.platformx.business.service.OutBoundService; |
| | | import com.by4cloud.platformx.common.core.util.R; |
| | | import com.by4cloud.platformx.common.security.util.SecurityUtils; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | } |
| | | //当前入库标的物 |
| | | Map<Long, Object> currentOutMap = new HashMap<>(); |
| | | //出库批次 |
| | | String batchNumber = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN); |
| | | //出库 |
| | | addDTO.getSubjectMatterList().stream().forEach(outSubjectMatterAddDTO -> { |
| | | OutBound outBound = BeanUtil.copyProperties(outSubjectMatterAddDTO, OutBound.class); |
| | | outBound.setBatchNumber(batchNumber); |
| | | outBound.setBusGuestName(addDTO.getBusGuestName()); |
| | | outBound.setBusGuestId(addDTO.getBusGuestId()); |
| | | outBound.setOutBoundTime(addDTO.getOutBoundTime()); |
| | | baseMapper.insert(outBound); |
| | | BigDecimal remainNum = outSubjectMatterAddDTO.getOutBoundNum(); |
| | | for (ContractSubjectMatter subjectMatter : subjectMatterList) { |
| | | if (outSubjectMatterAddDTO.getSubjectMatterCode().equals(subjectMatter.getMaterialCode())) { |
| | |
| | | contractSubjectMatterMapper.updateById(subjectMatter); |
| | | currentOutMap.put(subjectMatter.getContractId(), subjectMatter); |
| | | //新增合同出库历史 |
| | | saveContractOutBound(contract, addDTO, subjectMatter); |
| | | saveContractOutBound(contract, addDTO, subjectMatter,outBound.getId()); |
| | | } else { |
| | | BigDecimal currentOut = remainNum.add(subjectMatter.getRemainingQuantity()); |
| | | subjectMatter.setDeliveredQuantity(subjectMatter.getQuantity().add(remainNum)); |
| | |
| | | contractSubjectMatterMapper.updateById(subjectMatter); |
| | | currentOutMap.put(subjectMatter.getContractId(), subjectMatter); |
| | | //新增合同出库历史 |
| | | saveContractOutBound(contract, addDTO, subjectMatter); |
| | | saveContractOutBound(contract, addDTO, subjectMatter,outBound.getId()); |
| | | break; |
| | | } |
| | | |
| | |
| | | contractSubjectMatterMapper.updateById(subjectMatter); |
| | | currentOutMap.put(subjectMatter.getContractId(), subjectMatter); |
| | | //新增合同出库历史 |
| | | saveContractOutBound(contract, addDTO, subjectMatter); |
| | | saveContractOutBound(contract, addDTO, subjectMatter,outBound.getId()); |
| | | } else { |
| | | BigDecimal currentOut = remainNum.add(subjectMatter.getQuantity()); |
| | | subjectMatter.setDeliveredQuantity(subjectMatter.getQuantity().add(remainNum)); |
| | |
| | | contractSubjectMatterMapper.updateById(subjectMatter); |
| | | currentOutMap.put(subjectMatter.getContractId(), subjectMatter); |
| | | //新增合同出库历史 |
| | | saveContractOutBound(contract, addDTO, subjectMatter); |
| | | saveContractOutBound(contract, addDTO, subjectMatter,outBound.getId()); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | OutBound outBound = BeanUtil.copyProperties(outSubjectMatterAddDTO, OutBound.class); |
| | | outBound.setBusGuestName(addDTO.getBusGuestName()); |
| | | outBound.setBusGuestId(addDTO.getBusGuestId()); |
| | | outBound.setOutBoundTime(addDTO.getOutBoundTime()); |
| | | baseMapper.insert(outBound); |
| | | |
| | | }); |
| | | |
| | | //出库应收款明细 |
| | |
| | | paymentConfirm.setTotalAmount(paymentConfirm.getTransationAmount().multiply(new BigDecimal("-1"))); |
| | | if(schedule.getPaymentRatio().compareTo(new BigDecimal("0"))>0) { |
| | | paymentConfirmMapper.insert(paymentConfirm); |
| | | //客户付款完成合同 |
| | | List<Contract> customerCompleteContractList = contractMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getPartyAId, contract.getPartyAId()) |
| | | .eq(Contract::getPartyBId, SecurityUtils.getUser().getCompId()).apply(" amount = paid_amount")); |
| | | if (ArrayUtil.isNotEmpty(customerCompleteContractList)){ |
| | | List<BigDecimal> outAmountList = new ArrayList<>(); |
| | | for (Contract completeContract:customerCompleteContractList |
| | | ) { |
| | | PaymentConfirm contractLastConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getContractId,completeContract.getId()) |
| | | .orderByDesc(PaymentConfirm::getCreateTime).last("limit 1")); |
| | | //查询客户付款完成合同中最后明细金额 有预收转入当前合同 |
| | | if (contractLastConfirm.getTotalAmount().compareTo(new BigDecimal("0"))>0){ |
| | | //新增完成付款合同 资金转出 |
| | | PaymentConfirm outConfirm = BeanUtil.copyProperties(contractLastConfirm,PaymentConfirm.class,"id","transationAmount", |
| | | "advanceAmount","receivableAmount","overdueAmount","totalAmount"); |
| | | outConfirm.setBusinessType("资金转出"); |
| | | outConfirm.setConfirmTime(new Date()); |
| | | outConfirm.setTransationAmount(contractLastConfirm.getTotalAmount()); |
| | | outConfirm.setTotalAmount(new BigDecimal("0")); |
| | | paymentConfirmMapper.insert(outConfirm); |
| | | outAmountList.add(outConfirm.getTransationAmount()); |
| | | } |
| | | } |
| | | if (ArrayUtil.isNotEmpty(outAmountList.toArray())){ |
| | | BigDecimal currentSum = new BigDecimal("0"); |
| | | for (BigDecimal currentAmount:outAmountList |
| | | ) { |
| | | currentSum=currentSum.add(currentAmount); |
| | | //新增当前合同 资金转入 |
| | | PaymentConfirm inConfirm = BeanUtil.copyProperties(paymentConfirm,PaymentConfirm.class,"id","transationAmount", |
| | | "advanceAmount","receivableAmount","overdueAmount","totalAmount"); |
| | | inConfirm.setBusinessType("资金转入"); |
| | | inConfirm.setConfirmTime(new Date()); |
| | | inConfirm.setTransationAmount(currentSum.subtract(currentAmount)); |
| | | inConfirm.setTotalAmount(paymentConfirm.getTotalAmount().add(currentSum)); |
| | | if (inConfirm.getTotalAmount().compareTo(new BigDecimal("0"))>0){ |
| | | inConfirm.setAdvanceAmount(inConfirm.getTotalAmount()); |
| | | }else if (inConfirm.getTotalAmount().compareTo(new BigDecimal("0"))<0){ |
| | | inConfirm.setReceivableAmount(inConfirm.getTotalAmount().multiply(new BigDecimal("-1"))); |
| | | } |
| | | paymentConfirmMapper.insert(inConfirm); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | private void saveContractOutBound(Contract contract, OutBoundAddDTO addDTO, ContractSubjectMatter subjectMatter) { |
| | | private void saveContractOutBound(Contract contract, OutBoundAddDTO addDTO, ContractSubjectMatter subjectMatter,Long outBoundId) { |
| | | ContractOutBound contractOutBound = new ContractOutBound(); |
| | | contractOutBound.setContractId(contract.getId()); |
| | | contractOutBound.setContractName(contract.getContractName()); |
| | |
| | | contractOutBound.setOutBoundNum(subjectMatter.getLastDeliveredQuantity()); |
| | | contractOutBound.setOutBoundAttNames(addDTO.getOutBoundAttNames()); |
| | | contractOutBound.setOutBoundAttPaths(addDTO.getOutBoundAttPaths()); |
| | | contractOutBound.setOutBoundId(outBoundId); |
| | | contractOutBoundMapper.insert(contractOutBound); |
| | | } |
| | | } |