|
|
@@ -1029,7 +1029,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
}
|
|
|
BigDecimal number = shipItems.getSendNumFinancing();
|
|
|
//获取出库明细商品对应融资采购商品明细
|
|
|
- if (new BigDecimal("0").compareTo(shipItems.getSendNumFinancing()) == 0){
|
|
|
+ if (new BigDecimal("0").compareTo(shipItems.getSendNumFinancing()) == 0) {
|
|
|
continue;
|
|
|
}
|
|
|
List<PjOrderItems> orderItemList = orderItemsList.stream().filter(e -> e.getGoodsId().equals(shipItems.getGoodsId())).collect(Collectors.toList());
|
|
|
@@ -3865,6 +3865,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
BigDecimal goodsNum = pjOrderItemsList.stream().map(PjOrderItems::getReturnsNumber).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
//发货数量和
|
|
|
BigDecimal sendNum = pjOrderItemsList.stream().map(PjOrderItems::getSendNum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal amount = pjOrderItemsList.stream().map(PjOrderItems::getSubTotalMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
PjOrder order = orderMapper.selectById(ship.getOrdId());
|
|
|
if (ObjectUtil.isNotEmpty(order)) {
|
|
|
order.setShipType(ship.getShipType());
|
|
|
@@ -3899,254 +3900,53 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
}
|
|
|
if (ObjectUtils.isNotNull(status) && "1".equals(status) && "1".equals(storageDesc.getWhetherFinancing())) {
|
|
|
String firstProportion = sysClient.getParamService("first.month.proportion");
|
|
|
- String secondProportion = sysClient.getParamService("second.month.proportion");
|
|
|
- String financingDays = sysClient.getParamService("financing.days");
|
|
|
- int days = -90;
|
|
|
- if (ObjectUtils.isNotNull(financingDays) && !"获取数据失败".equals(financingDays)) {
|
|
|
- days = -Integer.parseInt(financingDays);
|
|
|
- }
|
|
|
PjpfFunding pjpfFunding = pjpfFundingService.getOne(new LambdaQueryWrapper<PjpfFunding>()
|
|
|
.eq(PjpfFunding::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(PjpfFunding::getIsDeleted, 0));
|
|
|
if (pjpfFunding == null) {
|
|
|
throw new RuntimeException("未找到融资总账");
|
|
|
}
|
|
|
- Date date = new Date();
|
|
|
- Calendar calendarDate = Calendar.getInstance();
|
|
|
- calendarDate.setTime(date);
|
|
|
- calendarDate.add(Calendar.DAY_OF_MONTH, days);
|
|
|
- Date dateTime = calendarDate.getTime();
|
|
|
- //获取融资采购单主表数据
|
|
|
- List<PjOrder> orderList = orderMapper.selectList(new LambdaQueryWrapper<PjOrder>()
|
|
|
- .eq(PjOrder::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(PjOrder::getIsDeleted, 0)
|
|
|
- .eq(PjOrder::getWhetherFinancing, "1")
|
|
|
- .eq(PjOrder::getBsType, "RZCG")
|
|
|
- .ge(PjOrder::getBusinesDate, dateTime)
|
|
|
- .apply("goods_total_ship_num > out_goods_total_ship_num")
|
|
|
- .orderByAsc(PjOrder::getBusinesDate)
|
|
|
- );
|
|
|
- List<Long> ordIds = orderList.stream().map(PjOrder::getId).collect(Collectors.toList());
|
|
|
- List<Long> goodsList = shipItemsList.stream().map(PjShipItems::getGoodsId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
- //获取融资采购单明细数据
|
|
|
- List<PjOrderItems> orderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
- .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
- .eq(PjOrderItems::getBizType, "RZCG")
|
|
|
- .in(PjOrderItems::getGoodsId, goodsList)
|
|
|
- .in(PjOrderItems::getPid, ordIds)
|
|
|
- .apply("send_num > out_goods_total_ship_num")
|
|
|
- .orderByAsc(PjOrderItems::getCreateTime)
|
|
|
- );
|
|
|
- BigDecimal amountSum = new BigDecimal("0.00");
|
|
|
- if (!orderItemsList.isEmpty()) {
|
|
|
- List<PjOrder> orders = orderList.stream().filter(e -> e.getWhetherRedeem().equals("0")).distinct().collect(Collectors.toList());
|
|
|
- if (!orders.isEmpty()) {
|
|
|
- /*if (pjpfFunding.getBondAmount().compareTo(pjpfFunding.getPaidAlreadyBondAmount()) > 0) {
|
|
|
- throw new RuntimeException("已缴保证金不足,出库失败");
|
|
|
- }*/
|
|
|
- BigDecimal amount = shipItemsList.stream().map(PjShipItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- if (pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()).compareTo(amount) < 0) {
|
|
|
- throw new RuntimeException("剩余可用资金:" + pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()) + "小于本次出库金额:" + amount + ",出库失败");
|
|
|
- }
|
|
|
- amountSum = amount;
|
|
|
- pjpfFunding.setAvailableAmount(pjpfFunding.getAvailableAmount().subtract(amount));
|
|
|
-// pjpfFunding.setFundingAmount(pjpfFunding.getFundingAmount().add(amount));
|
|
|
- }
|
|
|
- }
|
|
|
- List<FinancingShipItemDto> allList = new ArrayList<>();
|
|
|
- List<ShipItemsRecord> recordList = new ArrayList<>();
|
|
|
- //本次发货对应采购明细
|
|
|
- List<PjOrderItems> orderItemList1 = new ArrayList<>();
|
|
|
- //出库明细循环
|
|
|
- for (PjShipItems shipItems : shipItemsList) {
|
|
|
- if (ObjectUtils.isNull(shipItems.getCostprie()) || shipItems.getCostprie().compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
- throw new RuntimeException("获取数据失败,请重新生成出库工单");
|
|
|
- }
|
|
|
- BigDecimal number = shipItems.getSendNum();
|
|
|
- //获取出库明细商品对应融资采购商品明细
|
|
|
- List<PjOrderItems> orderItemList = orderItemsList.stream().filter(e -> e.getGoodsId().equals(shipItems.getGoodsId())).collect(Collectors.toList());
|
|
|
- List<FinancingShipItemDto> mapList = new ArrayList<>();
|
|
|
- if (number.compareTo(new BigDecimal("0.00")) > 0) {
|
|
|
- //采购商品明细循环
|
|
|
- for (PjOrderItems orderItems1 : orderItemList) {
|
|
|
- if (orderItems1.getGoodsId().equals(shipItems.getGoodsId())) {
|
|
|
- //记录出库明细对应融资采购单据
|
|
|
- ShipItemsRecord shipItemsRecord = new ShipItemsRecord();
|
|
|
- shipItemsRecord.setBillNo(ship.getBillno());
|
|
|
- shipItemsRecord.setPid(shipItems.getPid());
|
|
|
- shipItemsRecord.setItemId(shipItems.getId());
|
|
|
- shipItemsRecord.setSrcId(orderItems1.getPid());
|
|
|
- shipItemsRecord.setSrcItemId(orderItems1.getId());
|
|
|
- shipItemsRecord.setSrcOrd(orderItems1.getBillNo());
|
|
|
- shipItemsRecord.setCreateUser(AuthUtil.getUserId());
|
|
|
- shipItemsRecord.setCreateUserName(AuthUtil.getUserName());
|
|
|
- shipItemsRecord.setCreateTime(new Date());
|
|
|
- //记录具体出库数量,来源融资采购明细
|
|
|
- FinancingShipItemDto financingShipItemDto = new FinancingShipItemDto();
|
|
|
- financingShipItemDto.setId(orderItems1.getId());
|
|
|
- financingShipItemDto.setPid(orderItems1.getPid());
|
|
|
- financingShipItemDto.setItemId(shipItems.getId());
|
|
|
- BigDecimal subNum = orderItems1.getSendNum().subtract(orderItems1.getOutGoodsTotalShipNum());
|
|
|
- //剩余数量 = 入库数量-已出数量
|
|
|
- //修改明细出库数量
|
|
|
- if (new BigDecimal("0.00").compareTo(subNum) != 0) {
|
|
|
- if (number.compareTo(subNum) > 0) {
|
|
|
- financingShipItemDto.setNum(subNum);
|
|
|
- financingShipItemDto.setAmount(subNum.multiply(orderItems1.getPrice()));
|
|
|
- shipItemsRecord.setNum(subNum);
|
|
|
- shipItemsRecord.setAmount(subNum.multiply(orderItems1.getPrice()));
|
|
|
- //本次出库数量大于剩余数量 融资采购明细出库数量=入库数量
|
|
|
- orderItems1.setOutGoodsTotalShipNum(orderItems1.getSendNum());
|
|
|
- orderItems1.setThisOutGoodsTotalShipNum(subNum);
|
|
|
- orderItems1.setOutGoodsTotalShipAmount(orderItems1.getOutGoodsTotalShipNum().multiply(orderItems1.getPrice()));
|
|
|
- orderItems1.setThisOutGoodsTotalShipAmount(subNum.multiply(orderItems1.getPrice()));
|
|
|
- number = number.subtract(subNum);
|
|
|
- } else if (number.compareTo(subNum) == 0) {
|
|
|
- financingShipItemDto.setNum(subNum);
|
|
|
- financingShipItemDto.setAmount(subNum.multiply(orderItems1.getPrice()));
|
|
|
- shipItemsRecord.setNum(subNum);
|
|
|
- shipItemsRecord.setAmount(subNum.multiply(orderItems1.getPrice()));
|
|
|
- //本次出库数量等于剩余数量 融资采购明细出库数量=入库数量
|
|
|
- orderItems1.setOutGoodsTotalShipNum(orderItems1.getSendNum());
|
|
|
- orderItems1.setThisOutGoodsTotalShipNum(subNum);
|
|
|
- orderItems1.setOutGoodsTotalShipAmount(orderItems1.getOutGoodsTotalShipNum().multiply(orderItems1.getPrice()));
|
|
|
- orderItems1.setThisOutGoodsTotalShipAmount(subNum.multiply(orderItems1.getPrice()));
|
|
|
- number = new BigDecimal("0.00");
|
|
|
- } else {
|
|
|
- financingShipItemDto.setNum(number);
|
|
|
- financingShipItemDto.setAmount(number.multiply(orderItems1.getPrice()));
|
|
|
- shipItemsRecord.setNum(number);
|
|
|
- shipItemsRecord.setAmount(number.multiply(orderItems1.getPrice()));
|
|
|
- //本次出库数量小于剩余数量 融资采购明细出库数量=入库数量-本次出库数量
|
|
|
- orderItems1.setOutGoodsTotalShipNum(orderItems1.getOutGoodsTotalShipNum().add(number));
|
|
|
- orderItems1.setThisOutGoodsTotalShipNum(number);
|
|
|
- orderItems1.setOutGoodsTotalShipAmount(orderItems1.getOutGoodsTotalShipNum().multiply(orderItems1.getPrice()));
|
|
|
- orderItems1.setThisOutGoodsTotalShipAmount(number.multiply(orderItems1.getPrice()));
|
|
|
- number = new BigDecimal("0.00");
|
|
|
- }
|
|
|
- mapList.add(financingShipItemDto);
|
|
|
- recordList.add(shipItemsRecord);
|
|
|
- }
|
|
|
- }
|
|
|
- orderItemList1.add(orderItems1);
|
|
|
- }
|
|
|
- }
|
|
|
- if (!mapList.isEmpty()) {
|
|
|
- ObjectMapper mapper = new ObjectMapper();
|
|
|
- try {
|
|
|
- String jsonString = mapper.writeValueAsString(mapList);
|
|
|
- shipItems.setSrcFinancing(jsonString);
|
|
|
- } catch (Exception e) {
|
|
|
- System.err.println(e.getMessage());
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
- allList.addAll(mapList);
|
|
|
- }
|
|
|
- }
|
|
|
- if (!recordList.isEmpty()) {
|
|
|
- shipItemsRecordService.saveBatch(recordList);
|
|
|
- }
|
|
|
- orderItemsService.updateBatchById(orderItemList1);
|
|
|
- if (!orderItemList1.isEmpty()) {
|
|
|
- //本次保证金
|
|
|
- BigDecimal bondAmountSum = new BigDecimal("0.00");
|
|
|
- //本次融资金额
|
|
|
- BigDecimal fundingAmountSum = new BigDecimal("0.00");
|
|
|
- //保证金释放金额
|
|
|
- BigDecimal availableAmountSum = new BigDecimal("0.00");
|
|
|
- for (PjOrder items : orderList) {
|
|
|
- List<PjOrderItems> pjOrderItems = orderItemList1.stream().filter(e -> items.getId().equals(e.getPid()))
|
|
|
- .collect(Collectors.toList());
|
|
|
- //重新合计融资采购已出数量,金额
|
|
|
- if (!pjOrderItems.isEmpty()) {
|
|
|
- //本次发货数量
|
|
|
- BigDecimal thisSendSum = pjOrderItems.stream().map(PjOrderItems::getThisOutGoodsTotalShipNum)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- //本次发货金额
|
|
|
- BigDecimal thisSendAmount = pjOrderItems.stream().map(PjOrderItems::getThisOutGoodsTotalShipAmount)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- items.setOutGoodsTotalShipNum(items.getOutGoodsTotalShipNum().add(thisSendSum));
|
|
|
- items.setOutGoodsTotalShipAmount(items.getOutGoodsTotalShipAmount().add(thisSendAmount));
|
|
|
- if (ObjectUtils.isNotNull(items.getSalesAmount()) && new BigDecimal("0.00").compareTo(items.getSalesAmount()) != 0) {
|
|
|
- //重新计算所有未赎回融资采购,保证金,融资金额
|
|
|
- if (!"1".equals(items.getWhetherRedeem())) {
|
|
|
- Date currentDate = new Date();
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
- calendar.setTime(currentDate);
|
|
|
- calendar.add(Calendar.DAY_OF_MONTH, -60);
|
|
|
- Date thirtyDayAgo = calendar.getTime();
|
|
|
- //判断本融资采购单据是否超过两个月 未超过按第一个比例计算,否则按第二个比例计算
|
|
|
- if (currentDate.compareTo(thirtyDayAgo) > 0) {
|
|
|
- String[] arr = firstProportion.split(":");
|
|
|
- //计算剩余金额的保证金
|
|
|
- BigDecimal bondAmount = thisSendAmount.multiply(
|
|
|
- (new BigDecimal(arr[0]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
- .setScale(2, RoundingMode.HALF_UP)));
|
|
|
- //计算剩余金额的融资金额
|
|
|
- BigDecimal fundingAmount = thisSendAmount.multiply(
|
|
|
- (new BigDecimal(arr[1]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
- .setScale(2, RoundingMode.HALF_UP)));
|
|
|
- availableAmountSum = availableAmountSum.add(bondAmount);
|
|
|
- items.setBondAmount(items.getBondAmount().subtract(bondAmount));
|
|
|
- items.setFundingAmount(items.getFundingAmount().subtract(fundingAmount));
|
|
|
- bondAmountSum = bondAmountSum.add(bondAmount);
|
|
|
- fundingAmountSum = fundingAmountSum.add(fundingAmount);
|
|
|
- } else {
|
|
|
- String[] arr = secondProportion.split(":");
|
|
|
- BigDecimal bondAmount = thisSendAmount.multiply(
|
|
|
- (new BigDecimal(arr[0]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
- .setScale(2, RoundingMode.HALF_UP)));
|
|
|
- BigDecimal fundingAmount = thisSendAmount.multiply(
|
|
|
- (new BigDecimal(arr[1]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
- .setScale(2, RoundingMode.HALF_UP)));
|
|
|
- availableAmountSum = availableAmountSum.add(bondAmount);
|
|
|
- items.setBondAmount(items.getBondAmount().subtract(bondAmount));
|
|
|
- items.setFundingAmount(items.getFundingAmount().subtract(fundingAmount));
|
|
|
- bondAmountSum = bondAmountSum.add(bondAmount);
|
|
|
- fundingAmountSum = fundingAmountSum.add(fundingAmount);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- orderMapper.updateById(items);
|
|
|
- }
|
|
|
- }
|
|
|
- //可用金额 = 原可用金额 + 本次释放金额
|
|
|
- pjpfFunding.setAvailableAmount(pjpfFunding.getAvailableAmount().add(availableAmountSum));
|
|
|
- pjpfFunding.setSurplusFundingAmount(pjpfFunding.getSurplusFundingAmount().subtract(fundingAmountSum));
|
|
|
- pjpfFunding.setPaidAlreadyBondAmount(pjpfFunding.getPaidAlreadyBondAmount().subtract(bondAmountSum));
|
|
|
- pjpfFunding.setBondAmount(pjpfFunding.getBondAmount().subtract(bondAmountSum));
|
|
|
- //总金额 = 保证金 + 在库融资金额
|
|
|
- pjpfFunding.setAmount(pjpfFunding.getAmount().subtract(amountSum));
|
|
|
- //融资金额 = 原融资金额 + (本次出库金额-本次释放金额)
|
|
|
- pjpfFunding.setFundingAmount(pjpfFunding.getFundingAmount().add(fundingAmountSum));
|
|
|
- pjpfFunding.setProportion(pjpfFunding.getBondAmount().divide(pjpfFunding.getAmount(), MathContext.DECIMAL32)
|
|
|
- .setScale(2, RoundingMode.HALF_UP));
|
|
|
- pjpfFundingService.updateById(pjpfFunding);
|
|
|
- //融资管理明细记录
|
|
|
- PjpfFundingItem item = new PjpfFundingItem();
|
|
|
- item.setPid(pjpfFunding.getId());
|
|
|
- item.setTenantId(AuthUtil.getTenantId());
|
|
|
- item.setCreateTime(new Date());
|
|
|
- item.setCreateUser(AuthUtil.getUserId());
|
|
|
- item.setCreateUserName(AuthUtil.getUserName());
|
|
|
- item.setCreateDept(pjpfFunding.getCreateDept());
|
|
|
- item.setCreateDeptName(pjpfFunding.getCreateDeptName());
|
|
|
- item.setType("融资采购售后-出库完成");
|
|
|
- item.setSrcId(ship.getId());
|
|
|
- item.setSrcNo(ship.getBillno());
|
|
|
- item.setAmount(amountSum);
|
|
|
- item.setFundingAmount(fundingAmountSum);
|
|
|
- item.setBondAmount(bondAmountSum);
|
|
|
- pjpfFundingItemService.save(item);
|
|
|
- for (PjShipItems shipItems : shipItemsList) {
|
|
|
- List<PjOrderItems> orderItems = pjOrderItemsList.stream().filter(e -> e.getId().equals(shipItems.getSrcItemId())).collect(Collectors.toList());
|
|
|
- for (PjOrderItems items : orderItems) {
|
|
|
- items.setProportion(shipItems.getProportion());
|
|
|
- items.setSrcFinancing(shipItems.getSrcFinancing());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ //本次保证金
|
|
|
+ BigDecimal bondAmountSum = new BigDecimal("0.00");
|
|
|
+ //本次融资金额
|
|
|
+ BigDecimal fundingAmountSum = new BigDecimal("0.00");
|
|
|
+ String[] arr = firstProportion.split(":");
|
|
|
+ //计算本次金额的保证金
|
|
|
+ BigDecimal bondAmount = amount.multiply(
|
|
|
+ (new BigDecimal(arr[0]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
+ .setScale(2, RoundingMode.HALF_UP)));
|
|
|
+ //计算本次金额的融资金额
|
|
|
+ BigDecimal fundingAmount = amount.multiply(
|
|
|
+ (new BigDecimal(arr[1]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
+ .setScale(2, RoundingMode.HALF_UP)));
|
|
|
+ bondAmountSum = bondAmountSum.add(bondAmount);
|
|
|
+ fundingAmountSum = fundingAmountSum.add(fundingAmount);
|
|
|
+ pjpfFunding.setSurplusFundingAmount(pjpfFunding.getSurplusFundingAmount().subtract(fundingAmountSum));
|
|
|
+ pjpfFunding.setPaidAlreadyBondAmount(pjpfFunding.getPaidAlreadyBondAmount().subtract(bondAmountSum));
|
|
|
+ pjpfFunding.setBondAmount(pjpfFunding.getBondAmount().subtract(bondAmountSum));
|
|
|
+ //总金额 = 保证金 + 在库融资金额
|
|
|
+ pjpfFunding.setAmount(pjpfFunding.getAmount().subtract(amount));
|
|
|
+ //融资金额 = 原融资金额 + (本次出库金额-本次释放金额)
|
|
|
+ pjpfFunding.setFundingAmount(pjpfFunding.getFundingAmount().subtract(fundingAmountSum));
|
|
|
+ pjpfFunding.setProportion(pjpfFunding.getBondAmount().divide(pjpfFunding.getAmount(), MathContext.DECIMAL32)
|
|
|
+ .setScale(2, RoundingMode.HALF_UP));
|
|
|
+ pjpfFundingService.updateById(pjpfFunding);
|
|
|
+ //融资管理明细记录
|
|
|
+ PjpfFundingItem item = new PjpfFundingItem();
|
|
|
+ item.setPid(pjpfFunding.getId());
|
|
|
+ item.setTenantId(AuthUtil.getTenantId());
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ item.setCreateDept(pjpfFunding.getCreateDept());
|
|
|
+ item.setCreateDeptName(pjpfFunding.getCreateDeptName());
|
|
|
+ item.setType("融资采购售后-出库完成");
|
|
|
+ item.setSrcId(ship.getId());
|
|
|
+ item.setSrcNo(ship.getBillno());
|
|
|
+ item.setAmount(amount);
|
|
|
+ item.setFundingAmount(fundingAmountSum);
|
|
|
+ item.setBondAmount(bondAmountSum);
|
|
|
+ pjpfFundingItemService.save(item);
|
|
|
}
|
|
|
orderMapper.updateById(order);
|
|
|
return R.data(ship);
|
|
|
@@ -4329,133 +4129,46 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
//生成出库工单历史记录
|
|
|
saveHistory(ship.getId(), OrderTypeEnum.TOBESHIPPEDOUT.getType());
|
|
|
String status = sysClient.getParamService("whether.financing");
|
|
|
+ //融资流程
|
|
|
PjStorageDesc storageDesc = storageDescMapper.selectById(ship.getStorageId());
|
|
|
if (storageDesc == null) {
|
|
|
throw new RuntimeException("未找到仓库信息");
|
|
|
}
|
|
|
if (ObjectUtils.isNotNull(status) && "1".equals(status) && "1".equals(storageDesc.getWhetherFinancing())) {
|
|
|
- List<ShipItemsRecord> recordList = shipItemsRecordService.list(new LambdaQueryWrapper<ShipItemsRecord>()
|
|
|
- .eq(ShipItemsRecord::getIsDeleted, 0)
|
|
|
- .eq(ShipItemsRecord::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(ShipItemsRecord::getPid, ship.getId()));
|
|
|
- if (!recordList.isEmpty()) {
|
|
|
- shipItemsRecordService.removeByIds(recordList.stream().map(ShipItemsRecord::getId).collect(Collectors.toList()));
|
|
|
- }
|
|
|
String firstProportion = sysClient.getParamService("first.month.proportion");
|
|
|
- String secondProportion = sysClient.getParamService("second.month.proportion");
|
|
|
PjpfFunding pjpfFunding = pjpfFundingService.getOne(new LambdaQueryWrapper<PjpfFunding>()
|
|
|
.eq(PjpfFunding::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(PjpfFunding::getIsDeleted, 0));
|
|
|
if (pjpfFunding == null) {
|
|
|
throw new RuntimeException("未找到融资总账");
|
|
|
}
|
|
|
- List<String> srcFinancingList = itemsList.stream().map(PjShipItems::getSrcFinancing).filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
- List<FinancingShipItemDto> financingShipItemDtoList = new ArrayList<>();
|
|
|
- for (String item : srcFinancingList) {
|
|
|
- ObjectMapper mapper = new ObjectMapper();
|
|
|
- try {
|
|
|
- List<FinancingShipItemDto> entities = mapper.readValue(item, new TypeReference<List<FinancingShipItemDto>>() {
|
|
|
- });
|
|
|
- if (!entities.isEmpty()) {
|
|
|
- financingShipItemDtoList.addAll(entities);
|
|
|
- }
|
|
|
- } catch (JsonProcessingException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
- List<PjOrder> orderList = orderMapper.selectList(new LambdaQueryWrapper<PjOrder>()
|
|
|
- .eq(PjOrder::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(PjOrder::getIsDeleted, 0)
|
|
|
- .eq(PjOrder::getWhetherFinancing, "1")
|
|
|
- .eq(PjOrder::getBsType, "RZCG")
|
|
|
- .orderByAsc(PjOrder::getBusinesDate)
|
|
|
- );
|
|
|
- List<Long> ordIds = orderList.stream().map(PjOrder::getId).collect(Collectors.toList());
|
|
|
- List<PjOrderItems> orderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
- .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
- .eq(PjOrderItems::getBizType, "RZCG")
|
|
|
- .in(PjOrderItems::getPid, ordIds)
|
|
|
- .in(PjOrderItems::getId, financingShipItemDtoList.stream().map(FinancingShipItemDto::getId).filter(Objects::nonNull)
|
|
|
- .distinct().collect(Collectors.toList()))
|
|
|
- .orderByAsc(PjOrderItems::getCreateTime)
|
|
|
- );
|
|
|
- for (PjOrderItems items : orderItemsList) {
|
|
|
- FinancingShipItemDto pjOrderItems = financingShipItemDtoList.stream().filter(e -> e.getId().equals(items.getId())).findFirst().orElse(null);
|
|
|
- if (pjOrderItems != null) {
|
|
|
- items.setOutGoodsTotalShipNum(items.getOutGoodsTotalShipNum().subtract(pjOrderItems.getNum()));
|
|
|
- items.setThisOutGoodsTotalShipNum(pjOrderItems.getNum());
|
|
|
- items.setOutGoodsTotalShipAmount(items.getOutGoodsTotalShipAmount().subtract(pjOrderItems.getAmount()));
|
|
|
- items.setThisOutGoodsTotalShipAmount(pjOrderItems.getAmount());
|
|
|
- }
|
|
|
- }
|
|
|
- orderItemsService.updateBatchById(orderItemsList);
|
|
|
- BigDecimal amount = itemsList.stream().map(PjShipItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- pjpfFunding.setAvailableAmount(pjpfFunding.getAvailableAmount().add(amount));
|
|
|
+ BigDecimal amount = pjOrderItemsList.stream().map(PjOrderItems::getSubTotalMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ //本次保证金
|
|
|
BigDecimal bondAmountSum = new BigDecimal("0.00");
|
|
|
+ //本次融资金额
|
|
|
BigDecimal fundingAmountSum = new BigDecimal("0.00");
|
|
|
- BigDecimal availableAmountSum = new BigDecimal("0.00");
|
|
|
- for (PjOrder items : orderList) {
|
|
|
- List<PjOrderItems> pjOrderItems = orderItemsList.stream().filter(e -> items.getId().equals(e.getPid()))
|
|
|
- .collect(Collectors.toList());
|
|
|
- if (!pjOrderItems.isEmpty()) {
|
|
|
- BigDecimal thisSendSum = pjOrderItems.stream().map(PjOrderItems::getThisOutGoodsTotalShipNum)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- BigDecimal thisSendAmount = pjOrderItems.stream().map(PjOrderItems::getThisOutGoodsTotalShipAmount)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- items.setOutGoodsTotalShipNum(items.getOutGoodsTotalShipNum().subtract(thisSendSum));
|
|
|
- items.setOutGoodsTotalShipAmount(items.getOutGoodsTotalShipAmount().subtract(thisSendAmount));
|
|
|
- if (ObjectUtils.isNotNull(items.getSalesAmount()) && new BigDecimal("0.00").compareTo(items.getSalesAmount()) != 0) {
|
|
|
- if (!"1".equals(items.getWhetherRedeem())) {
|
|
|
- Date currentDate = new Date();
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
- calendar.setTime(currentDate);
|
|
|
- calendar.add(Calendar.DAY_OF_MONTH, -60);
|
|
|
- Date thirtyDayAgo = calendar.getTime();
|
|
|
- if (currentDate.compareTo(thirtyDayAgo) > 0) {
|
|
|
- String[] arr = secondProportion.split(":");
|
|
|
- BigDecimal bondAmount = thisSendAmount.multiply(
|
|
|
- (new BigDecimal(arr[0]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
- .setScale(2, RoundingMode.HALF_UP)));
|
|
|
- BigDecimal fundingAmount = thisSendAmount.multiply(
|
|
|
- (new BigDecimal(arr[1]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
- .setScale(2, RoundingMode.HALF_UP)));
|
|
|
- availableAmountSum = availableAmountSum.add(bondAmount);
|
|
|
- items.setBondAmount(items.getBondAmount().add(bondAmount));
|
|
|
- items.setFundingAmount(items.getFundingAmount().add(fundingAmount));
|
|
|
- bondAmountSum = bondAmountSum.add(bondAmount);
|
|
|
- fundingAmountSum = fundingAmountSum.add(fundingAmount);
|
|
|
- } else {
|
|
|
- String[] arr = firstProportion.split(":");
|
|
|
- BigDecimal bondAmount = thisSendAmount.multiply(
|
|
|
- (new BigDecimal(arr[0]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
- .setScale(2, RoundingMode.HALF_UP)));
|
|
|
- BigDecimal fundingAmount = thisSendAmount.multiply(
|
|
|
- (new BigDecimal(arr[1]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
- .setScale(2, RoundingMode.HALF_UP)));
|
|
|
- availableAmountSum = availableAmountSum.add(bondAmount);
|
|
|
- items.setBondAmount(items.getBondAmount().add(bondAmount));
|
|
|
- items.setFundingAmount(items.getFundingAmount().add(fundingAmount));
|
|
|
- bondAmountSum = bondAmountSum.add(bondAmount);
|
|
|
- fundingAmountSum = fundingAmountSum.add(fundingAmount);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- orderMapper.updateById(items);
|
|
|
- }
|
|
|
- }
|
|
|
- //可用金额 = 原可用金额 + 本次释放金额
|
|
|
- pjpfFunding.setAvailableAmount(pjpfFunding.getAvailableAmount().subtract(availableAmountSum));
|
|
|
+ String[] arr = firstProportion.split(":");
|
|
|
+ //计算本次金额的保证金
|
|
|
+ BigDecimal bondAmount = amount.multiply(
|
|
|
+ (new BigDecimal(arr[0]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
+ .setScale(2, RoundingMode.HALF_UP)));
|
|
|
+ //计算本次金额的融资金额
|
|
|
+ BigDecimal fundingAmount = amount.multiply(
|
|
|
+ (new BigDecimal(arr[1]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
|
|
|
+ .setScale(2, RoundingMode.HALF_UP)));
|
|
|
+ bondAmountSum = bondAmountSum.add(bondAmount);
|
|
|
+ fundingAmountSum = fundingAmountSum.add(fundingAmount);
|
|
|
pjpfFunding.setSurplusFundingAmount(pjpfFunding.getSurplusFundingAmount().add(fundingAmountSum));
|
|
|
pjpfFunding.setPaidAlreadyBondAmount(pjpfFunding.getPaidAlreadyBondAmount().add(bondAmountSum));
|
|
|
pjpfFunding.setBondAmount(pjpfFunding.getBondAmount().add(bondAmountSum));
|
|
|
//总金额 = 保证金 + 在库融资金额
|
|
|
pjpfFunding.setAmount(pjpfFunding.getAmount().add(amount));
|
|
|
//融资金额 = 原融资金额 + (本次出库金额-本次释放金额)
|
|
|
- pjpfFunding.setFundingAmount(pjpfFunding.getFundingAmount().subtract(fundingAmountSum));
|
|
|
+ pjpfFunding.setFundingAmount(pjpfFunding.getFundingAmount().add(fundingAmountSum));
|
|
|
pjpfFunding.setProportion(pjpfFunding.getBondAmount().divide(pjpfFunding.getAmount(), MathContext.DECIMAL32)
|
|
|
.setScale(2, RoundingMode.HALF_UP));
|
|
|
pjpfFundingService.updateById(pjpfFunding);
|
|
|
+ //融资管理明细记录
|
|
|
PjpfFundingItem item = new PjpfFundingItem();
|
|
|
item.setPid(pjpfFunding.getId());
|
|
|
item.setTenantId(AuthUtil.getTenantId());
|