|
|
@@ -945,270 +945,275 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
}
|
|
|
//融资流程
|
|
|
if (ObjectUtils.isNotNull(status) && "1".equals(status)) {
|
|
|
- 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("未找到融资总账");
|
|
|
- }
|
|
|
- Date date = new Date();
|
|
|
- Calendar calendarDate = Calendar.getInstance();
|
|
|
- calendarDate.setTime(date);
|
|
|
- calendarDate.add(Calendar.DAY_OF_MONTH, -90);
|
|
|
- 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");
|
|
|
- for (PjShipItems item : shipItemsList) {
|
|
|
- if (new BigDecimal("0").compareTo(item.getSendNumFinancing()) != 0) {
|
|
|
- BigDecimal costprie = item.getSendNumFinancing().multiply(item.getCostpriePrice());
|
|
|
- amountSum = amountSum.add(costprie);
|
|
|
- }
|
|
|
- }
|
|
|
- if (amountSum.compareTo(new BigDecimal("0")) != 0) {
|
|
|
- if (!orderItemsList.isEmpty()) {
|
|
|
- List<PjOrder> orders = orderList.stream().filter(e -> e.getWhetherRedeem().equals("0")).distinct().collect(Collectors.toList());
|
|
|
- if (!orders.isEmpty()) {
|
|
|
+ if (!shipItemsList.isEmpty()) {
|
|
|
+ BigDecimal sendNumFinancing = shipItemsList.stream().map(PjShipItems::getSendNumFinancing).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if (new BigDecimal("0.00").compareTo(sendNumFinancing) != 0) {
|
|
|
+ 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("未找到融资总账");
|
|
|
+ }
|
|
|
+ Date date = new Date();
|
|
|
+ Calendar calendarDate = Calendar.getInstance();
|
|
|
+ calendarDate.setTime(date);
|
|
|
+ calendarDate.add(Calendar.DAY_OF_MONTH, -90);
|
|
|
+ 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");
|
|
|
+ for (PjShipItems item : shipItemsList) {
|
|
|
+ if (new BigDecimal("0").compareTo(item.getSendNumFinancing()) != 0) {
|
|
|
+ BigDecimal costprie = item.getSendNumFinancing().multiply(item.getCostpriePrice());
|
|
|
+ amountSum = amountSum.add(costprie);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (amountSum.compareTo(new BigDecimal("0")) != 0) {
|
|
|
+ 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("已缴保证金不足,出库失败");
|
|
|
}*/
|
|
|
- if (pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()).compareTo(amountSum) < 0) {
|
|
|
- throw new RuntimeException("剩余可用资金:" + pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()) + "小于本次出库金额:" + amountSum + ",出库失败");
|
|
|
+ if (pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()).compareTo(amountSum) < 0) {
|
|
|
+ throw new RuntimeException("剩余可用资金:" + pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()) + "小于本次出库金额:" + amountSum + ",出库失败");
|
|
|
+ }
|
|
|
+ pjpfFunding.setAvailableAmount(pjpfFunding.getAvailableAmount().subtract(amountSum));
|
|
|
+ }
|
|
|
}
|
|
|
- pjpfFunding.setAvailableAmount(pjpfFunding.getAvailableAmount().subtract(amountSum));
|
|
|
- }
|
|
|
- }
|
|
|
- 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.getSendNumFinancing();
|
|
|
- //获取出库明细商品对应融资采购商品明细
|
|
|
- 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())) {
|
|
|
- if (number.compareTo(new BigDecimal("0.00")) > 0) {
|
|
|
- //记录出库明细对应融资采购单据
|
|
|
- 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");
|
|
|
+ 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.getSendNumFinancing();
|
|
|
+ //获取出库明细商品对应融资采购商品明细
|
|
|
+ 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())) {
|
|
|
+ if (number.compareTo(new BigDecimal("0.00")) > 0) {
|
|
|
+ //记录出库明细对应融资采购单据
|
|
|
+ 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);
|
|
|
+ }
|
|
|
}
|
|
|
- mapList.add(financingShipItemDto);
|
|
|
- recordList.add(shipItemsRecord);
|
|
|
}
|
|
|
+ orderItemList1.add(orderItems1);
|
|
|
}
|
|
|
}
|
|
|
- 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 (!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);
|
|
|
+ if (!recordList.isEmpty()) {
|
|
|
+ shipItemsRecordService.saveBatch(recordList);
|
|
|
}
|
|
|
- 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)
|
|
|
- .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- //本次发货金额
|
|
|
- BigDecimal thisSendAmount = pjOrderItems.stream().map(PjOrderItems::getThisOutGoodsTotalShipAmount)
|
|
|
- .filter(Objects::nonNull).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();
|
|
|
- //计算本融资采购剩余金额
|
|
|
+ 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)
|
|
|
+ .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ //本次发货金额
|
|
|
+ BigDecimal thisSendAmount = pjOrderItems.stream().map(PjOrderItems::getThisOutGoodsTotalShipAmount)
|
|
|
+ .filter(Objects::nonNull).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();
|
|
|
+ //计算本融资采购剩余金额
|
|
|
// BigDecimal subAmount = items.getGoodsTotalShipAmount().subtract(items.getOutGoodsTotalShipAmount());
|
|
|
- List<Long> itemIdList = allList.stream().filter(e -> e.getPid().equals(items.getId())).map(FinancingShipItemDto::getItemId).collect(Collectors.toList());
|
|
|
- //判断本融资采购单据是否超过两个月 未超过按第一个比例计算,否则按第二个比例计算
|
|
|
- if (currentDate.compareTo(thirtyDayAgo) > 0) {
|
|
|
- if (!shipItemsList.isEmpty()) {
|
|
|
- for (PjShipItems shipItems1 : shipItemsList) {
|
|
|
- if (!itemIdList.isEmpty() && itemIdList.contains(shipItems1.getId())) {
|
|
|
- shipItems1.setProportion(firstProportion);
|
|
|
+ List<Long> itemIdList = allList.stream().filter(e -> e.getPid().equals(items.getId())).map(FinancingShipItemDto::getItemId).collect(Collectors.toList());
|
|
|
+ //判断本融资采购单据是否超过两个月 未超过按第一个比例计算,否则按第二个比例计算
|
|
|
+ if (currentDate.compareTo(thirtyDayAgo) > 0) {
|
|
|
+ if (!shipItemsList.isEmpty()) {
|
|
|
+ for (PjShipItems shipItems1 : shipItemsList) {
|
|
|
+ if (!itemIdList.isEmpty() && itemIdList.contains(shipItems1.getId())) {
|
|
|
+ shipItems1.setProportion(firstProportion);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- 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 {
|
|
|
- if (!shipItemsList.isEmpty()) {
|
|
|
- for (PjShipItems shipItems1 : shipItemsList) {
|
|
|
- if (!itemIdList.isEmpty() && itemIdList.contains(shipItems1.getId())) {
|
|
|
- shipItems1.setProportion(secondProportion);
|
|
|
+ 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 {
|
|
|
+ if (!shipItemsList.isEmpty()) {
|
|
|
+ for (PjShipItems shipItems1 : shipItemsList) {
|
|
|
+ if (!itemIdList.isEmpty() && itemIdList.contains(shipItems1.getId())) {
|
|
|
+ shipItems1.setProportion(secondProportion);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ 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);
|
|
|
}
|
|
|
}
|
|
|
- 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());
|
|
|
}
|
|
|
}
|
|
|
- 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());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -2783,6 +2788,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
|
|
|
List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
|
|
|
.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(PjGoodsDesc::getIsDeleted, 0)
|
|
|
@@ -2804,6 +2810,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
.eq(PjOrderItems::getIsDeleted, 0)
|
|
|
.in(PjOrderItems::getId, srcItemIds));
|
|
|
List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
|
|
|
+ List<PjStockDesc> pjStockDescArrayDelete = new ArrayList<>();
|
|
|
List<PjOrderItems> orderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(PjOrderItems::getIsDeleted, 0)
|
|
|
@@ -2877,7 +2884,14 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
if (!res.isSuccess()) {
|
|
|
throw new RuntimeException(res.getMsg());
|
|
|
}*/
|
|
|
- pjStockDescArrayList.add(stockOne);
|
|
|
+ if (new BigDecimal("0.00").compareTo(stockOne.getBalanceQuantity()) == 0
|
|
|
+ && new BigDecimal("0.00").compareTo(stockOne.getBalanceQuantityFinancing()) == 0
|
|
|
+ && new BigDecimal("0.00").compareTo(stockOne.getBalanceQuantityHave()) == 0
|
|
|
+ && 1 == stockOne.getVersion()) {
|
|
|
+ pjStockDescArrayDelete.add(stockOne);
|
|
|
+ } else {
|
|
|
+ pjStockDescArrayList.add(stockOne);
|
|
|
+ }
|
|
|
} else {
|
|
|
throw new RuntimeException("未查到库存数据");
|
|
|
}
|
|
|
@@ -2887,7 +2901,12 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
|
|
|
throw new RuntimeException("商品:" + msg1 + "正在盘点中,操作失败");
|
|
|
}
|
|
|
shipItemsService.saveOrUpdateBatch(shipItemsList);
|
|
|
- iStockDescService.updateBatchByIdNew(pjStockDescArrayList);
|
|
|
+ if (!pjStockDescArrayList.isEmpty()) {
|
|
|
+ iStockDescService.updateBatchByIdNew(pjStockDescArrayList);
|
|
|
+ }
|
|
|
+ if (!pjStockDescArrayDelete.isEmpty()) {
|
|
|
+ iStockDescService.removeByIds(pjStockDescArrayDelete.stream().map(PjStockDesc::getId).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
|
|
|
//查询所有上架商品
|
|
|
LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
|