浏览代码

发货加金额判断

lazhaoqian 3 年之前
父节点
当前提交
800edc022a

+ 5 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/DeliveryItems.java

@@ -287,6 +287,11 @@ public class DeliveryItems implements Serializable {
     	private BigDecimal exRate;
 
 		private String cntrNoList;
+	/**
+	 * 单据状态字典表
+	 */
+		@ApiModelProperty(value = "单据状态字典表")
+		private String deliveryStatus;
 
 
 }

+ 10 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderParts.java

@@ -137,5 +137,15 @@ public class OrderParts implements Serializable {
 	 */
 		@ApiModelProperty(value = "租户id")
 		private String tenantId;
+	/**
+	 * 供应商
+	 */
+		@ApiModelProperty(value = "供应商")
+		private Long corpId;
+	/**
+	 * 供应商名称
+	 */
+		@ApiModelProperty(value = "供应商名称")
+		private String corpName;
 
 }

+ 1 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/DeliveryItemsMapper.xml

@@ -43,6 +43,7 @@
         <result column="purchase_quantity" property="purchaseQuantity"/>
         <result column="unit" property="unit"/>
         <result column="item_prop" property="itemProp"/>
+        <result column="delivery_status" property="deliveryStatus"/>
     </resultMap>
 
 

+ 48 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java

@@ -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("未找到发货明细");
+		}
+
+	}
 }

+ 2 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderPartsMapper.xml

@@ -22,6 +22,8 @@
         <result column="update_time" property="updateTime"/>
         <result column="status" property="status"/>
         <result column="is_deleted" property="isDeleted"/>
+        <result column="corp_id" property="corpId"/>
+        <result column="corp_name" property="corpName"/>
     </resultMap>