|
|
@@ -510,11 +510,13 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
for (BoxAdjustmentCost item : tradingBox.getBoxAdjustmentCostList()) {
|
|
|
if (item.getId() == null) {
|
|
|
item.setCreateUser(AuthUtil.getUserId());
|
|
|
+ item.setCreateUserName(AuthUtil.getUserName());
|
|
|
item.setCreateTime(new Date());
|
|
|
item.setTenantId(AuthUtil.getTenantId());
|
|
|
item.setPid(tradingBox.getId());
|
|
|
} else {
|
|
|
item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
item.setUpdateTime(new Date());
|
|
|
item.setPid(tradingBox.getId());
|
|
|
}
|
|
|
@@ -2070,6 +2072,11 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
if (putBoxItemsList.isEmpty()) {
|
|
|
throw new RuntimeException("未查到需计算租金明细");
|
|
|
}
|
|
|
+ List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenter::getPid, detail.getId())
|
|
|
+ );
|
|
|
List<RentTerm> rentTermList = rentTermService.list(new LambdaQueryWrapper<RentTerm>()
|
|
|
.eq(RentTerm::getIsDeleted, 0)
|
|
|
.eq(RentTerm::getTenantId, AuthUtil.getTenantId())
|
|
|
@@ -2110,7 +2117,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
feeCenter.setFeeCode(fees.getCode());
|
|
|
feeCenter.setFeeCnName(fees.getCnName());
|
|
|
feeCenter.setFeeEnName(fees.getEnName());
|
|
|
- feeCenter.setCurCode(fees.getCurNo());
|
|
|
+ feeCenter.setCurCode(rentTermList.get(0).getCurCode());
|
|
|
feeCenter.setCntrNo(item.getCode());
|
|
|
feeCenter.setUnitNo(item.getBoxType());
|
|
|
if (ObjectUtils.isNotNull(item.getPodEmptyContainerReturnDate())
|
|
|
@@ -2133,12 +2140,15 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
feeCenter.setDays(Integer.parseInt(duration.toDays() + "") + 1);
|
|
|
}
|
|
|
Integer days = feeCenter.getDays();
|
|
|
- Instant instant3 = item.getRentEndDate().toInstant();
|
|
|
- Instant instant4 = item.getPolStationEmptyContainerExitDate().toInstant();
|
|
|
- LocalDate date3 = instant3.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
- LocalDate date4 = instant4.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
- Duration duratio1 = Duration.between(date4.atStartOfDay(), date3.atStartOfDay());
|
|
|
- int earlySumDays = Integer.parseInt(duratio1.toDays() + "");
|
|
|
+ int earlySumDays = 0;
|
|
|
+ if (item.getRentEndDate().compareTo(item.getPolStationEmptyContainerExitDate()) != 0) {
|
|
|
+ Instant instant3 = item.getRentEndDate().toInstant();
|
|
|
+ Instant instant4 = item.getPolStationEmptyContainerExitDate().toInstant();
|
|
|
+ LocalDate date3 = instant3.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ LocalDate date4 = instant4.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ Duration duratio1 = Duration.between(date4.atStartOfDay(), date3.atStartOfDay());
|
|
|
+ earlySumDays = Integer.parseInt(duratio1.toDays() + "") + 1;
|
|
|
+ }
|
|
|
String text = "";
|
|
|
int dayLength;
|
|
|
BigDecimal amount = new BigDecimal("0.00");
|
|
|
@@ -2170,11 +2180,12 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
}
|
|
|
if ("CNY".equals(feeCenter.getCurCode())) {
|
|
|
feeCenter.setExrate(new BigDecimal("1.00"));
|
|
|
+ feeCenter.setAmount(amount);
|
|
|
} else {
|
|
|
feeCenter.setExrate(exrateC);
|
|
|
+ feeCenter.setAmountLoc(amount);
|
|
|
}
|
|
|
feeCenter.setPrice(amount);
|
|
|
- feeCenter.setAmount(amount);
|
|
|
feeCenter.setRemarks(text);
|
|
|
feeCenter.setQuantity(new BigDecimal("1"));
|
|
|
feeCenter.setOutboundDate(tradingBox.getRentDate());
|
|
|
@@ -2199,6 +2210,44 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
tradingBoxItemService.updateBatchById(putBoxItemsList);
|
|
|
if (!feeCenterList.isEmpty()) {
|
|
|
feeCenterService.saveBatch(feeCenterList);
|
|
|
+ if (!feeCenters.isEmpty()) {
|
|
|
+ feeCenters.addAll(feeCenterList);
|
|
|
+ } else {
|
|
|
+ feeCenters = feeCenterList;
|
|
|
+ }
|
|
|
+ BigDecimal exrateD = bCurrencyService.getCnyExrate(new Date(), "USD", "D", "1");
|
|
|
+ //费用数据
|
|
|
+ BigDecimal amountD = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountC = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountDUsd = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountCUsd = new BigDecimal("0.00");
|
|
|
+ for (FeeCenter item : feeCenters) {
|
|
|
+ if ("CNY".equals(item.getCurCode())) {
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ amountD = amountD.add(item.getAmount());
|
|
|
+ } else {
|
|
|
+ amountC = amountC.add(item.getAmount());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ amountDUsd = amountDUsd.add(item.getAmountLoc());
|
|
|
+ } else {
|
|
|
+ amountCUsd = amountCUsd.add(item.getAmountLoc());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tradingBox.setAmountD(amountD);
|
|
|
+ tradingBox.setAmountDUsd(amountDUsd);
|
|
|
+ BigDecimal totalAmountD = amountD.add(amountDUsd.multiply(exrateD));
|
|
|
+ tradingBox.setTotalAmountD(totalAmountD);
|
|
|
+ tradingBox.setAmountC(amountC);
|
|
|
+ tradingBox.setAmountCUsd(amountCUsd);
|
|
|
+ BigDecimal totalAmountC = amountC.add(amountCUsd.multiply(exrateC));
|
|
|
+ tradingBox.setTotalAmountC(totalAmountC);
|
|
|
+ tradingBox.setProfit(tradingBox.getAmountD().subtract(tradingBox.getAmountC()));
|
|
|
+ tradingBox.setProfitUsd(tradingBox.getAmountDUsd().subtract(tradingBox.getAmountCUsd()));
|
|
|
+ tradingBox.setTotalProfit(tradingBox.getTotalAmountD().subtract(tradingBox.getTotalAmountC()));
|
|
|
+ baseMapper.updateById(tradingBox);
|
|
|
}
|
|
|
return R.data(tradingBox);
|
|
|
}
|
|
|
@@ -2219,13 +2268,17 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
tradingBoxFeesLambdaQueryWrapper.eq(FeeCenter::getIsDeleted, 0)
|
|
|
.eq(FeeCenter::getPid, tradingBox.getId())
|
|
|
.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(FeeCenter::getFeeCode, "BOX-ZJ")
|
|
|
.orderByDesc(FeeCenter::getCreateTime);
|
|
|
- List<FeeCenter> feeCenters = feeCenterService.list(tradingBoxFeesLambdaQueryWrapper);
|
|
|
+ List<FeeCenter> feeCentersList = feeCenterService.list(tradingBoxFeesLambdaQueryWrapper);
|
|
|
+ if (feeCentersList.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到费用明细");
|
|
|
+ }
|
|
|
+ List<FeeCenter> feeCenters = feeCentersList.stream().filter(e-> e.getFeeCode().equals("BOX-ZJ")).collect(Collectors.toList());
|
|
|
if (feeCenters.isEmpty()) {
|
|
|
throw new RuntimeException("未计算过租金,撤销失败");
|
|
|
}
|
|
|
List<TradingBoxItem> itemList = new ArrayList<>();
|
|
|
+ List<Long> feeId = new ArrayList<>();
|
|
|
for (TradingBoxItem item : tradingBoxItemList) {
|
|
|
List<FeeCenter> feeCenterList = feeCenters.stream().filter(e -> e.getCntrNo().equals(item.getCode())).collect(Collectors.toList());
|
|
|
if (!feeCenterList.isEmpty()) {
|
|
|
@@ -2234,6 +2287,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
throw new RuntimeException("箱型:" + item.getBoxType() + "费用已生成账单,撤销失败");
|
|
|
}
|
|
|
feeCenterService.removeById(feeCenter.getId());
|
|
|
+ feeId.add(feeCenter.getId());
|
|
|
item.setUpdateTime(new Date());
|
|
|
item.setUpdateUser(AuthUtil.getUserId());
|
|
|
item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
@@ -2252,6 +2306,43 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
if (!itemList.isEmpty()) {
|
|
|
tradingBoxItemService.updateBatchById(itemList);
|
|
|
}
|
|
|
+ if (!feeId.isEmpty()){
|
|
|
+ List<FeeCenter> feeCenterList = feeCentersList.stream().filter(e-> !feeId.contains(e.getId())).collect(Collectors.toList());
|
|
|
+ BigDecimal exrateD = bCurrencyService.getCnyExrate(new Date(), "USD", "D", "1");
|
|
|
+ BigDecimal exrateC = bCurrencyService.getCnyExrate(new Date(), "USD", "C", "1");
|
|
|
+ //费用数据
|
|
|
+ BigDecimal amountD = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountC = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountDUsd = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountCUsd = new BigDecimal("0.00");
|
|
|
+ for (FeeCenter item : feeCenterList) {
|
|
|
+ if ("CNY".equals(item.getCurCode())) {
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ amountD = amountD.add(item.getAmount());
|
|
|
+ } else {
|
|
|
+ amountC = amountC.add(item.getAmount());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ amountDUsd = amountDUsd.add(item.getAmountLoc());
|
|
|
+ } else {
|
|
|
+ amountCUsd = amountCUsd.add(item.getAmountLoc());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tradingBox.setAmountD(amountD);
|
|
|
+ tradingBox.setAmountDUsd(amountDUsd);
|
|
|
+ BigDecimal totalAmountD = amountD.add(amountDUsd.multiply(exrateD));
|
|
|
+ tradingBox.setTotalAmountD(totalAmountD);
|
|
|
+ tradingBox.setAmountC(amountC);
|
|
|
+ tradingBox.setAmountCUsd(amountCUsd);
|
|
|
+ BigDecimal totalAmountC = amountC.add(amountCUsd.multiply(exrateC));
|
|
|
+ tradingBox.setTotalAmountC(totalAmountC);
|
|
|
+ tradingBox.setProfit(tradingBox.getAmountD().subtract(tradingBox.getAmountC()));
|
|
|
+ tradingBox.setProfitUsd(tradingBox.getAmountDUsd().subtract(tradingBox.getAmountCUsd()));
|
|
|
+ tradingBox.setTotalProfit(tradingBox.getTotalAmountD().subtract(tradingBox.getTotalAmountC()));
|
|
|
+ baseMapper.updateById(tradingBox);
|
|
|
+ }
|
|
|
tradingBox.setTradingBoxItemsList(tradingBoxItemList);
|
|
|
return R.data(tradingBox);
|
|
|
}
|