|
|
@@ -26,6 +26,7 @@ import org.springblade.core.tool.utils.BeanUtil;
|
|
|
import org.springblade.core.tool.utils.StringUtil;
|
|
|
import org.springblade.los.Util.BoxNumUtils;
|
|
|
import org.springblade.los.Util.CurrencyUtils;
|
|
|
+import org.springblade.los.Util.MagicValues;
|
|
|
import org.springblade.los.basic.business.entity.BusinessType;
|
|
|
import org.springblade.los.basic.business.service.IBusinessTypeService;
|
|
|
import org.springblade.los.basic.cur.entity.BCurExrate;
|
|
|
@@ -39,11 +40,12 @@ 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.entity.FeeCenterItems;
|
|
|
+import org.springblade.los.finance.fee.service.IFeeCenterItemsService;
|
|
|
import org.springblade.los.finance.fee.service.IFeeCenterService;
|
|
|
import org.springblade.system.feign.ISysClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -104,6 +106,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
|
|
|
private final ISysClient sysClient;
|
|
|
|
|
|
+ private final IFeeCenterItemsService feeCenterItemsService;
|
|
|
+
|
|
|
@Override
|
|
|
public TradingBox getDetail(TradingBox tradingBox) {
|
|
|
if (tradingBox.getId() == null) {
|
|
|
@@ -148,6 +152,12 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
.eq(BoxAdjustmentCost::getPid, details.getId());
|
|
|
List<BoxAdjustmentCost> boxAdjustmentCostList = boxAdjustmentCostService.list(costLambdaQueryWrapper);
|
|
|
details.setBoxAdjustmentCostList(boxAdjustmentCostList.isEmpty() ? new ArrayList<>() : boxAdjustmentCostList);
|
|
|
+ LambdaQueryWrapper<FeeCenterItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(FeeCenterItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenterItems::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenterItems::getPid, tradingBox.getId());
|
|
|
+ List<FeeCenterItems> feeCenterItemsList = feeCenterItemsService.list(lambdaQueryWrapper);
|
|
|
+ details.setFeeCenterItemsList(feeCenterItemsList.isEmpty() ? new ArrayList<>() : feeCenterItemsList);
|
|
|
}
|
|
|
return details;
|
|
|
}
|
|
|
@@ -2289,7 +2299,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
feeCenter.setPolCnName(detail.getPolCname());
|
|
|
feeCenter.setPolEnName(detail.getPolEname());
|
|
|
feeCenter.setAutomaticGenerated("1");
|
|
|
- if (new BigDecimal("0.00").compareTo(feeCenter.getAmount()) != 0){
|
|
|
+ if (new BigDecimal("0.00").compareTo(feeCenter.getAmount()) != 0) {
|
|
|
feeCenterList.add(feeCenter);
|
|
|
}
|
|
|
item.setUpdateTime(new Date());
|
|
|
@@ -2370,10 +2380,10 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
List<TradingBoxItem> itemList = new ArrayList<>();
|
|
|
List<Long> feeId = new ArrayList<>();
|
|
|
for (TradingBoxItem item : tradingBoxItemList) {
|
|
|
- if (ObjectUtils.isNull(item.getRentStartDate())){
|
|
|
+ if (ObjectUtils.isNull(item.getRentStartDate())) {
|
|
|
throw new RuntimeException("未计算过租金,撤销失败");
|
|
|
- }else{
|
|
|
- if (!feeCenters.isEmpty()){
|
|
|
+ } else {
|
|
|
+ if (!feeCenters.isEmpty()) {
|
|
|
List<FeeCenter> feeCenterList = feeCenters.stream().filter(e -> e.getCntrNo().equals(item.getCode())).collect(Collectors.toList());
|
|
|
if (!feeCenterList.isEmpty()) {
|
|
|
FeeCenter feeCenter = feeCenterList.get(0);
|
|
|
@@ -2450,306 +2460,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
|
|
|
@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<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) {
|
|
|
- item.setAmountLoc(item.getAmount().multiply(item.getExrate()));
|
|
|
- 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.getAmount());
|
|
|
- amountDrLoc = amountDrLoc.add(item.getAmountLoc());
|
|
|
- } else {
|
|
|
- amountCUsd = amountCUsd.add(item.getAmount());
|
|
|
- amountCrLoc = amountCrLoc.add(item.getAmountLoc());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- 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);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
public R batchUpdatePodStation(TradingBox tradingBox) {
|
|
|
if (ObjectUtils.isNull(tradingBox.getTradingBoxItemsList()) || tradingBox.getTradingBoxItemsList().isEmpty()) {
|
|
|
throw new RuntimeException("请选择明细");
|
|
|
@@ -2890,4 +2600,453 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
|
|
|
return R.data(tradingBox);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R batchImportPickUpCost(Long id, Date accountDate) {
|
|
|
+ if (id == null || ObjectUtils.isNull(accountDate)) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ TradingBox tradingBox = baseMapper.selectById(id);
|
|
|
+ if (tradingBox == null) {
|
|
|
+ throw new RuntimeException("未查到单据信息");
|
|
|
+ }
|
|
|
+ List<TradingBoxItem> tradingBoxItemList = tradingBoxItemService.list(new LambdaQueryWrapper<TradingBoxItem>()
|
|
|
+ .eq(TradingBoxItem::getIsDeleted, 0)
|
|
|
+ .eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(TradingBoxItem::getPid, id)
|
|
|
+ .eq(TradingBoxItem::getWhetherGeneratePickUpCost, "0"));
|
|
|
+ if (tradingBoxItemList.isEmpty()) {
|
|
|
+ throw new RuntimeException("箱明细已全部生成PickUp费");
|
|
|
+ }
|
|
|
+ BFees fees = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
|
|
|
+ .eq(BFees::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BFees::getIsDeleted, 0)
|
|
|
+ .eq(BFees::getCode, "Pickup"));
|
|
|
+ if (fees == null) {
|
|
|
+ throw new RuntimeException("请先维护'Pickup'费用基础信息");
|
|
|
+ }
|
|
|
+ List<FeeCenterItems> feeCenterItemsList = new ArrayList<>();
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(accountDate);
|
|
|
+ int year = calendar.get(Calendar.YEAR); // 获取年份
|
|
|
+ int month = calendar.get(Calendar.MONTH) + 1; // 获取月份(注意需加上1,因为月份从0开始计数)
|
|
|
+ int day = calendar.get(Calendar.DATE);
|
|
|
+ List<BCurExrate> bCurExrateList = currencyUtils.obtainRate(accountDate, "1", AuthUtil.getDeptId());
|
|
|
+ BigDecimal exrate = new BigDecimal("0.00");
|
|
|
+ if ("OW-F".equals(tradingBox.getType())) {
|
|
|
+ exrate = currencyUtils.obtainExrate("D", bCurExrateList, "USD", "1");
|
|
|
+ } else {
|
|
|
+ exrate = currencyUtils.obtainExrate("C", bCurExrateList, "USD", "1");
|
|
|
+ }
|
|
|
+ for (TradingBoxItem item : tradingBoxItemList) {
|
|
|
+ item.setWhetherGeneratePickUpCost("1");
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ FeeCenterItems feeCenterItems = new FeeCenterItems();
|
|
|
+ feeCenterItems.setBranchId(AuthUtil.getDeptId());
|
|
|
+ feeCenterItems.setCreateUser(AuthUtil.getUserId());
|
|
|
+ feeCenterItems.setCreateUserName(tradingBox.getCreateUserName());
|
|
|
+ feeCenterItems.setCreateTime(new Date());
|
|
|
+ feeCenterItems.setPid(tradingBox.getId());
|
|
|
+ feeCenterItems.setAccountDate(accountDate);
|
|
|
+ feeCenterItems.setAccountYear(year);
|
|
|
+ feeCenterItems.setAccountMonth(month);
|
|
|
+ feeCenterItems.setAccountDay(day);
|
|
|
+ feeCenterItems.setCorpId(tradingBox.getPurchaseCompanyId());
|
|
|
+ feeCenterItems.setCorpCnName(tradingBox.getPurchaseCompanyName());
|
|
|
+ feeCenterItems.setCorpEnName(tradingBox.getPurchaseCompanyName());
|
|
|
+ feeCenterItems.setPolId(tradingBox.getPolId());
|
|
|
+ feeCenterItems.setPolCode(tradingBox.getPolCode());
|
|
|
+ feeCenterItems.setPolCnName(tradingBox.getPolCname());
|
|
|
+ feeCenterItems.setPolEnName(tradingBox.getPolEname());
|
|
|
+ feeCenterItems.setPodId(tradingBox.getPodId());
|
|
|
+ feeCenterItems.setPodCode(tradingBox.getPodCode());
|
|
|
+ feeCenterItems.setPodCnName(tradingBox.getPodCname());
|
|
|
+ feeCenterItems.setPodEnName(tradingBox.getPodEname());
|
|
|
+ feeCenterItems.setMblno(item.getMblno());
|
|
|
+ feeCenterItems.setHblno(item.getHblno());
|
|
|
+ feeCenterItems.setEtd(item.getEtd());
|
|
|
+ feeCenterItems.setEta(item.getEta());
|
|
|
+ feeCenterItems.setCntrNo(item.getCode());
|
|
|
+ feeCenterItems.setUnitNo(item.getBoxType());
|
|
|
+ feeCenterItems.setSrcItemId(item.getId());
|
|
|
+ feeCenterItems.setContainerNumber(item.getContainerNumber());
|
|
|
+ feeCenterItems.setPolPreAppearanceDate(item.getPolPreAppearanceDate());
|
|
|
+ feeCenterItems.setPolStationEmptyContainerExitDate(item.getPolStationEmptyContainerExitDate());
|
|
|
+ feeCenterItems.setPolReturnDate(item.getPolReturnDate());
|
|
|
+ feeCenterItems.setPodEmptyContainerReturnDate(item.getPodEmptyContainerReturnDate());
|
|
|
+ feeCenterItems.setFeeId(fees.getId());
|
|
|
+ feeCenterItems.setFeeCode(fees.getCode());
|
|
|
+ feeCenterItems.setFeeCnName(fees.getCnName());
|
|
|
+ feeCenterItems.setFeeEnName(fees.getEnName());
|
|
|
+ feeCenterItems.setDays(1);
|
|
|
+ feeCenterItems.setPrice(tradingBox.getPickupFee());
|
|
|
+ feeCenterItems.setCurCode("USD");
|
|
|
+ feeCenterItems.setExrate(exrate);
|
|
|
+ feeCenterItems.setAmount(tradingBox.getPickupFee());
|
|
|
+ feeCenterItems.setStorageDate(tradingBox.getEffectiveDate());
|
|
|
+ feeCenterItems.setOutboundDate(tradingBox.getExpiryDate());
|
|
|
+ feeCenterItems.setFeeType("1");
|
|
|
+ feeCenterItemsList.add(feeCenterItems);
|
|
|
+ }
|
|
|
+ if (!feeCenterItemsList.isEmpty()) {
|
|
|
+ feeCenterItemsService.saveBatch(feeCenterItemsList);
|
|
|
+ }
|
|
|
+ if (!tradingBoxItemList.isEmpty()) {
|
|
|
+ tradingBoxItemService.updateBatchById(tradingBoxItemList);
|
|
|
+ }
|
|
|
+ return R.data(tradingBox);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R countPerDiem(TradingBox tradingBox) {
|
|
|
+ if (tradingBox.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ TradingBox detail = baseMapper.selectById(tradingBox.getId());
|
|
|
+ List<TradingBoxItem> putBoxItemsList = tradingBoxItemService.list(new LambdaQueryWrapper<TradingBoxItem>()
|
|
|
+ .eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(TradingBoxItem::getIsDeleted, 0)
|
|
|
+ .eq(TradingBoxItem::getPid, detail.getId())
|
|
|
+ .lt(TradingBoxItem::getRentEndDate, tradingBox.getRentDate())
|
|
|
+ );
|
|
|
+ if (putBoxItemsList.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到需计算租金明细");
|
|
|
+ }
|
|
|
+ List<RentTerm> rentTermList = rentTermService.list(new LambdaQueryWrapper<RentTerm>()
|
|
|
+ .eq(RentTerm::getIsDeleted, 0)
|
|
|
+ .eq(RentTerm::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(RentTerm::getPid, detail.getId())
|
|
|
+ .isNotNull(RentTerm::getRiseDays)
|
|
|
+ .isNotNull(RentTerm::getStopDays)
|
|
|
+ .orderByAsc(RentTerm::getRiseDays)
|
|
|
+ );
|
|
|
+ if (rentTermList.isEmpty()) {
|
|
|
+ throw new RuntimeException("请先维护租金条款");
|
|
|
+ }
|
|
|
+ BFees fees = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
|
|
|
+ .eq(BFees::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BFees::getIsDeleted, 0)
|
|
|
+ .eq(BFees::getCode, "PerDiem"));
|
|
|
+ if (fees == null) {
|
|
|
+ throw new RuntimeException("请先维护'PerDiem'费用基础信息");
|
|
|
+ }
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(new Date());
|
|
|
+ int year = calendar.get(Calendar.YEAR); // 获取年份
|
|
|
+ int month = calendar.get(Calendar.MONTH) + 1; // 获取月份(注意需加上1,因为月份从0开始计数)
|
|
|
+ int day = calendar.get(Calendar.DATE);
|
|
|
+ List<FeeCenterItems> feeCenterItemsList = 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());
|
|
|
+ for (TradingBoxItem item : putBoxItemsList) {
|
|
|
+ if (ObjectUtils.isNotNull(item.getPodEmptyContainerReturnDate())
|
|
|
+ && tradingBox.getRentDate().compareTo(item.getPodEmptyContainerReturnDate()) > 0) {
|
|
|
+ throw new RuntimeException("箱号:" + item.getCode() + "租金计算截止时间大于pod还箱日期");
|
|
|
+ }
|
|
|
+ FeeCenterItems feeCenterItems = new FeeCenterItems();
|
|
|
+ feeCenterItems.setBranchId(AuthUtil.getDeptId());
|
|
|
+ feeCenterItems.setCreateUser(AuthUtil.getUserId());
|
|
|
+ feeCenterItems.setCreateUserName(tradingBox.getCreateUserName());
|
|
|
+ feeCenterItems.setCreateTime(new Date());
|
|
|
+ feeCenterItems.setPid(tradingBox.getId());
|
|
|
+ feeCenterItems.setAccountDate(new Date());
|
|
|
+ feeCenterItems.setAccountYear(year);
|
|
|
+ feeCenterItems.setAccountMonth(month);
|
|
|
+ feeCenterItems.setAccountDay(day);
|
|
|
+ feeCenterItems.setCorpId(tradingBox.getPurchaseCompanyId());
|
|
|
+ feeCenterItems.setCorpCnName(tradingBox.getPurchaseCompanyName());
|
|
|
+ feeCenterItems.setCorpEnName(tradingBox.getPurchaseCompanyName());
|
|
|
+ feeCenterItems.setPolId(tradingBox.getPolId());
|
|
|
+ feeCenterItems.setPolCode(tradingBox.getPolCode());
|
|
|
+ feeCenterItems.setPolCnName(tradingBox.getPolCname());
|
|
|
+ feeCenterItems.setPolEnName(tradingBox.getPolEname());
|
|
|
+ feeCenterItems.setPodId(tradingBox.getPodId());
|
|
|
+ feeCenterItems.setPodCode(tradingBox.getPodCode());
|
|
|
+ feeCenterItems.setPodCnName(tradingBox.getPodCname());
|
|
|
+ feeCenterItems.setPodEnName(tradingBox.getPodEname());
|
|
|
+ feeCenterItems.setMblno(item.getMblno());
|
|
|
+ feeCenterItems.setHblno(item.getHblno());
|
|
|
+ feeCenterItems.setEtd(item.getEtd());
|
|
|
+ feeCenterItems.setEta(item.getEta());
|
|
|
+ feeCenterItems.setCntrNo(item.getCode());
|
|
|
+ feeCenterItems.setUnitNo(item.getBoxType());
|
|
|
+ feeCenterItems.setSrcItemId(item.getId());
|
|
|
+ feeCenterItems.setContainerNumber(item.getContainerNumber());
|
|
|
+ feeCenterItems.setPolPreAppearanceDate(item.getPolPreAppearanceDate());
|
|
|
+ feeCenterItems.setPolStationEmptyContainerExitDate(item.getPolStationEmptyContainerExitDate());
|
|
|
+ feeCenterItems.setPolReturnDate(item.getPolReturnDate());
|
|
|
+ feeCenterItems.setPodEmptyContainerReturnDate(item.getPodEmptyContainerReturnDate());
|
|
|
+ feeCenterItems.setFeeId(fees.getId());
|
|
|
+ feeCenterItems.setFeeCode(fees.getCode());
|
|
|
+ feeCenterItems.setFeeCnName(fees.getCnName());
|
|
|
+ feeCenterItems.setFeeEnName(fees.getEnName());
|
|
|
+ feeCenterItems.setCurCode(rentTermList.get(0).getCurCode());
|
|
|
+ feeCenterItems.setFeeType("2");
|
|
|
+ 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());
|
|
|
+ if (!dateFormat.format(item.getRentEndDate()).equals(dateFormat.format(item.getPolPickUpDate()))) {
|
|
|
+ Calendar calendar1 = Calendar.getInstance();
|
|
|
+ calendar1.setTime(item.getRentEndDate());
|
|
|
+ calendar1.add(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ feeCenterItems.setStorageDate(calendar1.getTime());
|
|
|
+ item.setRentStartDate(calendar1.getTime());
|
|
|
+ feeCenterItems.setDays(Integer.parseInt(duration.toDays() + ""));
|
|
|
+ } else {
|
|
|
+ feeCenterItems.setStorageDate(item.getRentEndDate());
|
|
|
+ item.setRentStartDate(item.getRentEndDate());
|
|
|
+ feeCenterItems.setDays(Integer.parseInt(duration.toDays() + "") + 1);
|
|
|
+ }
|
|
|
+ Integer days = feeCenterItems.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(feeCenterItems.getCurCode())) {
|
|
|
+ feeCenterItems.setExrate(new BigDecimal("1.00"));
|
|
|
+ } else {
|
|
|
+ feeCenterItems.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenterItems.getCurCode(), "1"));
|
|
|
+ }
|
|
|
+ feeCenterItems.setAmount(amount);
|
|
|
+ feeCenterItems.setPrice(amount);
|
|
|
+ feeCenterItems.setRemarks(text);
|
|
|
+ feeCenterItems.setOutboundDate(tradingBox.getRentDate());
|
|
|
+ if (new BigDecimal("0.00").compareTo(feeCenterItems.getAmount()) != 0) {
|
|
|
+ feeCenterItemsList.add(feeCenterItems);
|
|
|
+ }
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setRentEndDate(tradingBox.getRentDate());
|
|
|
+ }
|
|
|
+ tradingBoxItemService.updateBatchById(putBoxItemsList);
|
|
|
+ if (!feeCenterItemsList.isEmpty()) {
|
|
|
+ feeCenterItemsService.saveBatch(feeCenterItemsList);
|
|
|
+ }
|
|
|
+ return R.data(tradingBox);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R revokeCountPerDiem(TradingBox tradingBox) {
|
|
|
+ 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<FeeCenterItems> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ tradingBoxFeesLambdaQueryWrapper.eq(FeeCenterItems::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenterItems::getPid, tradingBox.getId())
|
|
|
+ .eq(FeeCenterItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenterItems::getFeeCode, "BOX-ZJ")
|
|
|
+ .orderByDesc(FeeCenterItems::getCreateTime);
|
|
|
+ List<FeeCenterItems> feeCenterItemsList = feeCenterItemsService.list(tradingBoxFeesLambdaQueryWrapper);
|
|
|
+ List<FeeCenterItems> feeCenterItems = feeCenterItemsList.stream().filter(e -> e.getFeeCode().equals("BOX-ZJ")).collect(Collectors.toList());
|
|
|
+ List<TradingBoxItem> itemList = new ArrayList<>();
|
|
|
+ for (TradingBoxItem item : tradingBoxItemList) {
|
|
|
+ if (ObjectUtils.isNull(item.getRentStartDate())) {
|
|
|
+ throw new RuntimeException("未计算过租金,撤销失败");
|
|
|
+ } else {
|
|
|
+ if (!feeCenterItems.isEmpty()) {
|
|
|
+ List<FeeCenterItems> feeCenterItemsList1 = feeCenterItems.stream().filter(e -> e.getCntrNo().equals(item.getCode())).collect(Collectors.toList());
|
|
|
+ if (!feeCenterItemsList1.isEmpty()) {
|
|
|
+ FeeCenterItems feeCenter = feeCenterItemsList1.get(0);
|
|
|
+ if ("1".equals(feeCenter.getWhetherGenerateCost())) {
|
|
|
+ throw new RuntimeException("箱号:" + item.getCode() + "已生费用明细,撤销失败");
|
|
|
+ }
|
|
|
+ feeCenterItemsService.removeById(feeCenter.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ item.setCount(item.getCount() - 1);
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(item.getRentStartDate());
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ item.setRentEndDate(calendar.getTime());
|
|
|
+ itemList.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!itemList.isEmpty()) {
|
|
|
+ tradingBoxItemService.updateBatchById(itemList);
|
|
|
+ }
|
|
|
+ tradingBox.setTradingBoxItemsList(tradingBoxItemList);
|
|
|
+ return R.data(tradingBox);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R mergeGenerateCost(TradingBox tradingBox) {
|
|
|
+ if (tradingBox.getId() == null || ObjectUtils.isNull(tradingBox.getFeeCenterItemsList()) || tradingBox.getFeeCenterItemsList().isEmpty()) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ TradingBox detail = baseMapper.selectById(tradingBox.getId());
|
|
|
+ List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenter::getPid, detail.getId()));
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ List<String> boxCodeList = tradingBox.getFeeCenterItemsList().stream().map(FeeCenterItems::getCntrNo).filter(Objects::nonNull)
|
|
|
+ .distinct().collect(Collectors.toList());
|
|
|
+ for (String item : boxCodeList) {
|
|
|
+ FeeCenterItems centerItems = tradingBox.getFeeCenterItemsList().stream().filter(e -> e.getCntrNo().equals(item))
|
|
|
+ .collect(Collectors.toList()).get(0);
|
|
|
+ FeeCenter feeCenter = new FeeCenter();
|
|
|
+ feeCenter.setBillType("箱东");
|
|
|
+ feeCenter.setCorpId(centerItems.getCorpId());
|
|
|
+ feeCenter.setCorpCnName(centerItems.getCorpCnName());
|
|
|
+ feeCenter.setCorpEnName(centerItems.getCorpEnName());
|
|
|
+ feeCenter.setCreateTime(new Date());
|
|
|
+ feeCenter.setCreateUser(AuthUtil.getUserId());
|
|
|
+ feeCenter.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ feeCenter.setPid(detail.getId());
|
|
|
+ if ("OW-N".equals(detail.getType())) {
|
|
|
+ feeCenter.setDc("C");
|
|
|
+ } else {
|
|
|
+ feeCenter.setDc("D");
|
|
|
+ }
|
|
|
+ feeCenter.setFeeId(centerItems.getFeeId());
|
|
|
+ feeCenter.setFeeCode(centerItems.getFeeCode());
|
|
|
+ feeCenter.setFeeCnName(centerItems.getFeeCnName());
|
|
|
+ feeCenter.setFeeEnName(centerItems.getFeeEnName());
|
|
|
+ feeCenter.setCurCode(centerItems.getCurCode());
|
|
|
+ feeCenter.setCntrNo(centerItems.getCntrNo());
|
|
|
+ feeCenter.setUnitNo(centerItems.getUnitNo());
|
|
|
+ feeCenter.setStorageDate(centerItems.getStorageDate());
|
|
|
+ feeCenter.setDays(centerItems.getDays());
|
|
|
+ feeCenter.setExrate(centerItems.getExrate());
|
|
|
+ feeCenter.setAmount(centerItems.getAmount());
|
|
|
+ feeCenter.setAmountLoc(centerItems.getAmount().multiply(feeCenter.getExrate()));
|
|
|
+ feeCenter.setPrice(centerItems.getAmount());
|
|
|
+ feeCenter.setRemarks(centerItems.getRemarks());
|
|
|
+ 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");
|
|
|
+ if (new BigDecimal("0.00").compareTo(feeCenter.getAmount()) != 0) {
|
|
|
+ feeCenterList.add(feeCenter);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!feeCenterList.isEmpty()) {
|
|
|
+ feeCenterService.saveBatch(feeCenterList);
|
|
|
+ if (!feeCenters.isEmpty()) {
|
|
|
+ feeCenters.addAll(feeCenterList);
|
|
|
+ } else {
|
|
|
+ feeCenters = feeCenterList;
|
|
|
+ }
|
|
|
+ //费用数据
|
|
|
+ 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");
|
|
|
+ String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
|
|
|
+ List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1", AuthUtil.getDeptId());
|
|
|
+ for (FeeCenter item : feeCenters) {
|
|
|
+ item.setAmountLoc(item.getAmount().multiply(item.getExrate()));
|
|
|
+ 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.getAmount());
|
|
|
+ amountDrLoc = amountDrLoc.add(item.getAmountLoc());
|
|
|
+ } else {
|
|
|
+ amountCUsd = amountCUsd.add(item.getAmount());
|
|
|
+ amountCrLoc = amountCrLoc.add(item.getAmountLoc());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detail.setAmountD(amountD);
|
|
|
+ detail.setAmountDUsd(amountDUsd);
|
|
|
+ detail.setTotalAmountD(amountDrLoc);
|
|
|
+ detail.setAmountC(amountC);
|
|
|
+ detail.setAmountCUsd(amountCUsd);
|
|
|
+ detail.setTotalAmountC(amountCrLoc);
|
|
|
+ detail.setProfit(detail.getAmountD().subtract(detail.getAmountC()));
|
|
|
+ detail.setProfitUsd(detail.getAmountDUsd().subtract(detail.getAmountCUsd()));
|
|
|
+ detail.setTotalProfit(detail.getTotalAmountD().subtract(detail.getTotalAmountC()));
|
|
|
+ baseMapper.updateById(detail);
|
|
|
+ }
|
|
|
+ List<FeeCenterItems> feeCenterItemsList = new ArrayList<>();
|
|
|
+ for (FeeCenter item : feeCenterList) {
|
|
|
+ List<FeeCenterItems> feeCenterItems = tradingBox.getFeeCenterItemsList().stream()
|
|
|
+ .filter(e -> e.getCntrNo().equals(item.getCntrNo())).collect(Collectors.toList());
|
|
|
+ for (FeeCenterItems centerItems : feeCenterItems) {
|
|
|
+ centerItems.setUpdateTime(new Date());
|
|
|
+ centerItems.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ centerItems.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ centerItems.setWhetherGenerateCost("1");
|
|
|
+ centerItems.setFeeCenterId(item.getId());
|
|
|
+ feeCenterItemsList.add(centerItems);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!feeCenterItemsList.isEmpty()) {
|
|
|
+ feeCenterItemsService.updateBatchById(feeCenterItemsList);
|
|
|
+ }
|
|
|
+ return R.data(tradingBox);
|
|
|
+ }
|
|
|
+
|
|
|
}
|