Browse Source

1.箱轨迹查询列表接口去重
2.海运进出口列表增加费用审核状态
3.海运出口主分单同步或添加去掉付费方式同步
4.租箱,代理箱场站api同步接口逻辑修改
5.付费申请,发票申请等add保存接口增加版本号控制和提示
6.成本中心增加批量未审核接口
7.成本中心增加箱型利润状态及计算逻辑
8.OW用箱提箱查询条件修改
9.OW增加批量增加pod目的港接口
10.代理箱,租箱保存接口修改逻辑
11.业务利润金额利润计算逻辑修改

纪新园 1 month ago
parent
commit
b0ac6a11a9
21 changed files with 451 additions and 98 deletions
  1. 5 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/corps/entity/BCorps.java
  2. 7 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dynamics/entity/BoxDynamicsRecordItems.java
  3. 24 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/RouteCost.java
  4. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/TradingBoxItem.java
  5. 12 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  6. 4 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/dto/FeeCenterReports.java
  7. 8 8
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/statisticAnalysis/FinanceProfitDtoList.java
  8. 19 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  9. 11 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesTrajectoryController.java
  10. 10 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/RouteCostController.java
  11. 26 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxController.java
  12. 46 13
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java
  13. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/IRouteCostService.java
  14. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/ITradingBoxService.java
  15. 51 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/RouteCostServiceImpl.java
  16. 82 29
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java
  17. 42 6
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  18. 21 8
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  19. 27 9
      blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/service/impl/FinInvoicesServiceImpl.java
  20. 38 16
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java
  21. 8 8
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

+ 5 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/corps/entity/BCorps.java

@@ -246,11 +246,13 @@ public class BCorps implements Serializable {
 	 * 所属单位 Id
 	 */
 	@ApiModelProperty(value = "所属单位 Id")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Long corpId;
 	/**
 	 * 所属单位名称
 	 */
 	@ApiModelProperty(value = "所属单位名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String corpName;
 	/**
 	 * 客户类型
@@ -590,18 +592,21 @@ public class BCorps implements Serializable {
 	 * 订舱代理 id
 	 */
 	@ApiModelProperty(value = "订舱代理 id")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Long bookingAgentId;
 
 	/**
 	 * 订舱代理中文名称
 	 */
 	@ApiModelProperty(value = "订舱代理中文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String bookingAgentCnName;
 
 	/**
 	 * 订舱代理英文名称
 	 */
 	@ApiModelProperty(value = "订舱代理英文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String bookingAgentEnName;
 
 	/**

+ 7 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dynamics/entity/BoxDynamicsRecordItems.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.box.dynamics.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -191,5 +192,11 @@ public class BoxDynamicsRecordItems implements Serializable {
 	@ApiModelProperty(value = "租户号")
 	private String tenantId;
 
+	/**
+	 * 已分配
+	 */
+	@TableField(exist = false)
+	private String assigned;
+
 
 }

+ 24 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/RouteCost.java

@@ -554,6 +554,30 @@ public class RouteCost implements Serializable {
 	@ApiModelProperty(value = "版本")
 	private String version;
 
+	/**
+	 * 20利润状态
+	 */
+	@ApiModelProperty(value = "20利润状态")
+	private String profit20Status;
+
+	/**
+	 * 40利润状态
+	 */
+	@ApiModelProperty(value = "40利润状态")
+	private String profit40Status;
+
+	/**
+	 * 40HC利润状态
+	 */
+	@ApiModelProperty(value = "40HC利润状态")
+	private String profitHcStatus;
+
+	/**
+	 * 其他利润状态
+	 */
+	@ApiModelProperty(value = "其他利润状态")
+	private String otherProfitStatus;
+
 
 	/**
 	 * 报价明细

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/TradingBoxItem.java

@@ -605,6 +605,12 @@ public class TradingBoxItem implements Serializable {
 	private String offhireReference;
 
 	/**
+	 * 业务状态 录入 已启租  已退租
+	 */
+	@ApiModelProperty(value = "业务状态")
+	private String buxStaus;
+
+	/**
 	 * 起租日期
 	 */
 	@TableField(exist = false)

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

@@ -2810,4 +2810,16 @@ public class Bills implements Serializable {
 	@TableField(exist = false)
 	private String trackingNumber;
 
+	/**
+	 * 应收费用审核状态
+	 */
+	@TableField(exist = false)
+	private String statusDr;
+
+	/**
+	 * 应付费用审核状态
+	 */
+	@TableField(exist = false)
+	private String statusCr;
+
 }

+ 4 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/dto/FeeCenterReports.java

@@ -145,6 +145,10 @@ public class FeeCenterReports implements Serializable {
 	 */
 	private String unitNo;
 	/**
+	 * 单位
+	 */
+	private String unitNoEname;
+	/**
 	 * 单价
 	 */
 	private BigDecimal price;

+ 8 - 8
blade-service-api/blade-los-api/src/main/java/org/springblade/los/statisticAnalysis/FinanceProfitDtoList.java

@@ -300,17 +300,17 @@ public class FinanceProfitDtoList {
 	/**
 	 * 合计应收
 	 */
-	@ExcelProperty(value = "合计应收")
+	@ExcelIgnore
 	private BigDecimal amountDrLoc;
 	/**
 	 * 实际合计应收
 	 */
-	@ExcelProperty(value = "实际合计应收")
+	@ExcelIgnore
 	private BigDecimal realAmountDrLoc;
 	/**
 	 * 实际未收
 	 */
-	@ExcelProperty(value = "未收合计")
+	@ExcelIgnore
 	private BigDecimal notReceivedLoc;
 
 	/**
@@ -406,28 +406,28 @@ public class FinanceProfitDtoList {
 	/**
 	 * 合计应付
 	 */
-	@ExcelProperty(value = "合计应付")
+	@ExcelIgnore
 	private BigDecimal amountCrLoc;
 	/**
 	 * 实际合计应付
 	 */
-	@ExcelProperty(value = "实际合计应付")
+	@ExcelIgnore
 	private BigDecimal realAmountCrLoc;
 	/**
 	 * 实际未付
 	 */
-	@ExcelProperty(value = "未付合计")
+	@ExcelIgnore
 	private BigDecimal notReceivedCrLoc;
 
 	/**
 	 * 单票利润
 	 */
-	@ExcelProperty(value = "合计利润")
+	@ExcelIgnore
 	private BigDecimal amountProfitLoc;
 	/**
 	 * 实际单票利润
 	 */
-	@ExcelProperty(value = "实际单票利润")
+	@ExcelIgnore
 	private BigDecimal realAmountProfitLoc;
 	/**
 	 * 人民币利润

+ 19 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java

@@ -42,6 +42,8 @@ import org.springblade.los.basic.reports.entity.Reports;
 import org.springblade.los.basic.reports.mapper.ReportsMapper;
 import org.springblade.los.basic.reports.service.IReportsService;
 import org.springblade.los.basic.reports.vo.ReportsVO;
+import org.springblade.los.basic.units.entity.BUnits;
+import org.springblade.los.basic.units.service.IBUnitsService;
 import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.amends.service.IAmendsService;
 import org.springblade.los.business.sea.dto.ContainersReports;
@@ -142,6 +144,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 
 	private final IFeeCenterUpdateRecordService feeCenterUpdateRecordService;
 
+	private final IBUnitsService bUnitsService;
+
 	@Override
 	public IPage<ReportsVO> selectReportsPage(IPage<ReportsVO> page, ReportsVO reports) {
 		return page.setRecords(baseMapper.selectReportsPage(page, reports));
@@ -2403,6 +2407,17 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 		BigDecimal amountCrLoc = new BigDecimal(MagicValues.ZERO);
 		BigDecimal amountProfitLoc;
 		List<FeeCenterReports> feeCenterReportsList = new ArrayList<>();
+		List<BUnits> unitsList = new ArrayList<>();
+		if (!feeCenterList.isEmpty()) {
+			List<String> unitsName = feeCenterList.stream().map(FeeCenter::getUnitNo)
+				.distinct().collect(Collectors.toList());
+			if (!unitsName.isEmpty()){
+				unitsList = bUnitsService.list(new LambdaQueryWrapper<BUnits>()
+					.eq(BUnits::getTenantId, AuthUtil.getTenantId())
+					.eq(BUnits::getIsDeleted, 0)
+					.in(BUnits::getCnName, unitsName));
+			}
+		}
 		for (FeeCenter item : feeCenterList) {
 			/*if (ObjectUtils.isNotNull(item.getShortName())) {
 				item.setCorpCnName(item.getShortName());
@@ -2464,6 +2479,10 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			feeCenterReports.setExrate(item.getExrate());
 			feeCenterReports.setQuantity(item.getQuantity());
 			feeCenterReports.setUnitNo(item.getUnitNo());
+			if (!unitsList.isEmpty()){
+                unitsList.stream().filter(e -> e.getCnName().equals(item.getUnitNo()))
+                        .findFirst().ifPresent(units -> feeCenterReports.setUnitNoEname(units.getEnName()));
+            }
 			feeCenterReports.setPrice(item.getPrice());
 			feeCenterReports.setMoney(item.getAmount());
 			feeCenterReports.setTaxRate(item.getTaxRate());

+ 11 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesTrajectoryController.java

@@ -84,6 +84,17 @@ public class ArchivesTrajectoryController extends BladeController {
 			lambdaQueryWrapper.ge(ArchivesTrajectory::getNewDate, archivesTrajectory.getNewDateList().get(0));
 			lambdaQueryWrapper.le(ArchivesTrajectory::getNewDate, archivesTrajectory.getNewDateList().get(1));
 		}
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getCode);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getBoxType);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getBillType);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getBoxDynamics);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getBoxCategory);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getNewDate);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getPortId);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getStationId);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getContainerNumber);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getMblno);
+		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getSrcId);
 		lambdaQueryWrapper.orderByDesc(ArchivesTrajectory::getCreateTime);
 		IPage<ArchivesTrajectory> pages = archivesTrajectoryService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);

+ 10 - 1
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/RouteCostController.java

@@ -405,6 +405,15 @@ public class RouteCostController extends BladeController {
 	}
 
 	/**
+	 * 批量未审核
+	 */
+	@GetMapping("/batchUnreviewed")
+	@RepeatSubmit
+	public R batchUnreviewed(@RequestParam("ids") String ids) {
+		return routeCostService.batchUnreviewed(ids);
+	}
+
+	/**
 	 * 批量撤销
 	 */
 	@GetMapping("/batchRevoke")
@@ -422,7 +431,7 @@ public class RouteCostController extends BladeController {
 		LambdaQueryWrapper<RouteCost> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(RouteCost::getTenantId, AuthUtil.getTenantId())
 			.eq(RouteCost::getIsDeleted, 0)
-			.eq(RouteCost::getStatus, "审核通过")
+			.apply("find_in_set(status,'审核通过,未审核')")
 			.eq(ObjectUtils.isNotNull(routeCost.getPodId()), RouteCost::getPodId, routeCost.getPodId())
 			.like(ObjectUtils.isNotNull(routeCost.getAirlineId()), RouteCost::getAirlineId, routeCost.getAirlineId())
 			.like(ObjectUtils.isNotNull(routeCost.getDestinationId()), RouteCost::getDestinationId, routeCost.getDestinationId());

+ 26 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxController.java

@@ -41,12 +41,14 @@ import org.springblade.los.box.entity.TradingBoxItem;
 import org.springblade.los.box.service.ITradingBoxItemService;
 import org.springblade.los.box.service.ITradingBoxService;
 import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -67,6 +69,8 @@ public class TradingBoxController extends BladeController {
 
 	private final ITradingBoxItemService tradingBoxItemService;
 
+	private final ISysClient sysClient;
+
 	/**
 	 * 详情
 	 */
@@ -132,6 +136,19 @@ public class TradingBoxController extends BladeController {
 			lambdaQueryWrapper.ge(TradingBox::getExpiryDate, new Date());
 		}else if ("3".equals(tradingBox.getWhetherDisplay())){
 			lambdaQueryWrapper.lt(TradingBox::getExpiryDate, new Date());
+		}else if ("4".equals(tradingBox.getWhetherDisplay())){
+			String status = sysClient.getParamServiceDWT("postponement.reminder", AuthUtil.getTenantId());
+			if (ObjectUtils.isNull(status) || "获取数据失败".equals(status)) {
+				throw new RuntimeException("请先维护延期提醒系统参数");
+			}
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(new Date());
+			calendar.add(Calendar.DAY_OF_MONTH, -Integer.parseInt(status));
+			Calendar calendar1 = Calendar.getInstance();
+			calendar1.setTime(new Date());
+			calendar1.add(Calendar.DAY_OF_MONTH, Integer.parseInt(status));
+			lambdaQueryWrapper.ge(TradingBox::getExpiryDate, calendar.getTime())
+				.le(TradingBox::getExpiryDate, calendar1.getTime());
 		}
 		lambdaQueryWrapper.orderByDesc(TradingBox::getCreateTime);
 		lambdaQueryWrapper.orderByAsc(TradingBox::getPolCname);
@@ -462,4 +479,13 @@ public class TradingBoxController extends BladeController {
 		return tradingBoxService.revokeApproval(tradingBox);
 	}
 
+
+	/**
+	 * 批量增加pod目的港
+	 */
+	@GetMapping("/batchAddPod")
+	public R batchAddPod(@RequestParam("ids") String ids,@RequestParam(value = "podIds") String podIds) {
+		return tradingBoxService.batchAddPod(ids,podIds);
+	}
+
 }

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

@@ -887,6 +887,10 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					List<Archives> archivesArrayList = new ArrayList<>();
 					//OW(拿)、代理箱-箱档案数据删除
 					List<Long> archivesDateleList = new ArrayList<>();
+					//代理箱返场删除代理箱箱明细id
+					List<Long> dlBoxIdList = new ArrayList<>();
+					//代理箱返场删除放箱号箱明细id
+					List<Long> dlPutBoxIdList = new ArrayList<>();
 					List<Containers> containersList = containersHYJKList.stream().filter(e -> e.getPid().equals(billsHYJK.getId()))
 						.collect(Collectors.toList());
 					for (Containers item : containersList) {
@@ -1123,6 +1127,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 										putBoxItem.setStatus("已完成");
 										putBoxItem.setBoxDynamics("已返场");
 										putBoxItemsOldList.add(putBoxItem);
+										if ("代理箱".equals(putBox1.getBusType())) {
+											dlPutBoxIdList.add(putBoxItem.getId());
+										}
 									} else {
 										throw new RuntimeException("未查到原放箱号:" + archives.getContainerNumber() + "中箱号为:" + item.getCntrNo() + "数据");
 									}
@@ -1157,6 +1164,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 												tradingBoxItem.setStationEname(recordItems.getStationCode());
 												tradingBoxItem.setPodFreeBoxUseDays(billsHYJK.getPodFreeBoxUseDays());
 												tradingBoxItem.setEta(billsHYJK.getEta());
+												if ("代理箱".equals(putBox1.getBusType())) {
+													dlBoxIdList.add(tradingBoxItem.getId());
+												}
 												tradingBoxItemOldList.add(tradingBoxItem);
 											} else {
 												throw new RuntimeException("未查到原OW单据-放箱号:" + archives.getContainerNumber() + "中箱号是:" + item.getCntrNo() + "数据");
@@ -1170,7 +1180,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								} else {
 									throw new RuntimeException("未查到来源单据-放箱号为:" + archives.getContainerNumberOw());
 								}
-								archivesDateleList.add(archives.getId());
+								 if ("OW(拿),代理箱".contains(putBox1.getBoxClass())) {
+									 archivesDateleList.add(archives.getId());
+								}
 							} else {
 								throw new RuntimeException("放箱号:" + archives.getContainerNumberOw() + "单据类型错误,请联系管理员");
 							}
@@ -1196,9 +1208,6 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					if (!archivesArrayList.isEmpty()) {
 						archivesService.updateBatchById(archivesArrayList);
 					}
-					if (!archivesDateleList.isEmpty()) {
-						archivesService.removeByIds(archivesDateleList);
-					}
 					if (!putBoxNewList.isEmpty()) {
 						putBoxService.saveOrUpdateBatch(putBoxNewList);
 					}
@@ -1364,6 +1373,15 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						//计算超期箱使费
 						this.countOverdueFeeV1(billsHYJK, tradingBoxList, tradingBoxItemOldList, putBoxItemsOldList, putBoxList);
 					}
+					if (!dlBoxIdList.isEmpty()){
+						tradingBoxItemService.removeByIds(dlBoxIdList);
+					}
+					if (!dlPutBoxIdList.isEmpty()){
+						putBoxItemsService.removeByIds(dlPutBoxIdList);
+					}
+					if (!archivesDateleList.isEmpty()) {
+						archivesService.removeByIds(archivesDateleList);
+					}
 				}
 			}
 			List<BoxDynamicsRecordItems> itemsListZJ = itemsList.stream().filter(e -> "ZJ".equals(e.getObjective())).collect(Collectors.toList());
@@ -1597,7 +1615,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 										tradingBoxItem.setBoxCategory("OW(拿)");
 									} else if ("OW-F".equals(tradingBox.getType())) {
 										tradingBoxItem.setBoxCategory("OW(放)");
-									}else if ("DL".equals(tradingBox.getType())) {
+									} else if ("DL".equals(tradingBox.getType())) {
 										tradingBoxItem.setBoxCategory("代理箱");
 									} else if ("ZR".equals(tradingBox.getType())) {
 										tradingBoxItem.setBoxCategory("租箱");
@@ -1766,6 +1784,10 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								if (Objects.equals(tradingBox.getActualBoxNumber(), tradingBox.getBoxNumber())) {
 									tradingBox.setStatus(1);
 								}
+								if ("OW(拿),代理箱,租箱".contains(item.getBusType())) {
+									tradingBox.setSuitcaseNum(tradingBox.getSuitcaseNum() + Integer.parseInt(count1 + ""));
+									tradingBox.setNotSuitcaseNum(tradingBox.getBoxNumber() - tradingBox.getSuitcaseNum());
+								}
 								tradingBoxMapper.updateById(tradingBox);
 							}
 						}
@@ -2080,7 +2102,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 												tradingBoxItem.setBoxCategory("OW(拿)");
 											} else if ("OW-F".equals(tradingBox.getType())) {
 												tradingBoxItem.setBoxCategory("OW(放)");
-											}else if ("DL".equals(tradingBox.getType())) {
+											} else if ("DL".equals(tradingBox.getType())) {
 												tradingBoxItem.setBoxCategory("代理箱");
 											} else if ("ZR".equals(tradingBox.getType())) {
 												tradingBoxItem.setBoxCategory("租箱");
@@ -2118,7 +2140,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 											tradingBoxItem.setBoxCategory("OW(拿)");
 										} else if ("OW-F".equals(tradingBox.getType())) {
 											tradingBoxItem.setBoxCategory("OW(放)");
-										}else if ("DL".equals(tradingBox.getType())) {
+										} else if ("DL".equals(tradingBox.getType())) {
 											tradingBoxItem.setBoxCategory("代理箱");
 										} else if ("ZR".equals(tradingBox.getType())) {
 											tradingBoxItem.setBoxCategory("租箱");
@@ -2467,15 +2489,14 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						}
 						Bills bills = null;
 						if (!containersList.isEmpty()) {
-							List<Containers> containerItemList = containersList.stream().filter(e -> item.getHblno().equals(e.getHblno())
-								&& item.getBoxCode().equals(e.getCntrNo())).collect(Collectors.toList());
+							List<Containers> containerItemList = containersList.stream().filter(e -> item.getHblno().equals(e.getHblno())).collect(Collectors.toList());
 							if (!containerItemList.isEmpty()) {
 								List<Long> billsIds = containerItemList.stream().map(Containers::getPid).distinct().collect(Collectors.toList());
 								bills = billsList.stream().filter(e -> "MH,DD".contains(e.getBillType()) && billsIds.contains(e.getId())).findFirst().orElse(null);
 							}
 						}
 						if (bills == null) {
-							throw new RuntimeException("未查到提单号:" + item.getMblno() + "对应海运出口单据");
+							throw new RuntimeException("未查到提单号:" + item.getHblno() + "对应海运出口单据");
 						}
 						//放箱号明细数据处理
 						PutBoxItems putBoxItem;
@@ -2673,7 +2694,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 											tradingBoxItem.setBoxCategory("OW(拿)");
 										} else if ("OW-F".equals(tradingBox.getType())) {
 											tradingBoxItem.setBoxCategory("OW(放)");
-										}else if ("DL".equals(tradingBox.getType())) {
+										} else if ("DL".equals(tradingBox.getType())) {
 											tradingBoxItem.setBoxCategory("代理箱");
 										} else if ("ZR".equals(tradingBox.getType())) {
 											tradingBoxItem.setBoxCategory("租箱");
@@ -2732,15 +2753,23 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					}
 					if (!"OW(放)".equals(putBoxData.getBusType()) && ObjectUtils.isNotNull(item.getHblno())) {
 						if (!containersList.isEmpty()) {
-							List<Containers> containerItemList = containersList.stream().filter(e -> item.getHblno().equals(e.getHblno())
-								&& item.getBoxCode().equals(e.getCntrNo())).collect(Collectors.toList());
+							List<Containers> containerItemList = containersList.stream().filter(e -> item.getHblno().equals(e.getHblno())).collect(Collectors.toList());
+							List<BoxDynamicsRecordItems> hblnoList = itemsListCC.stream().filter(e -> e.getHblno().equals(item.getHblno()))
+								.collect(Collectors.toList());
 							for (Containers containers : containerItemList) {
+								BoxDynamicsRecordItems recordItems = hblnoList.stream().filter(e -> containers.getCntrTypeCode().equals(e.getBoxType())
+									&& !"1".equals(e.getAssigned())).findFirst().orElse(null);
+								if (recordItems != null) {
+									containers.setCntrNo(recordItems.getBoxCode());
+									recordItems.setAssigned("1");
+								}
 								containers.setPolCyId(item.getStationId());
 								containers.setPolCyCode(item.getStationCode());
 								containers.setPolCyCname(item.getStationCname());
 								containers.setPolCyEname(item.getStationEname());
 								containers.setPolStationEmptyContainerExitDate(item.getApproachExitDate());
 								containers.setContainerNumber(item.getContainerNumber());
+								containers.setBoxSrcType(putBoxData.getBusType());
 								containersListNew.add(containers);
 							}
 						} else {
@@ -3496,6 +3525,10 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								}
 								tradingBoxItem.setBoxEastId(tradingBox.getPurchaseCompanyId());
 								tradingBoxItem.setBoxEastName(tradingBox.getPurchaseCompanyName());
+								if ("租箱".equals(putBox.getBusType())) {
+									tradingBoxItem.setLeaseCommencementDate(item.getApproachExitDate());
+									tradingBoxItem.setBuxStaus("已启租");
+								}
 								tradingBoxItems.add(tradingBoxItem);
 							} else {
 								throw new RuntimeException("放箱号:" + item.getContainerNumber() + "未查到来源单据");

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/service/IRouteCostService.java

@@ -82,4 +82,6 @@ public interface IRouteCostService extends IService<RouteCost> {
 	List<RTFDProfitExcel> RTFDProfitAll(RTFDProfitExcel profitExcel);
 
 	R batchCopy(String ids, BigDecimal exrate, Date effectiveStartDate, Date effectiveEndDate,String type,String curCode);
+
+	R batchUnreviewed(String ids);
 }

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/service/ITradingBoxService.java

@@ -91,4 +91,6 @@ public interface ITradingBoxService extends IService<TradingBox> {
 	R approval(TradingBox tradingBox);
 
 	R revokeApproval(TradingBox tradingBox);
+
+	R batchAddPod(String ids, String podIds);
 }

+ 51 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/RouteCostServiceImpl.java

@@ -242,6 +242,37 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 				routeCost.setProfitHc(totalProfit(routeCost.getCostItemList(), "40HC"));
 				routeCost.setOtherProfit(totalProfit(routeCost.getCostItemList(), "other"));
 				routeCost.setTotalProfit(routeCost.getProfit20().add(routeCost.getProfit40()).add(routeCost.getProfitHc()).add(routeCost.getOtherProfit()));
+
+				List<RouteCostItem> costItemList = routeCost.getCostItemList().stream().filter(e-> "0".equals(e.getDisable()))
+					.collect(Collectors.toList());
+				if (!costItemList.isEmpty()){
+					if (new BigDecimal("0.00").compareTo(totalProfit(costItemList, "20")) == 0){
+						routeCost.setProfit20Status("1");
+					}else{
+						routeCost.setProfit20Status("0");
+					}
+					if (new BigDecimal("0.00").compareTo(totalProfit(costItemList, "40")) == 0){
+						routeCost.setProfit40Status("1");
+					}else{
+						routeCost.setProfit40Status("0");
+					}
+					if (new BigDecimal("0.00").compareTo(totalProfit(costItemList, "40HC")) == 0){
+						routeCost.setProfitHcStatus("1");
+					}else{
+						routeCost.setProfitHcStatus("0");
+					}
+					if (new BigDecimal("0.00").compareTo(totalProfit(costItemList, "other")) == 0){
+						routeCost.setOtherProfitStatus("1");
+					}else{
+						routeCost.setOtherProfitStatus("0");
+					}
+				}else{
+					routeCost.setProfit20Status("1");
+					routeCost.setProfit40Status("1");
+					routeCost.setProfitHcStatus("1");
+					routeCost.setOtherProfitStatus("1");
+				}
+
 				this.saveOrUpdate(routeCost);
 			}
 		} else {
@@ -1140,6 +1171,26 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 		return R.success("操作成功");
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R batchUnreviewed(String ids) {
+		if (ObjectUtils.isNull(ids)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		List<RouteCost> routeCostList = baseMapper.selectList(new LambdaQueryWrapper<RouteCost>()
+			.eq(RouteCost::getTenantId, AuthUtil.getTenantId())
+			.eq(RouteCost::getIsDeleted, 0)
+			.in(RouteCost::getId, Func.toLongList(ids)));
+		for (RouteCost item : routeCostList) {
+			item.setUpdateTime(new Date());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setStatus("未审核");
+		}
+		this.updateBatchById(routeCostList);
+		return R.data("操作成功");
+	}
+
 
 	/**
 	 * 合计费用成本

+ 82 - 29
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java

@@ -33,6 +33,8 @@ import org.springblade.los.basic.business.service.IBusinessTypeService;
 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.basic.ports.entity.BPorts;
+import org.springblade.los.basic.ports.service.IBPortsService;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.box.dto.ExportTradingBoxItemOut;
@@ -122,6 +124,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 	private final IAuditProecessService auditProecessService;
 
+	private final IBPortsService bPortsService;
+
 	@Override
 	public TradingBox getDetail(TradingBox tradingBox) {
 		if (tradingBox.getId() == null) {
@@ -187,7 +191,12 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		if ("OW-N,OW-F".contains(tradingBox.getType())) {
 			lambdaQueryWrapper.eq(TradingBox::getContainerNumber, tradingBox.getContainerNumber());
 		} else {
-			lambdaQueryWrapper.eq(TradingBox::getContractNo, tradingBox.getContractNo());
+			if ("ZR,DL".contains(tradingBox.getType())) {
+				lambdaQueryWrapper.eq(ObjectUtils.isNotNull(tradingBox.getContainerNumber()), TradingBox::getContainerNumber, tradingBox.getContainerNumber());
+				lambdaQueryWrapper.eq(TradingBox::getContractNo, tradingBox.getContractNo());
+			} else {
+				lambdaQueryWrapper.eq(TradingBox::getContractNo, tradingBox.getContractNo());
+			}
 		}
 		tradingBoxList = baseMapper.selectList(lambdaQueryWrapper);
 		if (ObjectUtils.isNotNull(tradingBox.getActualBoxNumber())) {
@@ -412,6 +421,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			}
 			tradingBox.setCode(String.join(",", codes));
 			tradingBox.setTradingBoxItemsList(tradingBox.getTradingBoxItemsList());
+		}else{
+			tradingBox.setCode("");
 		}
 		//费用数据
 		if (ObjectUtils.isNotNull(tradingBox.getFeeCenterList()) && !tradingBox.getFeeCenterList().isEmpty()) {
@@ -547,6 +558,12 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			if (boxTypeList.size() != boxType.size()) {
 				throw new RuntimeException("本单据明细存在重复箱型,操作失败!");
 			}
+			if ("ZR,DL".contains(tradingBox.getType())) {
+				if (1 != boxType.size()) {
+					throw new RuntimeException("箱型不支持多个");
+				}
+				tradingBox.setBoxTypeQuantityOne(boxTypeList.get(0).getBoxType());
+			}
 			StringBuilder boxTypeText = new StringBuilder();
 			for (TradingBoxType item : boxTypeList) {
 				boxTypeText.append(item.getBoxType()).append("*").append(item.getNumber()).append(",");
@@ -563,9 +580,13 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					item.setPid(tradingBox.getId());
 				}
 			}
-			if (!"XGDX,CCSQ".contains(tradingBox.getType())) {
+			if (!"XGDX,CCSQ,ZR,DL".contains(tradingBox.getType())) {
 				tradingBox.setBoxTypeQuantityOne(boxTypeText.toString());
 			}
+			tradingBox.setBoxNumber(boxTypeList.stream().mapToInt(TradingBoxType::getNumber).sum());
+			tradingBox.setRemainingBoxNumber(tradingBox.getBoxNumber());
+			tradingBox.setNotSuitcaseNum(tradingBox.getBoxNumber());
+			tradingBox.setSuitcaseNum(0);
 			tradingBoxTypeService.saveOrUpdateBatch(boxTypeList);
 			tradingBox.setBoxTypeList(boxTypeList);
 		}
@@ -671,6 +692,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				tradingBoxItem.setUpdateTime(new Date());
 				tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
 				tradingBoxItem.setStatus("待使用");
+				tradingBoxItem.setBuxStaus("已启租");
 				tradingBoxItem.setLeaseCommencementDate(tradingBox.getRentDate());
 				if (ObjectUtils.isNotNull(tradingBoxItem.getCode())) {
 					//更新箱档案信息
@@ -879,6 +901,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 						archivesTrajectory.setBoxDynamics(tradingBoxItem.getBoxDynamics());
 						archivesTrajectory.setNewDate(tradingBox.getRentDate());
 						tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
+						tradingBoxItem.setBuxStaus("已退租");
 						tradingBoxItem.setUpdateTime(new Date());
 						tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
 						if (ObjectUtils.isNotNull(tradingBoxItem.getCode())) {
@@ -1654,18 +1677,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				putBox.setEffectiveEndDate(tradingBox.getExpiryDate());
 				putBox.setEffectiveStartDate(tradingBox.getEffectiveDate());
 				putBox.setBoxType(tradingBox.getBoxTypeQuantityOne());
-				if (ObjectUtils.isNotNull(tradingBox.getInternalContainerNumber())) {
-					putBox.setInternalContainerNumber(tradingBox.getInternalContainerNumber());
-				} else {
-					BusinessBillNo businessBillNo1 = new BusinessBillNo();
-					businessBillNo1.setBusinessTypeId(businessType.getId());
-					businessBillNo1.setCode("FXH-N");
-					R clientBillNo1 = businessBillNoService.getBillNoLos(businessBillNo1);
-					if (!clientBillNo1.isSuccess()) {
-						throw new RuntimeException("生成订单编号失败");
-					}
-					putBox.setInternalContainerNumber((String) clientBillNo1.getData());
-				}
 				putBox.setPolStationId(detail.getPolStationId());
 				putBox.setPolStationCode(detail.getPolStationCode());
 				putBox.setPolStationCname(detail.getPolStationCname());
@@ -2008,18 +2019,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				putBox.setContainerNumber(detail.getContainerNumber());
 				putBox.setBusType("自有箱");
 				putBox.setBoxClass("自有箱");
-				if (ObjectUtils.isNotNull(tradingBox.getInternalContainerNumber())) {
-					putBox.setInternalContainerNumber(tradingBox.getInternalContainerNumber());
-				} else {
-					BusinessBillNo businessBillNo1 = new BusinessBillNo();
-					businessBillNo1.setBusinessTypeId(businessType.getId());
-					businessBillNo1.setCode("FXH-N");
-					R clientBillNo1 = businessBillNoService.getBillNoLos(businessBillNo1);
-					if (!clientBillNo1.isSuccess()) {
-						throw new RuntimeException("生成订单编号失败");
-					}
-					putBox.setInternalContainerNumber((String) clientBillNo1.getData());
-				}
 				putBox.setBoxBelongsTo("SOC");
 				putBox.setPolId(detail.getPolId());
 				putBox.setPolCname(detail.getPolCname());
@@ -3450,8 +3449,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				.eq(TradingBox::getTenantId, AuthUtil.getTenantId())
 				.eq(TradingBox::getIsDeleted, 0)
 				.eq(TradingBox::getWhetherEnable, "是")
-				.lt(TradingBox::getEffectiveDate, calendar.getTime())
-				.apply("find_in_set(type,'OW-N,OW-F') and suitcase_num = 0")
+				.le(TradingBox::getEffectiveDate, calendar.getTime())
+				.ge(TradingBox::getExpiryDate, new Date())
+				.apply("find_in_set(type,'OW-N,OW-F') and not_suitcase_num != 0")
 				.orderByDesc(TradingBox::getExpiryDate));
 			for (TradingBox item : tradingBoxList) {
 				BoxReminderExcel excel = new BoxReminderExcel();
@@ -3494,7 +3494,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				.eq(TradingBox::getWhetherEnable, "是")
 				.ge(TradingBox::getExpiryDate, calendar.getTime())
 				.le(TradingBox::getExpiryDate, calendar1.getTime())
-				.apply("find_in_set(type,'OW-N,OW-F') and suitcase_num != 0")
 				.orderByAsc(TradingBox::getExpiryDate));
 			for (TradingBox item : tradingBoxList) {
 				BoxReminderExcel excel = new BoxReminderExcel();
@@ -3696,4 +3695,58 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		return R.data(detail);
 	}
 
+	@Override
+	public R batchAddPod(String ids, String podIds) {
+		if (ObjectUtils.isNull(ids) || ObjectUtils.isNull(podIds)) {
+			throw new RuntimeException("缺少必要请求参数");
+		}
+		List<BPorts> bPortsList = bPortsService.list(new LambdaQueryWrapper<BPorts>()
+			.eq(BPorts::getTenantId, AuthUtil.getTenantId())
+			.eq(BPorts::getIsDeleted, 0)
+			.apply("find_in_set(id,'" + podIds + "')"));
+		List<TradingBox> tradingBoxList = baseMapper.selectList(new LambdaQueryWrapper<TradingBox>()
+			.eq(TradingBox::getTenantId, AuthUtil.getTenantId())
+			.eq(TradingBox::getIsDeleted, 0)
+			.apply("find_in_set(id,'" + ids + "')"));
+		if (tradingBoxList.isEmpty()) {
+			throw new RuntimeException("未查到对应单据");
+		}
+		String[] podIdArr = podIds.split(",");
+		for (String item : podIdArr) {
+			BPorts ports = bPortsList.stream().filter(e -> e.getId().equals(Long.parseLong(item))).findFirst().orElse(null);
+			if (ports != null) {
+				for (TradingBox detail : tradingBoxList) {
+					if (!detail.getPodId().contains(item)) {
+						detail.setPodId(detail.getPodId() + "," + item);
+						detail.setPodCname(detail.getPodCname() + "," + ports.getCode());
+						detail.setPodEname(detail.getPodEname() + "," + ports.getCode());
+						detail.setPodCode(detail.getPodCode() + "," + ports.getCode());
+					}
+				}
+			}
+		}
+		this.updateBatchById(tradingBoxList);
+		List<PutBox> putBoxList = putBoxService.list(new LambdaQueryWrapper<PutBox>()
+			.eq(PutBox::getTenantId, AuthUtil.getTenantId())
+			.eq(PutBox::getIsDeleted, 0)
+			.apply("find_in_set(src_id,'" + ids + "')"));
+		if (!putBoxList.isEmpty()) {
+			for (String item : podIdArr) {
+				BPorts ports = bPortsList.stream().filter(e -> e.getId().equals(Long.parseLong(item))).findFirst().orElse(null);
+				if (ports != null) {
+					for (PutBox putBox : putBoxList) {
+						if (!putBox.getPodId().contains(item)) {
+							putBox.setPodId(putBox.getPodId() + "," + item);
+							putBox.setPodCname(putBox.getPodCname() + "," + ports.getCode());
+							putBox.setPodEname(putBox.getPodEname() + "," + ports.getCode());
+							putBox.setPodCode(putBox.getPodCode() + "," + ports.getCode());
+						}
+					}
+				}
+			}
+			putBoxService.updateBatchById(putBoxList);
+		}
+		return R.success("操作成功");
+	}
+
 }

+ 42 - 6
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java

@@ -40,7 +40,8 @@ import org.springblade.los.business.sea.service.IBillsService;
 import org.springblade.los.business.sea.service.ISeaBillsDetailService;
 import org.springblade.los.excel.BillsExcel;
 import org.springblade.los.excel.DeliveryPaperExcel;
-import org.springblade.los.statisticAnalysis.FeeSummaryDetailRD;
+import org.springblade.los.finance.fee.entity.FeeCenter;
+import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
 import org.springframework.web.bind.annotation.*;
@@ -70,6 +71,8 @@ public class BillsController extends BladeController {
 
 	private final ISeaBillsDetailService seaBillsDetailService;
 
+	private final IFeeCenterService feeCenterService;
+
 	/**
 	 * 详情
 	 */
@@ -268,6 +271,9 @@ public class BillsController extends BladeController {
 		IPage<Bills> pages = billsService.page(Condition.getPage(query), lambdaQueryWrapper);
 		if (!pages.getRecords().isEmpty()) {
 			List<Long> ids = pages.getRecords().stream().map(Bills::getId).collect(Collectors.toList());
+			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.in(FeeCenter::getPid, ids));
 			List<SeaBillsDetail> seaBillsDetailList = seaBillsDetailService.list(new LambdaQueryWrapper<SeaBillsDetail>()
 				.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
 				.in(SeaBillsDetail::getPid, ids));
@@ -283,6 +289,36 @@ public class BillsController extends BladeController {
 						item.setMshipperCntyName(seaBillsDetail.getMshipperCntyName());
 					}
 				}
+				if (!feeCenterList.isEmpty()) {
+					List<FeeCenter> feeCenterDrList = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId())
+						&& "D".equals(e.getDc())).collect(Collectors.toList());
+					if (!feeCenterDrList.isEmpty()) {
+						long statusDrPass = feeCenterDrList.stream().filter(e -> "4".equals(e.getAuditStatus())).count();
+						if (statusDrPass == feeCenterDrList.size()) {
+							item.setStatusDr("审核通过");
+						} else if (statusDrPass != feeCenterDrList.size() && statusDrPass > 0) {
+							item.setStatusDr("部分审核");
+						} else {
+							item.setStatusDr("未审核");
+						}
+					} else {
+						item.setStatusDr("未审核");
+					}
+					List<FeeCenter> feeCenterCrList = feeCenterList.stream().filter(e -> e.getPid().equals(item.getId())
+						&& "C".equals(e.getDc())).collect(Collectors.toList());
+					if (!feeCenterCrList.isEmpty()) {
+						long statusCrPass = feeCenterCrList.stream().filter(e -> "4".equals(e.getAuditStatus())).count();
+						if (statusCrPass == feeCenterCrList.size()) {
+							item.setStatusCr("审核通过");
+						} else if (statusCrPass != feeCenterCrList.size() && statusCrPass > 0) {
+							item.setStatusCr("部分审核");
+						} else {
+							item.setStatusCr("未审核");
+						}
+					} else {
+						item.setStatusCr("未审核");
+					}
+				}
 			}
 		}
 		return R.data(pages);
@@ -807,19 +843,19 @@ public class BillsController extends BladeController {
 					}
 				}
 				BillsExcel billsExcel = new BillsExcel();
-				if (ObjectUtils.isNotNull(item.getEtd())){
+				if (ObjectUtils.isNotNull(item.getEtd())) {
 					billsExcel.setEtd(formatter.format(item.getEtd()));
 				}
-				if (ObjectUtils.isNotNull(item.getActualEtd())){
+				if (ObjectUtils.isNotNull(item.getActualEtd())) {
 					billsExcel.setActualEtd(formatter.format(item.getActualEtd()));
 				}
-				if (ObjectUtils.isNotNull(item.getActualEta())){
+				if (ObjectUtils.isNotNull(item.getActualEta())) {
 					billsExcel.setActualEta(formatter.format(item.getActualEta()));
 				}
-				if (ObjectUtils.isNotNull(item.getCreateTime())){
+				if (ObjectUtils.isNotNull(item.getCreateTime())) {
 					billsExcel.setCreateTime(formatter.format(item.getCreateTime()));
 				}
-				if (ObjectUtils.isNotNull(item.getUpdateTime())){
+				if (ObjectUtils.isNotNull(item.getUpdateTime())) {
 					billsExcel.setUpdateTime(formatter.format(item.getUpdateTime()));
 				}
 				BeanUtil.copyProperties(item, billsExcel);

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

@@ -1407,8 +1407,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setIssueDate(bills.getIssueDate());
 				item.setBranchId(bills.getBranchId());
 				item.setBranchName(bills.getBranchName());
-				item.setHpaymode(bills.getHpaymode());
-				item.setMpaymode(bills.getMpaymode());
+//				item.setHpaymode(bills.getHpaymode());
+//				item.setMpaymode(bills.getMpaymode());
 				item.setCyRemarks(bills.getCyRemarks());
 				item.setPolId(bills.getPolId());
 				item.setPolCode(bills.getPolCode());
@@ -4159,6 +4159,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		List<PreContainers> copyPreContainersList = new ArrayList<>();
 		List<SeaBillsDetail> copySeaBillsDetailList = new ArrayList<>();
 		List<Containers> containersArrayList = new ArrayList<>();
+		boolean quantityCntrDescr = false;
 		for (Bills item : copyBillsList) {
 			if (!seaBillsDetailList.isEmpty()) {
 				SeaBillsDetail seaBillsDetail = seaBillsDetailList.stream().filter(e -> e.getPid().equals(item.getTemporaryId()))
@@ -4265,6 +4266,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					preContainers1.setContainerNumberStatus("录入");
 					copyPreContainersList.add(preContainers1);
 				}
+			}else{
+				item.setQuantityCntrDescr("");
+				quantityCntrDescr = true;
 			}
 			if (ObjectUtils.isNotNull(containers) && "1".equals(containers) && !containersList.isEmpty()) {
 				List<Containers> containers1 = containersList.stream().filter(e -> e.getPid().equals(item.getTemporaryId()))
@@ -4281,6 +4285,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				}
 			}
 		}
+		if (quantityCntrDescr){
+			this.updateBatchById(copyBillsList);
+		}
 		if (!copyFeeCenterList.isEmpty()) {
 			feeCenterService.saveBatch(copyFeeCenterList);
 		}
@@ -5272,6 +5279,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		billsFd.setQuantity(billsBooking.getQuantity());
 		billsFd.setGrossWeight(billsBooking.getGrossWeight());
 		billsFd.setMeasurement(billsBooking.getMeasurement());
+		billsFd.setCfsQuantity(billsBooking.getQuantity());
+		billsFd.setCfsGrossWeight(billsBooking.getGrossWeight());
+		billsFd.setCfsMeasurement(billsBooking.getMeasurement());
 		billsFd.setSiRemarks(billsBooking.getSiRemarks());
 		billsFd.setCorpAttnName(billsBooking.getCorpAttnName());
 		billsFd.setCorpAttnTel(billsBooking.getCorpAttnTel());
@@ -5566,8 +5576,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					item.setIssueDate(bills.getIssueDate());
 					item.setBranchId(bills.getBranchId());
 					item.setBranchName(bills.getBranchName());
-					item.setHpaymode(bills.getHpaymode());
-					item.setMpaymode(bills.getMpaymode());
+//					item.setHpaymode(bills.getHpaymode());
+//					item.setMpaymode(bills.getMpaymode());
 					item.setCyRemarks(bills.getCyRemarks());
 					item.setPolId(bills.getPolId());
 					item.setPolCode(bills.getPolCode());
@@ -6465,11 +6475,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					BigDecimal price = feeCenterList.stream().filter(e -> containers.getCntrTypeCode().equals(e.getUnitNo()))
 						.map(FeeCenter::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 					List<RouteCostItem> minCostItem = costItemList.stream().filter(e -> containers.getCntrTypeCode().equals(e.getBoxType()))
-						.sorted(Comparator.comparing(RouteCostItem::getOceanFreight))
+						.sorted(Comparator.comparing(RouteCostItem::getSalesPrice))
 						.collect(Collectors.toList());
-					if (price.compareTo(minCostItem.get(0).getOceanFreight()) < 0) {
-						text.append("提单号:").append(bills.getMblno()).append("箱型:").append(containers.getCntrTypeCode()).append("应收海运费:" + price + "小于成本中心海运费:" + minCostItem.get(0).getOceanFreight() + "!");
-						messageBody.append("提单号:").append(bills.getMblno()).append("应收海运费:" + price + "小于成本中心海运费:" + minCostItem.get(0).getOceanFreight() + "!");
+					if (price.compareTo(minCostItem.get(0).getSalesPrice()) < 0) {
+						text.append("提单号:").append(bills.getMblno()).append("箱型:").append(containers.getCntrTypeCode()).append("应收海运费:" + price + "小于成本中心海运费:" + minCostItem.get(0).getSalesPrice() + "!");
+						messageBody.append("提单号:").append(bills.getMblno()).append("应收海运费:" + price + "小于成本中心海运费:" + minCostItem.get(0).getSalesPrice() + "!");
 					}
 					if (containerNumberItemList.stream().filter(e -> e.getBoxType().equals(containers.getCntrTypeCode()))
 						.mapToInt(SeaContainerNumberItem::getOccupyNum).sum() != containers.getQuantity()) {
@@ -6650,6 +6660,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			seaBillsDetail.setSubmitterId(AuthUtil.getUserId());
 			seaBillsDetail.setSubmitterName(AuthUtil.getUserName());
 			seaBillsDetail.setSubmitterDate(new Date());
+			bills.getDetail().setSubmitterId(AuthUtil.getUserId());
+			bills.getDetail().setSubmitterName(AuthUtil.getUserName());
+			bills.getDetail().setSubmitterDate(new Date());
 			seaBillsDetailService.updateById(bills.getDetail());
 			seaBillsDetailService.updateById(seaBillsDetail);
 		}

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

@@ -165,7 +165,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				.select(FinInvoices::getId, FinInvoices::getVersion)
 				.eq(FinInvoices::getId, finInvoices.getId()));
 			if (!Objects.equals(dataSourceBill.getVersion(), finInvoices.getVersion())) {
-				return R.fail(601, "数据已被其他用户更新,请等待刷新后重试");
+				throw new RuntimeException( "数据已被其他用户更新,请等待刷新后重试");
 			}
 			// 每更新一次往上累加一次版本
 			// 旧数据处理
@@ -1776,12 +1776,16 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 		}
 		FinInvoices detail = baseMapper.selectById(finInvoices.getId());
 		if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
-			detail.setBusinessNo(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getBillNo).distinct().collect(Collectors.joining(",")));
 			detail.setMblno(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getMblno).distinct().collect(Collectors.joining(",")));
 			detail.setHblno(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getHblno).distinct().collect(Collectors.joining(",")));
-			detail.setFeeCnName(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getFeeCnName).distinct().collect(Collectors.joining(",")));
-			detail.setFeeEnName(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getFeeEnName).distinct().collect(Collectors.joining(",")));
-			detail.setFeeCode(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getFeeCode).distinct().collect(Collectors.joining(",")));
+			int limit = finInvoices.getFinInvoicesItemsList().size();
+			if (finInvoices.getFinInvoicesItemsList().size()>500){
+				limit = 500;
+			}
+			detail.setBusinessNo(finInvoices.getFinInvoicesItemsList().stream().limit(limit).map(FinInvoicesItems::getBillNo).distinct().collect(Collectors.joining(",")));
+			detail.setFeeCnName(finInvoices.getFinInvoicesItemsList().stream().limit(limit).map(FinInvoicesItems::getFeeCnName).distinct().collect(Collectors.joining(",")));
+			detail.setFeeEnName(finInvoices.getFinInvoicesItemsList().stream().limit(limit).map(FinInvoicesItems::getFeeEnName).distinct().collect(Collectors.joining(",")));
+			detail.setFeeCode(finInvoices.getFinInvoicesItemsList().stream().limit(limit).map(FinInvoicesItems::getFeeCode).distinct().collect(Collectors.joining(",")));
 		} else {
 			throw new RuntimeException("请选择明细");
 		}
@@ -1848,12 +1852,16 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 		}
 		FinInvoices detail = baseMapper.selectById(finInvoices.getId());
 		if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
-			detail.setBusinessNo(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getBillNo).distinct().collect(Collectors.joining(",")));
 			detail.setMblno(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getMblno).distinct().collect(Collectors.joining(",")));
 			detail.setHblno(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getHblno).distinct().collect(Collectors.joining(",")));
-			detail.setFeeCnName(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getFeeCnName).distinct().collect(Collectors.joining(",")));
-			detail.setFeeEnName(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getFeeEnName).distinct().collect(Collectors.joining(",")));
-			detail.setFeeCode(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getFeeCode).distinct().collect(Collectors.joining(",")));
+			int limit = finInvoices.getFinInvoicesItemsList().size();
+			if (finInvoices.getFinInvoicesItemsList().size()>500){
+				limit = 500;
+			}
+			detail.setBusinessNo(finInvoices.getFinInvoicesItemsList().stream().limit(limit).map(FinInvoicesItems::getBillNo).distinct().collect(Collectors.joining(",")));
+			detail.setFeeCnName(finInvoices.getFinInvoicesItemsList().stream().limit(limit).map(FinInvoicesItems::getFeeCnName).distinct().collect(Collectors.joining(",")));
+			detail.setFeeEnName(finInvoices.getFinInvoicesItemsList().stream().limit(limit).map(FinInvoicesItems::getFeeEnName).distinct().collect(Collectors.joining(",")));
+			detail.setFeeCode(finInvoices.getFinInvoicesItemsList().stream().limit(limit).map(FinInvoicesItems::getFeeCode).distinct().collect(Collectors.joining(",")));
 			//明细状态修改  已开发票
 			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 				.in(FeeCenter::getAccBillId, finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getAccBillId).collect(Collectors.toList()))
@@ -2838,6 +2846,16 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				finInvoices.setCreateDeptName(deptName);
 			}
 		} else {
+			FinInvoices dataSourceBill = baseMapper.selectOne(new LambdaQueryWrapper<FinInvoices>()
+				.select(FinInvoices::getId, FinInvoices::getVersion)
+				.eq(FinInvoices::getId, finInvoices.getId()));
+			if (!Objects.equals(dataSourceBill.getVersion(), finInvoices.getVersion())) {
+				throw new RuntimeException( "数据已被其他用户更新,请等待刷新后重试");
+			}
+			// 每更新一次往上累加一次版本
+			// 旧数据处理
+			int version = StringUtil.isBlank(dataSourceBill.getVersion()) ? 1 : Integer.parseInt(dataSourceBill.getVersion());
+			finInvoices.setVersion(String.valueOf(version + 1));
 			finInvoices.setUpdateUser(AuthUtil.getUserId());
 			finInvoices.setUpdateTime(new Date());
 			finInvoices.setUpdateUserName(AuthUtil.getUserName());

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

@@ -243,7 +243,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				.select(FinStlBills::getId, FinStlBills::getVersion)
 				.eq(FinStlBills::getId, finStlBills.getId()));
 			if (!Objects.equals(dataSourceBill.getVersion(), finStlBills.getVersion())) {
-				return R.fail(601, "数据已被其他用户更新,请等待刷新后重试");
+				throw new RuntimeException( "数据已被其他用户更新,请等待刷新后重试");
 			}
 			// 每更新一次往上累加一次版本
 			// 旧数据处理
@@ -3248,11 +3248,15 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		}
 		FinStlBills detail = baseMapper.selectById(finStlBills.getId());
 		if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
-			detail.setBusinessNo(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getBillNo).distinct().collect(Collectors.joining(",")));
-			detail.setAccountNo(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getAccBillNo).distinct().collect(Collectors.joining(",")));
 			detail.setMblno(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getMblno).distinct().collect(Collectors.joining(",")));
 			detail.setHblno(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getHblno).distinct().collect(Collectors.joining(",")));
-			detail.setInvoiceNo(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getInvoiceNo).distinct().collect(Collectors.joining(",")));
+			int limit = finStlBills.getFinStlBillsItemsList().size();
+			if (finStlBills.getFinStlBillsItemsList().size()>500){
+				limit = 500;
+			}
+			detail.setBusinessNo(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getBillNo).distinct().collect(Collectors.joining(",")));
+			detail.setAccountNo(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getAccBillNo).distinct().collect(Collectors.joining(",")));
+			detail.setInvoiceNo(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getInvoiceNo).distinct().collect(Collectors.joining(",")));
 			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 				.in(FeeCenter::getAccBillId, finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getAccBillId)
 					.distinct().collect(Collectors.toList()))
@@ -3401,14 +3405,18 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		detail.setStatus(1);
 		detail.setAuditDateFrom(new Date());
 		if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
-			detail.setBusinessNo(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getBillNo).distinct().collect(Collectors.joining(",")));
-			detail.setAccountNo(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getAccBillNo).distinct().collect(Collectors.joining(",")));
 			detail.setMblno(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getMblno).distinct().collect(Collectors.joining(",")));
 			detail.setHblno(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getHblno).distinct().collect(Collectors.joining(",")));
-			detail.setInvoiceNo(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getInvoiceNo).distinct().collect(Collectors.joining(",")));
-			detail.setFeeCnName(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getFeeCnName).distinct().collect(Collectors.joining(",")));
-			detail.setFeeEnName(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getFeeEnName).distinct().collect(Collectors.joining(",")));
-			detail.setFeeCode(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getFeeCode).distinct().collect(Collectors.joining(",")));
+			int limit = finStlBills.getFinStlBillsItemsList().size();
+			if (finStlBills.getFinStlBillsItemsList().size()>500){
+				limit = 500;
+			}
+			detail.setBusinessNo(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getBillNo).distinct().collect(Collectors.joining(",")));
+			detail.setAccountNo(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getAccBillNo).distinct().collect(Collectors.joining(",")));
+			detail.setInvoiceNo(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getInvoiceNo).distinct().collect(Collectors.joining(",")));
+			detail.setFeeCnName(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getFeeCnName).distinct().collect(Collectors.joining(",")));
+			detail.setFeeEnName(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getFeeEnName).distinct().collect(Collectors.joining(",")));
+			detail.setFeeCode(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getFeeCode).distinct().collect(Collectors.joining(",")));
 			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 				.in(FeeCenter::getAccBillId, finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getAccBillId)
 					.distinct().collect(Collectors.toList()))
@@ -3946,14 +3954,18 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		}
 		FinStlBills detail = baseMapper.selectById(finStlBills.getId());
 		if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
-			detail.setBusinessNo(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getBillNo).distinct().collect(Collectors.joining(",")));
-			detail.setAccountNo(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getAccBillNo).distinct().collect(Collectors.joining(",")));
 			detail.setMblno(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getMblno).distinct().collect(Collectors.joining(",")));
 			detail.setHblno(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getHblno).distinct().collect(Collectors.joining(",")));
-			detail.setInvoiceNo(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getInvoiceNo).distinct().collect(Collectors.joining(",")));
-			detail.setFeeCnName(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getFeeCnName).distinct().collect(Collectors.joining(",")));
-			detail.setFeeEnName(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getFeeEnName).distinct().collect(Collectors.joining(",")));
-			detail.setFeeCode(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getFeeCode).distinct().collect(Collectors.joining(",")));
+			int limit = finStlBills.getFinStlBillsItemsList().size();
+			if (finStlBills.getFinStlBillsItemsList().size()>500){
+				limit = 500;
+			}
+			detail.setBusinessNo(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getBillNo).distinct().collect(Collectors.joining(",")));
+			detail.setAccountNo(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getAccBillNo).distinct().collect(Collectors.joining(",")));
+			detail.setInvoiceNo(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getInvoiceNo).distinct().collect(Collectors.joining(",")));
+			detail.setFeeCnName(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getFeeCnName).distinct().collect(Collectors.joining(",")));
+			detail.setFeeEnName(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getFeeEnName).distinct().collect(Collectors.joining(",")));
+			detail.setFeeCode(finStlBills.getFinStlBillsItemsList().stream().limit(limit).map(FinStlBillsItems::getFeeCode).distinct().collect(Collectors.joining(",")));
 			for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
 				item.setIsCleared(1);
 				item.setBillDate(finStlBills.getBillDate());
@@ -4187,6 +4199,16 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			if (!finStlBillsList.isEmpty()) {
 				throw new RuntimeException("订单编号重复,请重新创建单据");
 			}
+			FinStlBills dataSourceBill = baseMapper.selectOne(new LambdaQueryWrapper<FinStlBills>()
+				.select(FinStlBills::getId, FinStlBills::getVersion)
+				.eq(FinStlBills::getId, finStlBills.getId()));
+			if (!Objects.equals(dataSourceBill.getVersion(), finStlBills.getVersion())) {
+				throw new RuntimeException( "数据已被其他用户更新,请等待刷新后重试");
+			}
+			// 每更新一次往上累加一次版本
+			// 旧数据处理
+			int version = StringUtil.isBlank(dataSourceBill.getVersion()) ? 1 : Integer.parseInt(dataSourceBill.getVersion());
+			finStlBills.setVersion(String.valueOf(version + 1));
 			finStlBills.setUpdateUser(AuthUtil.getUserId());
 			finStlBills.setUpdateTime(new Date());
 			finStlBills.setUpdateUserName(AuthUtil.getUserName());

+ 8 - 8
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

@@ -311,12 +311,12 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 		//未收其他
 		item.setNotReceivedDrOther(amountDrOther.subtract(realAmountDrOther));
 		//合计应收
-		BigDecimal amountDrLoc = feeCenters.stream().filter(e ->  "D".equals(e.getDc()))
-			.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal amountDrLoc = feeCenters.stream().filter(e ->  "D".equals(e.getDc())).
+			reduce(BigDecimal.ZERO, (x, y) -> x.add((y.getAmount().multiply(y.getExrate()))), BigDecimal::add);
 		item.setAmountDrLoc(amountDrLoc.setScale(2, RoundingMode.HALF_UP));
 		//实际合计应收
-		BigDecimal realAmountDrLoc = feeCenters.stream().filter(e ->  "D".equals(e.getDc()))
-			.map(FeeCenter::getStlTtlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal realAmountDrLoc = feeCenters.stream().filter(e ->  "D".equals(e.getDc())).
+			reduce(BigDecimal.ZERO, (x, y) -> x.add((y.getStlTtlAmount().multiply(y.getExrate()))), BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
 		item.setRealAmountDrLoc(realAmountDrLoc.setScale(2, RoundingMode.HALF_UP));
 		//未收合计
 		item.setNotReceivedLoc(amountDrLoc.subtract(realAmountDrLoc));
@@ -381,12 +381,12 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 		//未付其他
 		item.setNotReceivedCrOther(amountCrOther.subtract(realAmountCrOther));
 		//合计应付
-		BigDecimal amountCrLoc = feeCenters.stream().filter(e ->  "C".equals(e.getDc()))
-			.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal amountCrLoc = feeCenters.stream().filter(e ->  "C".equals(e.getDc())).
+			reduce(BigDecimal.ZERO, (x, y) -> x.add((y.getAmount().multiply(y.getExrate()))), BigDecimal::add);
 		item.setAmountCrLoc(amountCrLoc.setScale(2, RoundingMode.HALF_UP));
 		//实际合计应付
-		BigDecimal realAmountCrLoc = feeCenters.stream().filter(e ->  "C".equals(e.getDc()))
-			.map(FeeCenter::getStlTtlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal realAmountCrLoc = feeCenters.stream().filter(e ->  "C".equals(e.getDc())).
+			reduce(BigDecimal.ZERO, (x, y) -> x.add((y.getStlTtlAmount().multiply(y.getExrate()))), BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
 		item.setRealAmountCrLoc(realAmountCrLoc.setScale(2, RoundingMode.HALF_UP));
 		//未付合计
 		item.setNotReceivedCrLoc(amountCrLoc.subtract(realAmountCrLoc));