|
|
@@ -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;
|
|
|
}
|
|
|
|