|
|
@@ -17,6 +17,7 @@
|
|
|
package org.springblade.deliver.goods.service.impl;
|
|
|
|
|
|
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
@@ -30,6 +31,7 @@ import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.deliver.goods.entity.Delivery;
|
|
|
import org.springblade.deliver.goods.entity.DeliveryItems;
|
|
|
import org.springblade.deliver.goods.enums.DeliveryEnum;
|
|
|
+import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
|
|
|
import org.springblade.deliver.goods.vo.DeliveryItemsVO;
|
|
|
import org.springblade.deliver.goods.mapper.DeliveryItemsMapper;
|
|
|
import org.springblade.deliver.goods.service.IDeliveryItemsService;
|
|
|
@@ -45,8 +47,11 @@ import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.BigInteger;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 发货明细 服务实现类
|
|
|
@@ -133,6 +138,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
deliveryItems.setPid(pId);//父级ID
|
|
|
deliveryItems.setTenantId(SecureUtil.getTenantId());//租户id
|
|
|
+ deliveryItems.setDeliveryStatus(delivery.getDeliveryStatus());
|
|
|
if (deliveryItems.getId() == null){
|
|
|
deliveryItems.setCreateUser(SecureUtil.getUserId());
|
|
|
deliveryItems.setCreateTime(new Date());
|
|
|
@@ -451,4 +457,46 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
return stockGoods;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询已发货金额和本次发货金额和是否比已收金额小或者等于
|
|
|
+ * @param deliveryItemsList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public R deliveryAmount(List<DeliveryItems> deliveryItemsList,String tradeType){
|
|
|
+ //先获取发货明细中的订单号,并将其分组
|
|
|
+ //获取每个订单号的已发货金额 和每个订单的已收金额
|
|
|
+ //若已发货金额加本次发货金额小于等于订单已收金额可以发货反之不能发货
|
|
|
+ List<String> collect = deliveryItemsList.stream().map(DeliveryItems::getContractNumber).collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isNotEmpty(collect)){
|
|
|
+ for (String contractNumber : collect) {
|
|
|
+ BigDecimal newDelivery = new BigDecimal(BigInteger.ZERO);//本次发货金额
|
|
|
+ BigDecimal oldDelivery = new BigDecimal(BigInteger.ZERO);//本次发货金额
|
|
|
+ BigDecimal gathering = new BigDecimal(BigInteger.ZERO);//本次发货金额
|
|
|
+ LambdaQueryWrapper<DeliveryItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(DeliveryItems::getContractNumber,contractNumber);
|
|
|
+ lambdaQueryWrapper.eq(DeliveryItems::getTenantId,SecureUtil.getTenantId());
|
|
|
+ lambdaQueryWrapper.eq(DeliveryItems::getIsDeleted,0);
|
|
|
+ lambdaQueryWrapper.eq(DeliveryItems::getDeliveryStatus, DeliveryStatusEnum.DELIVER.getType());
|
|
|
+ List<DeliveryItems> deliveryItems = baseMapper.selectList(lambdaQueryWrapper);
|
|
|
+ if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())){
|
|
|
+ newDelivery = deliveryItemsList.stream().filter(student -> Objects.equals(student.getContractNumber(),contractNumber)).map(DeliveryItems::getDeliveryAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ oldDelivery = deliveryItems.stream().map(DeliveryItems::getDeliveryAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }else if (tradeType.equals(OrderTypeEnum.IMPORT.getType())){
|
|
|
+ newDelivery = deliveryItemsList.stream().filter(student -> Objects.equals(student.getContractNumber(),contractNumber)).map(DeliveryItems::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ oldDelivery = deliveryItems.stream().map(DeliveryItems::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }else {
|
|
|
+ newDelivery = deliveryItemsList.stream().filter(student -> Objects.equals(student.getContractNumber(),contractNumber)).map(DeliveryItems::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ oldDelivery = deliveryItems.stream().map(DeliveryItems::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }
|
|
|
+ if (gathering.compareTo((newDelivery.add(oldDelivery))) < 0){
|
|
|
+ throw new RuntimeException("订单"+contractNumber+"可发货金额为:"+gathering.subtract(newDelivery.add(oldDelivery)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.success("可以发货");
|
|
|
+ }else {
|
|
|
+ throw new RuntimeException("未找到发货明细");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|