Browse Source

2022年10月20日14:40:12

纪新园 3 years ago
parent
commit
6fb33bf4c7

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

@@ -983,4 +983,10 @@ public class Order implements Serializable {
 	 */
 	@TableField(exist = false)
 	private BigDecimal totalValue;
+
+	/**
+	 * 国内:1,国外:2
+	 */
+	@TableField(exist = false)
+	private String domesticAbroad;
 }

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

@@ -61,6 +61,12 @@ public class OrderCost implements Serializable {
 	*/
 		@ApiModelProperty(value = "出运港名")
 		private String outHarborName;
+
+	/**
+	 * 目的港名
+	 */
+	@ApiModelProperty(value = "目的港名")
+	private String objectiveName;
 	/**
 	* 备注
 	*/

+ 8 - 2
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderItems.java

@@ -697,11 +697,17 @@ public class OrderItems implements Serializable {
 	private BigDecimal outFactoryPrice;
 
 	/**
-	 * 分摊金额
+	 * 分摊金额(国内)
 	 */
-	@ApiModelProperty(value = "分摊金额")
+	@ApiModelProperty(value = "分摊金额(国内)")
 	private BigDecimal shareAmount;
 
+	/**
+	 * 分摊金额(国际)
+	 */
+	@ApiModelProperty(value = "分摊金额(国际)")
+	private BigDecimal internationalAmount;
+
 
 
 

+ 1 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -250,5 +250,5 @@ public interface IOrderService extends IService<Order> {
 	/**
 	 * 计算国内费用
 	 */
-	Map<String,BigDecimal> calculationDomesticFees(Order order);
+	Map<String,Object> calculationDomesticFees(Order order);
 }

+ 134 - 44
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -366,6 +366,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			R<List<Map<String, Object>>> corpMessage = corpsDescClient.getCorpsMessage(orderMessage.getCorpId().toString());
 			if (corpMessage.isSuccess() && corpMessage.getData() != null) {
 				orderMessage.setCorpName(corpMessage.getData());
+				orderMessage.setCorpsName(corpMessage.getData().get(0).get("cname").toString());
 			}
 		}
 		// 获取销售公司中文名
@@ -1499,29 +1500,41 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	 * @return
 	 */
 	@Override
-	public Map<String, BigDecimal> calculationDomesticFees(Order order) {
+	public Map<String, Object> calculationDomesticFees(Order order) {
 
 		//客户
 		List<CorpsDesc> corpsDescList = castToList(redisTemplate.opsForValue().get("corps"), CorpsDesc.class);
+		//总费用
+		BigDecimal amount = new BigDecimal(0);
+		//分摊金额
+		BigDecimal amountF = new BigDecimal(0);
+		//返回数据
+		Map<String, Object> map = new HashMap<>();
+		//应收集合
+		List<Map<String, Object>> mapList = new ArrayList<>();
 
+		//获取费用主表信息
 		LambdaQueryWrapper<OrderCost> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(OrderCost::getGoodsAttribute, order.getCargoType())
-			.eq(OrderCost::getOutHarborName, order.getPortOfLoad())
-			.eq(OrderCost::getStatus, 0)
+			.eq(OrderCost::getOutHarborName, order.getPortOfLoad());
+		if (order.getDomesticAbroad().equals("2")) {//判断是否计算国际费用
+			lambdaQueryWrapper.eq(OrderCost::getObjectiveName, order.getPortOfDestination());
+		}
+		lambdaQueryWrapper.eq(OrderCost::getStatus, 0)
 			.eq(OrderCost::getTenantId, AuthUtil.getTenantId())
 			.eq(OrderCost::getIsDeleted, 0);
-
-		BigDecimal amount = new BigDecimal(0);
-		BigDecimal amountF = new BigDecimal(0);
+		//明细数据
 		List<OrderItems> orderItemsList = order.getOrderItemsList();
-
+		//获取费用主表信息
 		List<OrderCost> orderCostList = orderCostMapper.selectList(lambdaQueryWrapper);
 		for (OrderCost orderCost : orderCostList) {
+			//获取费用明细
 			LambdaQueryWrapper<OrderCostItem> itemLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			itemLambdaQueryWrapper.eq(OrderCostItem::getPId, orderCost.getId());
+			//获取明细第一条供应商所在地
 			if (ObjectUtils.isNotNull(orderItemsList)) {
 				Long corpId = orderItemsList.get(0).getCorpId();
-				//货权人
+				//供应商
 				CorpsDesc corpsDesc = corpsDescList.stream().filter(corps -> corps.getId().equals(corpId)).findFirst().orElse(null);
 				if (ObjectUtils.isNotNull(corpsDesc) && ObjectUtils.isNotNull(corpsDesc.getBelongtoarea())) {
 					itemLambdaQueryWrapper.apply("find_in_set(departure,'" + corpsDesc.getBelongtoarea() + "')");//明细供应商所在地址
@@ -1530,62 +1543,139 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			itemLambdaQueryWrapper.eq(OrderCostItem::getStatus, 0)
 				.eq(OrderCostItem::getTenantId, AuthUtil.getTenantId())
 				.eq(OrderCostItem::getIsDeleted, 0);
+			//获取费用明细
 			List<OrderCostItem> orderCostItemList = orderCostItemMapper.selectList(itemLambdaQueryWrapper);
 			for (OrderCostItem orderCostItem : orderCostItemList) {
-				//陆运费
-				if (orderCostItem.getType() == 1) {
-					//陆运费=箱型费用*箱量/汇率
-					if ("20GP".equals(order.getBoxPile())) {
-						amount = amount.add(orderCostItem.getTwentyGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate(), MathContext.DECIMAL32));
-					} else if ("40GP".equals(order.getBoxPile())) {
-						amount = amount.add(orderCostItem.getFortyGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate(), MathContext.DECIMAL32));
-					} else if ("40HC".equals(order.getBoxPile())) {
-						amount = amount.add(orderCostItem.getFortyHc().multiply(order.getBoxNumber()).divide(order.getExchangeRate(), MathContext.DECIMAL32));
-					} else if ("45GP".equals(order.getBoxPile())) {
-						amount = amount.add(orderCostItem.getFortyFiveGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate(), MathContext.DECIMAL32));
-					} else if ("PALLET".equals(order.getBoxPile())) {
-						amount = amount.add(orderCostItem.getPallet().multiply(order.getBoxNumber()).divide(order.getExchangeRate(), MathContext.DECIMAL32));
-					}
-				} else if (orderCostItem.getType() == 2) {//运费
-					//运费=箱型费用*箱量/汇率  || 箱型费用*箱量
-					if ("20GP".equals(order.getBoxPile())) {
-						if (orderCostItem.getCurrency().equals("CNY")) {
-							amount = amount.add(orderCostItem.getTwentyGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate(), MathContext.DECIMAL32));
-						} else {
+				Map<String, Object> feesMap = new HashMap<>();
+				feesMap.put("feeName", orderCostItem.getFeesName());
+				feesMap.put("itemId", orderCostItem.getFeesId());
+
+				//判断是否计算国内费用
+				if (order.getDomesticAbroad().equals("1") && orderCostItem.getCurrency().equals("CNY")) {
+					feesMap.put("currency", "CNY");
+					feesMap.put("exchangeRate", "1.00");
+					//陆运费
+					if (orderCostItem.getType() == 1) {
+						feesMap.put("quantity", order.getBoxNumber());
+						//陆运费=箱型费用*箱量/汇率
+						if ("20GP".equals(order.getBoxPile())) {
 							amount = amount.add(orderCostItem.getTwentyGp().multiply(order.getBoxNumber()));
-						}
-					} else if ("40GP".equals(order.getBoxPile())) {
-						if (orderCostItem.getCurrency().equals("CNY")) {
-							amount = amount.add(orderCostItem.getFortyGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate(), MathContext.DECIMAL32));
-						} else {
+							feesMap.put("unit", "20GP");
+							feesMap.put("price", orderCostItem.getTwentyGp());
+						} else if ("40GP".equals(order.getBoxPile())) {
 							amount = amount.add(orderCostItem.getFortyGp().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "40GP");
+							feesMap.put("price", orderCostItem.getFortyGp());
+						} else if ("40HC".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getFortyHc().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "40HC");
+							feesMap.put("price", orderCostItem.getFortyHc());
+						} else if ("45GP".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getFortyFiveGp().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "45GP");
+							feesMap.put("price", orderCostItem.getFortyFiveGp());
+						} else if ("PALLET".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getPallet().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "PALLET");
+							feesMap.put("price", orderCostItem.getPallet());
 						}
-					} else if ("40HC".equals(order.getBoxPile())) {
-						if (orderCostItem.getCurrency().equals("CNY")) {
-							amount = amount.add(orderCostItem.getFortyHc().multiply(order.getBoxNumber()).divide(order.getExchangeRate(), MathContext.DECIMAL32));
-						} else {
+					} else if (orderCostItem.getType() == 2) {//运费
+						feesMap.put("quantity", order.getBoxNumber());
+						//运费=箱型费用*箱量/汇率  || 箱型费用*箱量
+						if ("20GP".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getTwentyGp().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "20GP");
+							feesMap.put("price", orderCostItem.getTwentyGp());
+						} else if ("40GP".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getFortyGp().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "40GP");
+							feesMap.put("price", orderCostItem.getFortyGp());
+						} else if ("40HC".equals(order.getBoxPile())) {
 							amount = amount.add(orderCostItem.getFortyHc().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "40HC");
+							feesMap.put("price", orderCostItem.getFortyHc());
 						}
+					} else {//杂费
+						//杂费 = 票费用/汇率  || 票费用
+						amount = amount.add(orderCostItem.getTicket());
+						feesMap.put("unit", "JOB");
+						feesMap.put("price", orderCostItem.getTicket());
+						feesMap.put("quantity", 1);
 					}
-				} else {//杂费
-					//杂费 = 票费用/汇率  || 票费用
-					if (orderCostItem.getCurrency().equals("CNY")) {
-						amount = amount.add(orderCostItem.getTicket().divide(order.getExchangeRate(), MathContext.DECIMAL32));
-					} else {
+					mapList.add(feesMap);
+				} else if (order.getDomesticAbroad().equals("2") && orderCostItem.getCurrency().equals("USD")) {
+					feesMap.put("currency", "USD");
+					feesMap.put("exchangeRate", order.getExchangeRate());
+					//陆运费
+					if (orderCostItem.getType() == 1) {
+						feesMap.put("quantity", order.getBoxNumber());
+						//陆运费=箱型费用*箱量/汇率
+						if ("20GP".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getTwentyGp().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "20GP");
+							feesMap.put("price", orderCostItem.getTwentyGp());
+						} else if ("40GP".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getFortyGp().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "40GP");
+							feesMap.put("price", orderCostItem.getFortyGp());
+						} else if ("40HC".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getFortyHc().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "40HC");
+							feesMap.put("price", orderCostItem.getFortyHc());
+						} else if ("45GP".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getFortyFiveGp().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "45GP");
+							feesMap.put("price", orderCostItem.getFortyFiveGp());
+						} else if ("PALLET".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getPallet().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "PALLET");
+							feesMap.put("price", orderCostItem.getPallet());
+						}
+					} else if (orderCostItem.getType() == 2) {//运费
+						feesMap.put("quantity", order.getBoxNumber());
+						//运费=箱型费用*箱量/汇率  || 箱型费用*箱量
+						if ("20GP".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getTwentyGp().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "20GP");
+							feesMap.put("price", orderCostItem.getTwentyGp());
+						} else if ("40GP".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getFortyGp().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "40GP");
+							feesMap.put("price", orderCostItem.getFortyGp());
+						} else if ("40HC".equals(order.getBoxPile())) {
+							amount = amount.add(orderCostItem.getFortyHc().multiply(order.getBoxNumber()));
+							feesMap.put("unit", "40HC");
+							feesMap.put("price", orderCostItem.getFortyHc());
+						}
+					} else {//杂费
+						//杂费 = 票费用/汇率  || 票费用
 						amount = amount.add(orderCostItem.getTicket());
+						feesMap.put("unit", "JOB");
+						feesMap.put("price", orderCostItem.getTicket());
+						feesMap.put("quantity", 1);
 					}
+					mapList.add(feesMap);
 				}
 			}
 		}
+		if (order.getDomesticAbroad().equals("1") && order.getCurrency().equals("CNY")) {
+			amount = amount;
+		} else if (order.getDomesticAbroad().equals("1") && order.getCurrency().equals("USD")) {
+			amount = amount.divide(order.getExchangeRate(), MathContext.DECIMAL32);
+		} else if (order.getDomesticAbroad().equals("2") && order.getCurrency().equals("CNY")) {
+			amount = amount.multiply(order.getExchangeRate(), MathContext.DECIMAL32);
+		} else if (order.getDomesticAbroad().equals("2") && order.getCurrency().equals("USD")) {
+			amount = amount;
+		}
 		//分摊费用额 = 总费用/总货值
 		amountF = amount.divide(order.getTotalValue(), MathContext.DECIMAL32);
 		amountF = amountF.setScale(2, BigDecimal.ROUND_HALF_UP);
 		amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
 
-		Map<String, BigDecimal> map = new HashMap<>();
+
 		map.put("amount", amount);
 		map.put("amountF", amountF);
-
+		map.put("fees", mapList);
 		return map;
 	}