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

1.箱轨迹-按照箱号分组显示结果,增加检索条件是否还箱
2.费用删除提示修改
3.增加进出场生成的超期箱使费直接生成账单逻辑
4.进出场生成的箱轨迹动态值改为进出场目的
5.发票列表增加类型检索
6.所有财务单据增加数据类型
7.撤销选中放箱号删除原已选中放箱号数据
8.POD场站。空箱返场增加OW权限

纪新园 4 дней назад
Родитель
Сommit
35d907f9dc
12 измененных файлов с 362 добавлено и 55 удалено
  1. 5 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/ArchivesTrajectory.java
  2. 7 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  3. 5 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesTrajectoryController.java
  4. 175 36
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java
  5. 25 12
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java
  6. 1 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java
  7. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  8. 7 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/SeaContainerNumberItemServiceImpl.java
  9. 102 0
      blade-service/blade-los/src/main/java/org/springblade/los/enums/BoxDynamicsEnums.java
  10. 1 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/controller/FinInvoicesController.java
  11. 8 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/service/impl/FinInvoicesServiceImpl.java
  12. 24 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

+ 5 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/ArchivesTrajectory.java

@@ -347,6 +347,10 @@ public class ArchivesTrajectory implements Serializable {
 	@ApiModelProperty(value = "箱动态")
 	private String boxDynamics;
 
-
+	/**
+	 * 是否还箱 0否1是
+	 */
+	@TableField(exist = false)
+	private String whetherStillBox;
 
 }

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

@@ -1693,6 +1693,13 @@ public class Bills implements Serializable {
 	private Date retreatBoxPackingDate;
 
 	/**
+	 * 船司截单日期
+	 */
+	@ApiModelProperty(value = "船司截单日期")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date shippingCompanyDeadline;
+
+	/**
 	 * 金额
 	 */
 	@TableField(exist = false)

+ 5 - 1
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesTrajectoryController.java

@@ -89,6 +89,9 @@ public class ArchivesTrajectoryController extends BladeController {
 			lambdaQueryWrapper.ge(ArchivesTrajectory::getNewDate, archivesTrajectory.getNewDateList().get(0));
 			lambdaQueryWrapper.le(ArchivesTrajectory::getNewDate, archivesTrajectory.getNewDateList().get(1));
 		}
+		if ("1".equals(archivesTrajectory.getWhetherStillBox())){
+			lambdaQueryWrapper.eq(ArchivesTrajectory::getBoxDynamics,"客户还箱");
+		}
 		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getCode);
 		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getBoxType);
 		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getBillType);
@@ -101,7 +104,8 @@ public class ArchivesTrajectoryController extends BladeController {
 		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getMblno);
 		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getHblno);
 		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getSrcId);
-		lambdaQueryWrapper.orderByDesc(ArchivesTrajectory::getCreateTime);
+		lambdaQueryWrapper.orderByDesc(ArchivesTrajectory::getNewDate);
+		lambdaQueryWrapper.orderByDesc(ArchivesTrajectory::getCode);
 		IPage<ArchivesTrajectory> pages = archivesTrajectoryService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}

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

@@ -31,6 +31,7 @@ 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.CurrencyUtils;
+import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.cntr.entity.BCntrTypes;
 import org.springblade.los.basic.cntr.service.IBCntrTypesService;
@@ -45,6 +46,7 @@ import org.springblade.los.basic.storage.entity.StorageFees;
 import org.springblade.los.basic.storage.entity.StorageFeesItems;
 import org.springblade.los.basic.storage.service.IStorageFeesItemsService;
 import org.springblade.los.basic.storage.service.IStorageFeesService;
+import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.box.dynamics.entity.BoxDynamicsRecord;
 import org.springblade.los.box.dynamics.entity.BoxDynamicsRecordItems;
@@ -68,9 +70,12 @@ import org.springblade.los.business.sea.mapper.BillsMapper;
 import org.springblade.los.business.sea.service.IContainersService;
 import org.springblade.los.business.sea.service.IPreContainersService;
 import org.springblade.los.business.sea.service.ISeaContainerNumberItemService;
+import org.springblade.los.enums.BoxDynamicsEnums;
 import org.springblade.los.finance.fee.entity.FeeCenter;
+import org.springblade.los.finance.fee.entity.FinAccBills;
 import org.springblade.los.finance.fee.service.ICostProfitCalculationService;
 import org.springblade.los.finance.fee.service.IFeeCenterService;
+import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.los.ftp.dto.ApiItem;
 import org.springblade.los.ftp.dto.ApiRequest;
 import org.springblade.resource.feign.IOssClient;
@@ -124,10 +129,6 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 
 	private final TradingBoxMapper tradingBoxMapper;
 
-	private final IBusinessTypeService bBusinessTypeService;
-
-	private final IBusinessBillNoService businessBillNoService;
-
 	private final ITradingBoxItemService tradingBoxItemService;
 
 	private final ArchivesTrajectoryMapper archivesTrajectoryMapper;
@@ -152,12 +153,18 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 
 	private final IFeeCenterService feeCenterService;
 
+	private final IFinAccBillsService finAccBillsService;
+
 	private final IBCntrTypesService cntrTypesService;
 
 	private final IMessageClient messageClient;
 
 	private final ICostProfitCalculationService costProfitCalculationService;
 
+	private final IBusinessTypeService bBusinessTypeService;
+
+	private final IBusinessBillNoService businessBillNoService;
+
 	@Override
 	public IPage<BoxDynamicsRecordVO> selectBoxDynamicsRecordPage(IPage<BoxDynamicsRecordVO> page, BoxDynamicsRecordVO boxDynamicsRecord) {
 		return page.setRecords(baseMapper.selectBoxDynamicsRecordPage(page, boxDynamicsRecord));
@@ -258,7 +265,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				recordItems.setObjective("CT");
 			} else if ("驳空箱".equals(item.getObjective()) || "K".equals(item.getObjective())) {
 				recordItems.setObjective("K");
-			} else if ("退关箱".equals(item.getObjective()) || "TJ".equals(item.getObjective())) {
+			} else if ("退关箱".equals(item.getObjective()) ||"无货返空".equals(item.getObjective()) || "TJ".equals(item.getObjective())) {
 				recordItems.setObjective("TJ");
 			} else if ("新箱".equals(item.getObjective()) || "XX".equals(item.getObjective())) {
 				recordItems.setObjective("XX");
@@ -523,8 +530,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				archivesTrajectory.setBoxCategory(putBox1.getBoxClass());
 				archivesTrajectory.setBoxEastId(Long.parseLong(putBox1.getBoxEastId()));
 				archivesTrajectory.setBoxEastName(putBox1.getBoxEastName());
-				archivesTrajectory.setBoxDynamics("退租箱进场");
-				archivesTrajectory.setStatus("退租箱进场");
+				archivesTrajectory.setBoxDynamics(recordItems.getObjective());
+				archivesTrajectory.setStatus(recordItems.getObjective());
 				archivesTrajectory.setBillType(putBox1.getBoxClass());
 				archivesTrajectory.setCode(recordItems.getBoxCode());
 				archivesTrajectory.setNewDate(recordItems.getApproachExitDate());
@@ -1231,7 +1238,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						archivesTrajectory.setBoxEastName(item.getBoxEastName());
 						archivesTrajectory.setMblno(item.getMblno());
 						archivesTrajectory.setHblno(item.getHblno());
-						archivesTrajectory.setBoxDynamics("空箱提箱进场");
+						itemsListJC.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
+							.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
 						archivesTrajectory.setStatus(tradingBox.getBoxClass());
 						archivesTrajectory.setCorpId(item.getBoxEastId());
 						archivesTrajectory.setCorpName(item.getBoxEastName());
@@ -1299,6 +1307,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				throw new RuntimeException(e);
 			}
 		}
+		boxDynamicsRecord.setSynchronizationStatus("同步成功");
+		boxDynamicsRecordMapper.updateById(boxDynamicsRecord);
 		if ("JC".equals(boxDynamicsRecord.getApproachExit())) {
 			//新箱进场
 			List<BoxDynamicsRecordItems> itemsListJC = itemsList.stream().filter(e -> (!"C".equals(e.getObjective()) &&
@@ -1688,7 +1698,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								archivesTrajectory.setBoxEastName(item.getBoxEastName());
 								archivesTrajectory.setMblno(item.getMblno());
 								archivesTrajectory.setHblno(item.getHblno());
-								archivesTrajectory.setBoxDynamics("空箱提箱进场");
+								itemsListFC.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
+									.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
 								archivesTrajectory.setStatus(item.getBoxDynamics());
 								archivesTrajectory.setBillType(putBox.getBoxClass());
 								archivesTrajectory.setCode(item.getBoxCode());
@@ -2211,8 +2222,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							archivesTrajectory.setBoxEastName(item.getBoxEastName());
 							archivesTrajectory.setMblno(item.getMblno());
 							archivesTrajectory.setHblno(item.getHblno());
-							archivesTrajectory.setBoxDynamics("调箱进场");
-							archivesTrajectory.setStatus(tradingBox.getBoxClass());
+                            itemsListZJ.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
+								.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
+                            archivesTrajectory.setStatus(tradingBox.getBoxClass());
 							archivesTrajectory.setCorpId(item.getBoxEastId());
 							archivesTrajectory.setCorpName(item.getBoxEastName());
 							archivesTrajectory.setBillType(tradingBox.getBoxType());
@@ -2715,7 +2727,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							archivesTrajectory.setBoxEastName(item.getBoxEastName());
 							archivesTrajectory.setMblno(item.getMblno());
 							archivesTrajectory.setHblno(item.getHblno());
-							archivesTrajectory.setBoxDynamics("调箱出场");
+							itemsListZD.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
+								.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
 							archivesTrajectory.setStatus(tradingBox.getBoxClass());
 							archivesTrajectory.setCorpId(item.getBoxEastId());
 							archivesTrajectory.setCorpName(item.getBoxEastName());
@@ -2858,6 +2871,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				List<PutBox> putBoxes = new ArrayList<>();
 				List<TradingBox> tradingBoxes = new ArrayList<>();
 				for (BoxDynamicsRecordItems item : itemsListCC) {
+					if (ObjectUtils.isNull(item.getApproachExitDate())) {
+						item.setApproachExitDate(new Date());
+					}
 					Bills billsDetails = billsList.stream().filter(e -> e.getHblno().equals(item.getHblno())).findFirst().orElse(null);
 					boolean status = true;
 					if (billsDetails != null && billsDetails.getEtd().compareTo(date) < 0) {
@@ -2983,7 +2999,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								putBoxItem.setPolFreeBoxUseDays(bills.getPolFreeBoxUseDays());
 								putBoxItem.setEtd(bills.getEtd());
 								putBoxItem.setStatus("使用中");
-								if (ObjectUtils.isNotNull(putBoxItem.getPolPickUpDate())) {
+								if (ObjectUtils.isNull(putBoxItem.getPolPickUpDate())) {
 									putBoxItem.setPolPickUpDate(item.getApproachExitDate());
 									putBoxItem.setPolPreAppearanceDate(item.getApproachExitDate());
 								}
@@ -3010,7 +3026,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								putBoxItem.setPolCyCode(item.getStationCode());
 								putBoxItem.setPolCyCname(item.getStationCname());
 								putBoxItem.setPolCyEname(item.getStationEname());
-								if (ObjectUtils.isNotNull(putBoxItem.getPolPickUpDate())) {
+								if (ObjectUtils.isNull(putBoxItem.getPolPickUpDate())) {
 									putBoxItem.setPolPickUpDate(item.getApproachExitDate());
 									putBoxItem.setPolPreAppearanceDate(item.getApproachExitDate());
 								}
@@ -3047,7 +3063,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							putBoxItem.setPolCyCname(item.getStationCname());
 							putBoxItem.setPolCyEname(item.getStationEname());
 							putBoxItem.setAgentName(bills.getForeignAgencyCnName());
-							if (ObjectUtils.isNotNull(putBoxItem.getPolPickUpDate())) {
+							if (ObjectUtils.isNull(putBoxItem.getPolPickUpDate())) {
 								putBoxItem.setPolPickUpDate(item.getApproachExitDate());
 								putBoxItem.setPolPreAppearanceDate(item.getApproachExitDate());
 							}
@@ -3119,15 +3135,11 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 											tradingBoxItem.setPolCyCname(item.getStationCname());
 											tradingBoxItem.setPolCyEname(item.getStationEname());
 											tradingBoxItem.setAgentName(bills.getForeignAgencyCnName());
-											if (ObjectUtils.isNotNull(tradingBoxItem.getPolPickUpDate())) {
+											if (ObjectUtils.isNull(tradingBoxItem.getPolPickUpDate())) {
 												tradingBoxItem.setPolPickUpDate(item.getApproachExitDate());
 												tradingBoxItem.setPolPreAppearanceDate(item.getApproachExitDate());
 											}
-											if (ObjectUtils.isNotNull(item.getApproachExitDate())) {
-												tradingBoxItem.setPolStationEmptyContainerExitDate(item.getApproachExitDate());
-											} else {
-												tradingBoxItem.setPolStationEmptyContainerExitDate(new Date());
-											}
+											tradingBoxItem.setPolStationEmptyContainerExitDate(item.getApproachExitDate());
 											tradingBoxItem.setStatus("使用中");
 											tradingBoxItem.setCorpId(bills.getCorpId());
 											tradingBoxItem.setCorpName(bills.getCorpCnName());
@@ -3177,15 +3189,11 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 											tradingBoxItem.setPolCyCname(item.getStationCname());
 											tradingBoxItem.setPolCyEname(item.getStationEname());
 											tradingBoxItem.setActivationDate(tradingBox.getActivationDate());
-											if (ObjectUtils.isNotNull(tradingBoxItem.getPolPickUpDate())) {
+											if (ObjectUtils.isNull(tradingBoxItem.getPolPickUpDate())) {
 												tradingBoxItem.setPolPickUpDate(item.getApproachExitDate());
 												tradingBoxItem.setPolPreAppearanceDate(item.getApproachExitDate());
 											}
-											if (ObjectUtils.isNotNull(item.getApproachExitDate())) {
-												tradingBoxItem.setPolStationEmptyContainerExitDate(item.getApproachExitDate());
-											} else {
-												tradingBoxItem.setPolStationEmptyContainerExitDate(new Date());
-											}
+											tradingBoxItem.setPolStationEmptyContainerExitDate(item.getApproachExitDate());
 											tradingBoxItem.setStatus("使用中");
 											tradingBoxItem.setCorpId(bills.getCorpId());
 											tradingBoxItem.setCorpName(bills.getCorpCnName());
@@ -3234,15 +3242,11 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 										tradingBoxItem.setPolCyEname(item.getStationEname());
 										tradingBoxItem.setAgentName(bills.getForeignAgencyCnName());
 										tradingBoxItem.setActivationDate(tradingBox.getActivationDate());
-										if (ObjectUtils.isNotNull(tradingBoxItem.getPolPickUpDate())) {
+										if (ObjectUtils.isNull(tradingBoxItem.getPolPickUpDate())) {
 											tradingBoxItem.setPolPickUpDate(item.getApproachExitDate());
 											tradingBoxItem.setPolPreAppearanceDate(item.getApproachExitDate());
 										}
-										if (ObjectUtils.isNotNull(item.getApproachExitDate())) {
-											tradingBoxItem.setPolStationEmptyContainerExitDate(item.getApproachExitDate());
-										} else {
-											tradingBoxItem.setPolStationEmptyContainerExitDate(new Date());
-										}
+										tradingBoxItem.setPolStationEmptyContainerExitDate(item.getApproachExitDate());
 										tradingBoxItem.setStatus("使用中");
 										tradingBoxItem.setCorpId(bills.getCorpId());
 										tradingBoxItem.setCorpName(bills.getCorpCnName());
@@ -3484,7 +3488,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							archivesTrajectory.setBoxEastName(item.getBoxEastName());
 							archivesTrajectory.setMblno(item.getMblno());
 							archivesTrajectory.setHblno(item.getHblno());
-							archivesTrajectory.setBoxDynamics("空箱出场");
+							itemsListCC.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
+								.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
 							archivesTrajectory.setStatus(tradingBox.getBoxClass());
 							archivesTrajectory.setCorpId(item.getBoxEastId());
 							archivesTrajectory.setCorpName(item.getBoxEastName());
@@ -3564,8 +3569,6 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			item.setWhetherSynchronous("1");
 		}
 		boxDynamicsRecordItemsService.updateBatchById(itemsList);
-		boxDynamicsRecord.setSynchronizationStatus("同步成功");
-		boxDynamicsRecordMapper.updateById(boxDynamicsRecord);
 		return true;
 	}
 
@@ -3780,6 +3783,14 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					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()))
+						.collect(Collectors.toList());
+					String exrateType = currencyUtils.standardCurrency(item.getBranchId());
+					Boolean status = this.generateAccBills(feeCenters, item, exrateType, boxDynamicsRecord, type);
+					if (!status) {
+						failureHandling(type, boxDynamicsRecord, "提单号" + item.getHblno() + "超期箱使费生成账单失败");
+						return false;
+					}
 				}
 			}
 		}
@@ -3916,6 +3927,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		feeCenter.setAutomaticGenerated("1");
 		feeCenter.setBranchId(bills.getBranchId());
 		feeCenter.setBranchName(bills.getBranchName());
+		feeCenter.setVersion("1");
 		return feeCenter;
 	}
 
@@ -4104,7 +4116,134 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				billsHYJK.setVersion(String.valueOf(version + 1));
 				billsMapper.updateById(billsHYJK);
 			}
+			Boolean status = this.generateAccBills(feeCenterList, billsHYJK, exrateType, boxDynamicsRecord, type);
+			if (!status) {
+				failureHandling(type, boxDynamicsRecord, "提单号" + billsHYJK.getHblno() + "超期箱使费生成账单失败");
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private Boolean generateAccBills(List<FeeCenter> feeCenterList, Bills billsHYJK, String exrateType,
+									 BoxDynamicsRecord boxDynamicsRecord, String type) throws IOException {
+		List<FeeCenter> feeCenterList1 = new ArrayList<>();
+		BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+			.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
+			.eq(BusinessType::getIsDeleted, 0)
+			.eq(BusinessType::getStatus, 0)
+			.eq(BusinessType::getCode, "HYZD"));
+		if (businessType == null) {
+			failureHandling(type, boxDynamicsRecord, "未找到账单业务编号规则");
+			return false;
+		}
+		for (FeeCenter item : feeCenterList) {
+			BigDecimal amount = item.getAmount();
+			FinAccBills data = new FinAccBills();
+			data.setCurCode(item.getCurCode());
+			data.setGenerationCorpId(item.getGenerationCorpId());
+			data.setGenerationCorpCnName(item.getGenerationCorpCnName());
+			data.setGenerationCorpEnName(item.getGenerationCorpEnName());
+			data.setCreateTime(new Date());
+			data.setCreateUser(AuthUtil.getUserId());
+			data.setCreateUserName(AuthUtil.getUserName());
+			data.setCreateDept(item.getCreateDept());
+			data.setCreateDeptName(item.getCreateDeptName());
+			data.setBranchId(item.getBranchId());
+			data.setBranchName(item.getBranchName());
+			data.setDeptId(Long.parseLong(item.getBranchId()));
+			data.setDeptName(item.getBranchName());
+			data.setBookingAgentId(item.getBookingAgentId());
+			data.setBookingAgentCnName(item.getBookingAgentCnName());
+			data.setBookingAgentEnName(item.getBookingAgentEnName());
+			data.setTaxRate(item.getTaxRate());
+			data.setAmountTax(item.getAmountTax());
+			data.setBillBranchId(item.getBillBranchId());
+			data.setBillBranchName(item.getBillBranchName());
+			BusinessBillNo businessBillNo = new BusinessBillNo();
+			businessBillNo.setBusinessTypeId(businessType.getId());
+			businessBillNo.setCode("HYZD");
+			businessBillNo.setBranchId(item.getBranchId());
+			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+			if (!clientBillNo.isSuccess()) {
+				failureHandling(type, boxDynamicsRecord, "生成账单编号失败");
+				return false;
+			}
+			data.setBillNo((String) clientBillNo.getData());
+			data.setBillDate(item.getBillDate());
+			data.setAccountDc(item.getDc());
+			data.setAccountDate(item.getBillDate());
+			data.setBillKey(item.getBillKey());
+			data.setBusinessType(item.getBusinessType());
+			data.setBillType(item.getBillType());
+			data.setBusinessBillId(item.getPid());
+			data.setBusinessBillNo(item.getBillNo());
+			data.setBusinessDate(item.getBillDate());
+			data.setSrcId(billsHYJK.getSrcId());
+			data.setSrcCnName(billsHYJK.getSrcCnName());
+			data.setSrcEnName(billsHYJK.getSrcEnName());
+			data.setSrcType(billsHYJK.getSrcType());
+			data.setOperatorId(billsHYJK.getOperatorId());
+			data.setOperatorName(billsHYJK.getOperatorName());
+			data.setQuantityCntrDescr(billsHYJK.getQuantityCntrDescr());
+			data.setPaymode(item.getPaymode());
+			data.setCorpId(item.getCorpId());
+			data.setCorpCnName(item.getCorpCnName());
+			data.setCorpEnName(item.getCorpEnName());
+			data.setCorpArgreementNo(billsHYJK.getCorpArgreementNo());
+			data.setBillCorpId(item.getBillCorpId());
+			data.setBillCorpCnName(item.getBillCorpCnName());
+			data.setBillCorpEnName(item.getBillCorpEnName());
+			data.setVesselId(item.getVesselId());
+			data.setVesselCnName(item.getVesselCnName());
+			data.setVesselEnName(item.getVesselEnName());
+			data.setVoyageNo(item.getVoyageNo());
+			data.setMblno(item.getMblno());
+			data.setHblno(item.getHblno());
+			data.setRefno(billsHYJK.getRefno());
+			data.setBookingNo(billsHYJK.getBookingNo());
+			data.setEtd(item.getEtd());
+			data.setEta(item.getEta());
+			data.setPolId(item.getPolId());
+			data.setPolCnName(item.getPolCnName());
+			data.setPolEnName(item.getPolEnName());
+			data.setPolNamePrint(billsHYJK.getPolNamePrint());
+			data.setPodId(item.getPodId());
+			data.setPodCnName(item.getPodCnName());
+			data.setPodCode(item.getPodCode());
+			data.setPodEnName(item.getPodEnName());
+			data.setPodNamePrint(billsHYJK.getPodNamePrint());
+			data.setTrackingNumber(item.getTrackingNumber());
+			data.setAccountType("LOCAL");
+			BigDecimal amountLoc = item.getAmountLoc();
+			if ("D".equals(item.getDc())) {
+				if (exrateType.equals(item.getCurCode())) {
+					data.setAmountDr(amount);
+				} else {
+					data.setAmountDrUsd(amount);
+				}
+				data.setAmountDrLoc(amountLoc);
+			} else {
+				if (exrateType.equals(item.getCurCode())) {
+					data.setAmountCr(amount);
+				} else {
+					data.setAmountCrUsd(amount);
+				}
+				data.setAmountCrLoc(amountLoc);
+			}
+			data.setExrate(item.getExrate());
+			finAccBillsService.saveOrUpdate(data);
+			item.setAccBillId(data.getId());
+			item.setAccBillNo(data.getBillNo());
+			item.setAccDate(data.getBillDate());
+			item.setAccAmount(amountLoc);
+			item.setAccStatus(1);
+			item.setAccById(AuthUtil.getUserId());
+			item.setAccByName(AuthUtil.getUserName());
+			item.setAuditStatus("4");
+			feeCenterList1.add(item);
 		}
+		feeCenterService.saveOrUpdateBatch(feeCenterList1);
 		return true;
 	}
 

+ 25 - 12
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java

@@ -21,6 +21,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ibm.icu.text.DateFormat;
+import com.ibm.icu.text.SimpleDateFormat;
 import lombok.AllArgsConstructor;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.oss.model.BladeFile;
@@ -79,9 +81,7 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.rmi.RemoteException;
-import java.text.DateFormat;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.temporal.ChronoUnit;
@@ -3125,6 +3125,29 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 		}
 		List<Long> containersIds = podStationR.getList().stream().map(UpdatePodStationExcel::getContainersId).collect(Collectors.toList());
 		List<String> cntrNo = podStationR.getList().stream().map(UpdatePodStationExcel::getCntrNo).collect(Collectors.toList());
+		if (AuthUtil.getUserRole().contains("OW") || AuthUtil.getUserRole().contains("OW(业务)")) {
+			List<Archives> archivesList = archivesService.list(new LambdaQueryWrapper<Archives>()
+				.eq(Archives::getTenantId, AuthUtil.getTenantId())
+				.eq(Archives::getIsDeleted, 0)
+				.ne(Archives::getContainerNumberType, "OW(拿)")
+				.in(Archives::getCode, cntrNo));
+			if (archivesList.isEmpty()) {
+				throw new RuntimeException("箱号:" + String.join(",", cntrNo) + "无权限修改");
+			} else {
+				StringBuilder code = new StringBuilder();
+				for (Archives item : archivesList) {
+					if ("OW(拿)".equals(item.getContainerNumberType())) {
+						code.append(item.getCode()).append(",");
+					}
+					if (!cntrNo.contains(item.getCode())) {
+						code.append(item.getCode()).append(",");
+					}
+				}
+				if (ObjectUtils.isNotNull(code.toString())){
+					throw new RuntimeException("箱号:" + code + "无权限修改");
+				}
+			}
+		}
 		List<Long> billsIds = podStationR.getList().stream().map(UpdatePodStationExcel::getId).distinct().collect(Collectors.toList());
 		List<Containers> containersHYJKList = containersService.list(new LambdaQueryWrapper<Containers>()
 			.eq(Containers::getTenantId, AuthUtil.getTenantId())
@@ -4219,11 +4242,6 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 				if (billsHYJKList.isEmpty()) {
 					throw new RuntimeException("未查到海运出口单据");
 				}
-				/*for (Bills item : billsHYJKList) {
-					if (ObjectUtils.isNotNull(item.getEtd()) && new Date().compareTo(item.getEtd()) > 0) {
-						throw new RuntimeException("提单号:" + item.getMblno() + "已开船,修改失败");
-					}
-				}*/
 				List<Long> idHYJKList = billsHYJKList.stream().map(Bills::getMasterId).distinct().collect(Collectors.toList());
 				List<Bills> billsHYJKListFD = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
 					.eq(Bills::getTenantId, AuthUtil.getTenantId())
@@ -4281,11 +4299,6 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 			if (billsHYJKList.isEmpty()) {
 				throw new RuntimeException("未查到海运出口单据");
 			}
-/*			for (Bills item : billsHYJKList) {
-				if (new Date().compareTo(item.getEtd()) > 0) {
-					throw new RuntimeException("提单号:" + item.getMblno() + "已开船,修改失败");
-				}
-			}*/
 			List<Long> idHYJKList = billsHYJKList.stream().map(Bills::getMasterId).distinct().collect(Collectors.toList());
 			List<Bills> billsHYJKListFD = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
 				.eq(Bills::getTenantId, AuthUtil.getTenantId())

+ 1 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java

@@ -2740,6 +2740,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					containers.setPodCyEmail(tradingBox.getPodCyEmail());
 					containers.setPodCyTel(tradingBox.getPodCyTel());
 					containers.setOffhireReference(tradingBox.getOffhireReference());
+					containers.setContainerNumber(tradingBox.getContainerNumber());
 					containersListNew.add(containers);
 				}
 				if (!containersListNew.isEmpty()) {

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

@@ -1679,7 +1679,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.in(FeeCenter::getPid, ids));
 		if (!feeCenterList.isEmpty()) {
 			if (feeCenterList.stream().anyMatch(e -> !"0".equals(e.getAuditStatus()))) {
-				throw new RuntimeException("费用明细中存在状态不是录入,删除失败");
+				throw new RuntimeException("费用已审核,禁止删除");
 			} else {
 				feeCenterService.removeByIds(feeCenterList.stream().map(FeeCenter::getId).collect(Collectors.toList()));
 			}
@@ -6058,7 +6058,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public R refundCabin(Bills bills) {
-		if (new Date().compareTo(bills.getActualEtd()) > 0) {
+		if (ObjectUtils.isNotNull(bills.getActualEtd()) && new Date().compareTo(bills.getActualEtd()) > 0) {
 			throw new RuntimeException("该订单已开船,退舱失败");
 		}
 		bills.setUpdateUserName(AuthUtil.getUserName());

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

@@ -362,9 +362,14 @@ public class SeaContainerNumberItemServiceImpl extends ServiceImpl<SeaContainerN
 		if (containerNumberItemList.isEmpty()) {
 			throw new RuntimeException("未查到放箱号数据");
 		}
-		List<Long> idList = containerNumberItemList.stream().map(SeaContainerNumberItem::getId).collect(Collectors.toList());
+		for (SeaContainerNumberItem item : containerNumberItemList){
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setUpdateTime(new Date());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setIsDeleted(1);
+		}
+		this.updateBatchById(containerNumberItemList);
 		List<Long> srcIdList = containerNumberItemList.stream().map(SeaContainerNumberItem::getSrcId).collect(Collectors.toList());
-		this.removeByIds(idList);
 		List<PutBox> putBoxList = putBoxService.list(new LambdaQueryWrapper<PutBox>()
 			.eq(PutBox::getTenantId, AuthUtil.getTenantId())
 			.eq(PutBox::getIsDeleted, 0)

+ 102 - 0
blade-service/blade-los/src/main/java/org/springblade/los/enums/BoxDynamicsEnums.java

@@ -0,0 +1,102 @@
+package org.springblade.los.enums;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+
+/**
+ * @author Rain
+ */
+
+public enum BoxDynamicsEnums {
+
+	/**
+	 * 客户还箱
+	 */
+	C("C", "客户还箱"),
+	/**
+	 * 场内退租进场
+	 */
+	CT("CT", "场内退租进场"),
+	/**
+	 * 驳空箱
+	 */
+	K("K", "驳空箱"),
+	/**
+	 * 无货返空
+	 */
+	TJ("TJ", "无货返空"),
+	/**
+	 * 新箱
+	 */
+	XX("XX", "新箱"),
+	/**
+	 * 直接退租进场
+	 */
+	ZI("ZI", "直接退租进场"),
+	/**
+	 * 直接调运进场
+	 */
+	ZJ("ZJ", "直接调运进场"),
+	/**
+	 * 起租箱进场
+	 */
+	QX("QX", "起租箱进场"),
+	/**
+	 * 场内起租进场
+	 */
+	QZ("QZ", "场内起租进场"),
+	/**
+	 * 退租箱进场
+	 */
+	T("T", "退租箱进场"),
+	/**
+	 * 内点摆箱
+	 */
+	BX("BX", "内点摆箱"),
+	/**
+	 * 外点背箱
+	 */
+	WD("WD", "外点背箱"),
+	/**
+	 * 空箱集港
+	 */
+	KC("KC", "空箱集港"),
+	/**
+	 * 退租出场
+	 */
+	OF("OF", "退租出场"),
+
+	/**
+	 * 直接调运出场
+	 */
+	ZD("ZD", "直接调运出场");
+
+	public final String info;
+
+	public final String name;
+
+	BoxDynamicsEnums(String info, String name) {
+		this.info = info;
+		this.name = name;
+	}
+
+	public static boolean isAmendType(String info) {
+		for (BoxDynamicsEnums type : BoxDynamicsEnums.values()) {
+			if (type.info.equals(info)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public static String getName(String info) {
+		if (ObjectUtils.isNotNull(info)) {
+			for (BoxDynamicsEnums item : BoxDynamicsEnums.values()) {
+				if (item.info.equals(info)) {
+					return item.name;
+				}
+			}
+		}
+		return "";
+	}
+
+}

+ 1 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/controller/FinInvoicesController.java

@@ -84,6 +84,7 @@ public class FinInvoicesController extends BladeController {
 			.and(ObjectUtils.isNotNull(finInvoices.getInvCorpCnName()), i -> i.like(FinInvoices::getInvCorpCnName, finInvoices.getInvCorpCnName()).or()
 				.like(FinInvoices::getInvCorpEnName, finInvoices.getInvCorpCnName()))
 			.like(ObjectUtils.isNotNull(finInvoices.getInvoiceNo()), FinInvoices::getInvoiceNo, finInvoices.getInvoiceNo())
+			.like(ObjectUtils.isNotNull(finInvoices.getBusinessTypes()), FinInvoices::getBusinessTypes, finInvoices.getBusinessTypes())
 			.eq(ObjectUtils.isNotNull(finInvoices.getTaxType()), FinInvoices::getTaxType, finInvoices.getTaxType())
 			.eq(ObjectUtils.isNotNull(finInvoices.getCurCode()), FinInvoices::getCurCode, finInvoices.getCurCode())
 			.eq(ObjectUtils.isNotNull(finInvoices.getInvoiceDate()), FinInvoices::getInvoiceDate, finInvoices.getInvoiceDate())

+ 8 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/service/impl/FinInvoicesServiceImpl.java

@@ -268,6 +268,14 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				}
 				this.updateBatchById(finInvoicesList);
 			}
+			finInvoices.setBusinessTypes(finInvoices.getFinInvoicesItemsList().get(0).getBusinessType());
+			if ("SE,SI,SEA,SIA".contains(finInvoices.getBusinessTypes())) {
+				finInvoices.setBusinessTypes("海运");
+			} else if ("OW-N,OW-F".contains(finInvoices.getBusinessTypes())) {
+				finInvoices.setBusinessTypes("OW");
+			} else {
+				finInvoices.setBusinessTypes("箱管");
+			}
 		}
 		BigDecimal taxRate = new BigDecimal("0.00");
 		BigDecimal invoiceAmount = new BigDecimal("0.00");

+ 24 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

@@ -339,7 +339,6 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					finStlBills.setAmountSubLoc(finStlBills.getAmountDrLoc().subtract(finStlBills.getAmountCrLoc()));
 				}
 			}
-			//附件
 			List<Long> ids = finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getSrcIdInvoices).filter(Objects::nonNull).collect(Collectors.toList());
 			if (!ids.isEmpty()) {
 				List<Long> filePidList = new ArrayList<>();
@@ -385,6 +384,14 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					}
 				}
 			}
+			finStlBills.setBusinessTypes(finStlBills.getFinStlBillsItemsList().get(0).getBusinessType());
+			if ("SE,SI,SEA,SIA".contains(finStlBills.getBusinessTypes())) {
+				finStlBills.setBusinessTypes("海运");
+			} else if ("OW-N,OW-F".contains(finStlBills.getBusinessTypes())) {
+				finStlBills.setBusinessTypes("OW");
+			} else {
+				finStlBills.setBusinessTypes("箱管");
+			}
 		}
 		this.saveOrUpdate(finStlBills);
 		if (ObjectUtils.isNotNull(finStlBills.getFileList())) {
@@ -2414,6 +2421,14 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				}
 				feeCenterService.updateBatchById(feeCenterList);
 				finAccBillsService.updateBatchById(finAccBillsList);
+				stlBills.setBusinessTypes(finStlBillsItemsList.get(0).getBusinessType());
+				if ("SE,SI,SEA,SIA".contains(stlBills.getBusinessTypes())) {
+					stlBills.setBusinessTypes("海运");
+				} else if ("OW-N,OW-F".contains(stlBills.getBusinessTypes())) {
+					stlBills.setBusinessTypes("OW");
+				} else {
+					stlBills.setBusinessTypes("箱管");
+				}
 			}
 		} else if ("2".equals(finStlBills.getType())) {
 			for (FinAccBillsVO item : finStlBills.getFinAccBillsVOList()) {
@@ -2680,6 +2695,14 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				}
 				feeCenterService.saveOrUpdateBatch(feeCenterList);
 				finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+				stlBills.setBusinessTypes(finStlBillsItemsList.get(0).getBusinessType());
+				if ("SE,SI,SEA,SIA".contains(stlBills.getBusinessTypes())) {
+					stlBills.setBusinessTypes("海运");
+				} else if ("OW-N,OW-F".contains(stlBills.getBusinessTypes())) {
+					stlBills.setBusinessTypes("OW");
+				} else {
+					stlBills.setBusinessTypes("箱管");
+				}
 			}
 		} else {
 			throw new RuntimeException("类型错误");