Просмотр исходного кода

1.海运出口接单状态同步客户订舱
2.增加OW(拿)明细导出接口
3.海运单据计算超期箱使费重复生成账单bug修改
4.放箱号明细中免箱使天数赋值逻辑修改
5.箱管,海运进出口,放箱号删除bug修改
6.操作日期倒序排列
7.箱管超期箱使费提取公共方法
8.批量修改放箱号,箱明细pol堆存未同步问题修改
9.ow修改数据同步放箱号,箱量计算问题修改

纪新园 4 дней назад
Родитель
Сommit
c87df4194b
19 измененных файлов с 411 добавлено и 205 удалено
  1. 0 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/files/entity/FilesCenter.java
  2. 0 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  3. 0 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Containers.java
  4. 0 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/ContainersBills.java
  5. 0 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/ContainersCommodity.java
  6. 0 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/PreContainers.java
  7. 6 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java
  8. 234 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/OwBoxUsageFeeUtils.java
  9. 9 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/controller/BoxDynamicsRecordController.java
  10. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/IBoxDynamicsRecordService.java
  11. 83 12
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java
  12. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java
  13. 9 177
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java
  14. 13 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/files/controller/FilesCenterController.java
  15. 13 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/ContainersController.java
  16. 2 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  17. 13 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java
  18. 7 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  19. 14 3
      blade-service/blade-los/src/main/java/org/springblade/los/log/controller/GlobalOperationLogController.java

+ 0 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/files/entity/FilesCenter.java

@@ -226,7 +226,6 @@ public class FilesCenter implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
-	@TableLogic(value = "0", delval = "1")
 	private Integer isDeleted;
 	/**
 	 * 版本

+ 0 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java

@@ -1062,7 +1062,6 @@ public class Bills implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
-	@TableLogic(value = "0", delval = "1")
 	private Integer isDeleted;
 	/**
 	 * 备注

+ 0 - 2
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Containers.java

@@ -451,8 +451,6 @@ public class Containers implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
-	@TableLogic(value = "0", delval = "1")
-	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Integer isDeleted;
 	/**
 	 * 备注

+ 0 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/ContainersBills.java

@@ -272,7 +272,6 @@ public class ContainersBills implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
-	@TableLogic(value = "0", delval = "1")
 	private Integer isDeleted;
 	/**
 	 * 备注

+ 0 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/ContainersCommodity.java

@@ -325,7 +325,6 @@ public class ContainersCommodity implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
-	@TableLogic(value = "0", delval = "1")
 	private Integer isDeleted;
 	/**
 	 * 备注

+ 0 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/PreContainers.java

@@ -189,7 +189,6 @@ public class PreContainers implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
-	@TableLogic(value = "0", delval = "1")
 	private Integer isDeleted;
 	/**
 	 * 备注

+ 6 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java

@@ -645,7 +645,6 @@ public class FeeCenter implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
-	@TableLogic(value = "0", delval = "1")
 	private Integer isDeleted;
 	/**
 	 * 版本
@@ -1076,5 +1075,11 @@ public class FeeCenter implements Serializable {
 	@ApiModelProperty(value = "快递单号")
 	private String trackingNumber;
 
+	/**
+	 * pol超期箱使天数
+	 */
+	@TableField(exist = false)
+	private Integer overdueBoxUseDays;
+
 }
 

+ 234 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/OwBoxUsageFeeUtils.java

@@ -0,0 +1,234 @@
+package org.springblade.los.Util;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.los.basic.cur.entity.BCurExrate;
+import org.springblade.los.basic.fees.entity.BFees;
+import org.springblade.los.basic.fees.service.IBFeesService;
+import org.springblade.los.box.entity.RentTerm;
+import org.springblade.los.box.entity.TradingBox;
+import org.springblade.los.box.entity.TradingBoxItem;
+import org.springblade.los.box.service.IRentTermService;
+import org.springblade.los.box.service.ITradingBoxItemService;
+import org.springblade.los.finance.fee.entity.FeeCenterItems;
+import org.springblade.los.finance.fee.service.IFeeCenterItemsService;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author :jixinyuan
+ * @date : 2026/3/25
+ */
+@Component
+@AllArgsConstructor
+public class OwBoxUsageFeeUtils {
+
+	private final IBFeesService bFeesService;
+
+	private final CurrencyUtils currencyUtils;
+
+	private final IRentTermService rentTermService;
+
+	private final ITradingBoxItemService tradingBoxItemService;
+
+	private final IFeeCenterItemsService feeCenterItemsService;
+
+
+	public Boolean calculateCost(TradingBox detail, Date rentDate, List<TradingBoxItem> putBoxItemsList,String type) {
+		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()) {
+			if ("1".equals(type)){
+				throw new RuntimeException("请先维护租金条款");
+			}else{
+				return false;
+			}
+		}
+		BFees fees = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
+			.eq(BFees::getTenantId, AuthUtil.getTenantId())
+			.eq(BFees::getIsDeleted, 0)
+			.eq(BFees::getCode, "PerDiem"));
+		if (fees == null) {
+			if ("1".equals(type)){
+				throw new RuntimeException("请先维护'PerDiem'费用基础信息");
+			}else{
+				return false;
+			}
+		}
+
+		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) {
+			Date endDate;
+			if (ObjectUtils.isNull(rentDate)) {
+				endDate = item.getPodEmptyContainerReturnDate();
+			} else {
+				if (ObjectUtils.isNotNull(item.getPodEmptyContainerReturnDate())
+					&& rentDate.compareTo(item.getPodEmptyContainerReturnDate()) > 0) {
+					endDate = item.getPodEmptyContainerReturnDate();
+				} else {
+					endDate = rentDate;
+				}
+			}
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(endDate);
+			int year = calendar.get(Calendar.YEAR); // 获取年份
+			int month = calendar.get(Calendar.MONTH) + 1; // 获取月份(注意需加上1,因为月份从0开始计数)
+			int day = calendar.get(Calendar.DATE);
+			FeeCenterItems feeCenterItems = new FeeCenterItems();
+			feeCenterItems.setBranchId(AuthUtil.getDeptId());
+			feeCenterItems.setCreateUser(AuthUtil.getUserId());
+			feeCenterItems.setCreateUserName(detail.getCreateUserName());
+			feeCenterItems.setCreateTime(new Date());
+			feeCenterItems.setPid(detail.getId());
+			feeCenterItems.setAccountDate(rentDate);
+			feeCenterItems.setAccountYear(year);
+			feeCenterItems.setAccountMonth(month);
+			feeCenterItems.setAccountDay(day);
+			feeCenterItems.setCorpId(detail.getPurchaseCompanyId());
+			feeCenterItems.setCorpCnName(detail.getPurchaseCompanyName());
+			feeCenterItems.setCorpEnName(detail.getPurchaseCompanyName());
+			feeCenterItems.setPolId(detail.getPolId());
+			feeCenterItems.setPolCode(detail.getPolCode());
+			feeCenterItems.setPolCnName(detail.getPolCname());
+			feeCenterItems.setPolEnName(detail.getPolEname());
+			feeCenterItems.setPodId(detail.getPodId());
+			feeCenterItems.setPodCode(detail.getPodCode());
+			feeCenterItems.setPodCnName(detail.getPodCname());
+			feeCenterItems.setPodEnName(detail.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 = endDate.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");
+			String price = "";
+			int freeDays = 0;
+			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 + "元,";
+					price = price + term.getRate() + ",";
+					if (new BigDecimal("0.00").compareTo(term.getRate()) == 0) {
+						freeDays += tempDays;
+					}
+				} else {
+					BigDecimal calculate = term.getRate().multiply(new BigDecimal(days + ""));
+					amount = amount.add(calculate);
+					text = text + days + "天*" + term.getRate() + "元=" + calculate + "元";
+					if (new BigDecimal("0.00").compareTo(term.getRate()) == 0) {
+						freeDays += days;
+					}
+					days = 0;
+					price = price + term.getRate() + ",";
+					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 + "元,";
+
+			}
+			feeCenterItems.setFreeDay(freeDays);
+			feeCenterItems.setDays(feeCenterItems.getDays() - freeDays);
+			text = text + "+ gateInFee费用:" + detail.getGateInFee();
+			if (exrateType.equals(feeCenterItems.getCurCode())) {
+				feeCenterItems.setExrate(new BigDecimal("1.00"));
+			} else {
+				feeCenterItems.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenterItems.getCurCode(), "1"));
+			}
+			feeCenterItems.setAmount(amount.add(detail.getGateInFee()));
+			if (ObjectUtils.isNotNull(price) && price.length() > 1) {
+				feeCenterItems.setPrice(price.substring(0, price.length() - 1));
+			} else {
+				feeCenterItems.setPrice(price);
+			}
+			feeCenterItems.setGateInFee(detail.getGateInFee());
+			feeCenterItems.setRemarks(text);
+			feeCenterItems.setOutboundDate(endDate);
+			feeCenterItemsList.add(feeCenterItems);
+			item.setUpdateTime(new Date());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setRentEndDate(endDate);
+			item.setCount(item.getCount() + 1);
+		}
+		tradingBoxItemService.updateBatchById(putBoxItemsList);
+		if (!feeCenterItemsList.isEmpty()) {
+			feeCenterItemsService.saveBatch(feeCenterItemsList);
+		}
+		return true;
+	}
+}

+ 9 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/controller/BoxDynamicsRecordController.java

@@ -183,4 +183,13 @@ public class BoxDynamicsRecordController extends BladeController {
 	public R revokeSynchronous(@RequestParam ("id") String id ,@RequestParam ("ids") String ids)throws IOException {
 		return boxDynamicsRecordService.revokeSynchronous(id,ids);
 	}
+
+	/**
+	 * 导出模板
+	 */
+	@GetMapping("/exportTemplateById")
+	public void exportTemplateById(HttpServletResponse response,@RequestParam ("id") String id ,@RequestParam ("ids") String ids) {
+		List<EmptyContainerAppearance> list = boxDynamicsRecordService.exportTemplateById(id,ids);
+		ExcelUtil.export(response, "导入模板", "导入模板", list, EmptyContainerAppearance.class);
+	}
 }

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/IBoxDynamicsRecordService.java

@@ -21,11 +21,13 @@ import org.springblade.los.box.dynamics.entity.BoxDynamicsRecord;
 import org.springblade.los.box.dynamics.vo.BoxDynamicsRecordVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.los.box.excel.EmptyContainerAppearance;
 import org.springblade.los.ftp.dto.ApiRequest;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.text.ParseException;
+import java.util.List;
 
 /**
  * 箱动态记录表 服务类
@@ -51,4 +53,6 @@ public interface IBoxDynamicsRecordService extends IService<BoxDynamicsRecord> {
 	R cyctnrItem(ApiRequest apiRequest) throws IOException;
 
 	R revokeSynchronous(String id, String ids)throws IOException;
+
+	List<EmptyContainerAppearance> exportTemplateById(String id, String ids);
 }

+ 83 - 12
blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java

@@ -30,10 +30,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 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.GlobalOperationLogUtils;
-import org.springblade.los.Util.OperatorType;
+import org.springblade.los.Util.*;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.cntr.entity.BCntrTypes;
@@ -169,6 +166,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 
 	private final IBusinessBillNoService businessBillNoService;
 
+	private final OwBoxUsageFeeUtils owBoxUsageFeeUtils;
+
 	@Override
 	public IPage<BoxDynamicsRecordVO> selectBoxDynamicsRecordPage(IPage<BoxDynamicsRecordVO> page, BoxDynamicsRecordVO boxDynamicsRecord) {
 		return page.setRecords(baseMapper.selectBoxDynamicsRecordPage(page, boxDynamicsRecord));
@@ -177,7 +176,6 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public R importExcel(MultipartFile file, String type) throws IOException {
-		List<EmptyContainerAppearance> analysisList = new ArrayList<>();
 		//导入数据
 		List<EmptyContainerAppearance> excelList = ExcelUtil.read(file, EmptyContainerAppearance.class);
 		if (CollectionUtils.isEmpty(excelList)) {
@@ -965,6 +963,43 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		return R.success("操作成功");
 	}
 
+	@Override
+	public List<EmptyContainerAppearance> exportTemplateById(String id, String ids) {
+		List<EmptyContainerAppearance> list = new ArrayList<>();
+		TradingBox tradingBox = tradingBoxMapper.selectById(id);
+		if (tradingBox == null) {
+			throw new RuntimeException("未查到单据信息");
+		}
+		List<TradingBoxItem> itemList = tradingBoxItemService.list(new LambdaQueryWrapper<TradingBoxItem>()
+			.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
+			.eq(TradingBoxItem::getIsDeleted, 0)
+			.eq(TradingBoxItem::getPid, id)
+			.eq(TradingBoxItem::getStatus, "使用中")
+			.apply(ObjectUtils.isNotNull(ids), "find_in_set(id,'" + ids + "')"));
+		if (itemList.isEmpty()) {
+			throw new RuntimeException("未查到箱号状态为使用中的待还箱信息");
+		}
+		List<BPorts> portsList = bPortsService.list(new LambdaQueryWrapper<BPorts>()
+			.eq(BPorts::getIsDeleted, 0)
+			.eq(BPorts::getTenantId, AuthUtil.getTenantId()));
+
+		for (TradingBoxItem item : itemList) {
+			EmptyContainerAppearance appearance = new EmptyContainerAppearance();
+			appearance.setContainerNumber(tradingBox.getContainerNumber());
+			appearance.setBoxCode(item.getCode());
+			appearance.setBoxType(tradingBox.getBoxTypeQuantityOne());
+			if (ObjectUtils.isNotNull(item.getPodStationId())) {
+				portsList.stream().filter(e -> ObjectUtils.isNotNull(e.getAddressId()) && e.getAddressId().contains(item.getPodStationId() + "")).findFirst().ifPresent(ports -> appearance.setPortName(ports.getCnName()));
+			}
+			appearance.setStationName(item.getPodStationCname());
+			appearance.setMblno("");
+			appearance.setObjective("客户还箱");
+			appearance.setStatus(item.getBoxStatus());
+			list.add(appearance);
+		}
+		return list;
+	}
+
 	/**
 	 * 新箱进场流程
 	 *
@@ -2399,6 +2434,18 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					}
 					if (!tradingBoxItemOldList.isEmpty()) {
 						tradingBoxItemService.updateBatchById(tradingBoxItemOldList);
+						//OW(拿)计算箱使费
+						List<Long> pidList = tradingBoxItemOldList.stream().map(TradingBoxItem::getPid).distinct().collect(Collectors.toList());
+						if (!tradingBoxList.isEmpty()) {
+							List<TradingBox> tradingBoxes1 = tradingBoxList.stream().filter(e -> pidList.contains(e.getId())).collect(Collectors.toList());
+							for (TradingBox detail : tradingBoxes1) {
+								if ("OW(拿)".equals(detail.getType())) {
+									owBoxUsageFeeUtils.calculateCost(detail, null, tradingBoxItemOldList.stream().
+										filter(e -> e.getPid().equals(detail.getId())).collect(Collectors.toList()), type);
+								}
+							}
+						}
+
 					}
 					if (!containersListNew.isEmpty()) {
 						containersService.updateBatchById(containersListNew);
@@ -4024,8 +4071,10 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			if (!itemsListCC.isEmpty()) {
 				BPorts ports = bPortsService.getById(boxDynamicsRecord.getPortId());
 				boolean intercept = false;
+				String restriction = sysClient.getParamService("whether.start.restriction");
 				if (ports != null) {
-					if (ObjectUtils.isNotNull(ports.getUnCode()) && (ports.getUnCode().contains("CN") || ports.getUnCode().contains("VN"))) {
+					if (ObjectUtils.isNotNull(ports.getUnCode()) && (ports.getUnCode().contains("CN") || ports.getUnCode().contains("VN"))
+						&& "1".equals(restriction)) {
 						intercept = true;
 					}
 				}
@@ -4249,6 +4298,10 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								putBoxItem.setUpdateUserName(AuthUtil.getUserName());
 								putBoxItem.setUpdateTime(new Date());
 							} else {
+								if ("OW(拿)".equals(putBoxData.getBoxClass())) {
+									failureHandling(type, boxDynamicsRecord, "OW(拿)放箱号:" + item.getContainerNumber() + "未查到进场记录");
+									return false;
+								}
 								putBoxItem = new PutBoxItems();
 								putBoxItem.setBoxClass(putBoxData.getBoxClass());
 								putBoxItem.setBoxBelongsTo("SOC");
@@ -4263,6 +4316,10 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								putBoxItem.setCreateTime(new Date());
 							}
 						} else {
+							if ("OW(拿)".equals(putBoxData.getBoxClass())) {
+								failureHandling(type, boxDynamicsRecord, "OW(拿)放箱号:" + item.getContainerNumber() + "未查到进场记录");
+								return false;
+							}
 							putBoxItem = new PutBoxItems();
 							putBoxItem.setBoxClass(putBoxData.getBoxClass());
 							putBoxItem.setBoxBelongsTo("SOC");
@@ -4310,7 +4367,6 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							putBoxItem.setAgentName(bills.getForeignAgencyCnName());
 							putBoxItem.setShipCname(bills.getVesselCnName());
 							putBoxItem.setShipEname(bills.getVesselEnName());
-							putBoxItem.setPolFreeBoxUseDays(bills.getPolFreeBoxUseDays());
 							putBoxItem.setEtd(bills.getEtd());
 							putBoxItem.setActualEtd(bills.getActualEtd());
 						} else {
@@ -4580,7 +4636,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 									.findFirst().orElse(null);
 								if (containerNumberItems == null) {
 									remainingNum = remainingNum + Integer.parseInt(sum + "");
-								}else{
+								} else {
 									if (sum > containerNumberItems.getOccupyNum() - containerNumberItems.getOutNum()) {
 										failureHandling(type, boxDynamicsRecord, "提单号:" + bills.getHblno() + "出场箱数大于占用数量");
 										return false;
@@ -4976,6 +5032,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								}
 							}
 							item.setPolOverdueBoxUseDays(Integer.parseInt(overdueDays + ""));
+							item.setPolFreeBoxUseDays(feeCenter.getOverdueBoxUseDays());
 						}
 						putBoxItemsList.add(item);
 						if ("OW(拿),OW(放)".contains(putBox.getBoxClass())) {
@@ -5008,6 +5065,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			tradingBoxItemService.saveOrUpdateBatch(tradingBoxItemOldList);
 		}
 		List<Long> idList = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+		List<FeeCenter> feeCenterListAcc = new ArrayList<>();
 		List<FeeCenter> feeCenterList = new ArrayList<>();
 		if (!idList.isEmpty()) {
 			feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
@@ -5021,10 +5079,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		if (!feeCenterListD.isEmpty()) {
 			feeCenterService.saveBatch(feeCenterListD);
 			feeCenterList.addAll(feeCenterListD);
+			feeCenterListAcc.addAll(feeCenterListD);
 		}
 		if (!feeCenterListC.isEmpty()) {
 			feeCenterService.saveBatch(feeCenterListC);
 			feeCenterList.addAll(feeCenterListC);
+			feeCenterListAcc.addAll(feeCenterListC);
 			List<Long> idListMh = feeCenterListC.stream().map(FeeCenter::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
 			List<Bills> billsArrayList = billsList.stream().filter(e -> idListMh.contains(e.getId())).collect(Collectors.toList());
 			if (!billsArrayList.isEmpty()) {
@@ -5119,6 +5179,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								feeCenterD.setCreateUserName(billsHYCKM.getOperatorName());
 								feeCenterD.setCreateTime(new Date());
 								feeCenterService.save(feeCenterD);
+								feeCenterListAcc.add(feeCenterD);
 								List<FeeCenter> feeCenterListMs = feeCenterListM.stream().filter(e -> e.getPid().equals(billsHYCKM.getId()))
 									.collect(Collectors.toList());
 								if (feeCenterListMs.isEmpty()) {
@@ -5152,14 +5213,14 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				}
 			}
 		}
-		if (!feeCenterList.isEmpty()) {
+		if (!feeCenterListAcc.isEmpty()) {
 			List<Bills> billsLists = costProfitCalculationService.costProfitCalculationBatch(feeCenterList, billsList);
 			if (!billsLists.isEmpty()) {
 				for (Bills item : billsLists) {
 					int version = StringUtil.isBlank(item.getVersion()) ? 1 : Integer.parseInt(item.getVersion());
 					item.setVersion(String.valueOf(version + 1));
 					billsMapper.updateById(item);
-					List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId()))
+					List<FeeCenter> feeCenters = feeCenterListAcc.stream().filter(e -> e.getPid().equals(item.getId()))
 						.collect(Collectors.toList());
 					String exrateType = currencyUtils.standardCurrency(item.getBranchId());
 					Boolean status = this.generateAccBills(feeCenters, item, exrateType, boxDynamicsRecord, type);
@@ -5442,6 +5503,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		String text = "";
 		int dayLength;
 		BigDecimal amount = new BigDecimal("0.00");
+		int overdueBoxUseDays = 0;
 		for (StorageFeesItems term : storageFeesItems) {
 			BigDecimal rate;
 			//根据箱型获取具体超期单价
@@ -5455,6 +5517,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				continue;
 			}
 			dayLength = term.getEndDay() - term.getStartDay() + 1;
+			if (new BigDecimal("0.00").compareTo(rate) == 0) {
+				overdueBoxUseDays = dayLength;
+			}
 			if (earlySumDays >= dayLength) {
 				earlySumDays -= dayLength;
 				continue;
@@ -5474,6 +5539,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				break;
 			}
 		}
+		feeCenter.setOverdueBoxUseDays(overdueBoxUseDays);
 		if (days != 0) {
 			if ("20GP".equals(item.getBoxType())) {
 				BigDecimal calculate = storageFeesItems.get(storageFeesItems.size() - 1).getPrice20gp().multiply(new BigDecimal(days + ""));
@@ -5657,6 +5723,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								feeCenterListC.add(feeCenterC);
 							}
 						}
+						item.setPodFreeBoxUseDays(feeCenter.getOverdueBoxUseDays());
 					}
 					putBoxItemsList.add(item);
 					if ("OW(拿),OW(放)".contains(putBox.getBoxClass())) {
@@ -5691,16 +5758,19 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getPid, billsHYJK.getId()));
+		List<FeeCenter> feeCenterListAcc = new ArrayList<>();
 		if (feeCenterList.isEmpty()) {
 			feeCenterList = new ArrayList<>();
 		}
 		if (!feeCenterListD.isEmpty()) {
 			feeCenterService.saveBatch(feeCenterListD);
 			feeCenterList.addAll(feeCenterListD);
+			feeCenterListAcc.addAll(feeCenterListD);
 		}
 		if (!feeCenterListC.isEmpty()) {
 			feeCenterService.saveBatch(feeCenterListC);
 			feeCenterList.addAll(feeCenterListC);
+			feeCenterListAcc.addAll(feeCenterListC);
 			if ("MH".equals(billsHYJK.getBillType())) {
 				BigDecimal amount = feeCenterListC.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 				Bills bills = billsMapper.selectById(billsHYJK.getMasterId());
@@ -5777,6 +5847,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				feeCenterD.setCreateUserName(bills.getOperatorName());
 				feeCenterD.setCreateTime(new Date());
 				feeCenterService.save(feeCenterD);
+				feeCenterListAcc.add(feeCenterD);
 				List<FeeCenter> feeCenterListM = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 					.eq(FeeCenter::getIsDeleted, 0)
@@ -5806,7 +5877,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				}
 			}
 		}
-		if (!feeCenterList.isEmpty()) {
+		if (!feeCenterListAcc.isEmpty()) {
 			Bills billsAmount = costProfitCalculationService.costProfitCalculation(feeCenterList, exrateType);
 			if (billsAmount != null) {
 				billsHYJK.setAccountStatus(billsAmount.getAccountStatus());
@@ -5826,7 +5897,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				billsHYJK.setVersion(String.valueOf(version + 1));
 				billsMapper.updateById(billsHYJK);
 			}
-			Boolean status = this.generateAccBills(feeCenterList, billsHYJK, exrateType, boxDynamicsRecord, type);
+			Boolean status = this.generateAccBills(feeCenterListAcc, billsHYJK, exrateType, boxDynamicsRecord, type);
 			if (!status) {
 				failureHandling("3", boxDynamicsRecord, "提单号" + billsHYJK.getHblno() + "超期箱使费生成账单失败");
 				return false;

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java

@@ -419,6 +419,10 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 			item.setUpdateUser(AuthUtil.getUserId());
 			item.setUpdateUserName(AuthUtil.getUserName());
 			item.setContainerNumber(putBox1.getContainerNumber());
+			item.setPolCyId(putBox1.getPolId());
+			item.setPolCyCode(putBox1.getPolCode());
+			item.setPolCyCname(putBox1.getPolCname());
+			item.setPolCyEname(putBox1.getPolEname());
 			if (!archivesList.isEmpty()) {
 				Archives archives1 = archivesList.stream().filter(e -> e.getCode().equals(item.getBoxCode())).findFirst().orElse(null);
 				if (archives1 != null) {

+ 9 - 177
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java

@@ -26,10 +26,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.los.Util.BoxNumUtils;
-import org.springblade.los.Util.CurrencyUtils;
-import org.springblade.los.Util.GlobalOperationLogUtils;
-import org.springblade.los.Util.OperatorType;
+import org.springblade.los.Util.*;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.cur.entity.BCurExrate;
@@ -130,6 +127,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 	private final GlobalOperationLogUtils logUtils;
 
+	private final OwBoxUsageFeeUtils owBoxUsageFeeUtils;
+
 	@Override
 	public TradingBox getDetail(TradingBox tradingBox) {
 		if (tradingBox.getId() == null) {
@@ -298,7 +297,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			}
 			tradingBox.setInternalContainerNumber((String) clientBillNo1.getData());
 		}
-		String text;
+		String text = null;
 		if ("OW-N,OW-F".contains(tradingBox.getType())) {
 			text = "放箱号已存在,请勿重复添加";
 			if (ObjectUtils.isNull(tradingBox.getSuitcaseNum())) {
@@ -306,7 +305,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			}
 			tradingBox.setNotSuitcaseNum(tradingBox.getBoxNumber() - tradingBox.getSuitcaseNum());
 		} else {
-			text = "合同号已存在,请勿重复添加";
+			if (!"TZ".equals(tradingBox.getType())){
+				text = "合同号已存在,请勿重复添加";
+			}
 		}
 		//判断id是否为空
 		if (tradingBox.getId() == null) {
@@ -2812,7 +2813,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				item.setBoxEastId(tradingBox.getPurchaseCompanyId());
 				item.setBoxEastName(tradingBox.getPurchaseCompanyName());
 				item.setBoxCondition(tradingBox.getBoxCondition());
-				if ("待使用".equals(item.getStatus())) {
+				if (!"待使用".equals(item.getStatus())) {
 					alreadyAppeared = alreadyAppeared + 1;
 				}
 			}
@@ -2963,176 +2964,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		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(tradingBox.getRentDate());
-		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) {
-			Date endDate;
-			if (ObjectUtils.isNotNull(item.getPodEmptyContainerReturnDate())
-				&& tradingBox.getRentDate().compareTo(item.getPodEmptyContainerReturnDate()) > 0) {
-				endDate = item.getPodEmptyContainerReturnDate();
-//				throw new RuntimeException("箱号:" + item.getCode() + "租金计算截止时间大于pod还箱日期");
-			} else {
-				endDate = tradingBox.getRentDate();
-			}
-			FeeCenterItems feeCenterItems = new FeeCenterItems();
-			feeCenterItems.setBranchId(AuthUtil.getDeptId());
-			feeCenterItems.setCreateUser(AuthUtil.getUserId());
-			feeCenterItems.setCreateUserName(detail.getCreateUserName());
-			feeCenterItems.setCreateTime(new Date());
-			feeCenterItems.setPid(detail.getId());
-			feeCenterItems.setAccountDate(tradingBox.getRentDate());
-			feeCenterItems.setAccountYear(year);
-			feeCenterItems.setAccountMonth(month);
-			feeCenterItems.setAccountDay(day);
-			feeCenterItems.setCorpId(detail.getPurchaseCompanyId());
-			feeCenterItems.setCorpCnName(detail.getPurchaseCompanyName());
-			feeCenterItems.setCorpEnName(detail.getPurchaseCompanyName());
-			feeCenterItems.setPolId(detail.getPolId());
-			feeCenterItems.setPolCode(detail.getPolCode());
-			feeCenterItems.setPolCnName(detail.getPolCname());
-			feeCenterItems.setPolEnName(detail.getPolEname());
-			feeCenterItems.setPodId(detail.getPodId());
-			feeCenterItems.setPodCode(detail.getPodCode());
-			feeCenterItems.setPodCnName(detail.getPodCname());
-			feeCenterItems.setPodEnName(detail.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 = endDate.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");
-			String price = "";
-			int freeDays = 0;
-			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 + "元,";
-					price = price + term.getRate() + ",";
-					if (new BigDecimal("0.00").compareTo(term.getRate()) == 0) {
-						freeDays += tempDays;
-					}
-				} else {
-					BigDecimal calculate = term.getRate().multiply(new BigDecimal(days + ""));
-					amount = amount.add(calculate);
-					text = text + days + "天*" + term.getRate() + "元=" + calculate + "元";
-					if (new BigDecimal("0.00").compareTo(term.getRate()) == 0) {
-						freeDays += days;
-					}
-					days = 0;
-					price = price + term.getRate() + ",";
-					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 + "元,";
-
-			}
-			feeCenterItems.setFreeDay(freeDays);
-			feeCenterItems.setDays(feeCenterItems.getDays() - freeDays);
-			text = text + "+ gateInFee费用:" + detail.getGateInFee();
-			if (exrateType.equals(feeCenterItems.getCurCode())) {
-				feeCenterItems.setExrate(new BigDecimal("1.00"));
-			} else {
-				feeCenterItems.setExrate(currencyUtils.obtainExrate("C", curExrateList, feeCenterItems.getCurCode(), "1"));
-			}
-			feeCenterItems.setAmount(amount.add(detail.getGateInFee()));
-			if (ObjectUtils.isNotNull(price) && price.length() > 1) {
-				feeCenterItems.setPrice(price.substring(0, price.length() - 1));
-			} else {
-				feeCenterItems.setPrice(price);
-			}
-			feeCenterItems.setGateInFee(detail.getGateInFee());
-			feeCenterItems.setRemarks(text);
-			feeCenterItems.setOutboundDate(endDate);
-			feeCenterItemsList.add(feeCenterItems);
-			item.setUpdateTime(new Date());
-			item.setUpdateUserName(AuthUtil.getUserName());
-			item.setUpdateUser(AuthUtil.getUserId());
-			item.setRentEndDate(endDate);
-			item.setCount(item.getCount() + 1);
-		}
-		tradingBoxItemService.updateBatchById(putBoxItemsList);
-		if (!feeCenterItemsList.isEmpty()) {
-			feeCenterItemsService.saveBatch(feeCenterItemsList);
-		}
+		Boolean status = owBoxUsageFeeUtils.calculateCost(detail,tradingBox.getRentDate(),putBoxItemsList,"1");
 		return R.data(tradingBox);
 	}
 

+ 13 - 1
blade-service/blade-los/src/main/java/org/springblade/los/business/files/controller/FilesCenterController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.business.files.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
@@ -31,6 +32,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.los.business.files.entity.FilesCenter;
 import org.springblade.los.business.files.service.IFilesCenterService;
 import org.springblade.los.business.files.vo.FilesCenterVO;
+import org.springblade.los.business.sea.entity.Containers;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -144,7 +146,17 @@ public class FilesCenterController extends BladeController {
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(filesCenterService.removeByIds(Func.toLongList(ids)));
+		List<FilesCenter> filesCenterList = filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
+			.eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FilesCenter::getIsDeleted, 0)
+			.in(FilesCenter::getId, Func.toLongList(ids)));
+		for (FilesCenter item : filesCenterList) {
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setUpdateTime(new Date());
+			item.setIsDeleted(1);
+		}
+		return R.status(filesCenterService.updateBatchById(filesCenterList));
 	}
 
 

+ 13 - 1
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/ContainersController.java

@@ -39,12 +39,14 @@ import org.springblade.los.business.sea.entity.Containers;
 import org.springblade.los.business.sea.service.IContainersService;
 import org.springblade.los.business.sea.vo.ContainersVO;
 import org.springblade.los.excel.BoxAndLeadSealNoExcel;
+import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -226,7 +228,17 @@ public class ContainersController extends BladeController {
 	@RepeatSubmit
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		logUtils.saveOperationLogBatch(OperatorType.DELETE, "配箱列表全部删除", ids);
-		return R.status(containersService.removeByIds(Func.toLongList(ids)));
+		List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
+			.eq(Containers::getTenantId, AuthUtil.getTenantId())
+			.eq(Containers::getIsDeleted, 0)
+			.in(Containers::getId, Func.toLongList(ids)));
+		for (Containers item : containersList) {
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setUpdateTime(new Date());
+			item.setIsDeleted(1);
+		}
+		return R.status(containersService.updateBatchById(containersList));
 	}
 
 	/**

+ 2 - 1
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java

@@ -358,6 +358,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					bills1.setSiRemarks(bills.getSiRemarks());
 					bills1.setEtd(bills.getEtd());
 					bills1.setActualEtd(bills.getActualEtd());
+					bills1.setBillOfLadingStatus(bills.getBillOfLadingStatus());
 					this.updateById(bills1);
 				}
 			}
@@ -1761,7 +1762,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		if (!preContainersList.isEmpty()) {
 			for (PreContainers item : preContainersList) {
 				if ("已选择".equals(item.getContainerNumberStatus())) {
-					throw new RuntimeException("已占用放箱号,请先撤销后再退舱");
+					throw new RuntimeException("已占用放箱号,请先撤销后再删除");
 				}
 				item.setUpdateUserName(AuthUtil.getUserName());
 				item.setUpdateUser(AuthUtil.getUserId());

+ 13 - 1
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java

@@ -250,7 +250,19 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 				}
 			}
 		}
-		this.removeByIds(ids);
+		List<PreContainers> preContainersList = baseMapper.selectList(new LambdaQueryWrapper<PreContainers>()
+			.eq(PreContainers::getTenantId,AuthUtil.getTenantId())
+			.eq(PreContainers::getIsDeleted,0)
+			.in(PreContainers::getId,ids));
+		if (!preContainersList.isEmpty()){
+			for (PreContainers item : preContainersList){
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateTime(new Date());
+				item.setIsDeleted(1);
+			}
+			this.updateBatchById(preContainersList);
+		}
 		return R.data("操作成功");
 	}
 

+ 7 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java

@@ -2492,6 +2492,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public R delete(List<Long> longList) {
 		List<FeeCenter> feeCenterList = baseMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
@@ -2501,7 +2502,12 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			if (item.getAccStatus() != 0) {
 				throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单,删除失败");
 			}
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setUpdateTime(new Date());
+			item.setIsDeleted(1);
 		}
+		this.updateBatchById(feeCenterList);
 		Bills bills = billsMapper.selectById(feeCenterList.get(0).getPid());
 		if (bills != null) {
 			List<FeeCenter> feeCenters = baseMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
@@ -2531,7 +2537,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			}
 		}
 
-		return R.data(this.removeByIds(longList));
+		return R.success("操作成功");
 	}
 
 	@Override

+ 14 - 3
blade-service/blade-los/src/main/java/org/springblade/los/log/controller/GlobalOperationLogController.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.los.log.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -25,6 +27,7 @@ import javax.validation.Valid;
 
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
@@ -66,7 +69,15 @@ public class GlobalOperationLogController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入globalOperationLog")
 	public R<IPage<GlobalOperationLog>> list(GlobalOperationLog globalOperationLog, Query query) {
-		IPage<GlobalOperationLog> pages = globalOperationLogService.page(Condition.getPage(query), Condition.getQueryWrapper(globalOperationLog));
+		LambdaQueryWrapper<GlobalOperationLog> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(GlobalOperationLog::getTenantId, AuthUtil.getTenantId())
+			.eq(GlobalOperationLog::getIsDeleted,0)
+			.eq(ObjectUtils.isNotNull(globalOperationLog.getPid()),GlobalOperationLog::getPid,globalOperationLog.getPid())
+			.eq(ObjectUtils.isNotNull(globalOperationLog.getOperatorId()),GlobalOperationLog::getOperatorId,globalOperationLog.getOperatorId())
+			.eq(ObjectUtils.isNotNull(globalOperationLog.getOperatorName()),GlobalOperationLog::getOperatorName,globalOperationLog.getOperatorName())
+			.eq(ObjectUtils.isNotNull(globalOperationLog.getOperatorType()),GlobalOperationLog::getOperatorType,globalOperationLog.getOperatorType())
+		.orderByDesc(GlobalOperationLog::getOperatorDate);
+		IPage<GlobalOperationLog> pages = globalOperationLogService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -111,7 +122,7 @@ public class GlobalOperationLogController extends BladeController {
 		return R.status(globalOperationLogService.saveOrUpdate(globalOperationLog));
 	}
 
-	
+
 	/**
 	 * 删除 货代操作记录
 	 */
@@ -122,5 +133,5 @@ public class GlobalOperationLogController extends BladeController {
 		return R.status(globalOperationLogService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }