Kaynağa Gözat

1.汇率同步功能
2.提单修改相关问题
3.退关箱,退租箱,调拨箱进出场同步逻辑修改
4.选择放箱号允许修改或替换接口逻辑修改
5.禅道相关bug

纪新园 3 ay önce
ebeveyn
işleme
271eeeacdb
35 değiştirilmiş dosya ile 1835 ekleme ve 1882 silme
  1. 32 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/utils/DeadlinePrintReport.java
  2. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dynamics/entity/BoxDynamicsRecord.java
  3. 11 6
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/Archives.java
  4. 0 6
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/EmptyContainerAppearance.java
  5. 11 5
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/vo/DeadlineVO.java
  6. 6 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
  7. 8 8
      blade-service/blade-los/src/main/java/org/springblade/los/Util/CurrencyUtils.java
  8. 413 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/ExchangeRateUtils.java
  9. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java
  10. 21 11
      blade-service/blade-los/src/main/java/org/springblade/los/basic/cur/controller/BCurrencyController.java
  11. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsBoxServiceImpl.java
  12. 268 93
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  13. 5 5
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesController.java
  14. 3 14
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesTrajectoryController.java
  15. 13 7
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/BoxReminderController.java
  16. 22 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxItemController.java
  17. 1 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/controller/BoxDynamicsRecordController.java
  18. 274 370
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java
  19. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/PutBoxMapper.java
  20. 11 6
      blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/PutBoxMapper.xml
  21. 1 160
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ExpenseApplicationServiceImpl.java
  22. 188 740
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java
  23. 5 13
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java
  24. 0 3
      blade-service/blade-los/src/main/java/org/springblade/los/business/amends/service/impl/AmendsServiceImpl.java
  25. 4 5
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/DeadlineController.java
  26. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/ContainersMapper.xml
  27. 10 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  28. 0 3
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/ContainersServiceImpl.java
  29. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/DeadlineServiceImpl.java
  30. 57 19
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/SeaContainerNumberItemServiceImpl.java
  31. 248 395
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java
  32. 27 3
      blade-service/blade-los/src/main/java/org/springblade/los/enums/BoxDynamicsEnums.java
  33. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFinAccBillsService.java
  34. 174 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FinAccBillsServiceImpl.java
  35. 4 2
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java

+ 32 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/utils/DeadlinePrintReport.java

@@ -0,0 +1,32 @@
+package org.springblade.los.basic.utils;
+
+import lombok.Data;
+
+/**
+ * @author :jixinyuan
+ * @date : 2026年3月13日08:40:15
+ */
+@Data
+public class DeadlinePrintReport {
+
+	/**
+	 * 修改前
+	 */
+	private Object updateFront;
+
+	/**
+	 * 修改后
+	 */
+	private Object updateAfter;
+
+	/**
+	 * 描述
+	 */
+	private String description;
+
+	/**
+	 * 类型
+	 */
+	private String type;
+
+}

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

@@ -210,5 +210,11 @@ public class BoxDynamicsRecord implements Serializable {
 	@ApiModelProperty(value = "同步状态")
 	private String synchronizationStatus;
 
+	/**
+	 * 提单号
+	 */
+	@ApiModelProperty(value = "提单号")
+	private String billNo;
+
 
 }

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

@@ -354,6 +354,17 @@ public class Archives implements Serializable {
 	@ApiModelProperty(value = "是否调拨")
 	private String whetherTransfer;
 
+	/**
+	 * 提单号
+	 */
+	@ApiModelProperty(value = "提单号")
+	private String billNo;
+
+	/**
+	 * 是否还箱 0否1是
+	 */
+	@TableField(exist = false)
+	private String whetherStillBox;
 
 	/**
 	 * 文件
@@ -380,12 +391,6 @@ public class Archives implements Serializable {
 	private List<String> updateTimeList;
 
 	/**
-	 * 提单号
-	 */
-	@TableField(exist = false)
-	private String billNO;
-
-	/**
 	 * 精确查询箱号
 	 */
 	@TableField(exist = false)

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

@@ -56,12 +56,6 @@ public class EmptyContainerAppearance {
 	private String mblno;
 
 	/**
-	 * 箱动态
-	 */
-	@ExcelProperty(value = "箱动态")
-	private String boxStatus;
-
-	/**
 	 * 动态日期
 	 */
 	@ExcelProperty(value = "动态日期*")

+ 11 - 5
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/vo/DeadlineVO.java

@@ -20,8 +20,10 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.los.basic.utils.DeadlinePrintReport;
 import org.springblade.los.business.sea.entity.Deadline;
 import org.springblade.los.business.sea.entity.DeadlineContainers;
+import org.springblade.system.entity.Dept;
 
 import java.util.List;
 
@@ -39,24 +41,28 @@ public class DeadlineVO extends Deadline {
 
 	private List<DeadlineContainers> deadlineContainersList;
 
+	private List<DeadlinePrintReport> reportListDetails;
+
+	private List<DeadlinePrintReport> reportListUniversal;
+
 	//跳转对应页面的路由
-	@TableField(exist = false)
 	private String url;
 	//页面枚举
-	@TableField(exist = false)
 	private String pageStatus;
 	//页面名字
-	@TableField(exist = false)
 	private String pageLabel;
 	/**
 	 * 编码生成code
 	 */
-	@TableField(exist = false)
 	private String billNoFormat;
 	/**
 	 * 业务类型表 code
 	 */
-	@TableField(exist = false)
 	private String businessTypeCode;
 
+	/**
+	 * 报表打印头
+	 */
+	private Dept dept;
+
 }

+ 6 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java

@@ -250,5 +250,11 @@ public class Dept implements Serializable {
 	@ApiModelProperty(value = "是否总部")
 	private String isHq;
 
+	/**
+	 * 改单费
+	 */
+	@ApiModelProperty(value = "改单费")
+	private BigDecimal amendmentFee;
+
 
 }

+ 8 - 8
blade-service/blade-los/src/main/java/org/springblade/los/Util/CurrencyUtils.java

@@ -118,14 +118,14 @@ public class CurrencyUtils {
 							.eq(BCurExrate::getType, "日汇率");
 					}
 				} else {*/
-					if ("月汇率".equals(bCurrency.getParitiesType())) {
-						lambdaQueryWrapper.eq(BCurExrate::getExrateMonth, month)
-							.eq(BCurExrate::getType, bCurrency.getParitiesType());
-					} else if ("日汇率".equals(bCurrency.getParitiesType())) {
-						lambdaQueryWrapper.eq(BCurExrate::getExrateMonth, month);
-						lambdaQueryWrapper.eq(BCurExrate::getExrateDay, day)
-							.eq(BCurExrate::getType, bCurrency.getParitiesType());
-					}
+				if ("月汇率".equals(bCurrency.getParitiesType())) {
+					lambdaQueryWrapper.eq(BCurExrate::getExrateMonth, month)
+						.eq(BCurExrate::getType, bCurrency.getParitiesType());
+				} else if ("日汇率".equals(bCurrency.getParitiesType())) {
+					lambdaQueryWrapper.eq(BCurExrate::getExrateMonth, month);
+					lambdaQueryWrapper.eq(BCurExrate::getExrateDay, day)
+						.eq(BCurExrate::getType, bCurrency.getParitiesType());
+				}
 //				}
 				//获取具体日期汇率
 				BCurExrate bCurExrate = bCurExrateService.getOne(lambdaQueryWrapper);

+ 413 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/ExchangeRateUtils.java

@@ -0,0 +1,413 @@
+package org.springblade.los.Util;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.los.basic.cur.entity.BCurExrate;
+import org.springblade.los.basic.cur.entity.BCurrency;
+import org.springblade.los.basic.cur.service.IBCurExrateService;
+import org.springblade.los.box.entity.TradingBox;
+import org.springblade.los.box.mapper.TradingBoxMapper;
+import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.los.business.sea.mapper.BillsMapper;
+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.finance.invoices.entity.FinInvoices;
+import org.springblade.los.finance.invoices.entity.FinInvoicesItems;
+import org.springblade.los.finance.invoices.mapper.FinInvoicesMapper;
+import org.springblade.los.finance.invoices.service.IFinInvoicesItemsService;
+import org.springblade.los.finance.stl.entity.FinStlBills;
+import org.springblade.los.finance.stl.entity.FinStlBillsItems;
+import org.springblade.los.finance.stl.mapper.FinStlBillsMapper;
+import org.springblade.los.finance.stl.service.IFinStlBillsItemsService;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/12/29
+ */
+@Component
+@AllArgsConstructor
+public class ExchangeRateUtils {
+
+	private final IFeeCenterService feeCenterService;
+
+	private final IFinAccBillsService finAccBillsService;
+
+	private final IBCurExrateService bCurExrateService;
+
+	private final BillsMapper billsMapper;
+
+	private final TradingBoxMapper tradingBoxMapper;
+
+	private final ICostProfitCalculationService costProfitCalculationService;
+
+	private final CurrencyUtils currencyUtils;
+
+	private final FinStlBillsMapper finStlBillsMapper;
+
+	private final IFinStlBillsItemsService finStlBillsItemsService;
+
+	private final FinInvoicesMapper finInvoicesMapper;
+
+	private final IFinInvoicesItemsService finInvoicesItemsService;
+
+	public R synchronizationExchangeRate(BCurrency currency, Long id) {
+		if (1 == currency.getIsLocal()) {
+			return R.success("操作成功");
+		}
+		BCurExrate curExrate = bCurExrateService.getById(id);
+		if (curExrate == null) {
+			throw new RuntimeException("未查到汇率信息");
+		}
+		String date;
+		String formatType;
+		if ("月汇率".equals(curExrate.getType())) {
+			if (curExrate.getExrateMonth()<10){
+				date = curExrate.getExrateYear() + "-0" + curExrate.getExrateMonth();
+			}else{
+				date = curExrate.getExrateYear() + "-" + curExrate.getExrateMonth();
+			}
+			formatType = "%Y-%m";
+		} else if ("日汇率".equals(curExrate.getType())) {
+			if (curExrate.getExrateMonth()<10){
+				if (curExrate.getExrateDay()<10){
+					date = curExrate.getExrateYear() + "-0" + curExrate.getExrateMonth() + "-0" + curExrate.getExrateDay();
+				}else{
+					date = curExrate.getExrateYear() + "-0" + curExrate.getExrateMonth() + "-" + curExrate.getExrateDay();
+				}
+			}else{
+				if (curExrate.getExrateDay()<10){
+					date = curExrate.getExrateYear() + "-" + curExrate.getExrateMonth() + "-0" + curExrate.getExrateDay();
+				}else{
+					date = curExrate.getExrateYear() + "-" + curExrate.getExrateMonth() + "-" + curExrate.getExrateDay();
+				}
+			}
+			formatType = "%Y-%m-%d";
+		} else if ("年汇率".equals(curExrate.getType())) {
+			date = curExrate.getExrateYear() + "";
+			formatType = "%Y";
+		} else {
+			throw new RuntimeException("汇率类型错误");
+		}
+		String exrateType = currencyUtils.standardCurrency(curExrate.getBranchId());
+		//按照币别+所属公司+日期获取费用明细数据
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getCurCode, curExrate.getCode())
+			.eq(FeeCenter::getBranchId, curExrate.getBranchId())
+			.apply("DATE_FORMAT(bill_date,'" + formatType + "') = '" + date + "'"));
+		if (!feeCenterList.isEmpty()) {
+			//修改汇率以及重新计算合计金额
+			for (FeeCenter item : feeCenterList) {
+				if ("D".equals(item.getDc())) {
+					item.setExrate(curExrate.getExrateReceivable());
+				} else {
+					item.setExrate(curExrate.getExratePayable());
+				}
+				item.setAmountLoc(item.getAmount().multiply(item.getExrate()));
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+			}
+			feeCenterService.updateBatchById(feeCenterList);
+			//获取海运进出口费用
+			List<FeeCenter> feeCenterListHY = feeCenterList.stream().filter(e -> "SE,SI".contains(e.getBusinessType())).collect(Collectors.toList());
+			if (!feeCenterListHY.isEmpty()) {
+				List<Long> idList = feeCenterListHY.stream().map(FeeCenter::getId).collect(Collectors.toList());
+				List<Long> pidList = feeCenterListHY.stream().map(FeeCenter::getPid).collect(Collectors.toList());
+				//获取对应海运进出口除本次费用外所有费用明细
+				List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.in(FeeCenter::getPid, pidList)
+					.notIn(FeeCenter::getId, idList));
+				if (!feeCenters.isEmpty()) {
+					feeCenters.addAll(feeCenterListHY);
+				} else {
+					feeCenters = feeCenterListHY;
+				}
+				//获取费用明细对应海运进出口单据
+				List<Bills> billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.eq(Bills::getIsDeleted, 0)
+					.in(Bills::getId, pidList));
+				if (!billsList.isEmpty()) {
+					for (Bills item : billsList) {
+						List<FeeCenter> feeCenters1 = feeCenters.stream().filter(e -> e.getPid().equals(item.getId())).collect(Collectors.toList());
+						if (!feeCenters1.isEmpty()) {
+							//重新计算海运进出口利润
+							Bills billsAmount = costProfitCalculationService.costProfitCalculation(feeCenters1, exrateType);
+							if (billsAmount != null) {
+								item.setAccountStatus(billsAmount.getAccountStatus());
+								item.setAmountDr(billsAmount.getAmountDr());
+								item.setOceanFreightDr(billsAmount.getOceanFreightDr());
+								item.setAmountCr(billsAmount.getAmountCr());
+								item.setOceanFreightCr(billsAmount.getOceanFreightCr());
+								item.setAmountProfit(billsAmount.getAmountProfit());
+								item.setOceanFreightProfit(billsAmount.getOceanFreightProfit());
+								item.setAmountDrUsd(billsAmount.getAmountDrUsd());
+								item.setAmountCrUsd(billsAmount.getAmountCrUsd());
+								item.setAmountProfitUsd(billsAmount.getAmountProfitUsd());
+								item.setAmountDrLoc(billsAmount.getAmountDrLoc());
+								item.setAmountCrLoc(billsAmount.getAmountCrLoc());
+								item.setAmountProfitLoc(billsAmount.getAmountProfitLoc());
+								billsMapper.updateById(item);
+							}
+						}
+					}
+				}
+			}
+			//获取箱管等费用
+			List<FeeCenter> feeCenterListXG = feeCenterList.stream().filter(e -> "BUY,OW-F,OW-N,XGDX,XGFY".contains(e.getBusinessType())).collect(Collectors.toList());
+			if (!feeCenterListXG.isEmpty()) {
+				List<Long> idList = feeCenterListXG.stream().map(FeeCenter::getId).collect(Collectors.toList());
+				List<Long> pidList = feeCenterListXG.stream().map(FeeCenter::getPid).collect(Collectors.toList());
+				//获取对应箱管除本次费用外所有费用明细
+				List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.in(FeeCenter::getPid, pidList)
+					.notIn(FeeCenter::getId, idList));
+				if (!feeCenters.isEmpty()) {
+					feeCenters.addAll(feeCenterListXG);
+				} else {
+					feeCenters = feeCenterListXG;
+				}
+				//获取费用明细对应箱管单据
+				List<TradingBox> tradingBoxList = tradingBoxMapper.selectList(new LambdaQueryWrapper<TradingBox>()
+					.eq(TradingBox::getTenantId, AuthUtil.getTenantId())
+					.eq(TradingBox::getIsDeleted, 0)
+					.apply("find_in_set(type,'OW-N,OW-F,XGFY')")
+					.in(TradingBox::getId, pidList));
+				if (!tradingBoxList.isEmpty()) {
+					for (TradingBox item : tradingBoxList) {
+						List<FeeCenter> feeCenters1 = feeCenters.stream().filter(e -> e.getPid().equals(item.getId())).collect(Collectors.toList());
+						if (!feeCenters1.isEmpty()) {
+							//重新计算箱管利润
+							BigDecimal amountD = feeCenters1.stream().filter(e -> "D".equals(e.getDc()) && exrateType.equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountC = feeCenters1.stream().filter(e -> "C".equals(e.getDc()) && exrateType.equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountDUsd = feeCenters1.stream().filter(e -> "D".equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountCUsd = feeCenters1.stream().filter(e -> "C".equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountLocD = new BigDecimal("0.00");
+							BigDecimal amountLocC = new BigDecimal("0.00");
+							item.setAmountD(amountD);
+							item.setAmountDUsd(amountDUsd);
+							item.setTotalAmountD(amountLocD);
+							item.setAmountC(amountC);
+							item.setAmountCUsd(amountCUsd);
+							item.setTotalAmountC(amountLocC);
+							item.setProfit(item.getAmountD().subtract(item.getAmountC()));
+							item.setProfitUsd(item.getAmountDUsd().subtract(item.getAmountCUsd()));
+							item.setTotalProfit(item.getTotalAmountD().subtract(item.getTotalAmountC()));
+							tradingBoxMapper.updateById(item);
+						}
+					}
+				}
+			}
+		}
+		//按照币别+所属公司+日期获取账单明细数据
+		List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+			.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+			.eq(FinAccBills::getIsDeleted, 0)
+			.eq(FinAccBills::getCurCode, curExrate.getCode())
+			.eq(FinAccBills::getBranchId, curExrate.getBranchId())
+			.apply("DATE_FORMAT(business_date,'" + formatType + "') = '" + date + "'"));
+		if (!finAccBillsList.isEmpty()) {
+			//修改账单汇率以及重新计算合计金额
+			for (FinAccBills item : finAccBillsList) {
+				if ("D".equals(item.getAccountDc())) {
+					item.setExrate(curExrate.getExrateReceivable());
+					item.setAmountDrLoc(item.getAmountDr().multiply(item.getExrate()));
+					item.setStlAmountDrLoc(item.getStlAmountDr().multiply(item.getExrate()));
+				} else {
+					item.setExrate(curExrate.getExratePayable());
+					item.setAmountCrLoc(item.getAmountCr().multiply(item.getExrate()));
+					item.setStlAmountCrLoc(item.getStlAmountCr().multiply(item.getExrate()));
+				}
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+			}
+			finAccBillsService.updateBatchById(finAccBillsList);
+			List<Long> accBillIdList = finAccBillsList.stream().map(FinAccBills::getId).collect(Collectors.toList());
+			//获取账单对应对账,付费申请,结算中心明细数据
+			List<FinStlBillsItems> finStlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
+				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBillsItems::getIsDeleted, 0)
+				.eq(FinStlBillsItems::getCurCode, curExrate.getCode())
+				.in(FinStlBillsItems::getAccBillId, accBillIdList));
+			if (!finStlBillsItemsList.isEmpty()) {
+				//修改明细汇率以及重新计算合计金额
+				for (FinStlBillsItems item : finStlBillsItemsList) {
+					if ("D".equals(item.getDc())) {
+						item.setExrate(curExrate.getExrateReceivable());
+						item.setCurrentStlExrate(curExrate.getExrateReceipts());
+					} else {
+						item.setExrate(curExrate.getExratePayable());
+						item.setCurrentStlExrate(curExrate.getExratePayment());
+					}
+					item.setAmountLoc(item.getAmount().multiply(item.getExrate()));
+					item.setCurrentStlAmountLoc(item.getCurrentStlAmount().multiply(item.getCurrentStlExrate()));
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					item.setUpdateTime(new Date());
+				}
+				finStlBillsItemsService.updateBatchById(finStlBillsItemsList);
+				List<Long> idList = finStlBillsItemsList.stream().map(FinStlBillsItems::getId).collect(Collectors.toList());
+				List<Long> pidList = finStlBillsItemsList.stream().map(FinStlBillsItems::getPid).collect(Collectors.toList());
+				//获取除本次明细以外其他所有明细
+				List<FinStlBillsItems> finStlBillsItems = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
+					.eq(FinStlBillsItems::getIsDeleted, 0)
+					.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+					.in(FinStlBillsItems::getPid, pidList)
+					.notIn(FinStlBillsItems::getId, idList));
+				if (!finStlBillsItems.isEmpty()) {
+					finStlBillsItems.addAll(finStlBillsItemsList);
+				} else {
+					finStlBillsItems = finStlBillsItemsList;
+				}
+				List<Long> stlBillsIdList = finStlBillsItems.stream().map(FinStlBillsItems::getPid).collect(Collectors.toList());
+				//获取明细对应主单据数据
+				List<FinStlBills> finStlBillsList = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
+					.eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
+					.eq(FinStlBills::getIsDeleted, 0)
+					.in(FinStlBills::getId, stlBillsIdList));
+				if (!finStlBillsList.isEmpty()) {
+					for (FinStlBills item : finStlBillsList) {
+						List<FinStlBillsItems> finStlBillsItems1 = finStlBillsItems.stream().filter(e -> e.getPid().equals(item.getId()))
+							.collect(Collectors.toList());
+						if (!finStlBillsItems1.isEmpty()){
+							//重新计算单据利润
+							BigDecimal amountDrCNY = finStlBillsItems1.stream().filter(e -> "D".equals(e.getDc()) && exrateType.equals(e.getCurCode()))
+								.map(FinStlBillsItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountCrCNY = finStlBillsItems1.stream().filter(e -> "C".equals(e.getDc()) && exrateType.equals(e.getCurCode()))
+								.map(FinStlBillsItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountDrUSD = finStlBillsItems1.stream().filter(e -> "D".equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
+								.map(FinStlBillsItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountCrUSD = finStlBillsItems1.stream().filter(e -> "C".equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
+								.map(FinStlBillsItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountDrLoc =  finStlBillsItems1.stream().filter(e -> "D".equals(e.getDc()))
+								.map(FinStlBillsItems::getCurrentStlAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountCrLoc = finStlBillsItems1.stream().filter(e -> "C".equals(e.getDc()))
+								.map(FinStlBillsItems::getCurrentStlAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+							item.setAmountDr(amountDrCNY);
+							item.setAmountCr(amountCrCNY);
+							item.setAmountDrUsd(amountDrUSD);
+							item.setAmountCrUsd(amountCrUSD);
+							item.setAmountDrLoc(amountDrLoc);
+							item.setAmountCrLoc(amountCrLoc);
+							if ("FFSQ".equals(item.getBusinessType())) {
+								item.setAmountSub(item.getAmountCr().subtract(item.getAmountDr()));
+								item.setAmountSubUsd(item.getAmountCrUsd().subtract(item.getAmountDrUsd()));
+								item.setAmountSubLoc(item.getAmountCrLoc().subtract(item.getAmountDrLoc()));
+							} else {
+								if ("C".equals(item.getDc())) {
+									item.setAmountSub(item.getAmountCr().subtract(item.getAmountDr()));
+									item.setAmountSubUsd(item.getAmountCrUsd().subtract(item.getAmountDrUsd()));
+									item.setAmountSubLoc(item.getAmountCrLoc().subtract(item.getAmountDrLoc()));
+								} else {
+									item.setAmountSub(item.getAmountDr().subtract(item.getAmountCr()));
+									item.setAmountSubUsd(item.getAmountDrUsd().subtract(item.getAmountCrUsd()));
+									item.setAmountSubLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
+								}
+							}
+							item.setUpdateUser(AuthUtil.getUserId());
+							item.setUpdateUserName(AuthUtil.getUserName());
+							item.setUpdateTime(new Date());
+							finStlBillsMapper.updateById(item);
+						}
+					}
+				}
+			}
+            //获取账单对应发票申请,销项发票明细数据
+			List<FinInvoicesItems> finInvoicesItemsList = finInvoicesItemsService.list(new LambdaQueryWrapper<FinInvoicesItems>()
+				.eq(FinInvoicesItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinInvoicesItems::getIsDeleted, 0)
+				.eq(FinInvoicesItems::getCurCode, curExrate.getCode())
+				.in(FinInvoicesItems::getAccBillId, accBillIdList));
+			if (!finInvoicesItemsList.isEmpty()) {
+				//修改明细汇率以及重新计算合计金额
+				for (FinInvoicesItems item : finInvoicesItemsList) {
+					if ("D".equals(item.getDc())) {
+						item.setExrate(curExrate.getExrateReceivable());
+						item.setCurrentExrate(curExrate.getExrateReceipts());
+						item.setCurrentAmountEx(curExrate.getExrateReceipts());
+					} else {
+						item.setExrate(curExrate.getExratePayable());
+						item.setCurrentExrate(curExrate.getExratePayment());
+						item.setCurrentAmountEx(curExrate.getExratePayment());
+					}
+					item.setAmountLoc(item.getAmount().multiply(item.getExrate()));
+					item.setCurrentAmountLoc(item.getCurrentAmount().multiply(item.getCurrentExrate()));
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					item.setUpdateTime(new Date());
+				}
+				finInvoicesItemsService.updateBatchById(finInvoicesItemsList);
+				List<Long> idList = finInvoicesItemsList.stream().map(FinInvoicesItems::getId).collect(Collectors.toList());
+				List<Long> pidList = finInvoicesItemsList.stream().map(FinInvoicesItems::getPid).collect(Collectors.toList());
+				//获取除本次明细以外其他所有明细
+				List<FinInvoicesItems> finInvoicesItems = finInvoicesItemsService.list(new LambdaQueryWrapper<FinInvoicesItems>()
+					.eq(FinInvoicesItems::getIsDeleted, 0)
+					.eq(FinInvoicesItems::getTenantId, AuthUtil.getTenantId())
+					.in(FinInvoicesItems::getPid, pidList)
+					.notIn(FinInvoicesItems::getId, idList));
+				if (!finInvoicesItems.isEmpty()) {
+					finInvoicesItems.addAll(finInvoicesItemsList);
+				} else {
+					finInvoicesItems = finInvoicesItemsList;
+				}
+				List<Long> stlBillsIdList = finInvoicesItems.stream().map(FinInvoicesItems::getPid).collect(Collectors.toList());
+				//获取明细对应主单据数据
+				List<FinInvoices> finStlBillsList = finInvoicesMapper.selectList(new LambdaQueryWrapper<FinInvoices>()
+					.eq(FinInvoices::getTenantId, AuthUtil.getTenantId())
+					.eq(FinInvoices::getIsDeleted, 0)
+					.in(FinInvoices::getId, stlBillsIdList));
+				if (!finStlBillsList.isEmpty()) {
+					for (FinInvoices item : finStlBillsList) {
+						List<FinInvoicesItems> finInvoicesItems1 = finInvoicesItems.stream().filter(e -> e.getPid().equals(item.getId()))
+							.collect(Collectors.toList());
+						if (!finInvoicesItems1.isEmpty()){
+							//重新计算单据利润
+							BigDecimal amountCnyD = finInvoicesItems1.stream().filter(e -> "D".equals(e.getDc()) && exrateType.equals(e.getCurCode()))
+								.map(FinInvoicesItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountCnyC = finInvoicesItems1.stream().filter(e -> "C".equals(e.getDc()) && exrateType.equals(e.getCurCode()))
+								.map(FinInvoicesItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountUsdD = finInvoicesItems1.stream().filter(e -> "D".equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
+								.map(FinInvoicesItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal amountUsdC = finInvoicesItems1.stream().filter(e -> "C".equals(e.getDc()) && !exrateType.equals(e.getCurCode()))
+								.map(FinInvoicesItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+							item.setAmountCny(amountCnyD.subtract(amountCnyC));
+							item.setAmountUsd(amountUsdD.subtract(amountUsdC));
+							item.setAmountSub(amountCnyD.subtract(amountCnyC));
+							item.setAmountLoc(item.getAmountCny().add(item.getAmountUsd().multiply(item.getExrate())));
+							item.setAmountSubUsd(amountUsdD.subtract(amountUsdC));
+							item.setUpdateUser(AuthUtil.getUserId());
+							item.setUpdateUserName(AuthUtil.getUserName());
+							item.setUpdateTime(new Date());
+							finInvoicesMapper.updateById(item);
+						}
+					}
+				}
+			}
+		}
+
+		return R.success("操作成功");
+	}
+}

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java

@@ -53,6 +53,8 @@ public class MagicValues {
 	public static final String DISPATCH_NOTICE = "派车通知单";
 	public static final String INCOMING_NOTIFICATION = "入货通知";
 	public static final String SALES_REPORT = "销售报告";
+
+	public static final String BILL_MODIFY = "提单修改";
 	public static final String CONTAINER_PREVIEW = "配箱预览";
 	public static final String SALES_REPORT_AMEND = "销售报告-amend";
 	public static final String MASTER_BILLS = "MASTER 提单";
@@ -62,6 +64,7 @@ public class MagicValues {
 	public static final String BILLS_DETAIL_M = "提单详情(M)";
 	public static final String HYCK = "HYCK";
 	public static final String HYJK = "HYJK";
+	public static final String TDXG = "TDXG";
 	public static final String BJZX = "BJZX";
 
 	public static final String YYFY = "YYFY";

+ 21 - 11
blade-service/blade-los/src/main/java/org/springblade/los/basic/cur/controller/BCurrencyController.java

@@ -25,7 +25,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
-import org.apache.ibatis.annotations.Param;
 import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.excel.util.ExcelUtil;
@@ -36,12 +35,12 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.CurrencyUtils;
+import org.springblade.los.Util.ExchangeRateUtils;
 import org.springblade.los.basic.cur.entity.BCurrency;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.basic.cur.vo.BCurrencyVO;
 import org.springblade.los.excel.BCurrencyExcel;
 import org.springblade.los.finance.genleg.dto.PeriodExchangeRate;
-import org.springframework.mock.web.DelegatingServletInputStream;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -67,6 +66,8 @@ public class BCurrencyController extends BladeController {
 
 	private final CurrencyUtils currencyUtils;
 
+	private final ExchangeRateUtils exchangeRateUtils;
+
 	/**
 	 * 详情
 	 */
@@ -118,7 +119,7 @@ public class BCurrencyController extends BladeController {
 		LambdaQueryWrapper<BCurrency> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
 			.eq(BCurrency::getIsDeleted, 0)
-		//	.eq(BCurrency::getBranchId, AuthUtil.getDeptId())
+			//	.eq(BCurrency::getBranchId, AuthUtil.getDeptId())
 			.like(ObjectUtils.isNotNull(bCurrency.getCode()), BCurrency::getCode, bCurrency.getCode())
 			.like(ObjectUtils.isNotNull(bCurrency.getUnCode()), BCurrency::getUnCode, bCurrency.getUnCode())
 			.like(ObjectUtils.isNotNull(bCurrency.getCnName()), BCurrency::getCnName, bCurrency.getCnName())
@@ -133,7 +134,7 @@ public class BCurrencyController extends BladeController {
 			lambdaQueryWrapper.eq(BCurrency::getBranchId, AuthUtil.getDeptId());
 		} else {
 			if (ObjectUtils.isNotNull(bCurrency.getBranchId())) {
-         		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bCurrency.getBranchId()), BCurrency::getBranchId, bCurrency.getBranchId());
+				lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bCurrency.getBranchId()), BCurrency::getBranchId, bCurrency.getBranchId());
 			} else {
 				lambdaQueryWrapper.eq(BCurrency::getBranchId, AuthUtil.getDeptId());
 			}
@@ -262,7 +263,7 @@ public class BCurrencyController extends BladeController {
 	 * 获取所属公司本位币
 	 */
 	@GetMapping("/standardCurrency")
-	public R standardCurrency(@RequestParam(value = "deptId",required = false) String deptId) {
+	public R standardCurrency(@RequestParam(value = "deptId", required = false) String deptId) {
 		return R.data(currencyUtils.standardCurrency(deptId));
 	}
 
@@ -270,10 +271,10 @@ public class BCurrencyController extends BladeController {
 	 * 获取所属公司所有币别
 	 */
 	@GetMapping("/obtainRate")
-	public R obtainRate(@RequestParam(value = "deptId",required = false) String deptId,
-						@RequestParam(value = "date",required = false) Date date,
-						@RequestParam(value = "type",required = false) String type) {
-		return R.data(currencyUtils.obtainRate(date,type,deptId));
+	public R obtainRate(@RequestParam(value = "deptId", required = false) String deptId,
+						@RequestParam(value = "date", required = false) Date date,
+						@RequestParam(value = "type", required = false) String type) {
+		return R.data(currencyUtils.obtainRate(date, type, deptId));
 	}
 
 
@@ -281,8 +282,17 @@ public class BCurrencyController extends BladeController {
 	 * 复制
 	 */
 	@GetMapping("/copy")
-	public R copy(@RequestParam("id")Long id,@RequestParam("exrateYearOld")Integer exrateYearOld,@RequestParam("exrateYear")Integer exrateYear) {
-		return bCurrencyService.copy(id,exrateYear,exrateYearOld);
+	public R copy(@RequestParam("id") Long id, @RequestParam("exrateYearOld") Integer exrateYearOld, @RequestParam("exrateYear") Integer exrateYear) {
+		return bCurrencyService.copy(id, exrateYear, exrateYearOld);
+	}
+
+	/**
+	 * 同步汇率
+	 */
+	@GetMapping("/synchronizationExrate")
+	public R synchronizationExrate(@RequestParam("id") Long id, @RequestParam("itemId") Long itemId) {
+		BCurrency currency = bCurrencyService.getById(id);
+		return exchangeRateUtils.synchronizationExchangeRate(currency, itemId);
 	}
 
 

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsBoxServiceImpl.java

@@ -538,7 +538,7 @@ public class ReportsBoxServiceImpl implements IReportsBoxService {
 			}
 		} else if (MagicValues.COST.equals(reportCode) &&
 			(MagicValues.RECEIVABLE_BILL.equals(groupCode) || MagicValues.RECEIVABLE.equals(groupCode)) &&
-			MagicValues.XGFY.equals(type)) {
+			(MagicValues.OW_N.equals(type) || MagicValues.OW_F.equals(type) || MagicValues.XGFY.equals(type))) {
 			TradingBox bills = tradingBoxService.getById(billId);
 			if (bills != null) {
 				String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
@@ -571,7 +571,7 @@ public class ReportsBoxServiceImpl implements IReportsBoxService {
 			}
 		} else if (MagicValues.COST.equals(reportCode) &&
 			(MagicValues.MEET.equals(groupCode) || MagicValues.MEET_BILL.equals(groupCode)) &&
-			MagicValues.XGFY.equals(type)) {
+			(MagicValues.OW_N.equals(type) || MagicValues.OW_F.equals(type) || MagicValues.XGFY.equals(type))) {
 			TradingBox bills = tradingBoxService.getById(billId);
 			if (bills != null) {
 				String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());

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

@@ -44,11 +44,13 @@ 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.basic.utils.DeadlinePrintReport;
 import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.amends.service.IAmendsService;
 import org.springblade.los.business.sea.dto.ContainersReports;
 import org.springblade.los.business.sea.entity.*;
 import org.springblade.los.business.sea.service.*;
+import org.springblade.los.business.sea.vo.DeadlineVO;
 import org.springblade.los.business.sea.vo.GenerateMailVo;
 import org.springblade.los.email.entity.EmailAddress;
 import org.springblade.los.email.service.IEmailAddressService;
@@ -146,6 +148,10 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 
 	private final IBUnitsService bUnitsService;
 
+	private final IDeadlineService deadlineService;
+
+	private final IDeadlineContainersService deadlineContainersService;
+
 	@Override
 	public IPage<ReportsVO> selectReportsPage(IPage<ReportsVO> page, ReportsVO reports) {
 		return page.setRecords(baseMapper.selectReportsPage(page, reports));
@@ -929,6 +935,267 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					} else {
 						map.put(MagicValues.DATA, null);
 					}
+				} else if (MagicValues.BILL_MODIFY.equals(reportCode) && MagicValues.BILL_MODIFY.equals(groupCode) && MagicValues.TDXG.equals(type)) {
+					List<DeadlinePrintReport> reportListDetails = new ArrayList<>();
+					List<DeadlinePrintReport> reportListUniversal = new ArrayList<>();
+					Deadline deadline = deadlineService.getById(billId);
+					DeadlineVO deadlineVO = new DeadlineVO();
+					if (deadline != null) {
+						//发货人提单描述
+						if (ObjectUtils.isNotNull(deadline.getDeadlineShipperDetails()) && !deadline.getDeadlineShipperDetails().equals(deadline.getShipperDetails())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getShipperDetails());
+							report.setUpdateAfter(deadline.getDeadlineShipperDetails());
+							report.setDescription("发货人");
+							report.setType("1");
+							reportListDetails.add(report);
+						}
+						//收货人提单描述
+						if (ObjectUtils.isNotNull(deadline.getDeadlineConsigneeDetails()) && !deadline.getDeadlineConsigneeDetails().equals(deadline.getConsigneeDetails())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getConsigneeDetails());
+							report.setUpdateAfter(deadline.getDeadlineConsigneeDetails());
+							report.setDescription("收货人");
+							report.setType("1");
+							reportListDetails.add(report);
+						}
+						//通知人提单描述
+						if (ObjectUtils.isNotNull(deadline.getDeadlineNotifyDetails()) && !deadline.getDeadlineNotifyDetails().equals(deadline.getNotifyDetails())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getNotifyDetails());
+							report.setUpdateAfter(deadline.getDeadlineNotifyDetails());
+							report.setDescription("通知人");
+							report.setType("1");
+							reportListDetails.add(report);
+						}
+						//货物描述
+						if (ObjectUtils.isNotNull(deadline.getDeadlineCommodityDescr()) && !deadline.getDeadlineCommodityDescr().equals(deadline.getCommodityDescr())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getCommodityDescr());
+							report.setUpdateAfter(deadline.getDeadlineCommodityDescr());
+							report.setDescription("货物描述");
+							report.setType("1");
+							reportListDetails.add(report);
+						}
+						//唛头
+						if (ObjectUtils.isNotNull(deadline.getDeadlineMarks()) && !deadline.getDeadlineMarks().equals(deadline.getMarks())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getMarks());
+							report.setUpdateAfter(deadline.getDeadlineMarks());
+							report.setDescription("唛头");
+							report.setType("1");
+							reportListDetails.add(report);
+						}
+						//国外代理提单描述
+						if (ObjectUtils.isNotNull(deadline.getDeadlineForeignAgencyDetails()) && !deadline.getDeadlineForeignAgencyDetails().equals(deadline.getForeignAgencyDetails())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getForeignAgencyDetails());
+							report.setUpdateAfter(deadline.getDeadlineForeignAgencyDetails());
+							report.setDescription("国外代理");
+							report.setType("1");
+							reportListDetails.add(report);
+						}
+						//船公司
+						if (ObjectUtils.isNotNull(deadline.getDeadlineCarrierId()) && !deadline.getDeadlineCarrierId().equals(deadline.getCarrierId())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getCarrierCnName());
+							report.setUpdateAfter(deadline.getDeadlineCarrierCnName());
+							report.setDescription("船公司");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//船名
+						if (ObjectUtils.isNotNull(deadline.getDeadlineVesselId()) && !deadline.getDeadlineVesselId().equals(deadline.getVesselId())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getVesselCnName());
+							report.setUpdateAfter(deadline.getDeadlineVesselCnName());
+							report.setDescription("船名");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//航次
+						if (ObjectUtils.isNotNull(deadline.getDeadlineVoyageNo()) && !deadline.getDeadlineVoyageNo().equals(deadline.getVoyageNo())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getVoyageNo());
+							report.setUpdateAfter(deadline.getDeadlineVoyageNo());
+							report.setDescription("航次");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//装货港
+						if (ObjectUtils.isNotNull(deadline.getDeadlinePolId()) && !deadline.getDeadlinePolId().equals(deadline.getPolId())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getPolCnName());
+							report.setUpdateAfter(deadline.getDeadlinePolCnName());
+							report.setDescription("装货港");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//装货港英文名称打印
+						if (ObjectUtils.isNotNull(deadline.getDeadlinePolNamePrint()) && !deadline.getDeadlinePolNamePrint().equals(deadline.getPolNamePrint())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getPolNamePrint());
+							report.setUpdateAfter(deadline.getDeadlinePolNamePrint());
+							report.setDescription("装货港打印");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//卸货港
+						if (ObjectUtils.isNotNull(deadline.getDeadlinePodId()) && !deadline.getDeadlinePodId().equals(deadline.getPodId())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getPodCnName());
+							report.setUpdateAfter(deadline.getDeadlinePodCnName());
+							report.setDescription("卸货港");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//卸货港英文名称打印
+						if (ObjectUtils.isNotNull(deadline.getDeadlinePodNamePrint()) && !deadline.getDeadlinePodNamePrint().equals(deadline.getPodNamePrint())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getPodNamePrint());
+							report.setUpdateAfter(deadline.getDeadlinePodNamePrint());
+							report.setDescription("卸货港打印");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//交货地
+						if (ObjectUtils.isNotNull(deadline.getDeadlinePlaceDeliveryId()) && !deadline.getDeadlinePlaceDeliveryId().equals(deadline.getPlaceDeliveryId())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getPlaceDeliveryName());
+							report.setUpdateAfter(deadline.getDeadlinePlaceDeliveryName());
+							report.setDescription("交货地");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//交货地英文名称打印
+						if (ObjectUtils.isNotNull(deadline.getDeadlinePlaceDeliveryNamePrint()) && !deadline.getDeadlinePlaceDeliveryNamePrint().equals(deadline.getPlaceDeliveryNamePrint())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getPlaceDeliveryNamePrint());
+							report.setUpdateAfter(deadline.getDeadlinePlaceDeliveryNamePrint());
+							report.setDescription("交货地打印");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//签单方式
+						if (ObjectUtils.isNotNull(deadline.getDeadlineIssueType()) && !deadline.getDeadlineIssueType().equals(deadline.getIssueType())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getIssueType());
+							report.setUpdateAfter(deadline.getDeadlineIssueType());
+							report.setDescription("签单方式");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//签单日期
+						if (ObjectUtils.isNotNull(deadline.getDeadlineIssueDate()) && !deadline.getDeadlineIssueDate().equals(deadline.getIssueDate())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getIssueDate());
+							report.setUpdateAfter(deadline.getDeadlineIssueDate());
+							report.setDescription("签单日期");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//签单地点
+						if (ObjectUtils.isNotNull(deadline.getDeadlineIssueAtId()) && !deadline.getDeadlineIssueAtId().equals(deadline.getIssueAtId())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getIssueAt());
+							report.setUpdateAfter(deadline.getDeadlineIssueAt());
+							report.setDescription("签单地点");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//包装单位
+						if (ObjectUtils.isNotNull(deadline.getDeadlinePackingUnitId()) && !deadline.getDeadlinePackingUnitId().equals(deadline.getPackingUnitId())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getPackingUnit());
+							report.setUpdateAfter(deadline.getDeadlinePackingUnit());
+							report.setDescription("包装单位");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//件数
+						if (ObjectUtils.isNotNull(deadline.getDeadlineQuantity()) && !deadline.getDeadlineQuantity().equals(deadline.getQuantity())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getQuantity());
+							report.setUpdateAfter(deadline.getDeadlineQuantity());
+							report.setDescription("件数");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//毛重
+						if (ObjectUtils.isNotNull(deadline.getDeadlineGrossWeight()) && !deadline.getDeadlineGrossWeight().equals(deadline.getGrossWeight())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getGrossWeight());
+							report.setUpdateAfter(deadline.getDeadlineGrossWeight());
+							report.setDescription("毛重");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//体积
+						if (ObjectUtils.isNotNull(deadline.getDeadlineMeasurement()) && !deadline.getDeadlineMeasurement().equals(deadline.getMeasurement())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getMeasurement());
+							report.setUpdateAfter(deadline.getDeadlineMeasurement());
+							report.setDescription("体积");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						//截单时间
+						if (ObjectUtils.isNotNull(deadline.getDeadlineCyTrailerTime()) && !deadline.getDeadlineCyTrailerTime().equals(deadline.getCyTrailerTime())) {
+							DeadlinePrintReport report = new DeadlinePrintReport();
+							report.setUpdateFront(deadline.getCyTrailerTime());
+							report.setUpdateAfter(deadline.getDeadlineCyTrailerTime());
+							report.setDescription("截单时间");
+							report.setType("0");
+							reportListUniversal.add(report);
+						}
+						List<DeadlineContainers> containersListrReport = new ArrayList<>();
+						List<DeadlineContainers> deadlineContainersList = deadlineContainersService.list(new LambdaQueryWrapper<DeadlineContainers>()
+							.eq(DeadlineContainers::getTenantId, AuthUtil.getTenantId())
+							.eq(DeadlineContainers::getIsDeleted, 0)
+							.eq(DeadlineContainers::getPid, billId));
+						if (!deadlineContainersList.isEmpty()) {
+							for (DeadlineContainers item : deadlineContainersList) {
+								boolean containersStatus = false;
+								//箱号
+								if (ObjectUtils.isNotNull(item.getDeadlineCntrNo()) && !item.getDeadlineCntrNo().equals(item.getCntrNo())) {
+									containersStatus = true;
+								}
+								//铅封号
+								if (ObjectUtils.isNotNull(item.getDeadlineSealNo()) && !item.getDeadlineSealNo().equals(item.getSealNo())) {
+									containersStatus = true;
+								}
+								//件数
+								if (ObjectUtils.isNotNull(item.getDeadlineQuantity()) && !item.getDeadlineQuantity().equals(item.getQuantity())) {
+									containersStatus = true;
+								}
+								//毛重
+								if (ObjectUtils.isNotNull(item.getDeadlineGrossWeight()) && !item.getDeadlineGrossWeight().equals(item.getGrossWeight())) {
+									containersStatus = true;
+								}
+								//体积
+								if (ObjectUtils.isNotNull(item.getDeadlineMeasurement()) && !item.getDeadlineMeasurement().equals(item.getMeasurement())) {
+									containersStatus = true;
+								}
+								//VGM
+								if (ObjectUtils.isNotNull(item.getDeadlineVgmWeight()) && !item.getDeadlineVgmWeight().equals(item.getVgmWeight())) {
+									containersStatus = true;
+								}
+								//皮重
+								if (ObjectUtils.isNotNull(item.getDeadlineTare()) && !item.getDeadlineTare().equals(item.getTare())) {
+									containersStatus = true;
+								}
+								if (containersStatus) {
+									containersListrReport.add(item);
+								}
+							}
+						}
+						deadlineVO.setDeadlineContainersList(containersListrReport);
+						deadlineVO.setReportListUniversal(reportListUniversal);
+						deadlineVO.setReportListDetails(reportListDetails);
+						deadlineVO.setDept(dept);
+						BeanUtil.copyProperties(deadline,deadlineVO);
+						map.put(MagicValues.DATA, deadlineVO);
+					}
 				}
 			}
 		}
@@ -2765,10 +3032,6 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			Amends amends = amendsService.getById(billId);
 			if (amends != null) {
 				String exrateType = currencyUtils.standardCurrency(amends.getBranchId());
-			/*	List<BCorps> bCorpsList = bCorpsService.list(new LambdaQueryWrapper<BCorps>()
-					.eq(BCorps::getTenantId, AuthUtil.getTenantId())
-					.eq(BCorps::getIsDeleted, 0)
-					.eq(BCorps::getStatus, 0));*/
 				List<Amends> amendsList = amendsService.list(new LambdaQueryWrapper<Amends>()
 					.eq(Amends::getOrigId, amends.getOrigId())
 					.eq(Amends::getStatus, 3)
@@ -3393,18 +3656,6 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							}
 							feeCenterList.addAll(amendFeeCenterList);
 							if (!feeCenterList.isEmpty()) {
-								/*for (FeeCenter item : feeCenterList) {
-									if (ObjectUtils.isNotNull(item.getShortName())) {
-										item.setCorpCnName(item.getShortName());
-									} else {
-										item.setCorpCnName("无");
-									}
-									if (ObjectUtils.isNotNull(item.getBillShortName())) {
-										item.setBillCorpCnName(item.getBillShortName());
-									} else {
-										item.setBillCorpCnName("无");
-									}
-								}*/
 								feeCenterList.stream().filter(e -> ObjectUtils.isNull(e.getReportType())).forEach(e -> e.setReportType("0"));
 								List<FeeCenterReports> feeCenterReportList = new ArrayList<>();
 								for (FeeCenter fee : feeCenterList) {
@@ -3482,56 +3733,28 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 												e.getCorpId().equals(fee.getCorpId()) && e.getReportType().equals(fee.getReportType()))
 											.collect(Collectors.toList());
 									}
-
 									if (!feeCenterListD.isEmpty()) {
-										/*BCorps bCorps = bCorpsList.stream().filter(e -> e.getId().equals(fee.getCorpId())).findFirst().orElse(null);
-										if (bCorps != null && ObjectUtils.isNotNull(bCorps.getShortName())) {
-											feeCenterReports.setBillCorpCnName(bCorps.getShortName());
-										} else {
-											feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
-										}*/
 										feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
 										feeCenterReports.setAmountD(feeCenterListD.stream().map(FeeCenter::getAmount)
 											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 										feeCenterReports.setAmountLocD(feeCenterListD.stream().map(FeeCenter::getAmountLoc)
 											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 									}
-
 									if (!feeCenterListUsdD.isEmpty()) {
-										/*BCorps bCorps = bCorpsList.stream().filter(e -> e.getId().equals(fee.getCorpId())).findFirst().orElse(null);
-										if (bCorps != null && ObjectUtils.isNotNull(bCorps.getShortName())) {
-											feeCenterReports.setBillCorpCnName(bCorps.getShortName());
-										} else {
-											feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
-										}*/
 										feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
 										feeCenterReports.setAmountUsdD(feeCenterListUsdD.stream().map(FeeCenter::getAmount)
 											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 										feeCenterReports.setAmountLocD(feeCenterListUsdD.stream().map(FeeCenter::getAmountLoc)
 											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 									}
-
 									if (!feeCenterListC.isEmpty()) {
-										/*BCorps bCorps = bCorpsList.stream().filter(e -> e.getId().equals(fee.getCorpId())).findFirst().orElse(null);
-										if (bCorps != null && ObjectUtils.isNotNull(bCorps.getShortName())) {
-											feeCenterReports.setCorpCnName(bCorps.getShortName());
-										} else {
-											feeCenterReports.setCorpCnName(fee.getCorpCnName());
-										}*/
 										feeCenterReports.setCorpCnName(fee.getCorpCnName());
 										feeCenterReports.setAmountC(feeCenterListC.stream().map(FeeCenter::getAmount)
 											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 										feeCenterReports.setAmountLocC(feeCenterListC.stream().map(FeeCenter::getAmountLoc)
 											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 									}
-
 									if (!feeCenterListUsdC.isEmpty()) {
-										/*BCorps bCorps = bCorpsList.stream().filter(e -> e.getId().equals(fee.getCorpId())).findFirst().orElse(null);
-										if (bCorps != null && ObjectUtils.isNotNull(bCorps.getShortName())) {
-											feeCenterReports.setCorpCnName(bCorps.getShortName());
-										} else {
-											feeCenterReports.setCorpCnName(fee.getCorpCnName());
-										}*/
 										feeCenterReports.setCorpCnName(fee.getCorpCnName());
 										feeCenterReports.setAmountUsdC(feeCenterListUsdC.stream().map(FeeCenter::getAmount)
 											.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -3558,26 +3781,6 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							}
 							List<FeeCenter> feeCenterListMh = feeCenterService.list(feeCenterLambdaQueryWrapperM);
 							feeCenterListMh.stream().filter(e -> ObjectUtils.isNull(e.getReportType())).forEach(e -> e.setReportType("0"));
-							/*for (FeeCenter feeCenter : amendFeeCenterList) {
-								if (feeCenter.getPid().equals(amends.getId())) {
-									feeCenter.setReportType(MagicValues.ONE);
-								} else {
-									feeCenter.setReportType(MagicValues.TWO);
-								}
-							}
-							feeCenterListMh.addAll(amendFeeCenterList);*/
-							/*for (FeeCenter item : feeCenterListMh) {
-								if (ObjectUtils.isNotNull(item.getShortName())) {
-									item.setCorpCnName(item.getShortName());
-								} else {
-									item.setCorpCnName("无");
-								}
-								if (ObjectUtils.isNotNull(item.getBillShortName())) {
-									item.setBillCorpCnName(item.getBillShortName());
-								} else {
-									item.setBillCorpCnName("无");
-								}
-							}*/
 							List<FeeCenterReports> feeCenterReportList = new ArrayList<>();
 							for (FeeCenter fee : feeCenterListMh) {
 								FeeCenterReports feeCenterReports = new FeeCenterReports();
@@ -3654,56 +3857,28 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 											e.getCorpId().equals(fee.getCorpId()) && e.getReportType().equals(fee.getReportType()))
 										.collect(Collectors.toList());
 								}
-
 								if (!feeCenterListD.isEmpty()) {
-									/*BCorps bCorps = bCorpsList.stream().filter(e -> e.getId().equals(fee.getCorpId())).findFirst().orElse(null);
-									if (bCorps != null && ObjectUtils.isNotNull(bCorps.getShortName())) {
-										feeCenterReports.setBillCorpCnName(bCorps.getShortName());
-									} else {
-										feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
-									}*/
 									feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
 									feeCenterReports.setAmountD(feeCenterListD.stream().map(FeeCenter::getAmount)
 										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 									feeCenterReports.setAmountLocD(feeCenterListD.stream().map(FeeCenter::getAmountLoc)
 										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 								}
-
 								if (!feeCenterListUsdD.isEmpty()) {
-								/*	BCorps bCorps = bCorpsList.stream().filter(e -> e.getId().equals(fee.getCorpId())).findFirst().orElse(null);
-									if (bCorps != null && ObjectUtils.isNotNull(bCorps.getShortName())) {
-										feeCenterReports.setBillCorpCnName(bCorps.getShortName());
-									} else {
-										feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
-									}*/
 									feeCenterReports.setBillCorpCnName(fee.getCorpCnName());
 									feeCenterReports.setAmountUsdD(feeCenterListUsdD.stream().map(FeeCenter::getAmount)
 										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 									feeCenterReports.setAmountLocD(feeCenterListUsdD.stream().map(FeeCenter::getAmountLoc)
 										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 								}
-
 								if (!feeCenterListC.isEmpty()) {
-									/*BCorps bCorps = bCorpsList.stream().filter(e -> e.getId().equals(fee.getCorpId())).findFirst().orElse(null);
-									if (bCorps != null && ObjectUtils.isNotNull(bCorps.getShortName())) {
-										feeCenterReports.setCorpCnName(bCorps.getShortName());
-									} else {
-										feeCenterReports.setCorpCnName(fee.getCorpCnName());
-									}*/
 									feeCenterReports.setCorpCnName(fee.getCorpCnName());
 									feeCenterReports.setAmountC(feeCenterListC.stream().map(FeeCenter::getAmount)
 										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 									feeCenterReports.setAmountLocC(feeCenterListC.stream().map(FeeCenter::getAmountLoc)
 										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 								}
-
 								if (!feeCenterListUsdC.isEmpty()) {
-									/*BCorps bCorps = bCorpsList.stream().filter(e -> e.getId().equals(fee.getCorpId())).findFirst().orElse(null);
-									if (bCorps != null && ObjectUtils.isNotNull(bCorps.getShortName())) {
-										feeCenterReports.setCorpCnName(bCorps.getShortName());
-									} else {
-										feeCenterReports.setCorpCnName(fee.getCorpCnName());
-									}*/
 									feeCenterReports.setCorpCnName(fee.getCorpCnName());
 									feeCenterReports.setAmountUsdC(feeCenterListUsdC.stream().map(FeeCenter::getAmount)
 										.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -3818,7 +3993,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							List<FeeCenterReports> feeCenterReportsArrayList = feeCenterReportsList1.stream()
 								.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
 									Comparator.comparing(f -> f.getFeeCnName() + f.getBillCorpCnName() + f.getDc()))), ArrayList::new));
-							for (FeeCenterReports fee : feeCenterReportsArrayList) {
+							for (FeeCenterReports fee : feeCenterReportsList1) {
 								FeeCenterReports feeCenterReports1 = new FeeCenterReports();
 								feeCenterReports1.setFeeCnName(fee.getFeeCnName());
 								feeCenterReports1.setHblno(fee.getHblno());

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

@@ -33,10 +33,7 @@ import okhttp3.Request;
 import okhttp3.Response;
 import org.springblade.los.box.dto.ArchivesExcelEnter;
 import org.springblade.los.box.dto.ArchivesExcelOut;
-import org.springblade.los.box.entity.Archives;
-import org.springblade.los.box.entity.ArchivesFiles;
-import org.springblade.los.box.entity.intelligenceData;
-import org.springblade.los.box.entity.intelligenceDetails;
+import org.springblade.los.box.entity.*;
 import org.springblade.los.box.service.IArchivesFilesService;
 import org.springblade.los.box.service.IArchivesService;
 import org.springblade.los.box.vo.ArchivesVO;
@@ -119,6 +116,9 @@ public class ArchivesController extends BladeController {
 			.eq(ObjectUtils.isNotNull(archives.getContainerNumberType()), Archives::getContainerNumberType, archives.getContainerNumberType())
 			.eq(ObjectUtils.isNotNull(archives.getBoxStatus()), Archives::getBoxStatus, archives.getBoxStatus());//箱状态
 		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(archives.getBoxMakingCompanyId()), Archives::getBoxMakingCompanyId, archives.getBoxMakingCompanyId());//造箱公司
+		if ("1".equals(archives.getWhetherStillBox())){
+			lambdaQueryWrapper.eq(Archives::getBoxDynamics,"客户还箱");
+		}
 		if (archives.getNewDateList() != null && archives.getNewDateList().size() > 1) {//最新日期
 			lambdaQueryWrapper.ge(Archives::getNewDate, archives.getNewDateList().get(0));
 			lambdaQueryWrapper.le(Archives::getNewDate, archives.getNewDateList().get(1));
@@ -302,7 +302,7 @@ public class ArchivesController extends BladeController {
 		OkHttpClient client = new OkHttpClient();
 		Map<String, Object> map = new HashMap<>();
 		map.put("token", ParamCache.getValue(BIGDATA_TOKEN));
-		map.put("param", archives.getBillNO());
+		map.put("param", archives.getBillNo());
 		map.put("size", query.getSize());
 		map.put("page", query.getCurrent());
 		Request request = new Request.Builder().url("https://crawler.tubaosoft.com/prod-api/crawler/data")

+ 3 - 14
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesTrajectoryController.java

@@ -95,20 +95,9 @@ public class ArchivesTrajectoryController extends BladeController {
 		if ("1".equals(archivesTrajectory.getWhetherStillBox())){
 			lambdaQueryWrapper.eq(ArchivesTrajectory::getBoxDynamics,"客户还箱");
 		}
-		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::getHblno);
-		lambdaQueryWrapper.groupBy(ArchivesTrajectory::getSrcId);
-		lambdaQueryWrapper.orderByDesc(ArchivesTrajectory::getNewDate);
-		lambdaQueryWrapper.orderByDesc(ArchivesTrajectory::getCode);
+
+		lambdaQueryWrapper.last("GROUP BY code,box_type,bill_type,box_dynamics,box_category,DATE_FORMAT(new_date, '%Y-%m-%d')," +
+			"port_id,station_id,container_number,IFNULL(mblno, ''),IFNULL(hblno, ''),src_id ORDER BY new_date DESC,code DESC");
 		IPage<ArchivesTrajectory> pages = archivesTrajectoryService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}

+ 13 - 7
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/BoxReminderController.java

@@ -122,19 +122,25 @@ public class BoxReminderController extends BladeController {
 			.eq(TradingBoxItem::getIsDeleted, 0)
 			.eq(TradingBoxItem::getPid, tradingBoxDetail.getId()));
 		if (!tradingBoxItemList.isEmpty()) {
-			List<String> mblno = tradingBoxItemList.stream().map(TradingBoxItem::getMblno).distinct().collect(Collectors.toList());
+			List<String> mblno = tradingBoxItemList.stream().map(TradingBoxItem::getHblno).distinct().collect(Collectors.toList());
 			if (!mblno.isEmpty()) {
 				List<Bills> billsList = billsService.list(new LambdaQueryWrapper<Bills>()
 					.eq(Bills::getTenantId, AuthUtil.getTenantId())
 					.eq(Bills::getIsDeleted, 0)
-					.eq(Bills::getBusinessType, "SE")
-					.in(Bills::getMblno, mblno));
+					.in(Bills::getHblno, mblno));
 				for (TradingBoxItem item : tradingBoxItemList) {
 					if (!billsList.isEmpty()) {
-						Bills bills = billsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).findFirst().orElse(null);
-						if (bills != null) {
-							item.setActualEta(bills.getActualEta());
-							item.setActualEtd(bills.getActualEtd());
+						Bills billsSE = billsList.stream().filter(e -> e.getHblno().equals(item.getHblno())
+							&& "SE".equals(e.getBusinessType())).findFirst().orElse(null);
+						if (billsSE != null) {
+							item.setEtd(billsSE.getEtd());
+							item.setActualEtd(billsSE.getActualEtd());
+						}
+						Bills billsSI = billsList.stream().filter(e -> e.getHblno().equals(item.getHblno())
+							&& "SI".equals(e.getBusinessType())).findFirst().orElse(null);
+						if (billsSI != null) {
+							item.setActualEta(billsSI.getActualEta());
+							item.setEta(billsSI.getEta());
 						}
 					}
 				}

+ 22 - 1
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxItemController.java

@@ -108,6 +108,27 @@ public class TradingBoxItemController extends BladeController {
 		return R.data(pages);
 	}
 
+
+	/**
+	 * 保存
+	 */
+	@PostMapping("/add")
+	@RepeatSubmit
+	public R add(@Valid @RequestBody TradingBoxItem tradingBoxItem) {
+		if (tradingBoxItem.getId() == null) {
+			tradingBoxItem.setCreateUser(AuthUtil.getUserId());
+			tradingBoxItem.setCreateTime(new Date());
+			tradingBoxItem.setCreateUserName(AuthUtil.getUserName());
+			tradingBoxItem.setTenantId(AuthUtil.getTenantId());
+		} else {
+			tradingBoxItem.setUpdateTime(new Date());
+			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
+			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
+		}
+		tradingBoxItemService.saveOrUpdate(tradingBoxItem);
+		return R.data(tradingBoxItem);
+	}
+
 	/**
 	 * 新增或修改 买(卖)箱明细表
 	 */
@@ -291,7 +312,7 @@ public class TradingBoxItemController extends BladeController {
 				}
 				List<String> codeList = Arrays.asList(tradingBox.getCode().split(","));
 				if (!codeList.isEmpty()) {
-					tradingBox.setCode(codeList.stream().filter(Objects::nonNull).filter(e-> !"#".equals(e)).distinct().collect(Collectors.joining(",")));
+					tradingBox.setCode(codeList.stream().filter(Objects::nonNull).filter(e -> !"#".equals(e)).distinct().collect(Collectors.joining(",")));
 				}
 				tradingBoxService.updateById(tradingBox);
 			}

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

@@ -89,6 +89,7 @@ public class BoxDynamicsRecordController extends BladeController {
 			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getStationCname()),BoxDynamicsRecord::getStationCname,boxDynamicsRecord.getStationCname())
 			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getBoxCode()),BoxDynamicsRecord::getBoxCode,boxDynamicsRecord.getBoxCode())
 			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getContainerNumber()),BoxDynamicsRecord::getContainerNumber,boxDynamicsRecord.getContainerNumber())
+			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getBillNo()),BoxDynamicsRecord::getBillNo,boxDynamicsRecord.getBillNo())
 			.eq(ObjectUtils.isNotNull(boxDynamicsRecord.getBoxDynamics()),BoxDynamicsRecord::getBoxDynamics,boxDynamicsRecord.getBoxDynamics())
 			.eq(ObjectUtils.isNotNull(boxDynamicsRecord.getSynchronizationStatus()),BoxDynamicsRecord::getSynchronizationStatus,boxDynamicsRecord.getSynchronizationStatus())
 			.orderByDesc(BoxDynamicsRecord::getImportDate);

Dosya farkı çok büyük olduğundan ihmal edildi
+ 274 - 370
blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java


+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/PutBoxMapper.java

@@ -50,7 +50,7 @@ public interface PutBoxMapper extends BaseMapper<PutBox> {
 	List<BoxPoolPortDTO> listPort(IPage<BoxPoolPortDTO> page, @Param("data") BoxPoolDTO boxPoolDTO);
 
 	List<Map<String, Long>> selectBoxNumber(@Param("portId") Long portId, @Param("whetherLoseEfficacy") String whetherLoseEfficacy
-	,@Param("tenantId")String tenantId,@Param("busType")String busType);
+	,@Param("tenantId")String tenantId,@Param("busType")String busType,@Param("stationId")Long stationId);
 
     List<RouteCostProfitExcel> getBoxNumber(@Param("data")RouteCostProfitExcel routeCost);
 }

+ 11 - 6
blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/PutBoxMapper.xml

@@ -105,9 +105,8 @@
         lp.id as portId,
         lp.cn_name as portName,
         lpb.pol_station_cname as stationName,
-        lpb.bus_type as busType,
-        lpb.box_type as boxType,
-        sum(lpb.remaining_num) as remainingNum
+        lpb.pol_station_id as stationId,
+        lpb.box_class as busType
         FROM
         logistics_put_box lpb
         LEFT JOIN los_b_ports lp ON FIND_IN_SET( lp.id, lpb.pol_id )
@@ -122,6 +121,9 @@
         <if test="data.polId!=null and data.polId != ''">
             and lpb.pol_id like concat(concat('%', #{data.polId}),'%')
         </if>
+        <if test="data.stationId!=null and data.stationId != ''">
+            and lpb.pol_station_id = #{data.stationId}
+        </if>
         <if test="data.podId!=null and data.podId != ''">
             and lpb.pod_id like concat(concat('%', #{data.podId}),'%')
         </if>
@@ -138,7 +140,7 @@
             and lpb.box_east_name like concat(concat('%', #{data.boxEastName}),'%')
         </if>
         <if test="data.busType!=null and data.busType != ''">
-            and find_in_set(lpb.bus_type,#{data.busType})
+            and find_in_set(lpb.box_class,#{data.busType})
         </if>
         <if test="data.boxType!=null and data.boxType != ''">
             and lpb.box_type = #{data.boxType}
@@ -148,7 +150,7 @@
             and DATE_FORMAT(lpb.effective_end_date,'%Y-%m-%d') &lt;= DATE_FORMAT(CURDATE(), '%Y-%m-%d')
         </if>
         GROUP BY
-        lp.id,lpb.bus_type
+        lp.id,lpb.box_class,lpb.pol_station_id
     </select>
     <select id="selectBoxNumber" resultType="java.util.Map">
         SELECT
@@ -256,8 +258,11 @@
         <if test="portId !=null and portId != ''">
             and lpb.pol_id like concat(concat('%', #{portId}),'%')
         </if>
+        <if test="stationId !=null and stationId != ''">
+            and lpb.pol_station_id = #{stationId}
+        </if>
         <if test="busType != null and busType != ''">
-            and lpb.bus_type like concat(concat('%', #{busType}),'%')
+            and lpb.box_class like concat(concat('%', #{busType}),'%')
         </if>
         <if test="whetherLoseEfficacy !=null and whetherLoseEfficacy != ''">
             and DATE_FORMAT(lpb.effective_start_date,'%Y-%m-%d') &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-%d')

+ 1 - 160
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ExpenseApplicationServiceImpl.java

@@ -363,166 +363,7 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 				}
 			}
 		} else {
-			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
-				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
-				.eq(BusinessType::getIsDeleted, 0)
-				.eq(BusinessType::getStatus, 0)
-				.eq(BusinessType::getCode, "YWZD"));
-			if (businessType == null) {
-				throw new RuntimeException("未找到可用业务类型");
-			}
-			Bills bills = new Bills();
-			if ("HYJK,HYCK".contains(expenseApplication.getSrcType())) {
-				bills = billsService.getById(expenseApplication.getSrcId());
-			}
-			for (FeeCenter item : expenseApplication.getFeeCenterList()) {
-				if(ObjectUtils.isNull(item.getCorpId())){
-					throw new RuntimeException("单号:"+item.getBillNo()+"费用明细结算单位不能为空");
-				}
-				if (1 == item.getAccStatus()) {
-					throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单");
-				}
-				if (ObjectUtils.isNull(item.getBillDate())){
-					throw new RuntimeException("费用:" + item.getFeeCnName() + "缺少业务日期,请重新保存");
-				}
-				FinAccBills data = new FinAccBills();
-				data.setTrackingNumber(item.getTrackingNumber());
-				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.setTaxRate(item.getTaxRate());
-				data.setAmountTax(item.getAmountTax());
-				data.setExrate(item.getExrate());
-				if (ObjectUtils.isNull(item.getBranchId())) {
-					data.setCreateDept(AuthUtil.getDeptId());
-					R<String> res = sysClient.getDeptName(Long.parseLong(AuthUtil.getDeptId()));
-					if (res.isSuccess()) {
-						data.setCreateDeptName(res.getData());
-						data.setBranchName(res.getData());
-						data.setDeptName(res.getData());
-					}
-					data.setBranchId(AuthUtil.getDeptId());
-					data.setDeptId(Long.parseLong(AuthUtil.getDeptId()));
-				} else {
-					data.setCreateDept(item.getBranchId());
-					data.setCreateDeptName(item.getBranchName());
-					data.setBranchId(item.getBranchId());
-					data.setBranchName(item.getBranchName());
-					data.setDeptId(Long.parseLong(item.getBranchId()));
-					data.setDeptName(item.getBranchName());
-				}
-				data.setBillBranchId(item.getBillBranchId());
-				data.setBillBranchName(item.getBillBranchName());
-				data.setBookingAgentId(item.getBookingAgentId());
-				data.setBookingAgentCnName(item.getBookingAgentCnName());
-				data.setBookingAgentEnName(item.getBookingAgentEnName());
-				data.setQuantityCntrDescr(item.getQuantityCntrDescr());
-				data.setTeu(item.getTeu());
-				BusinessBillNo businessBillNo = new BusinessBillNo();
-				businessBillNo.setBusinessTypeId(businessType.getId());
-				businessBillNo.setCode("YWZD");
-				businessBillNo.setBranchId(item.getBranchId());
-				R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
-				if (!clientBillNo.isSuccess()) {
-					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-					throw new RuntimeException("生成订单编号失败");
-				}
-				data.setWarehousingDate(item.getStorageDate());
-				data.setOutboundDate(item.getOutboundDate());
-				data.setBillNo((String) clientBillNo.getData());
-				data.setBillDate(item.getBillDate());
-				data.setAccountDc(item.getDc());
-				data.setAccountDate(item.getBillDate());
-				data.setBusinessType(item.getBusinessType());
-				data.setBusinessBillId(item.getPid());
-				data.setBusinessBillNo(item.getBillNo());
-				data.setBusinessDate(item.getBillDate());
-				data.setBillType(item.getBillType());
-				data.setSrcId(item.getSrcId());
-				data.setSrcCnName(item.getSrcCnName());
-				data.setSrcEnName(item.getSrcEnName());
-				data.setSrcType(item.getSrcType());
-				if (bills != null) {
-					data.setOperatorId(bills.getOperatorId());
-					data.setOperatorName(bills.getOperatorName());
-				} else {
-					data.setOperatorId(expenseApplication.getCreateUser());
-					data.setOperatorName(expenseApplication.getCreateUserName());
-				}
-				data.setPaymode(item.getPaymode());
-				data.setCorpId(item.getCorpId());
-				data.setCorpCnName(item.getCorpCnName());
-				data.setCorpEnName(item.getCorpEnName());
-				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(item.getRefno());
-				data.setBookingNo(item.getBookingNo());
-				data.setEtd(item.getEtd());
-				data.setEta(item.getEta());
-				data.setPolId(item.getPolId());
-				data.setPolCnName(item.getPolCnName());
-				data.setPolEnName(item.getPolEnName());
-				data.setPodId(item.getPodId());
-				data.setPodCnName(item.getPodCnName());
-				data.setPodCode(item.getPodCode());
-				data.setPodEnName(item.getPodEnName());
-				BigDecimal amountDrLoc = new BigDecimal("0.00");
-				BigDecimal amountCrLoc = new BigDecimal("0.00");
-				if ("CNY".equals(item.getCurCode())) {
-					if ("D".equals(item.getDc())) {
-						data.setAmountDr(item.getAmount());
-						data.setAmountCr(new BigDecimal("0.00"));
-					} else {
-						data.setAmountCr(item.getAmount());
-						data.setAmountDr(new BigDecimal("0.00"));
-					}
-					data.setAmountDrUsd(new BigDecimal("0.00"));
-					data.setAmountCrUsd(new BigDecimal("0.00"));
-				} else {
-					if ("D".equals(item.getDc())) {
-						data.setAmountDrUsd(item.getAmount());
-						data.setAmountCrUsd(new BigDecimal("0.00"));
-					} else {
-						data.setAmountDrUsd(new BigDecimal("0.00"));
-						data.setAmountCrUsd(item.getAmount());
-					}
-					data.setAmountDr(new BigDecimal("0.00"));
-					data.setAmountCr(new BigDecimal("0.00"));
-				}
-				if (ObjectUtils.isNotNull(data.getAmountCrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
-					BigDecimal crCny = data.getAmountCrUsd().multiply(item.getExrate());
-					amountCrLoc = amountCrLoc.add(data.getAmountCr()).add(crCny);
-				}
-				if (ObjectUtils.isNotNull(data.getAmountDrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
-					BigDecimal drCny = data.getAmountDrUsd().multiply(item.getExrate());
-					amountDrLoc = amountDrLoc.add(data.getAmountDr()).add(drCny);
-				}
-				data.setAmountDrLoc(amountDrLoc);
-				data.setAmountCrLoc(amountCrLoc);
-				finAccBillsService.save(data);
-				item.setAccBillId(data.getId());
-				item.setAccBillNo(data.getBillNo());
-				item.setAccDate(data.getBillDate());
-				item.setAccAmount(amountDrLoc.add(amountCrLoc));
-				item.setAccStatus(1);
-				item.setAccById(AuthUtil.getUserId());
-				item.setAccByName(AuthUtil.getUserName());
-				item.setAuditStatus("4");
-				int version = StringUtil.isBlank(item.getVersion()) ? 1 : Integer.parseInt(item.getVersion());
-				item.setVersion(String.valueOf(version + 1));
-			}
-			feeCenterService.updateBatchById(expenseApplication.getFeeCenterList());
+			finAccBillsService.generateBillV1(expenseApplication.getSrcType(),expenseApplication.getSrcId()+"",expenseApplication.getFeeCenterList());
 		}
 
 		return R.data(expenseApplication);

Dosya farkı çok büyük olduğundan ihmal edildi
+ 188 - 740
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java


+ 5 - 13
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java

@@ -254,6 +254,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		} else if ("OW-HY".equals(tradingBox.getType())) {
 			billNoFormat = "OW-HY";
 			businessTypeCode = "OW-HY";
+		}else if ("TZ".equals(tradingBox.getType())) {
+			billNoFormat = "TZ";
+			businessTypeCode = "TZ";
 		} else {
 			throw new RuntimeException("缺少必要参数类型");
 		}
@@ -1668,8 +1671,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					throw new RuntimeException("生成订单编号失败");
 				}
 				putBox.setSysNo((String) clientBillNo.getData());
-				putBox.setBoxEastId(tradingBox.getPurchaseCompanyId() + "");
-				putBox.setBoxEastName(tradingBox.getPurchaseCompanyName());
 				putBox.setContainerNumber(detail.getContainerNumber());
 				putBox.setBoxBelongsTo("SOC");
 				putBox.setCabinType("非固定");
@@ -1988,10 +1989,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 						.collect(Collectors.joining(","));
 					throw new RuntimeException("放箱号:" + detail.getContainerNumber() + "存在其他箱型" + type);
 				}
-				if (!putBox.getBoxEastId().contains(tradingBox.getPurchaseCompanyId() + "")) {
-					putBox.setBoxEastId(putBox.getBoxEastId() + "," + tradingBox.getPurchaseCompanyId());
-					putBox.setBoxEastName(putBox.getBoxEastName() + "," + tradingBox.getPurchaseCompanyName());
-				}
 				putBox.setUpdateUser(AuthUtil.getUserId());
 				putBox.setUpdateTime(new Date());
 				putBox.setUpdateUserName(AuthUtil.getUserName());
@@ -2043,8 +2040,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					throw new RuntimeException("生成订单编号失败");
 				}
 				putBox.setSysNo((String) clientBillNo.getData());
-				putBox.setBoxEastId(tradingBox.getPurchaseCompanyId() + "");
-				putBox.setBoxEastName(tradingBox.getPurchaseCompanyName());
 				putBox.setAgentId(tradingBox.getPurchaseCompanyId());
 				putBox.setAgentName(tradingBox.getPurchaseCompanyName());
 				putBox.setContainerNumber(detail.getContainerNumber());
@@ -2183,10 +2178,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			);
 			if (putBox != null) {
 				PutBox finalPutBox = putBox;
-				if (!putBox.getBoxEastId().contains(tradingBox.getPurchaseCompanyId() + "")) {
-					putBox.setBoxEastId(putBox.getBoxEastId() + "," + tradingBox.getPurchaseCompanyId());
-					putBox.setBoxEastName(putBox.getBoxEastName() + "," + tradingBox.getPurchaseCompanyName());
-				}
 				putBox.setUpdateUser(AuthUtil.getUserId());
 				putBox.setUpdateTime(new Date());
 				putBox.setUpdateUserName(AuthUtil.getUserName());
@@ -2843,8 +2834,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			.eq(TradingBoxItem::getIsDeleted, 0)
 			.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
 			.eq(TradingBoxItem::getPid, id)
-			.eq(TradingBoxItem::getPolPickUpDate, accountDate)
+			.apply( "DATE_FORMAT(pol_pick_up_date,'%Y-%m') = '" + formatter.format(accountDate) + "'")
 			.eq(TradingBoxItem::getWhetherGeneratePickUpCost, "0"));
+
 		if (tradingBoxItems.isEmpty()) {
 			throw new RuntimeException("未查到箱明细");
 		}

+ 0 - 3
blade-service/blade-los/src/main/java/org/springblade/los/business/amends/service/impl/AmendsServiceImpl.java

@@ -362,9 +362,6 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 	@Transactional(rollbackFor = Exception.class)
 	public Amends revokeCheckAmends(Amends amends) {
 		Amends declare = baseMapper.selectById(amends.getId());
-		if (3 == declare.getStatus()) {
-			throw new SecurityException("审核已通过,撤销失败");
-		}
 		R financeProcess = auditProecessService.deteleByBillId(amends.getId());
 		if (!financeProcess.isSuccess()) {
 			throw new SecurityException("操作失败,请联系管理员");

+ 4 - 5
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/DeadlineController.java

@@ -19,9 +19,7 @@ package org.springblade.los.business.sea.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.springblade.common.annotation.RepeatSubmit;
@@ -31,7 +29,6 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.entity.Deadline;
 import org.springblade.los.business.sea.service.IDeadlineService;
 import org.springblade.los.business.sea.vo.DeadlineVO;
@@ -74,7 +71,7 @@ public class DeadlineController extends BladeController {
 			.like(ObjectUtils.isNotNull(deadline.getHblno()), Deadline::getHblno, deadline.getHblno())
 			.like(ObjectUtils.isNotNull(deadline.getBillNo()), Deadline::getBillNo, deadline.getBillNo())
 			.like(ObjectUtils.isNotNull(deadline.getSrcBillNo()), Deadline::getSrcBillNo, deadline.getSrcBillNo())
-			.eq(ObjectUtils.isNotNull(deadline.getBillStatus()), Deadline::getBillStatus, deadline.getBillStatus())
+			.apply(ObjectUtils.isNotNull(deadline.getBillStatus()), "find_in_set(bill_status,'" + deadline.getBillStatus() + "')")
 			.orderByDesc(Deadline::getCreateTime);
 		IPage<Deadline> pages = deadlineService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
@@ -113,6 +110,7 @@ public class DeadlineController extends BladeController {
 	public R submit(@Valid @RequestBody DeadlineVO deadlineVO) {
 		return deadlineService.submit(deadlineVO);
 	}
+
 	/**
 	 * 删除 截单修改单据信息表
 	 */
@@ -121,6 +119,7 @@ public class DeadlineController extends BladeController {
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(deadlineService.removeByIds(Func.toLongList(ids)));
 	}
+
 	/**
 	 * 单据请核
 	 */
@@ -146,7 +145,7 @@ public class DeadlineController extends BladeController {
 	 */
 	@GetMapping("/generateDeadline")
 	@RepeatSubmit
-	public R generateDeadline(@RequestParam("billId")Long billId) {
+	public R generateDeadline(@RequestParam("billId") Long billId) {
 		DeadlineVO declare = deadlineService.generateDeadline(billId);
 		return R.data(declare);
 	}

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/ContainersMapper.xml

@@ -86,7 +86,7 @@
         se.voyage_no as voyageNo,
         se.pol_cn_name as polName,
         se.pod_cn_name as podName,
-        cn.container_number as containerNumber,
+        sc.container_number as containerNumber,
         se.box_belongs_to as boxBelongsTo,
         cn.bus_type as busType,
         sc.cntr_no as cntrNo,
@@ -192,7 +192,7 @@
         se.voyage_no as voyageNo,
         se.pol_cn_name as polName,
         se.pod_cn_name as podName,
-        cn.container_number as containerNumber,
+        sc.container_number as containerNumber,
         se.box_belongs_to as boxBelongsTo,
         cn.bus_type as busType,
         sc.cntr_no as cntrNo,

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

@@ -1747,6 +1747,16 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
 			.eq(Bills::getIsDeleted, 0)
 			.in(Bills::getId, Func.toLongList(ids)));
+		if (!billsList.isEmpty()){
+			List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+				.eq(PreContainers::getIsDeleted,0)
+				.eq(PreContainers::getContainerNumberStatus,"已选择")
+				.eq(PreContainers::getTenantId,AuthUtil.getTenantId())
+				.in(PreContainers::getPid,Func.toLongList(ids)));
+			if (!preContainersList.isEmpty()){
+				throw new RuntimeException("已占用放箱号,请先撤销后再退舱");
+			}
+		}
 		for (Bills item : billsList) {
 			int version = StringUtil.isBlank(item.getVersion()) ? 1 : Integer.parseInt(item.getVersion());
 			item.setVersion(String.valueOf(version + 1));

+ 0 - 3
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/ContainersServiceImpl.java

@@ -702,9 +702,6 @@ public class ContainersServiceImpl extends ServiceImpl<ContainersMapper, Contain
 		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
 			excel.setBranchId(AuthUtil.getDeptId());
 		}
-		if ("SI".equals(excel.getBusinessType())) {
-			excel.setWhetherFee("0");
-		}
 		return page.setRecords(baseMapper.updatePodStationPage(page, excel));
 	}
 

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

@@ -427,7 +427,7 @@ public class DeadlineServiceImpl extends ServiceImpl<DeadlineMapper, Deadline> i
 				deadlineContainers.setDeadlineGrossWeight(item.getGrossWeight());
 				deadlineContainers.setDeadlineMeasurement(item.getMeasurement());
 				deadlineContainers.setDeadlineVgmWeight(item.getVgmWeight());
-				deadlineContainers.setDeadlineTare(item.getCntrNo());
+				deadlineContainers.setDeadlineTare(item.getTare() + "");
 				deadlineContainers.setSrcItemId(item.getId());
 				deadlineContainersList.add(deadlineContainers);
 			}

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

@@ -55,6 +55,7 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -362,7 +363,10 @@ public class SeaContainerNumberItemServiceImpl extends ServiceImpl<SeaContainerN
 		if (containerNumberItemList.isEmpty()) {
 			throw new RuntimeException("未查到放箱号数据");
 		}
-		for (SeaContainerNumberItem item : containerNumberItemList){
+		for (SeaContainerNumberItem item : containerNumberItemList) {
+			if (Objects.equals(item.getActualOccupyNum(), item.getOutNum()) && "1".equals(item.getWhetherAppearStatus())) {
+				throw new RuntimeException("放箱号" + item.getContainerNumber() + "已全部出场。撤销识别");
+			}
 			item.setUpdateUserName(AuthUtil.getUserName());
 			item.setUpdateTime(new Date());
 			item.setUpdateUser(AuthUtil.getUserId());
@@ -467,34 +471,68 @@ public class SeaContainerNumberItemServiceImpl extends ServiceImpl<SeaContainerN
 			throw new RuntimeException("未查到对应放箱号单据");
 		}
 		List<PutBox> putBoxes = new ArrayList<>();
-		for (SeaContainerNumberItem item : preContainers.getContainerNumberItemList()) {
-			item.setUpdateTime(new Date());
-			item.setUpdateUser(AuthUtil.getUserId());
-			item.setUpdateUserName(AuthUtil.getUserName());
-			int poor = item.getActualOccupyNum() - item.getOccupyNum();
-			item.setOccupyBalance(poor);
-			if (poor != 0) {
+		List<SeaContainerNumberItem> containerNumberItemListOld = preContainers.getContainerNumberItemList().stream().filter(e ->
+			ObjectUtils.isNotNull(e.getId())).collect(Collectors.toList());
+		List<SeaContainerNumberItem> containerNumberItemListNew = preContainers.getContainerNumberItemList().stream().filter(e ->
+			ObjectUtils.isNull(e.getId())).collect(Collectors.toList());
+		List<Long> deteleIdList = new ArrayList<>();
+		if (!containerNumberItemListOld.isEmpty()) {
+			for (SeaContainerNumberItem item : containerNumberItemListOld) {
 				PutBox putBox = putBoxList.stream().filter(e -> e.getId().equals(item.getSrcId())).findFirst().orElse(null);
-				if (putBox != null) {
-					putBox.setUpdateTime(new Date());
-					putBox.setUpdateUser(AuthUtil.getUserId());
-					putBox.setUpdateUserName(AuthUtil.getUserName());
-					if (poor < 0) {
-						if (putBox.getRemainingNum() < poor) {
-							throw new RuntimeException("可用箱量不足");
+				item.setUpdateTime(new Date());
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				int poor = item.getActualOccupyNum() - item.getOccupyNum();
+				item.setOccupyBalance(poor);
+				if (poor != 0) {
+					if (putBox != null) {
+						putBox.setUpdateTime(new Date());
+						putBox.setUpdateUser(AuthUtil.getUserId());
+						putBox.setUpdateUserName(AuthUtil.getUserName());
+						if (poor < 0) {
+							if (putBox.getRemainingNum() < poor) {
+								throw new RuntimeException("可用箱量不足");
+							}
 						}
+						putBox.setOccupyNum(putBox.getOccupyNum() - poor);
+						putBox.setRemainingNum(putBox.getRemainingNum() + poor);
+						putBoxes.add(putBox);
 					}
-					putBox.setOccupyNum(putBox.getOccupyNum() - poor);
-					putBox.setRemainingNum(putBox.getRemainingNum() + poor);
-					putBoxes.add(putBox);
+					item.setActualOccupyNum(item.getOccupyNum());
 				}
+				if (item.getOccupyNum() == 0) {
+					deteleIdList.add(item.getId());
+				}
+			}
+			this.updateBatchById(containerNumberItemListOld);
+			if (!deteleIdList.isEmpty()) {
+				this.removeByIds(deteleIdList);
+			}
+		}
+		if (!containerNumberItemListNew.isEmpty()) {
+			for (PutBox item : putBoxList) {
+				item.setUpdateTime(new Date());
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				SeaContainerNumberItem containerNumberItem = containerNumberItemListNew.stream()
+					.filter(e -> e.getSrcId().equals(item.getId())).findFirst().orElse(null);
+				if (containerNumberItem != null) {
+					item.setOccupyNum(item.getOccupyNum() + containerNumberItem.getOccupyNum());
+					item.setRemainingNum(item.getRemainingNum() - containerNumberItem.getOccupyNum());
+					putBoxes.add(item);
+				}
+			}
+			for (SeaContainerNumberItem item : containerNumberItemListNew) {
 				item.setActualOccupyNum(item.getOccupyNum());
+				item.setCreateTime(new Date());
+				item.setCreateUser(AuthUtil.getUserId());
+				item.setCreateUserName(AuthUtil.getUserName());
 			}
+			this.saveBatch(containerNumberItemListNew);
 		}
 		if (!putBoxes.isEmpty()) {
 			putBoxService.updateBatchByIdAndVersion(putBoxes);
 		}
-		this.updateBatchById(preContainers.getContainerNumberItemList());
 		return R.data("操作成功");
 	}
 

+ 248 - 395
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -74,10 +74,10 @@ import org.springblade.los.finance.operatingExpenses.entity.OperatingExpenses;
 import org.springblade.los.finance.operatingExpenses.mapper.OperatingExpensesMapper;
 import org.springblade.los.finance.stl.entity.FinStlBills;
 import org.springblade.los.finance.stl.mapper.FinStlBillsMapper;
+import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
@@ -1535,245 +1535,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				if (bills == null) {
 					throw new RuntimeException("未查到对应海运单据信息");
 				}
+				//更新原单据数据
 				this.updateBillsData(bills, deadline);
-				BFees fees = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
-					.eq(BFees::getTenantId, AuthUtil.getTenantId())
-					.eq(BFees::getIsDeleted, 0)
-					.eq(BFees::getCode, "GDF"));
-				if (fees == null) {
-					throw new RuntimeException("请先维护“改单费”费用信息");
-				}
-				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-					.eq(FeeCenter::getIsDeleted, 0)
-					.eq(FeeCenter::getFeeCode, fees.getCode())
-					.eq(FeeCenter::getPid, bills.getId())
-					.eq(FeeCenter::getDc, "D"));
-				if (feeCenterList.isEmpty()) {
-					String amendmentFee = sysClient.getParamService("amendment.fee");
-					String deptName = "";
-					String branchId = AuthUtil.getDeptId();
-					if (ObjectUtils.isNotNull(branchId)) {
-						R<String> res = sysClient.getDeptName(Long.parseLong(branchId));
-						if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
-							deptName = res.getData();
-						}
-					}
-					Date date;
-					if ("SE".equals(bills.getBusinessType())) {
-						if (ObjectUtils.isNotNull(bills.getActualEtd())) {
-							date = bills.getActualEtd();
-						} else {
-							date = bills.getEtd();
-						}
-					} else {
-						if (ObjectUtils.isNotNull(bills.getActualEta())) {
-							date = bills.getActualEta();
-						} else {
-							date = bills.getEta();
-						}
-					}
-					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) {
-						throw new RuntimeException("未找到可用业务类型");
-					}
-					String exrateType = currencyUtils.standardCurrency(branchId);
-					List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1", branchId);
-					int count = 1;
-					FeeCenter feeCenter = new FeeCenter();
-					feeCenter.setBranchId(branchId);
-					feeCenter.setBranchName(deptName);
-					feeCenter.setBillBranchId(bills.getBranchId());
-					feeCenter.setBillBranchName(bills.getBranchName());
-					feeCenter.setBookingAgentId(bills.getBookingAgentId());
-					feeCenter.setBookingAgentCnName(bills.getBookingAgentCnName());
-					feeCenter.setBookingAgentEnName(bills.getBookingAgentEnName());
-					feeCenter.setQuantityCntrDescr(bills.getQuantityCntrDescr());
-					feeCenter.setTeu(bills.getTeu());
-					feeCenter.setPid(bills.getId());
-					feeCenter.setCntrNo(bills.getQuantityCntrTypesDescr());
-					feeCenter.setBillNo(bills.getBillNo());
-					feeCenter.setBusinessType(bills.getBusinessType());
-					feeCenter.setBillType(bills.getBillType());
-					feeCenter.setBillDate(bills.getBillDate());
-					feeCenter.setBillCorpId(bills.getCorpId());
-					feeCenter.setBillCorpCnName(bills.getCorpCnName());
-					feeCenter.setBillCorpEnName(bills.getCorpEnName());
-					feeCenter.setBillShortName(bills.getCorpCnName());
-					feeCenter.setLineId(bills.getLineId());
-					feeCenter.setLineCnName(bills.getLineCnName());
-					feeCenter.setLineEnName(bills.getLineEnName());
-					feeCenter.setVesselId(bills.getVesselId());
-					feeCenter.setVesselCnName(bills.getVesselCnName());
-					feeCenter.setVesselEnName(bills.getVesselEnName());
-					feeCenter.setVoyageNo(bills.getVoyageNo());
-					feeCenter.setMblno(bills.getMblno());
-					feeCenter.setHblno(bills.getHblno());
-					feeCenter.setEtd(bills.getEtd());
-					feeCenter.setEta(bills.getEta());
-					feeCenter.setPolId(bills.getPolId());
-					feeCenter.setPolCode(bills.getPolCode());
-					feeCenter.setPolCnName(bills.getPolCnName());
-					feeCenter.setPolEnName(bills.getPolEnName());
-					feeCenter.setPodId(bills.getPodId());
-					feeCenter.setPodCode(bills.getPodCode());
-					feeCenter.setPodCnName(bills.getPodCnName());
-					feeCenter.setPodEnName(bills.getPodEnName());
-					feeCenter.setDc("D");
-					feeCenter.setPaymode(bills.getMpaymode());
-					feeCenter.setSort(count);
-					feeCenter.setCorpType("国内直接客户");
-					feeCenter.setCorpId(bills.getCorpId());
-					feeCenter.setCorpCnName(bills.getShortName());
-					feeCenter.setCorpEnName(bills.getCorpEnName());
-					feeCenter.setShortName(bills.getShortName());
-					BCorps bCorps = bCorpsService.getById(bills.getCorpId());
-					if (bCorps != null) {
-						feeCenter.setGenerationCorpId(bCorps.getBookingAgentId());
-						feeCenter.setGenerationCorpCnName(bCorps.getBookingAgentCnName());
-						feeCenter.setGenerationCorpEnName(bCorps.getBookingAgentEnName());
-					}
-					feeCenter.setFeeId(fees.getId());
-					feeCenter.setFeeCode(fees.getCode());
-					feeCenter.setFeeCnName(fees.getCnName());
-					feeCenter.setFeeEnName(fees.getEnName());
-					feeCenter.setCurCode(fees.getCurNo());
-					if (ObjectUtils.isNull(amendmentFee) || "获取数据失败".equals(amendmentFee)) {
-						throw new RuntimeException("请先维护改单费参数");
-					}
-					feeCenter.setPrice(new BigDecimal(amendmentFee));
-					if (exrateType.equals(feeCenter.getCurCode())) {
-						feeCenter.setExrate(new BigDecimal("1.00"));
-					} else {
-						feeCenter.setExrate(currencyUtils.obtainExrate(feeCenter.getDc(), curExrateList, feeCenter.getCurCode(), "1"));
-					}
-					feeCenter.setUnitNo(fees.getUnitNo());
-					feeCenter.setQuantity(new BigDecimal("1"));
-					feeCenter.setAmount(feeCenter.getPrice().multiply(new BigDecimal("1")));
-					// 金额
-					BigDecimal amount;
-					amount = feeCenter.getQuantity().multiply(feeCenter.getPrice());
-					feeCenter.setAmount(amount);
-					if (ObjectUtils.isNull(feeCenter.getAmount())) {
-						feeCenter.setAmount(new BigDecimal("0"));
-					}
-					if (exrateType.equals(feeCenter.getCurCode())) {
-						feeCenter.setAmountLoc(feeCenter.getAmount());
-					} else {
-						if (new BigDecimal("0").compareTo(feeCenter.getAmount()) != 0) {
-							feeCenter.setAmountLoc(feeCenter.getAmount().multiply(feeCenter.getExrate()));
-						} else {
-							feeCenter.setAmountLoc(new BigDecimal("0"));
-						}
-					}
-					feeCenter.setUnsettledAmount(feeCenter.getAmount());
-					feeCenter.setCreateUser(AuthUtil.getUserId());
-					feeCenter.setCreateUserName(AuthUtil.getUserName());
-					feeCenter.setCreateTime(new Date());
-
-					FinAccBills data = new FinAccBills();
-					data.setCurCode(feeCenter.getCurCode());
-					data.setGenerationCorpId(feeCenter.getGenerationCorpId());
-					data.setGenerationCorpCnName(feeCenter.getGenerationCorpCnName());
-					data.setGenerationCorpEnName(feeCenter.getGenerationCorpEnName());
-					data.setCreateTime(new Date());
-					data.setCreateUser(AuthUtil.getUserId());
-					data.setCreateUserName(AuthUtil.getUserName());
-					data.setCreateDept(feeCenter.getCreateDept());
-					data.setCreateDeptName(feeCenter.getCreateDeptName());
-					data.setBranchId(feeCenter.getBranchId());
-					data.setBranchName(feeCenter.getBranchName());
-					data.setDeptId(Long.parseLong(feeCenter.getBranchId()));
-					data.setDeptName(feeCenter.getBranchName());
-					data.setBookingAgentId(feeCenter.getBookingAgentId());
-					data.setBookingAgentCnName(feeCenter.getBookingAgentCnName());
-					data.setBookingAgentEnName(feeCenter.getBookingAgentEnName());
-					data.setTaxRate(feeCenter.getTaxRate());
-					data.setAmountTax(feeCenter.getAmountTax());
-					data.setBillBranchId(feeCenter.getBillBranchId());
-					data.setBillBranchName(feeCenter.getBillBranchName());
-					BusinessBillNo businessBillNo = new BusinessBillNo();
-					businessBillNo.setBusinessTypeId(businessType.getId());
-					businessBillNo.setCode("HYZD");
-					businessBillNo.setBranchId(feeCenter.getBranchId());
-					R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
-					if (!clientBillNo.isSuccess()) {
-						throw new RuntimeException("生成账单编号失败");
-					}
-					data.setBillNo((String) clientBillNo.getData());
-					data.setBillDate(feeCenter.getBillDate());
-					data.setAccountType("LOCAL");
-					data.setAccountDc(feeCenter.getDc());
-					data.setAccountDate(feeCenter.getBillDate());
-					data.setBillKey(feeCenter.getBillKey());
-					data.setBusinessType(feeCenter.getBusinessType());
-					data.setBillType(feeCenter.getBillType());
-					data.setBusinessBillId(feeCenter.getPid());
-					data.setBusinessBillNo(feeCenter.getBillNo());
-					data.setBusinessDate(feeCenter.getBillDate());
-					data.setSrcId(bills.getSrcId());
-					data.setSrcCnName(bills.getSrcCnName());
-					data.setSrcEnName(bills.getSrcEnName());
-					data.setSrcType(bills.getSrcType());
-					data.setOperatorId(bills.getOperatorId());
-					data.setOperatorName(bills.getOperatorName());
-					data.setQuantityCntrDescr(bills.getQuantityCntrDescr());
-					data.setPaymode(feeCenter.getPaymode());
-					data.setCorpId(feeCenter.getCorpId());
-					data.setCorpCnName(feeCenter.getCorpCnName());
-					data.setCorpEnName(feeCenter.getCorpEnName());
-					data.setCorpArgreementNo(bills.getCorpArgreementNo());
-					data.setBillCorpId(feeCenter.getBillCorpId());
-					data.setBillCorpCnName(feeCenter.getBillCorpCnName());
-					data.setBillCorpEnName(feeCenter.getBillCorpEnName());
-					data.setVesselId(feeCenter.getVesselId());
-					data.setVesselCnName(feeCenter.getVesselCnName());
-					data.setVesselEnName(feeCenter.getVesselEnName());
-					data.setVoyageNo(feeCenter.getVoyageNo());
-					data.setMblno(feeCenter.getMblno());
-					data.setHblno(feeCenter.getHblno());
-					data.setRefno(bills.getRefno());
-					data.setBookingNo(bills.getBookingNo());
-					data.setEtd(feeCenter.getEtd());
-					data.setEta(feeCenter.getEta());
-					data.setPolId(feeCenter.getPolId());
-					data.setPolCnName(feeCenter.getPolCnName());
-					data.setPolEnName(feeCenter.getPolEnName());
-					data.setPolNamePrint(bills.getPolNamePrint());
-					data.setPodId(feeCenter.getPodId());
-					data.setPodCnName(feeCenter.getPodCnName());
-					data.setPodCode(feeCenter.getPodCode());
-					data.setPodEnName(feeCenter.getPodEnName());
-					data.setPodNamePrint(bills.getPodNamePrint());
-					data.setTrackingNumber(feeCenter.getTrackingNumber());
-					BigDecimal amountDrLoc = new BigDecimal("0.00");
-					if (exrateType.equals(feeCenter.getCurCode())) {
-						data.setAmountDr(feeCenter.getAmount());
-					} else {
-						data.setAmountDrUsd(feeCenter.getAmount());
-					}
-					if (ObjectUtils.isNotNull(data.getAmountDrUsd()) && ObjectUtils.isNotNull(feeCenter.getExrate())) {
-						BigDecimal drCny = data.getAmountDrUsd().multiply(feeCenter.getExrate());
-						amountDrLoc = amountDrLoc.add(data.getAmountDr()).add(drCny);
-					}
-					data.setAmountDrLoc(amountDrLoc);
-					data.setExrate(feeCenter.getExrate());
-					finAccBillsService.save(data);
-					feeCenter.setAccBillId(data.getId());
-					feeCenter.setAccBillNo(data.getBillNo());
-					feeCenter.setAccDate(data.getBillDate());
-					feeCenter.setAccAmount(amountDrLoc);
-					feeCenter.setAccStatus(1);
-					feeCenter.setAccById(AuthUtil.getUserId());
-					feeCenter.setAccByName(AuthUtil.getUserName());
-					feeCenter.setAuditStatus("4");
-					feeCenter.setVersion("1");
-					feeCenterService.save(feeCenter);
-				}
+				//生成改单费
+				this.generateAmendmentFee(bills);
 				messageBody = "您的提单修改审核已通过" + ",业务单号:" + proecessTemp.getBillNo();
 			}
 			//不通过
@@ -1797,6 +1562,243 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 		baseMapper.updateById(proecessTemp);
 	}
 
+	/**
+	 * 生成改单费
+	 *
+	 * @param bills 海运出口单据信息
+	 */
+	private void generateAmendmentFee(Bills bills) {
+		BFees fees = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
+			.eq(BFees::getTenantId, AuthUtil.getTenantId())
+			.eq(BFees::getIsDeleted, 0)
+			.eq(BFees::getCode, "GDF"));
+		if (fees == null) {
+			throw new RuntimeException("请先维护“改单费”费用信息");
+		}
+		BigDecimal amendmentFee = new BigDecimal("0");
+		String deptName = "";
+		String branchId = AuthUtil.getDeptId();
+		R<Dept> res = sysClient.getDept(Long.parseLong(branchId));
+		if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+			deptName = res.getData().getDeptName();
+			amendmentFee = res.getData().getAmendmentFee();
+		}
+		if (new BigDecimal("0.00").compareTo(amendmentFee) != 0) {
+			Date date;
+			if ("SE".equals(bills.getBusinessType())) {
+				if (ObjectUtils.isNotNull(bills.getActualEtd())) {
+					date = bills.getActualEtd();
+				} else {
+					date = bills.getEtd();
+				}
+			} else {
+				if (ObjectUtils.isNotNull(bills.getActualEta())) {
+					date = bills.getActualEta();
+				} else {
+					date = bills.getEta();
+				}
+			}
+			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) {
+				throw new RuntimeException("未找到可用业务类型");
+			}
+			String exrateType = currencyUtils.standardCurrency(branchId);
+			List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1", branchId);
+			int count = 1;
+			FeeCenter feeCenter = new FeeCenter();
+			feeCenter.setBranchId(branchId);
+			feeCenter.setBranchName(deptName);
+			feeCenter.setBillBranchId(bills.getBranchId());
+			feeCenter.setBillBranchName(bills.getBranchName());
+			feeCenter.setBookingAgentId(bills.getBookingAgentId());
+			feeCenter.setBookingAgentCnName(bills.getBookingAgentCnName());
+			feeCenter.setBookingAgentEnName(bills.getBookingAgentEnName());
+			feeCenter.setQuantityCntrDescr(bills.getQuantityCntrDescr());
+			feeCenter.setTeu(bills.getTeu());
+			feeCenter.setPid(bills.getId());
+			feeCenter.setCntrNo(bills.getQuantityCntrTypesDescr());
+			feeCenter.setBillNo(bills.getBillNo());
+			feeCenter.setBusinessType(bills.getBusinessType());
+			feeCenter.setBillType(bills.getBillType());
+			feeCenter.setBillDate(bills.getBillDate());
+			feeCenter.setBillCorpId(bills.getCorpId());
+			feeCenter.setBillCorpCnName(bills.getCorpCnName());
+			feeCenter.setBillCorpEnName(bills.getCorpEnName());
+			feeCenter.setBillShortName(bills.getCorpCnName());
+			feeCenter.setLineId(bills.getLineId());
+			feeCenter.setLineCnName(bills.getLineCnName());
+			feeCenter.setLineEnName(bills.getLineEnName());
+			feeCenter.setVesselId(bills.getVesselId());
+			feeCenter.setVesselCnName(bills.getVesselCnName());
+			feeCenter.setVesselEnName(bills.getVesselEnName());
+			feeCenter.setVoyageNo(bills.getVoyageNo());
+			feeCenter.setMblno(bills.getMblno());
+			feeCenter.setHblno(bills.getHblno());
+			feeCenter.setEtd(bills.getEtd());
+			feeCenter.setEta(bills.getEta());
+			feeCenter.setPolId(bills.getPolId());
+			feeCenter.setPolCode(bills.getPolCode());
+			feeCenter.setPolCnName(bills.getPolCnName());
+			feeCenter.setPolEnName(bills.getPolEnName());
+			feeCenter.setPodId(bills.getPodId());
+			feeCenter.setPodCode(bills.getPodCode());
+			feeCenter.setPodCnName(bills.getPodCnName());
+			feeCenter.setPodEnName(bills.getPodEnName());
+			feeCenter.setDc("D");
+			feeCenter.setPaymode(bills.getMpaymode());
+			feeCenter.setSort(count);
+			feeCenter.setCorpType("国内直接客户");
+			feeCenter.setCorpId(bills.getCorpId());
+			feeCenter.setCorpCnName(bills.getShortName());
+			feeCenter.setCorpEnName(bills.getCorpEnName());
+			feeCenter.setShortName(bills.getShortName());
+			BCorps bCorps = bCorpsService.getById(bills.getCorpId());
+			if (bCorps != null) {
+				feeCenter.setGenerationCorpId(bCorps.getBookingAgentId());
+				feeCenter.setGenerationCorpCnName(bCorps.getBookingAgentCnName());
+				feeCenter.setGenerationCorpEnName(bCorps.getBookingAgentEnName());
+			}
+			feeCenter.setFeeId(fees.getId());
+			feeCenter.setFeeCode(fees.getCode());
+			feeCenter.setFeeCnName(fees.getCnName());
+			feeCenter.setFeeEnName(fees.getEnName());
+			feeCenter.setCurCode(fees.getCurNo());
+			feeCenter.setPrice(amendmentFee);
+			if (exrateType.equals(feeCenter.getCurCode())) {
+				feeCenter.setExrate(new BigDecimal("1.00"));
+			} else {
+				feeCenter.setExrate(currencyUtils.obtainExrate(feeCenter.getDc(), curExrateList, feeCenter.getCurCode(), "1"));
+			}
+			feeCenter.setUnitNo(fees.getUnitNo());
+			feeCenter.setQuantity(new BigDecimal("1"));
+			feeCenter.setAmount(feeCenter.getPrice().multiply(new BigDecimal("1")));
+			// 金额
+			BigDecimal amount;
+			amount = feeCenter.getQuantity().multiply(feeCenter.getPrice());
+			feeCenter.setAmount(amount);
+			if (ObjectUtils.isNull(feeCenter.getAmount())) {
+				feeCenter.setAmount(new BigDecimal("0"));
+			}
+			if (exrateType.equals(feeCenter.getCurCode())) {
+				feeCenter.setAmountLoc(feeCenter.getAmount());
+			} else {
+				if (new BigDecimal("0").compareTo(feeCenter.getAmount()) != 0) {
+					feeCenter.setAmountLoc(feeCenter.getAmount().multiply(feeCenter.getExrate()));
+				} else {
+					feeCenter.setAmountLoc(new BigDecimal("0"));
+				}
+			}
+			feeCenter.setUnsettledAmount(feeCenter.getAmount());
+			feeCenter.setCreateUser(AuthUtil.getUserId());
+			feeCenter.setCreateUserName(AuthUtil.getUserName());
+			feeCenter.setCreateTime(new Date());
+			feeCenter.setAutomaticGenerated("1");
+
+			FinAccBills data = new FinAccBills();
+			data.setCurCode(feeCenter.getCurCode());
+			data.setGenerationCorpId(feeCenter.getGenerationCorpId());
+			data.setGenerationCorpCnName(feeCenter.getGenerationCorpCnName());
+			data.setGenerationCorpEnName(feeCenter.getGenerationCorpEnName());
+			data.setCreateTime(new Date());
+			data.setCreateUser(AuthUtil.getUserId());
+			data.setCreateUserName(AuthUtil.getUserName());
+			data.setCreateDept(feeCenter.getCreateDept());
+			data.setCreateDeptName(feeCenter.getCreateDeptName());
+			data.setBranchId(feeCenter.getBranchId());
+			data.setBranchName(feeCenter.getBranchName());
+			data.setDeptId(Long.parseLong(feeCenter.getBranchId()));
+			data.setDeptName(feeCenter.getBranchName());
+			data.setBookingAgentId(feeCenter.getBookingAgentId());
+			data.setBookingAgentCnName(feeCenter.getBookingAgentCnName());
+			data.setBookingAgentEnName(feeCenter.getBookingAgentEnName());
+			data.setTaxRate(feeCenter.getTaxRate());
+			data.setAmountTax(feeCenter.getAmountTax());
+			data.setBillBranchId(feeCenter.getBillBranchId());
+			data.setBillBranchName(feeCenter.getBillBranchName());
+			BusinessBillNo businessBillNo = new BusinessBillNo();
+			businessBillNo.setBusinessTypeId(businessType.getId());
+			businessBillNo.setCode("HYZD");
+			businessBillNo.setBranchId(feeCenter.getBranchId());
+			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+			if (!clientBillNo.isSuccess()) {
+				throw new RuntimeException("生成账单编号失败");
+			}
+			data.setBillNo((String) clientBillNo.getData());
+			data.setBillDate(feeCenter.getBillDate());
+			data.setAccountType("LOCAL");
+			data.setAccountDc(feeCenter.getDc());
+			data.setAccountDate(feeCenter.getBillDate());
+			data.setBillKey(feeCenter.getBillKey());
+			data.setBusinessType(feeCenter.getBusinessType());
+			data.setBillType(feeCenter.getBillType());
+			data.setBusinessBillId(feeCenter.getPid());
+			data.setBusinessBillNo(feeCenter.getBillNo());
+			data.setBusinessDate(feeCenter.getBillDate());
+			data.setSrcId(bills.getSrcId());
+			data.setSrcCnName(bills.getSrcCnName());
+			data.setSrcEnName(bills.getSrcEnName());
+			data.setSrcType(bills.getSrcType());
+			data.setOperatorId(bills.getOperatorId());
+			data.setOperatorName(bills.getOperatorName());
+			data.setQuantityCntrDescr(bills.getQuantityCntrDescr());
+			data.setPaymode(feeCenter.getPaymode());
+			data.setCorpId(feeCenter.getCorpId());
+			data.setCorpCnName(feeCenter.getCorpCnName());
+			data.setCorpEnName(feeCenter.getCorpEnName());
+			data.setCorpArgreementNo(bills.getCorpArgreementNo());
+			data.setBillCorpId(feeCenter.getBillCorpId());
+			data.setBillCorpCnName(feeCenter.getBillCorpCnName());
+			data.setBillCorpEnName(feeCenter.getBillCorpEnName());
+			data.setVesselId(feeCenter.getVesselId());
+			data.setVesselCnName(feeCenter.getVesselCnName());
+			data.setVesselEnName(feeCenter.getVesselEnName());
+			data.setVoyageNo(feeCenter.getVoyageNo());
+			data.setMblno(feeCenter.getMblno());
+			data.setHblno(feeCenter.getHblno());
+			data.setRefno(bills.getRefno());
+			data.setBookingNo(bills.getBookingNo());
+			data.setEtd(feeCenter.getEtd());
+			data.setEta(feeCenter.getEta());
+			data.setPolId(feeCenter.getPolId());
+			data.setPolCnName(feeCenter.getPolCnName());
+			data.setPolEnName(feeCenter.getPolEnName());
+			data.setPolNamePrint(bills.getPolNamePrint());
+			data.setPodId(feeCenter.getPodId());
+			data.setPodCnName(feeCenter.getPodCnName());
+			data.setPodCode(feeCenter.getPodCode());
+			data.setPodEnName(feeCenter.getPodEnName());
+			data.setPodNamePrint(bills.getPodNamePrint());
+			data.setTrackingNumber(feeCenter.getTrackingNumber());
+			BigDecimal amountDrLoc = new BigDecimal("0.00");
+			if (exrateType.equals(feeCenter.getCurCode())) {
+				data.setAmountDr(feeCenter.getAmount());
+			} else {
+				data.setAmountDrUsd(feeCenter.getAmount());
+			}
+			if (ObjectUtils.isNotNull(data.getAmountDrUsd()) && ObjectUtils.isNotNull(feeCenter.getExrate())) {
+				BigDecimal drCny = data.getAmountDrUsd().multiply(feeCenter.getExrate());
+				amountDrLoc = amountDrLoc.add(data.getAmountDr()).add(drCny);
+			}
+			data.setAmountDrLoc(amountDrLoc);
+			data.setExrate(feeCenter.getExrate());
+			finAccBillsService.save(data);
+			feeCenter.setAccBillId(data.getId());
+			feeCenter.setAccBillNo(data.getBillNo());
+			feeCenter.setAccDate(data.getBillDate());
+			feeCenter.setAccAmount(amountDrLoc);
+			feeCenter.setAccStatus(1);
+			feeCenter.setAccById(AuthUtil.getUserId());
+			feeCenter.setAccByName(AuthUtil.getUserName());
+			feeCenter.setAuditStatus("4");
+			feeCenter.setVersion("1");
+			feeCenterService.save(feeCenter);
+		}
+	}
+
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void check(LosAuditProecess auditProecess) {
@@ -2015,10 +2017,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 			.eq(DeadlineContainers::getIsDeleted, 0)
 			.eq(DeadlineContainers::getPid, deadline.getId()));
 		List<Containers> containersArrayList = new ArrayList<>();
-		if (!deadlineContainersList.isEmpty() && !containersList.isEmpty()){
-			for (DeadlineContainers item : deadlineContainersList){
-				Containers containers = containersList.stream().filter(e-> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
-				if (containers != null){
+		if (!deadlineContainersList.isEmpty() && !containersList.isEmpty()) {
+			for (DeadlineContainers item : deadlineContainersList) {
+				Containers containers = containersList.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
+				if (containers != null) {
 					boolean containersStatus = false;
 					//箱号
 					if (ObjectUtils.isNotNull(item.getDeadlineCntrNo()) && !item.getDeadlineCntrNo().equals(item.getCntrNo())) {
@@ -2055,12 +2057,12 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 						containers.setTare(new BigDecimal(item.getDeadlineTare()));
 						containersStatus = true;
 					}
-					if (containersStatus){
+					if (containersStatus) {
 						containersArrayList.add(containers);
 					}
 				}
 			}
-			if (!containersArrayList.isEmpty()){
+			if (!containersArrayList.isEmpty()) {
 				containersService.updateBatchById(containersArrayList);
 			}
 		}
@@ -2230,156 +2232,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 			throw new SecurityException("审批开始修改审核状态失败");
 		}
 		if ("4".equals(number)) {
-			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
-				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
-				.eq(BusinessType::getIsDeleted, 0)
-				.eq(BusinessType::getStatus, 0)
-				.eq(BusinessType::getCode, "YWZD"));
-			if (businessType == null) {
-				throw new RuntimeException("未找到可用业务类型");
-			}
-			Bills bills = new Bills();
-			if ("HYJK,HYCK".contains(expenseApplication.getSrcType())) {
-				bills = billsMapper.selectById(expenseApplication.getSrcId());
-			}
-			for (FeeCenter item : feeCenterList) {
-				if (1 == item.getAccStatus()) {
-					throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单");
-				}
-				FinAccBills data = new FinAccBills();
-				data.setCurCode(item.getCurCode());
-				data.setTrackingNumber(item.getTrackingNumber());
-				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.setBillBranchId(bills.getBranchId());
-				data.setBillBranchName(bills.getBranchName());
-				if (ObjectUtils.isNull(item.getBranchId())) {
-					data.setCreateDept(AuthUtil.getDeptId());
-					R<String> res = sysClient.getDeptName(Long.parseLong(AuthUtil.getDeptId()));
-					if (res.isSuccess()) {
-						data.setCreateDeptName(res.getData());
-						data.setBranchName(res.getData());
-						data.setDeptName(res.getData());
-					}
-					data.setBranchId(item.getBranchId());
-					data.setDeptId(Long.parseLong(AuthUtil.getDeptId()));
-				} else {
-					data.setCreateDept(item.getBranchId());
-					data.setCreateDeptName(item.getBranchName());
-					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.setQuantityCntrDescr(item.getQuantityCntrDescr());
-				data.setTeu(item.getTeu());
-				BusinessBillNo businessBillNo = new BusinessBillNo();
-				businessBillNo.setBusinessTypeId(businessType.getId());
-				businessBillNo.setCode("YWZD");
-				businessBillNo.setBranchId(item.getBranchId());
-				R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
-				if (!clientBillNo.isSuccess()) {
-					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-					throw new RuntimeException("生成订单编号失败");
-				}
-				data.setWarehousingDate(item.getStorageDate());
-				data.setOutboundDate(item.getOutboundDate());
-				data.setBillNo((String) clientBillNo.getData());
-				data.setBillDate(new Date());
-				data.setAccountDc(item.getDc());
-				data.setAccountDate(item.getBillDate());
-				data.setBusinessType(item.getBusinessType());
-				data.setBusinessBillId(item.getPid());
-				data.setBusinessBillNo(item.getBillNo());
-				data.setBusinessDate(item.getBillDate());
-				data.setBillType(item.getBillType());
-				data.setSrcId(item.getSrcId());
-				data.setSrcCnName(item.getSrcCnName());
-				data.setSrcEnName(item.getSrcEnName());
-				data.setSrcType(item.getSrcType());
-				if (bills != null) {
-					data.setOperatorId(bills.getOperatorId());
-					data.setOperatorName(bills.getOperatorName());
-				} else {
-					data.setOperatorId(expenseApplication.getCreateUser());
-					data.setOperatorName(expenseApplication.getCreateUserName());
-				}
-				data.setPaymode(item.getPaymode());
-				data.setCorpId(item.getCorpId());
-				data.setCorpCnName(item.getCorpCnName());
-				data.setCorpEnName(item.getCorpEnName());
-				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(item.getRefno());
-				data.setBookingNo(item.getBookingNo());
-				data.setEtd(item.getEtd());
-				data.setEta(item.getEta());
-				data.setPolId(item.getPolId());
-				data.setPolCnName(item.getPolCnName());
-				data.setPolEnName(item.getPolEnName());
-				data.setPodId(item.getPodId());
-				data.setPodCnName(item.getPodCnName());
-				data.setPodCode(item.getPodCode());
-				data.setPodEnName(item.getPodEnName());
-				BigDecimal amountDrLoc = new BigDecimal("0.00");
-				BigDecimal amountCrLoc = new BigDecimal("0.00");
-				if ("CNY".equals(item.getCurCode())) {
-					if ("D".equals(item.getDc())) {
-						data.setAmountDr(item.getAmount());
-						data.setAmountCr(new BigDecimal("0.00"));
-					} else {
-						data.setAmountCr(item.getAmount());
-						data.setAmountDr(new BigDecimal("0.00"));
-					}
-					data.setAmountDrUsd(new BigDecimal("0.00"));
-					data.setAmountCrUsd(new BigDecimal("0.00"));
-				} else {
-					if ("D".equals(item.getDc())) {
-						data.setAmountDrUsd(item.getAmount());
-						data.setAmountCrUsd(new BigDecimal("0.00"));
-					} else {
-						data.setAmountDrUsd(new BigDecimal("0.00"));
-						data.setAmountCrUsd(item.getAmount());
-					}
-					data.setAmountDr(new BigDecimal("0.00"));
-					data.setAmountCr(new BigDecimal("0.00"));
-				}
-				if (ObjectUtils.isNotNull(data.getAmountCrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
-					BigDecimal crCny = data.getAmountCrUsd().multiply(item.getExrate());
-					amountCrLoc = amountCrLoc.add(data.getAmountCr()).add(crCny);
-				}
-				if (ObjectUtils.isNotNull(data.getAmountDrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
-					BigDecimal drCny = data.getAmountDrUsd().multiply(item.getExrate());
-					amountDrLoc = amountDrLoc.add(data.getAmountDr()).add(drCny);
-				}
-				data.setAmountDrLoc(amountDrLoc);
-				data.setAmountCrLoc(amountCrLoc);
-				finAccBillsService.save(data);
-				item.setAccBillId(data.getId());
-				item.setAccBillNo(data.getBillNo());
-				item.setAccDate(data.getBillDate());
-				item.setAccAmount(amountDrLoc.add(amountCrLoc));
-				item.setAccStatus(1);
-				item.setAccById(AuthUtil.getUserId());
-				item.setAccByName(AuthUtil.getUserName());
-				item.setAuditStatus(number);
-				int version = StringUtil.isBlank(item.getVersion()) ? 1 : Integer.parseInt(item.getVersion());
-				item.setVersion(String.valueOf(version + 1));
-			}
+			finAccBillsService.generateBillV1(expenseApplication.getSrcType(), expenseApplication.getSrcId() + "", feeCenterList);
 		} else if ("0".equals(number)) {
 			for (FeeCenter item : feeCenterList) {
 				item.setUpdateTime(new Date());

+ 27 - 3
blade-service/blade-los/src/main/java/org/springblade/los/enums/BoxDynamicsEnums.java

@@ -21,9 +21,13 @@ public enum BoxDynamicsEnums {
 	 */
 	K("K", "驳空箱"),
 	/**
-	 * 无货返空
+	 * 退关箱
 	 */
-	TJ("TJ", "无货返空"),
+	TJ("TJ", "退关箱"),
+	/**
+	 * 调拨新箱
+	 */
+	X("X", "调拨新箱"),
 	/**
 	 * 新箱
 	 */
@@ -68,7 +72,27 @@ public enum BoxDynamicsEnums {
 	/**
 	 * 直接调运出场
 	 */
-	ZD("ZD", "直接调运出场");
+	ZD("ZD", "直接调运出场"),
+	/**
+	 * 起租箱出场
+	 */
+	Q("Q", "起租箱出场"),
+	/**
+	 * 场内起租出场
+	 */
+	QZC("QZC", "场内起租出场"),
+	/**
+	 * 新箱出场
+	 */
+	XO("XO", "新箱出场"),
+	/**
+	 * 直接退租出场
+	 */
+	ZT("ZT", "直接退租出场"),
+	/**
+	 * 场内退租出场
+	 */
+	CN("CN", "场内退租出场");
 
 	public final String info;
 

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFinAccBillsService.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.core.tool.api.R;
 import org.springblade.los.excel.FeeCountByCorpExcel;
+import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.entity.FinAccBills;
 import org.springblade.los.finance.fee.entity.ListAccBillVO;
 import org.springblade.los.finance.fee.vo.FinAccBillsVO;
@@ -84,4 +85,6 @@ public interface IFinAccBillsService extends IService<FinAccBills> {
 	List<FeeCountByCorpExcel> listFeeCountByCorpExport(String dc, Long corpId);
 
 	List<FinAccBillsVO> listAccBillV2(ListAccBillVO listAccBillVO);
+
+    void generateBillV1(String srcType, String srcIds, List<FeeCenter> feeCenterList);
 }

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

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.basic.business.entity.BusinessType;
@@ -128,7 +129,7 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 			if (1 == item.getAccStatus()) {
 				throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单");
 			}
-			if (ObjectUtils.isNull(item.getBillDate())){
+			if (ObjectUtils.isNull(item.getBillDate())) {
 				throw new RuntimeException("费用:" + item.getFeeCnName() + "缺少业务日期,请重新保存");
 			}
 			item.setBillKey(item.getId() + "");
@@ -490,6 +491,178 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 		return billsMapper.listAccBillV2(finAccBills);
 	}
 
+	@Override
+	public void generateBillV1(String srcType, String srcIds, List<FeeCenter> feeCenterList) {
+		if (!feeCenterList.isEmpty()) {
+			List<Bills> billsList = new ArrayList<>();
+			if ("HYJK,HYCK".contains(srcType)) {
+				billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getIsDeleted, 0)
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.in(Bills::getId, Func.toLongList(srcIds)));
+			}
+			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
+				.eq(BusinessType::getIsDeleted, 0)
+				.eq(BusinessType::getStatus, 0)
+				.eq(BusinessType::getCode, "YWZD"));
+			if (businessType == null) {
+				throw new RuntimeException("未找到可用业务类型");
+			}
+			for (FeeCenter item : feeCenterList) {
+				if (ObjectUtils.isNull(item.getCorpId())) {
+					throw new RuntimeException("单号:" + item.getBillNo() + "费用明细结算单位不能为空");
+				}
+				if (1 == item.getAccStatus()) {
+					throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单");
+				}
+				if (ObjectUtils.isNull(item.getBillDate())) {
+					throw new RuntimeException("费用:" + item.getFeeCnName() + "缺少业务日期,请重新保存");
+				}
+				FinAccBills data = new FinAccBills();
+				data.setTrackingNumber(item.getTrackingNumber());
+				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.setTaxRate(item.getTaxRate());
+				data.setAmountTax(item.getAmountTax());
+				data.setExrate(item.getExrate());
+				if (ObjectUtils.isNull(item.getBranchId())) {
+					data.setCreateDept(AuthUtil.getDeptId());
+					R<String> res = sysClient.getDeptName(Long.parseLong(AuthUtil.getDeptId()));
+					if (res.isSuccess()) {
+						data.setCreateDeptName(res.getData());
+						data.setBranchName(res.getData());
+						data.setDeptName(res.getData());
+					}
+					data.setBranchId(AuthUtil.getDeptId());
+					data.setDeptId(Long.parseLong(AuthUtil.getDeptId()));
+				} else {
+					data.setCreateDept(item.getBranchId());
+					data.setCreateDeptName(item.getBranchName());
+					data.setBranchId(item.getBranchId());
+					data.setBranchName(item.getBranchName());
+					data.setDeptId(Long.parseLong(item.getBranchId()));
+					data.setDeptName(item.getBranchName());
+				}
+				data.setBillBranchId(item.getBillBranchId());
+				data.setBillBranchName(item.getBillBranchName());
+				data.setBookingAgentId(item.getBookingAgentId());
+				data.setBookingAgentCnName(item.getBookingAgentCnName());
+				data.setBookingAgentEnName(item.getBookingAgentEnName());
+				data.setQuantityCntrDescr(item.getQuantityCntrDescr());
+				data.setTeu(item.getTeu());
+				BusinessBillNo businessBillNo = new BusinessBillNo();
+				businessBillNo.setBusinessTypeId(businessType.getId());
+				businessBillNo.setCode("YWZD");
+				businessBillNo.setBranchId(item.getBranchId());
+				R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+				if (!clientBillNo.isSuccess()) {
+					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+					throw new RuntimeException("生成订单编号失败");
+				}
+				data.setWarehousingDate(item.getStorageDate());
+				data.setOutboundDate(item.getOutboundDate());
+				data.setBillNo((String) clientBillNo.getData());
+				data.setBillDate(item.getBillDate());
+				data.setAccountDc(item.getDc());
+				data.setAccountDate(item.getBillDate());
+				data.setBusinessType(item.getBusinessType());
+				data.setBusinessBillId(item.getPid());
+				data.setBusinessBillNo(item.getBillNo());
+				data.setBusinessDate(item.getBillDate());
+				data.setBillType(item.getBillType());
+				data.setSrcId(item.getSrcId());
+				data.setSrcCnName(item.getSrcCnName());
+				data.setSrcEnName(item.getSrcEnName());
+				data.setSrcType(item.getSrcType());
+				if (billsList != null) {
+					Bills bills1 = billsList.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(null);
+					if (bills1 != null) {
+						data.setOperatorId(bills1.getOperatorId());
+						data.setOperatorName(bills1.getOperatorName());
+					}
+				} else {
+					data.setOperatorId(AuthUtil.getUserId());
+					data.setOperatorName(AuthUtil.getUserName());
+				}
+				data.setPaymode(item.getPaymode());
+				data.setCorpId(item.getCorpId());
+				data.setCorpCnName(item.getCorpCnName());
+				data.setCorpEnName(item.getCorpEnName());
+				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(item.getRefno());
+				data.setBookingNo(item.getBookingNo());
+				data.setEtd(item.getEtd());
+				data.setEta(item.getEta());
+				data.setPolId(item.getPolId());
+				data.setPolCnName(item.getPolCnName());
+				data.setPolEnName(item.getPolEnName());
+				data.setPodId(item.getPodId());
+				data.setPodCnName(item.getPodCnName());
+				data.setPodCode(item.getPodCode());
+				data.setPodEnName(item.getPodEnName());
+				BigDecimal amountDrLoc = new BigDecimal("0.00");
+				BigDecimal amountCrLoc = new BigDecimal("0.00");
+				if ("CNY".equals(item.getCurCode())) {
+					if ("D".equals(item.getDc())) {
+						data.setAmountDr(item.getAmount());
+						data.setAmountCr(new BigDecimal("0.00"));
+					} else {
+						data.setAmountCr(item.getAmount());
+						data.setAmountDr(new BigDecimal("0.00"));
+					}
+					data.setAmountDrUsd(new BigDecimal("0.00"));
+					data.setAmountCrUsd(new BigDecimal("0.00"));
+				} else {
+					if ("D".equals(item.getDc())) {
+						data.setAmountDrUsd(item.getAmount());
+						data.setAmountCrUsd(new BigDecimal("0.00"));
+					} else {
+						data.setAmountDrUsd(new BigDecimal("0.00"));
+						data.setAmountCrUsd(item.getAmount());
+					}
+					data.setAmountDr(new BigDecimal("0.00"));
+					data.setAmountCr(new BigDecimal("0.00"));
+				}
+				if (ObjectUtils.isNotNull(data.getAmountCrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
+					BigDecimal crCny = data.getAmountCrUsd().multiply(item.getExrate());
+					amountCrLoc = amountCrLoc.add(data.getAmountCr()).add(crCny);
+				}
+				if (ObjectUtils.isNotNull(data.getAmountDrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
+					BigDecimal drCny = data.getAmountDrUsd().multiply(item.getExrate());
+					amountDrLoc = amountDrLoc.add(data.getAmountDr()).add(drCny);
+				}
+				data.setAmountDrLoc(amountDrLoc);
+				data.setAmountCrLoc(amountCrLoc);
+				baseMapper.insert(data);
+				item.setAccBillId(data.getId());
+				item.setAccBillNo(data.getBillNo());
+				item.setAccDate(data.getBillDate());
+				item.setAccAmount(amountDrLoc.add(amountCrLoc));
+				item.setAccStatus(1);
+				item.setAccById(AuthUtil.getUserId());
+				item.setAccByName(AuthUtil.getUserName());
+				item.setAuditStatus("4");
+				int version = StringUtil.isBlank(item.getVersion()) ? 1 : Integer.parseInt(item.getVersion());
+				item.setVersion(String.valueOf(version + 1));
+			}
+			feeCenterService.updateBatchById(feeCenterList);
+		}
+	}
+
 	private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
 		Set<Object> seen = ConcurrentHashMap.newKeySet();
 		return t -> seen.add(keyExtractor.apply(t));

+ 4 - 2
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java

@@ -144,9 +144,9 @@ public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> imp
 			post.setSort(1);
 			postService.save(post);
 			// 新建租户对应的默认业务字典
-			LinkedList<DictBiz> dictBizs = new LinkedList<>();
+			/*LinkedList<DictBiz> dictBizs = new LinkedList<>();
 			List<DictBiz> dictBizList = getDictBizs(tenantId, dictBizs);
-			dictBizService.saveBatch(dictBizList);
+			dictBizService.saveBatch(dictBizList);*/
 			// 新建租户对应的默认管理用户
 			User user = new User();
 			user.setTenantId(tenantId);
@@ -406,6 +406,8 @@ public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> imp
 			if (!businessBillNos.isEmpty()){
 				losClient.addBusinessBillNoList(businessBillNos);
 			}
+		}else if (type.contains("10")) {
+			//todo  业务修改配置
 		}
 		return R.data("操作成功");
 	}

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor