|
|
@@ -27,7 +27,6 @@ import org.springblade.los.Util.CurrencyUtils;
|
|
|
import org.springblade.los.basic.business.entity.BusinessType;
|
|
|
import org.springblade.los.basic.business.service.IBusinessTypeService;
|
|
|
import org.springblade.los.basic.cur.entity.BCurExrate;
|
|
|
-import org.springblade.los.basic.cur.service.IBCurrencyService;
|
|
|
import org.springblade.los.basic.fees.entity.BFees;
|
|
|
import org.springblade.los.basic.fees.service.IBFeesService;
|
|
|
import org.springblade.los.billno.entity.BusinessBillNo;
|
|
|
@@ -36,6 +35,12 @@ import org.springblade.los.box.dto.ExportTradingBoxItemOut;
|
|
|
import org.springblade.los.box.entity.*;
|
|
|
import org.springblade.los.box.mapper.TradingBoxMapper;
|
|
|
import org.springblade.los.box.service.*;
|
|
|
+import org.springblade.los.business.sea.entity.Bills;
|
|
|
+import org.springblade.los.business.sea.entity.Containers;
|
|
|
+import org.springblade.los.business.sea.entity.SeaContainerNumberItem;
|
|
|
+import org.springblade.los.business.sea.service.IBillsService;
|
|
|
+import org.springblade.los.business.sea.service.IContainersService;
|
|
|
+import org.springblade.los.business.sea.service.ISeaContainerNumberItemService;
|
|
|
import org.springblade.los.finance.fee.entity.FeeCenter;
|
|
|
import org.springblade.los.finance.fee.service.IFeeCenterService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -88,6 +93,12 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
|
|
|
private final CurrencyUtils currencyUtils;
|
|
|
|
|
|
+ private final ISeaContainerNumberItemService seaContainerNumberItemService;
|
|
|
+
|
|
|
+ private final IBillsService billsService;
|
|
|
+
|
|
|
+ private final IContainersService containersService;
|
|
|
+
|
|
|
@Override
|
|
|
public TradingBox getDetail(TradingBox tradingBox) {
|
|
|
if (tradingBox.getId() == null) {
|
|
|
@@ -277,7 +288,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
date = new Date();
|
|
|
}
|
|
|
String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
|
|
|
- List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1",AuthUtil.getDeptId());
|
|
|
+ List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1", AuthUtil.getDeptId());
|
|
|
//明细数据
|
|
|
if (ObjectUtils.isNotNull(tradingBox.getTradingBoxItemsList()) && !tradingBox.getTradingBoxItemsList().isEmpty()) {
|
|
|
BigDecimal amount = tradingBox.getTradingBoxItemsList().stream().filter(e -> exrateType.equals(e.getCurrency()))
|
|
|
@@ -566,7 +577,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
throw new RuntimeException("未查到单据");
|
|
|
}
|
|
|
String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
|
|
|
- List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1",AuthUtil.getDeptId());
|
|
|
+ List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1", AuthUtil.getDeptId());
|
|
|
if ("1".equals(tradingBox.getRentType())) {
|
|
|
detail.setBuxStaus("已启租");
|
|
|
detail.setRentEndDate(tradingBox.getRentDate());
|
|
|
@@ -695,7 +706,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
feeCenter.setExrate(new BigDecimal("1.00"));
|
|
|
} else {
|
|
|
feeCenter.setAmountLoc(feeCenter.getPrice().multiply(feeCenter.getQuantity()));
|
|
|
- feeCenter.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenter.getCurCode(), "1"));
|
|
|
+ feeCenter.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenter.getCurCode(), "1"));
|
|
|
}
|
|
|
feeCenter.setBillNo(tradingBox.getSysNo());
|
|
|
feeCenter.setBusinessType(tradingBox.getType());
|
|
|
@@ -764,7 +775,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
} else {
|
|
|
feeCenter.setAmountLoc(feeCenter.getPrice().multiply(feeCenter.getQuantity())
|
|
|
.multiply(new BigDecimal(feeCenter.getDays() + "")));
|
|
|
- feeCenter.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenter.getCurCode(), "1"));
|
|
|
+ feeCenter.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenter.getCurCode(), "1"));
|
|
|
feeCenter.setRemarks("租金" + feeCenter.getAmountLoc() + "=" + feeCenter.getPrice() + "箱/天*箱数" + feeCenter.getQuantity() + "*天数" + feeCenter.getDays());
|
|
|
}
|
|
|
}
|
|
|
@@ -887,7 +898,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
List<TradingBoxItem> itemList = new ArrayList<>();
|
|
|
String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
|
|
|
- List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1",AuthUtil.getDeptId());
|
|
|
+ List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1", AuthUtil.getDeptId());
|
|
|
for (TradingBoxType item : tradingBoxTypeList) {
|
|
|
List<TradingBoxItem> tradingBoxItems = tradingBoxItemList.stream().filter(e -> e.getBoxType().equals(item.getBoxType()))
|
|
|
.collect(Collectors.toList());
|
|
|
@@ -933,7 +944,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
if (exrateType.equals(feeCenter.getCurCode())) {
|
|
|
feeCenter.setExrate(new BigDecimal("1.00"));
|
|
|
} else {
|
|
|
- feeCenter.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenter.getCurCode(), "1"));
|
|
|
+ feeCenter.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenter.getCurCode(), "1"));
|
|
|
}
|
|
|
feeCenter.setRemarks("租金" + feeCenter.getAmount() + "=" + feeCenter.getPrice() + "箱/天*箱数" + feeCenter.getQuantity() + "*天数" + feeCenter.getDays());
|
|
|
|
|
|
@@ -981,13 +992,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
if (tradingBoxItemList.isEmpty()) {
|
|
|
throw new RuntimeException("明细不能为空");
|
|
|
}
|
|
|
- BFees fees = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
|
|
|
- .eq(BFees::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(BFees::getIsDeleted, 0)
|
|
|
- .eq(BFees::getCode, "BOX-ZJ"));
|
|
|
- if (fees == null) {
|
|
|
- throw new RuntimeException("请先维护费用基础信息");
|
|
|
- }
|
|
|
List<TradingBoxType> tradingBoxTypeList = tradingBoxTypeService.list(new LambdaQueryWrapper<TradingBoxType>()
|
|
|
.eq(TradingBoxType::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(TradingBoxType::getIsDeleted, 0)
|
|
|
@@ -1001,7 +1005,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
.eq(FeeCenter::getPid, tradingBox.getId())
|
|
|
.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
.in(FeeCenter::getUnitNo, tradingBoxTypeList.stream().map(TradingBoxType::getBoxType).collect(Collectors.toList()))
|
|
|
- .eq(FeeCenter::getFeeCode, fees.getCode())
|
|
|
+ .eq(FeeCenter::getFeeCode, "BOX-ZJ")
|
|
|
+ .eq(FeeCenter::getAutomaticGenerated, "1")
|
|
|
.orderByDesc(FeeCenter::getCreateTime);
|
|
|
List<FeeCenter> feeCenters = feeCenterService.list(tradingBoxFeesLambdaQueryWrapper);
|
|
|
if (feeCenters.isEmpty()) {
|
|
|
@@ -2104,7 +2109,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
|
|
|
- List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1",AuthUtil.getDeptId());
|
|
|
+ List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1", AuthUtil.getDeptId());
|
|
|
for (TradingBoxItem item : putBoxItemsList) {
|
|
|
FeeCenter feeCenter = new FeeCenter();
|
|
|
feeCenter.setBillType("箱东");
|
|
|
@@ -2188,7 +2193,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
if (exrateType.equals(feeCenter.getCurCode())) {
|
|
|
feeCenter.setExrate(new BigDecimal("1.00"));
|
|
|
} else {
|
|
|
- feeCenter.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenter.getCurCode(), "1"));
|
|
|
+ feeCenter.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenter.getCurCode(), "1"));
|
|
|
}
|
|
|
feeCenter.setAmount(amount);
|
|
|
feeCenter.setPrice(amount);
|
|
|
@@ -2278,12 +2283,14 @@ 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")
|
|
|
+ .eq(FeeCenter::getAutomaticGenerated, "1")
|
|
|
.orderByDesc(FeeCenter::getCreateTime);
|
|
|
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());
|
|
|
+ List<FeeCenter> feeCenters = feeCentersList.stream().filter(e -> e.getFeeCode().equals("BOX-ZJ")).collect(Collectors.toList());
|
|
|
if (feeCenters.isEmpty()) {
|
|
|
throw new RuntimeException("未计算过租金,撤销失败");
|
|
|
}
|
|
|
@@ -2316,10 +2323,10 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
if (!itemList.isEmpty()) {
|
|
|
tradingBoxItemService.updateBatchById(itemList);
|
|
|
}
|
|
|
- if (!feeId.isEmpty()){
|
|
|
+ if (!feeId.isEmpty()) {
|
|
|
String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
|
|
|
- List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1",AuthUtil.getDeptId());
|
|
|
- List<FeeCenter> feeCenterList = feeCentersList.stream().filter(e-> !feeId.contains(e.getId())).collect(Collectors.toList());
|
|
|
+ List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1", AuthUtil.getDeptId());
|
|
|
+ List<FeeCenter> feeCenterList = feeCentersList.stream().filter(e -> !feeId.contains(e.getId())).collect(Collectors.toList());
|
|
|
//费用数据
|
|
|
BigDecimal amountD = new BigDecimal("0.00");
|
|
|
BigDecimal amountC = new BigDecimal("0.00");
|
|
|
@@ -2366,4 +2373,304 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
return baseMapper.trend(AuthUtil.getTenantId(), type, date);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R countOverdueFee(TradingBox tradingBox) {
|
|
|
+ if (tradingBox.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ TradingBox detail = baseMapper.selectById(tradingBox.getId());
|
|
|
+ if (detail == null) {
|
|
|
+ throw new RuntimeException("未查到单据信息");
|
|
|
+ }
|
|
|
+ PutBox putBox = putBoxService.getOne(new LambdaQueryWrapper<PutBox>()
|
|
|
+ .eq(PutBox::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PutBox::getIsDeleted, 0)
|
|
|
+ .eq(PutBox::getContainerNumber, detail.getContainerNumber())
|
|
|
+ .eq(PutBox::getPolId, detail.getPolId())
|
|
|
+ .eq(PutBox::getPolStationId, detail.getPolStationId())
|
|
|
+ .apply("find_in_set(bus_type,'OW(拿),OW(放)')")
|
|
|
+ );
|
|
|
+ if (putBox == null) {
|
|
|
+ throw new RuntimeException("未查到放箱号信息");
|
|
|
+ }
|
|
|
+ List<SeaContainerNumberItem> seaContainerNumberItemList = seaContainerNumberItemService.list(new LambdaQueryWrapper<SeaContainerNumberItem>()
|
|
|
+ .eq(SeaContainerNumberItem::getIsDeleted, 0)
|
|
|
+ .eq(SeaContainerNumberItem::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(SeaContainerNumberItem::getSrcId, putBox.getId()));
|
|
|
+ if (seaContainerNumberItemList.isEmpty()) {
|
|
|
+ throw new RuntimeException("放箱号" + detail.getContainerNumber() + "未使用");
|
|
|
+ }
|
|
|
+ List<Bills> billsList = billsService.list(new LambdaQueryWrapper<Bills>()
|
|
|
+ .eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted, 0)
|
|
|
+ .in(Bills::getId, seaContainerNumberItemList.stream().map(SeaContainerNumberItem::getPid).collect(Collectors.toList())));
|
|
|
+ if (billsList.isEmpty()) {
|
|
|
+ throw new RuntimeException("放箱号" + detail.getContainerNumber() + "未查到单据信息");
|
|
|
+ }
|
|
|
+ List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
|
|
|
+ .eq(Containers::getIsDeleted, 0)
|
|
|
+ .eq(Containers::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .in(Containers::getPid, billsList.stream().map(Bills::getId).collect(Collectors.toList())));
|
|
|
+ if (containersList.isEmpty()) {
|
|
|
+ throw new RuntimeException("放箱号" + detail.getContainerNumber() + "未查到单据配箱信息");
|
|
|
+ }
|
|
|
+ List<TradingBoxItem> tradingBoxItemList = tradingBoxItemService.list(new LambdaQueryWrapper<TradingBoxItem>()
|
|
|
+ .eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(TradingBoxItem::getIsDeleted, 0)
|
|
|
+ .eq(TradingBoxItem::getPid, detail.getId()));
|
|
|
+ if (tradingBoxItemList.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到单据箱信息");
|
|
|
+ }
|
|
|
+ BFees fees = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
|
|
|
+ .eq(BFees::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BFees::getIsDeleted, 0)
|
|
|
+ .eq(BFees::getCode, "CQXSF"));
|
|
|
+ if (fees == null) {
|
|
|
+ throw new RuntimeException("请先维护费用基础信息");
|
|
|
+ }
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ for (TradingBoxItem item : tradingBoxItemList) {
|
|
|
+ Containers containers = containersList.stream().filter(e -> e.getCntrNo().equals(item.getCode())
|
|
|
+ && e.getCntrTypeCode().equals(item.getBoxType())).findFirst().orElse(null);
|
|
|
+ if (containers == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Bills bills = billsList.stream().filter(e -> e.getId().equals(containers.getPid())).findFirst().orElse(null);
|
|
|
+ if (bills == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ int pol = 0;
|
|
|
+ int pod = 0;
|
|
|
+ if (ObjectUtils.isNotNull(item.getPolPickUpDate()) && ObjectUtils.isNotNull(item.getEtd())) {
|
|
|
+ int polFreeBoxUseDays = ObjectUtils.isNull(bills.getPolFreeBoxUseDays()) ? 0 : bills.getPolFreeBoxUseDays();
|
|
|
+ Instant instant1 = item.getEtd().toInstant();
|
|
|
+ Instant instant2 = item.getPolPickUpDate().toInstant();
|
|
|
+ LocalDate date1 = instant1.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ LocalDate date2 = instant2.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ Duration duration = Duration.between(date1.atStartOfDay(), date2.atStartOfDay());
|
|
|
+ pol = Integer.parseInt(duration.toDays() + "") - polFreeBoxUseDays;
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNotNull(item.getPodReturnDate()) && ObjectUtils.isNotNull(item.getEta())) {
|
|
|
+ int podFreeBoxUseDays = ObjectUtils.isNull(bills.getPodFreeBoxUseDays()) ? 0 : bills.getPodFreeBoxUseDays();
|
|
|
+ Instant instant1 = item.getPodReturnDate().toInstant();
|
|
|
+ Instant instant2 = item.getEta().toInstant();
|
|
|
+ LocalDate date1 = instant1.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ LocalDate date2 = instant2.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ Duration duration = Duration.between(date1.atStartOfDay(), date2.atStartOfDay());
|
|
|
+ pod = Integer.parseInt(duration.toDays() + "") - podFreeBoxUseDays;
|
|
|
+ }
|
|
|
+ if (pol > 0) {
|
|
|
+
|
|
|
+ }
|
|
|
+ if (pod > 0) {
|
|
|
+
|
|
|
+ }
|
|
|
+ FeeCenter feeCenter = new FeeCenter();
|
|
|
+ feeCenter.setBillType("箱东");
|
|
|
+ feeCenter.setCorpId(detail.getPurchaseCompanyId());
|
|
|
+ feeCenter.setCorpCnName(detail.getPurchaseCompanyName());
|
|
|
+ feeCenter.setCorpEnName(detail.getPurchaseCompanyName());
|
|
|
+ feeCenter.setCreateTime(new Date());
|
|
|
+ feeCenter.setCreateUser(AuthUtil.getUserId());
|
|
|
+ feeCenter.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ feeCenter.setPid(item.getPid());
|
|
|
+ if ("OW(拿)".equals(detail.getType())) {
|
|
|
+ feeCenter.setDc("C");
|
|
|
+ } else {
|
|
|
+ feeCenter.setDc("D");
|
|
|
+ }
|
|
|
+ feeCenter.setFeeId(fees.getId());
|
|
|
+ feeCenter.setFeeCode(fees.getCode());
|
|
|
+ feeCenter.setFeeCnName(fees.getCnName());
|
|
|
+ feeCenter.setFeeEnName(fees.getEnName());
|
|
|
+ feeCenter.setCurCode(fees.getCurNo());
|
|
|
+ feeCenter.setCntrNo(item.getCode());
|
|
|
+ feeCenter.setUnitNo(item.getBoxType());
|
|
|
+ if (ObjectUtils.isNotNull(item.getPodEmptyContainerReturnDate())
|
|
|
+ && tradingBox.getRentDate().compareTo(item.getPodEmptyContainerReturnDate()) > 0) {
|
|
|
+ throw new RuntimeException("箱号:" + item.getCode() + "租金计算截止时间大于pod还箱日期");
|
|
|
+ }
|
|
|
+ Instant instant1 = item.getRentEndDate().toInstant();
|
|
|
+ Instant instant2 = tradingBox.getRentDate().toInstant();
|
|
|
+ LocalDate date1 = instant1.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ LocalDate date2 = instant2.atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ Duration duration = Duration.between(date1.atStartOfDay(), date2.atStartOfDay());
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(item.getRentEndDate());
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ feeCenter.setDays(Integer.parseInt(duration.toDays() + ""));
|
|
|
+
|
|
|
+ Integer days = feeCenter.getDays();
|
|
|
+ int earlySumDays = 0;
|
|
|
+ if (item.getRentEndDate().compareTo(item.getPolPickUpDate()) != 0) {
|
|
|
+ Instant instant3 = item.getRentEndDate().toInstant();
|
|
|
+ Instant instant4 = item.getPolPickUpDate().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");
|
|
|
+ /*for (RentTerm term : rentTermList) {
|
|
|
+ dayLength = term.getStopDays() - term.getRiseDays() + 1;
|
|
|
+ if (earlySumDays >= dayLength) {
|
|
|
+ earlySumDays -= dayLength;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (earlySumDays + days > dayLength) {
|
|
|
+ Integer tempDays = dayLength - earlySumDays;
|
|
|
+ earlySumDays = 0;
|
|
|
+ days -= tempDays;
|
|
|
+ BigDecimal calculate = term.getRate().multiply(new BigDecimal(tempDays + ""));
|
|
|
+ amount = amount.add(calculate);
|
|
|
+ text = text + tempDays + "天*" + term.getRate() + "元=" + calculate + "元,";
|
|
|
+ } else {
|
|
|
+ BigDecimal calculate = term.getRate().multiply(new BigDecimal(days + ""));
|
|
|
+ amount = amount.add(calculate);
|
|
|
+ text = text + days + "天*" + term.getRate() + "元=" + calculate + "元";
|
|
|
+ days = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (days != 0) {
|
|
|
+ BigDecimal calculate = rentTermList.get(rentTermList.size() - 1).getRate().multiply(new BigDecimal(days + ""));
|
|
|
+ amount = amount.add(calculate);
|
|
|
+ text = text + "超出费用:" + days + "天*" + rentTermList.get(rentTermList.size() - 1).getRate() + "元=" + calculate + "元,";
|
|
|
+ }
|
|
|
+ if (exrateType.equals(feeCenter.getCurCode())) {
|
|
|
+ feeCenter.setExrate(new BigDecimal("1.00"));
|
|
|
+ } else {
|
|
|
+ feeCenter.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenter.getCurCode(), "1"));
|
|
|
+ }*/
|
|
|
+ feeCenter.setAmount(amount);
|
|
|
+ feeCenter.setPrice(amount);
|
|
|
+ feeCenter.setRemarks(text);
|
|
|
+ feeCenter.setQuantity(new BigDecimal("1"));
|
|
|
+ feeCenter.setOutboundDate(tradingBox.getRentDate());
|
|
|
+ feeCenter.setBillNo(detail.getSysNo());
|
|
|
+ feeCenter.setBusinessType(detail.getType());
|
|
|
+ feeCenter.setBillDate(detail.getPurchaseDate());
|
|
|
+ feeCenter.setBillCorpId(detail.getPurchaseCompanyId());
|
|
|
+ feeCenter.setBillCorpCnName(detail.getPurchaseCompanyName());
|
|
|
+ feeCenter.setBillCorpEnName(detail.getPurchaseCompanyName());
|
|
|
+ feeCenter.setBillShortName(detail.getPurchaseCompanyName());
|
|
|
+ feeCenter.setMblno(detail.getContainerNumber());
|
|
|
+ feeCenter.setPolId(detail.getPolId());
|
|
|
+ feeCenter.setPolCode(detail.getPolCode());
|
|
|
+ feeCenter.setPolCnName(detail.getPolCname());
|
|
|
+ feeCenter.setPolEnName(detail.getPolEname());
|
|
|
+ feeCenter.setAutomaticGenerated("1");
|
|
|
+ feeCenterList.add(feeCenter);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R revokeCountOverdueFee(TradingBox tradingBox) {
|
|
|
+ if (tradingBox.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ TradingBox detail = baseMapper.selectById(tradingBox.getId());
|
|
|
+ List<TradingBoxItem> tradingBoxItemList = tradingBoxItemService.list(new LambdaQueryWrapper<TradingBoxItem>()
|
|
|
+ .eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(TradingBoxItem::getIsDeleted, 0)
|
|
|
+ .eq(TradingBoxItem::getPid, detail.getId())
|
|
|
+ );
|
|
|
+ if (tradingBoxItemList.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到明细");
|
|
|
+ }
|
|
|
+ //获取订单费用信息
|
|
|
+ LambdaQueryWrapper<FeeCenter> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ tradingBoxFeesLambdaQueryWrapper.eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenter::getPid, tradingBox.getId())
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getFeeCode, "CQXSF")
|
|
|
+ .eq(FeeCenter::getAutomaticGenerated, "1")
|
|
|
+ .orderByDesc(FeeCenter::getCreateTime);
|
|
|
+ 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()) {
|
|
|
+ FeeCenter feeCenter = feeCenterList.get(0);
|
|
|
+ if (1 == feeCenter.getAccStatus()) {
|
|
|
+ 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());
|
|
|
+ item.setCount(item.getCount() - 1);
|
|
|
+ if (feeCenterList.size() == 1) {
|
|
|
+ item.setRentEndDate(item.getPolPickUpDate());
|
|
|
+ } else {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(feeCenter.getStorageDate());
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ item.setRentEndDate(calendar.getTime());
|
|
|
+ }
|
|
|
+ itemList.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!itemList.isEmpty()) {
|
|
|
+ tradingBoxItemService.updateBatchById(itemList);
|
|
|
+ }
|
|
|
+ if (!feeId.isEmpty()) {
|
|
|
+ String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
|
|
|
+ List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1", AuthUtil.getDeptId());
|
|
|
+ List<FeeCenter> feeCenterList = feeCentersList.stream().filter(e -> !feeId.contains(e.getId())).collect(Collectors.toList());
|
|
|
+ //费用数据
|
|
|
+ BigDecimal amountD = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountC = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountDUsd = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountCUsd = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountDrLoc = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountCrLoc = new BigDecimal("0.00");
|
|
|
+ for (FeeCenter item : feeCenterList) {
|
|
|
+ if (exrateType.equals(item.getCurCode())) {
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ amountD = amountD.add(item.getAmount());
|
|
|
+ amountDrLoc = amountDrLoc.add(item.getAmount());
|
|
|
+ } else {
|
|
|
+ amountC = amountC.add(item.getAmount());
|
|
|
+ amountCrLoc = amountCrLoc.add(item.getAmount());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ amountDUsd = amountDUsd.add(item.getAmountLoc());
|
|
|
+ amountDrLoc = amountDrLoc.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
|
|
|
+ } else {
|
|
|
+ amountCUsd = amountCUsd.add(item.getAmountLoc());
|
|
|
+ amountCrLoc = amountCrLoc.add(currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tradingBox.setAmountD(amountD);
|
|
|
+ tradingBox.setAmountDUsd(amountDUsd);
|
|
|
+ tradingBox.setTotalAmountD(amountDrLoc);
|
|
|
+ tradingBox.setAmountC(amountC);
|
|
|
+ tradingBox.setAmountCUsd(amountCUsd);
|
|
|
+ tradingBox.setTotalAmountC(amountCrLoc);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
}
|