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

1.费用业务申请-请核接口
3.费用业务申请-撤销请核接口
4.费用业务申请-审核通过接口
5.发送edi接口逻辑修改
6.箱档案导入接口逻辑修改50%

纪新园 6 месяцев назад
Родитель
Сommit
a28cc500ce
16 измененных файлов с 1043 добавлено и 506 удалено
  1. 59 55
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dto/ArchivesExcelEnter.java
  2. 2 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java
  3. 86 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenterUpdateRecord.java
  4. 18 18
      blade-service/blade-los/src/main/java/org/springblade/los/Util/Regular_ONE.java
  5. 81 28
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ArchivesServiceImpl.java
  6. 23 24
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  7. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java
  8. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/IAuditProecessService.java
  9. 335 3
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java
  10. 12 0
      blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSoDto.java
  11. 127 343
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EDISenderServiceImpl.java
  12. 16 15
      blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java
  13. 3 3
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterUpdateRecordController.java
  14. 2 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterUpdateRecordService.java
  15. 272 10
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterUpdateRecordServiceImpl.java
  16. 3 2
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FinAccBillsServiceImpl.java

+ 59 - 55
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dto/ArchivesExcelEnter.java

@@ -21,7 +21,6 @@ import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -46,75 +45,90 @@ public class ArchivesExcelEnter implements Serializable {
 	@ExcelProperty(value = "箱号(必填)")
 	private String code;
 	/**
-	 * 箱
+	 * 箱型
 	 */
-	@ExcelProperty(value = "箱型(必填)")
-	private String name;
+	@ExcelProperty(value = "箱型(必填)")
+	private String typeName;
 	/**
-	 * 容积
+	 * 港口
 	 */
-	@ExcelProperty(value = "容积(m³)")
-	private BigDecimal volume;
+	@ExcelProperty(value = "港口")
+	private String addressCname;
+
 	/**
-	 * 毛重
+	 * 场站
 	 */
-	@ExcelProperty(value = "毛重(kg)")
-	private BigDecimal gorssWeight;
+	@ExcelProperty(value = "场站")
+	private String stationCname;
 	/**
-	 * 备注
+	 * 放箱号
 	 */
-	@ExcelProperty(value = "备注")
-	private String remarks;
+	@ExcelProperty(value = "放箱号(必填)")
+	private String containerNumber;
 	/**
-	 * 状态(使用 退租 卖出)
+	 * 合同号
 	 */
-	@ExcelProperty(value = "状态(使用 退租 卖出)")
-	private String status;
+	@ExcelProperty(value = "合同号")
+	private String contractNo;
+
 	/**
-	 * 最新地点
+	 * 箱好坏
 	 */
-	@ExcelProperty(value = "最新地点")
-	private String address;
+	@ExcelProperty(value = "箱好坏")
+	private String boxStatus;
+
 	/**
-	 * 最新日期
+	 * 箱属
 	 */
-	@ExcelProperty(value = "最新日期")
-	@DateTimeFormat(pattern = "yyyy-MM-dd")
-	private Date newDate;
+	@ExcelProperty(value = "箱属")
+	private String boxBelongsTo;
 	/**
-	 * 租赁公司
+	 * 箱种类
 	 */
-	@ExcelProperty(value = "租赁公司")
-	private String leasingCompany;
+	@ExcelProperty(value = "箱种类")
+	private String boxType;
 	/**
-	 * 箱来源
+	 * 箱
 	 */
-	@ExcelProperty(value = "箱来源(购买 租入)")
-	private String boxSource;
+	@ExcelProperty(value = "箱东")
+	private String boxEastName;
+
 	/**
-	 * 箱状态
+	 * 限制港口
 	 */
-	@ExcelProperty(value = "箱状态(好 坏)")
-	private String boxStatus;
+	@ExcelProperty(value = "限制港口")
+	private String restrictedPortsName;
+
+	/**
+	 * 限制船公司
+	 */
+	@ExcelProperty(value = "限制船公司")
+	private String restrictingShippingCompaniesName;
 	/**
-	 * 租赁方式
+	 * 体积(容积)
 	 */
-	@ExcelProperty(value = "租赁方式(长租 短租)")
-	private String leaseMethod;
+	@ExcelProperty(value = "容积")
+	private BigDecimal volume;
+	/**
+	 * 毛重
+	 */
+	@ExcelProperty(value = "毛重")
+	private BigDecimal gorssWeight;
+
 	/**
 	 * 空重
 	 */
-	@ExcelProperty(value = "空重(kg)")
+	@ExcelProperty(value = "空重")
 	private BigDecimal emptyWeight;
 	/**
 	 * 皮重
 	 */
-	@ExcelProperty(value = "皮重(kg)")
+	@ExcelProperty(value = "皮重")
 	private BigDecimal tare;
 	/**
 	 * 装载重量
 	 */
-	@ExcelProperty(value = "装载重量(kg)")
+	@ExcelProperty(value = "装载重量")
 	private BigDecimal loadingWeight;
 	/**
 	 * 造箱公司
@@ -125,36 +139,26 @@ public class ArchivesExcelEnter implements Serializable {
 	 * 造箱日期
 	 */
 	@ExcelProperty(value = "造箱日期")
-	@DateTimeFormat(pattern = "yyyy-MM-dd")
 	private Date boxMakingDate;
 	/**
-	 * 起租日期
-	 */
-	@ExcelProperty(value = "起租日期")
-	@DateTimeFormat(pattern = "yyyy-MM-dd")
-	private Date leaseCommencementDate;
-	/**
 	 * 购入日期
 	 */
 	@ExcelProperty(value = "购入日期")
-	@DateTimeFormat(pattern = "yyyy-MM-dd")
 	private Date purchaseDate;
 	/**
 	 * 箱龄
 	 */
-	@ExcelProperty(value = "箱龄(月)")
+	@ExcelProperty(value = "箱龄")
 	private Integer boxAge;
 	/**
-	 * 合同号
+	 * 启用日期
 	 */
-	@ExcelProperty(value = "合同号")
-	private String contractNo;
-
+	@ExcelProperty(value = "启用日期")
+	private Date activationDate;
 	/**
-	 * 箱出入场状态
+	 * 备注
 	 */
-	@ExcelProperty(value = "箱出入场状态")
-	private String boxDynamics;
-
+	@ExcelProperty(value = "备注")
+	private String remarks;
 
 }

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

@@ -818,9 +818,9 @@ public class FeeCenter implements Serializable {
 	private List<String> approveTimeList;
 
 	/**
-	 * 审核状态 0 录入 1 已请核 2 审核中  4 通过
+	 * 审核状态 0 录入 1 已请核 2 审核中  4 通过 5申请修改 6申请删除
 	 */
-	@ApiModelProperty(value = "审核状态 0 录入 1 已请核 2 审核中 4 通过 5 已申请")
+	@ApiModelProperty(value = "审核状态 0 录入 1 已请核 2 审核中 4 通过 5申请修改 6申请删除")
 	private String auditStatus;
 
 	/**

+ 86 - 2
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenterUpdateRecord.java

@@ -16,15 +16,18 @@
  */
 package org.springblade.los.finance.fee.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springblade.los.check.entity.LosAuditPathsLevels;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 费用中心修改记录表实体类
@@ -121,11 +124,36 @@ public class FeeCenterUpdateRecord implements Serializable {
 	@ApiModelProperty(value = "客户中文名称")
 	private String corpCnName;
 	/**
+	 * 客户简称
+	 */
+	@ApiModelProperty(value = "客户简称")
+	private String shortName;
+	/**
 	 * 客户英文名称
 	 */
 	@ApiModelProperty(value = "客户英文名称")
 	private String corpEnName;
 	/**
+	 * 主表客户 id
+	 */
+	@ApiModelProperty(value = "主表客户 id")
+	private Long billCorpId;
+	/**
+	 * 主表客户中文名称
+	 */
+	@ApiModelProperty(value = "主表客户中文名称")
+	private String billCorpCnName;
+	/**
+	 * 主表客户英文名称
+	 */
+	@ApiModelProperty(value = "主表客户英文名称")
+	private String billCorpEnName;
+	/**
+	 * 主表客户简称
+	 */
+	@ApiModelProperty(value = "主表客户简称")
+	private String billShortName;
+	/**
 	 * MB/L NO
 	 */
 	@ApiModelProperty(value = "MB/L NO")
@@ -221,9 +249,9 @@ public class FeeCenterUpdateRecord implements Serializable {
 	@ApiModelProperty(value = "0=申请修改1=申请删除")
 	private String type;
 	/**
-	 * 0录入1提交审核2审核中3审核通过4审核驳回
+	 * 0录入1提交审核2审核中3审核通过4审核驳回5撤销申请
 	 */
-	@ApiModelProperty(value = "0录入1提交审核2审核中3审核通过4审核驳回")
+	@ApiModelProperty(value = "0录入1提交审核2审核中3审核通过4审核驳回5撤销申请")
 	private String status;
 	/**
 	 * 租户
@@ -231,6 +259,46 @@ public class FeeCenterUpdateRecord implements Serializable {
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 	/**
+	 * 修改后客户 id
+	 */
+	@ApiModelProperty(value = "修改后客户 id")
+	private Long corpIdUpdate;
+	/**
+	 * 修改后客户中文名称
+	 */
+	@ApiModelProperty(value = "修改后客户中文名称")
+	private String corpCnNameUpdate;
+	/**
+	 * 修改后客户简称
+	 */
+	@ApiModelProperty(value = "修改后客户简称")
+	private String shortNameUpdate;
+	/**
+	 * 修改后客户英文名称
+	 */
+	@ApiModelProperty(value = "修改后客户英文名称")
+	private String corpEnNameUpdate;
+	/**
+	 * 修改后主表客户 id
+	 */
+	@ApiModelProperty(value = "修改后主表客户 id")
+	private Long billCorpIdUpdate;
+	/**
+	 * 修改后主表客户中文名称
+	 */
+	@ApiModelProperty(value = "修改后主表客户中文名称")
+	private String billCorpCnNameUpdate;
+	/**
+	 * 修改后主表客户英文名称
+	 */
+	@ApiModelProperty(value = "修改后主表客户英文名称")
+	private String billCorpEnNameUpdate;
+	/**
+	 * 修改后主表客户简称
+	 */
+	@ApiModelProperty(value = "修改后主表客户简称")
+	private String billShortNameUpdate;
+	/**
 	 * 修改后费用 Id
 	 */
 	@ApiModelProperty(value = "修改后费用 Id")
@@ -296,4 +364,20 @@ public class FeeCenterUpdateRecord implements Serializable {
 	@ApiModelProperty(value = "修改原因")
 	private String updateReason;
 
+	//审核-跳转对应页面的路由
+	@TableField(exist = false)
+	private String url;
+	//审核-页面枚举
+	@TableField(exist = false)
+	private String pageStatus;
+	//审核-页面名字
+	@TableField(exist = false)
+	private String pageLabel;
+
+	/**
+	 * 审核路径
+	 */
+	@TableField(exist = false)
+	private List<LosAuditPathsLevels> auditPathsLevels;
+
 }

+ 18 - 18
blade-service/blade-los/src/main/java/org/springblade/los/Util/Regular_ONE.java

@@ -36,7 +36,7 @@ public class Regular_ONE {
 			}
 		}
 		//客户约号
-		if (ObjectUtils.isNotNull(ediData.getCorpArgreementNo())) {
+		/*if (ObjectUtils.isNotNull(ediData.getCorpArgreementNo())) {
 			Map<String, String> mapString = RegularUtils.regularEn(ediData.getCorpArgreementNo(),true);
 			if ("200".equals(mapString.get("code"))) {
 				ediData.setCorpArgreementNo(mapString.get("susscess"));
@@ -45,10 +45,10 @@ public class Regular_ONE {
 			}
 		}else{
 			ediData.setCorpArgreementNo("");
-		}
+		}*/
 
 		//船司约号
-		if (ObjectUtils.isNull(ediData.getCarrierArgreementNo())) {
+		/*if (ObjectUtils.isNull(ediData.getCarrierArgreementNo())) {
 			msg += "船司约号,";
 		} else {
 			Map<String, String> mapString = RegularUtils.regularEn(ediData.getCarrierArgreementNo(),true);
@@ -57,21 +57,21 @@ public class Regular_ONE {
 			} else {
 				character += "船司约号,";
 			}
-		}
+		}*/
 
-		String issueType = "ORI".equals(ediData.getIssueType()) ? "ORI" : ("EXP".equals(ediData.getIssueType()) ? "EXP" : "");
+		/*String issueType = "ORI".equals(ediData.getIssueType()) ? "ORI" : ("EXP".equals(ediData.getIssueType()) ? "EXP" : "");
 		if(issueType.isEmpty()){
 			msg += "签单类型不支持,";
-		}
+		}*/
 
 		//运输条款代码
-		if (ObjectUtils.isNull(ediData.getTransportTermCode())) {
+		/*if (ObjectUtils.isNull(ediData.getTransportTermCode())) {
 			msg += "运输条款代码,";
 		} else {
 			String serviceCode = RegularUtils.serviceTermToInttraCode(ediData.getTransportTermCode());
 			ediData.setTransportTermCode(serviceCode);
 			ediData.setTransportTermName(RegularUtils.serviceTermFromInttraCode(serviceCode));
-		}
+		}*/
 
 		//船名代码不是必须
 //		if (ObjectUtils.isNotNull(ediData.getVesselId())) {
@@ -121,7 +121,7 @@ public class Regular_ONE {
 				character += "装货港,";
 			}
 		}
-		//收货地代码
+		/*//收货地代码
 		if (ObjectUtils.isNull(ediData.getPlaceReceiptCode())) {
 			msg += "收货地代码,";
 		} else {
@@ -146,7 +146,7 @@ public class Regular_ONE {
 			} else {
 				character += "收货地,";
 			}
-		}
+		}*/
 		//卸货港代码
 		if (ObjectUtils.isNull(ediData.getPodCode())) {
 			msg += "卸货港代码,";
@@ -173,7 +173,7 @@ public class Regular_ONE {
 				character += "卸货港,";
 			}
 		}
-		//交货地代码
+		/*//交货地代码
 		if (ObjectUtils.isNull(ediData.getPlaceDeliveryCode())) {
 			msg += "交货地代码,";
 		} else {
@@ -224,9 +224,9 @@ public class Regular_ONE {
 			} else {
 				character += "目的地,";
 			}
-		}
+		}*/
 
-		String text = "";
+		/*String text = "";
 		if (ObjectUtils.isNotNull(ediData.getBookingRemarks())) {
 			String bookingRemarks = ediData.getBookingRemarks().trim();
 			if (!bookingRemarks.isEmpty()) {
@@ -247,9 +247,9 @@ public class Regular_ONE {
 				}
 			}
 		}
-		ediData.setBookingRemarks(text);
+		ediData.setBookingRemarks(text);*/
 
-		//发货人
+		/*//发货人
 		if (ObjectUtils.isNull(ediData.getHShipper())) {
 			msg += "发货人,";
 		} else {
@@ -290,10 +290,10 @@ public class Regular_ONE {
 			} else {
 				character += "第二通知人,";
 			}
-		}
+		}*/
 
 		//包装代码
-		if (ObjectUtils.isNull(ediData.getPackagesCode())) {
+		/*if (ObjectUtils.isNull(ediData.getPackagesCode())) {
 			msg += "包装代码,";
 		} else {
 			Map<String, String> mapString = RegularUtils.regularEn(ediData.getPackagesCode(),true);
@@ -302,7 +302,7 @@ public class Regular_ONE {
 			} else {
 				character += "包装代码,";
 			}
-		}
+		}*/
 		//包装描述
 		if (ObjectUtils.isNull(ediData.getPackagesDescribe())) {
 			msg += "包装描述,";

+ 81 - 28
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ArchivesServiceImpl.java

@@ -30,6 +30,11 @@ import org.springblade.client.feign.IPortClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.los.basic.corps.entity.BCorps;
+import org.springblade.los.basic.corps.service.IBCorpsService;
+import org.springblade.los.basic.ports.entity.BPorts;
+import org.springblade.los.basic.ports.service.IBPortsService;
 import org.springblade.los.box.dto.ArchivesExcelEnter;
 import org.springblade.los.box.entity.Archives;
 import org.springblade.los.box.entity.ArchivesFiles;
@@ -43,6 +48,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 服务实现类
@@ -64,6 +70,10 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 
 	private final TradingBoxMapper tradingBoxMapper;
 
+	private final IBCorpsService bCorpsService;
+
+	private final IBPortsService bPortsService;
+
 	@Override
 	public IPage<ArchivesVO> selectArchivesPage(IPage<ArchivesVO> page, ArchivesVO archives) {
 		return page.setRecords(baseMapper.selectArchivesPage(page, archives));
@@ -123,44 +133,87 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public R importArchivesInfo(List<ArchivesExcelEnter> excelList, boolean b) {
+		List<String> corpList = new ArrayList<>();
+		List<String> stationCname = excelList.stream().map(ArchivesExcelEnter::getStationCname).filter(Objects::nonNull)
+			.distinct().collect(Collectors.toList());
+		if (!stationCname.isEmpty()) {
+			corpList.addAll(stationCname);
+		}
+		List<String> boxEastName = excelList.stream().map(ArchivesExcelEnter::getBoxEastName).filter(Objects::nonNull)
+			.distinct().collect(Collectors.toList());
+		if (!boxEastName.isEmpty()) {
+			corpList.addAll(boxEastName);
+		}
+		String restrictingShippingCompaniesName = excelList.stream().map(ArchivesExcelEnter::getRestrictingShippingCompaniesName)
+			.filter(Objects::nonNull).collect(Collectors.joining(","));
+		if (ObjectUtils.isNotNull(restrictingShippingCompaniesName)) {
+			List<String> restrictingShippingCompaniesNameList = Func.toStrList(restrictingShippingCompaniesName).stream().distinct().collect(Collectors.toList());
+			if (!restrictingShippingCompaniesNameList.isEmpty()) {
+				corpList.addAll(restrictingShippingCompaniesNameList);
+			}
+		}
+		List<String> boxMakingCompany = excelList.stream().map(ArchivesExcelEnter::getBoxMakingCompany).filter(Objects::nonNull)
+			.distinct().collect(Collectors.toList());
+		if (!boxMakingCompany.isEmpty()) {
+			corpList.addAll(boxMakingCompany);
+		}
+		List<BCorps> corpsList = bCorpsService.list(new LambdaQueryWrapper<BCorps>()
+			.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+			.eq(BCorps::getIsDeleted, 0)
+			.in(BCorps::getCnName, corpList));
+		List<String> portsList = new ArrayList<>();
+		List<String> addressCname = excelList.stream().map(ArchivesExcelEnter::getStationCname).filter(Objects::nonNull)
+			.distinct().collect(Collectors.toList());
+		if (!addressCname.isEmpty()) {
+			portsList.addAll(addressCname);
+		}
+		String restrictedPortsName = excelList.stream().map(ArchivesExcelEnter::getRestrictedPortsName)
+			.filter(Objects::nonNull).collect(Collectors.joining(","));
+		if (ObjectUtils.isNotNull(restrictedPortsName)) {
+			List<String> restrictedPortsNameList = Func.toStrList(restrictedPortsName).stream().distinct().collect(Collectors.toList());
+			if (!restrictedPortsNameList.isEmpty()) {
+				portsList.addAll(restrictedPortsNameList);
+			}
+		}
+		List<BPorts> bPortsList = bPortsService.list(new LambdaQueryWrapper<BPorts>()
+			.eq(BPorts::getTenantId, AuthUtil.getTenantId())
+			.eq(BPorts::getIsDeleted, 0)
+			.in(BPorts::getCnName, portsList));
 		for (ArchivesExcelEnter archivesExcelEnter : excelList) {
 			Archives archives = new Archives();
-			BeanUtil.copy(archivesExcelEnter, archives);
-			if (ObjectUtils.isNull(archives.getCode())) {
+			if (ObjectUtils.isNull(archivesExcelEnter.getCode())) {
 				throw new RuntimeException("箱号不能为空");
 			}
-			if (ObjectUtils.isNull(archives.getAddressCname())) {
-				throw new RuntimeException("最新地点不能为空");
+			if (ObjectUtils.isNull(archivesExcelEnter.getContainerNumber())) {
+				throw new RuntimeException("放箱号不能为空");
 			}
-			if (ObjectUtils.isNull(archives.getNewDate())) {
-				throw new RuntimeException("最新时间不能为空");
-			}
-			//箱类型
-			if (ObjectUtils.isNotNull(archives.getName())) {
-				R<BasicContainerDesc> detail = containerDescClient.getContainer(archives.getName());
-				if (detail.isSuccess() && ObjectUtils.isNotNull(detail.getData())) {
-					archives.setName(detail.getData().getName());
-					archives.setTypeId(detail.getData().getId());
-				} else {
-					throw new RuntimeException("箱型不存在");
-				}
-			} else {
+			if (ObjectUtils.isNull(archivesExcelEnter.getTypeName())) {
 				throw new RuntimeException("箱型不能为空");
 			}
-			//最新地点
+			BeanUtil.copy(archivesExcelEnter, archives);
+			//港口
 			if (ObjectUtils.isNotNull(archives.getAddressCname())) {
-				BasicPortDesc basicPortDesc = new BasicPortDesc();
-				basicPortDesc.setName(archives.getAddressCname());
-				BasicPortDesc detail = portClient.getPortData(basicPortDesc);
-				if (ObjectUtils.isNotNull(detail)) {
-					archives.setAddressCname(detail.getName());
-					archives.setAddressId(detail.getId());
-
-				} else {
-					archives.setAddressCname(null);
-					archives.setAddressId(null);
+				BPorts bPorts = bPortsList.stream().filter(e -> e.getCnName().equals(archives.getAddressCname()))
+					.findFirst().orElse(null);
+				if (bPorts != null) {
+					archives.setAddressCode(bPorts.getCode());
+					archives.setAddressCname(bPorts.getCnName());
+					archives.setAddressEname(bPorts.getEnName());
+					archives.setAddressId(bPorts.getId());
 				}
 			}
+			//场站
+			if (ObjectUtils.isNotNull(archives.getStationCname())) {
+				BCorps corps = corpsList.stream().filter(e -> e.getCnName().equals(archives.getStationCname()))
+					.findFirst().orElse(null);
+				if (corps != null) {
+					archives.setStationCode(corps.getCode());
+					archives.setStationCname(corps.getCnName());
+					archives.setStationEname(corps.getEnName());
+					archives.setStationId(corps.getId());
+				}
+			}
+
 			//租赁公司
 			if (ObjectUtils.isNotNull(archives.getLeasingCompany())) {
 				CorpsDesc detail = corpsDescClient.getCorpsDesc(archives.getLeasingCompany(), "KH");

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

@@ -37,13 +37,11 @@ import org.springblade.los.Util.ZrUtil;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.corps.entity.BCorps;
-import org.springblade.los.basic.corps.mapper.CorpsAttnMapper;
 import org.springblade.los.basic.corps.mapper.CorpsMapper;
 import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.cur.entity.BCurExrate;
 import org.springblade.los.basic.fees.entity.BFees;
 import org.springblade.los.basic.fees.service.IBFeesService;
-import org.springblade.los.basic.vessels.mapper.VesselsMapper;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.business.files.entity.FilesCenter;
@@ -128,10 +126,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final ISeaBillsDetailService seaBillsDetailService;
 
-	private final VesselsMapper vesselsMapper;
-
-	private final CorpsAttnMapper corpsAttnMapper;
-
 	private final CorpsMapper corpsMapper;
 
 	private final IHmmEdiService hmmEdiService;
@@ -286,7 +280,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			bills.setUpdateUserName(AuthUtil.getUserName());
 			if (ObjectUtils.isNotNull(bills.getTemporaryId())) {
 				Bills bills1 = baseMapper.selectById(bills.getTemporaryId());
-				if (bills1 != null){
+				if (bills1 != null) {
 					if ("MM".equals(bills.getBillType())) {
 						if (ObjectUtils.isNotNull(bills.getMblno())) {
 							bills1.setMblno(bills.getMblno());
@@ -534,13 +528,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		BigDecimal measurement = new BigDecimal("0.00");
 		if (ObjectUtils.isNotNull(bills.getContainersList())) {
 			for (Containers item : bills.getContainersList()) {
-				if (ObjectUtils.isNotNull(item.getQuantity())){
+				if (ObjectUtils.isNotNull(item.getQuantity())) {
 					quantity = quantity.add(item.getQuantity());
 				}
-				if (ObjectUtils.isNotNull(item.getGrossWeight())){
+				if (ObjectUtils.isNotNull(item.getGrossWeight())) {
 					grossWeight = grossWeight.add(item.getGrossWeight());
 				}
-				if (ObjectUtils.isNotNull(item.getMeasurement())){
+				if (ObjectUtils.isNotNull(item.getMeasurement())) {
 					measurement = measurement.add(item.getMeasurement());
 				}
 				item.setPid(bills.getId());
@@ -1575,53 +1569,58 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.eq(Bills::getIsDeleted, 0)
 			.in(Bills::getId, ids));
 		for (Bills item : billsList) {
-			if (baseMapper.selectCount(new LambdaQueryWrapper<Bills>()
-				.eq(Bills::getTenantId, AuthUtil.getTenantId())
-				.eq(Bills::getIsDeleted, 0)
-				.eq(Bills::getMasterId, item.getId())) > 0) {
-				throw new RuntimeException("该主单存在分单,请先撤销分单");
+			if ("MM".equals(item.getBillType())) {
+				if (baseMapper.selectCount(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.eq(Bills::getIsDeleted, 0)
+					.eq(Bills::getMasterId, item.getId())) > 0) {
+					throw new RuntimeException("该主单存在分单,请先撤销分单");
+				}
+			} else if ("MH".equals(item.getBillType())) {
+				if (ObjectUtils.isNotNull(item.getMasterBillNo())) {
+					throw new RuntimeException("该分单已添加到主单,请先撤销分单");
+				}
 			}
-//			businessBillNoService.deteleBillNo(item);
 		}
 		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0)
 			.in(FeeCenter::getPid, ids));
 		if (!feeCenterList.isEmpty()) {
-			if (feeCenterList.stream().anyMatch(e -> !"0".equals(e.getAuditStatus()))){
+			if (feeCenterList.stream().anyMatch(e -> !"0".equals(e.getAuditStatus()))) {
 				throw new RuntimeException("费用明细中存在状态不是录入,删除失败");
-			}else{
+			} else {
 				feeCenterService.removeByIds(feeCenterList.stream().map(FeeCenter::getId).collect(Collectors.toList()));
 			}
 		}
 		List<SeaBillsDetail> seaBillsDetail = seaBillsDetailService.list(new LambdaQueryWrapper<SeaBillsDetail>()
 			.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
 			.in(SeaBillsDetail::getPid, ids));
-		if (!seaBillsDetail.isEmpty()){
+		if (!seaBillsDetail.isEmpty()) {
 			seaBillsDetailService.removeByIds(seaBillsDetail.stream().map(SeaBillsDetail::getId).collect(Collectors.toList()));
 		}
 		List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
 			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
 			.in(PreContainers::getPid, ids));
-		if (!preContainersList.isEmpty()){
+		if (!preContainersList.isEmpty()) {
 			preContainersService.removeByIds(preContainersList.stream().map(PreContainers::getId).collect(Collectors.toList()));
 		}
 		List<SeaContainerNumberItem> containerNumberItemList = seaContainerNumberItemService.list(new LambdaQueryWrapper<SeaContainerNumberItem>()
 			.eq(SeaContainerNumberItem::getTenantId, AuthUtil.getTenantId())
 			.in(SeaContainerNumberItem::getPid, ids));
-		if (!containerNumberItemList.isEmpty()){
+		if (!containerNumberItemList.isEmpty()) {
 			seaContainerNumberItemService.removeByIds(containerNumberItemList.stream().map(SeaContainerNumberItem::getId).collect(Collectors.toList()));
 		}
 		List<FilesCenter> filesCenterList = filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
 			.eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
 			.in(FilesCenter::getPid, ids));
-		if (!filesCenterList.isEmpty()){
+		if (!filesCenterList.isEmpty()) {
 			filesCenterService.removeByIds(filesCenterList.stream().map(FilesCenter::getId).collect(Collectors.toList()));
 		}
 		List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
 			.eq(Containers::getTenantId, AuthUtil.getTenantId())
 			.in(Containers::getPid, ids));
-		if (!containersList.isEmpty()){
+		if (!containersList.isEmpty()) {
 			containersService.removeByIds(containersList.stream().map(Containers::getId).collect(Collectors.toList()));
 		}
 		baseMapper.deleteBatchIds(ids);
@@ -4438,7 +4437,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 						feeCenter.setBranchName(deptName);
 						feeCenters.add(feeCenter);
 					}
-					if (!"SOC".equals(copyBills.getBoxBelongsTo())){
+					if (!"SOC".equals(copyBills.getBoxBelongsTo())) {
 						FeeCenter feeCenterD = this.addFeeCenterQuotation(copyBills, "C", count, feesD, item,
 							curExrateList, exrateType, "2");
 						if (feeCenterD != null) {

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java

@@ -246,6 +246,8 @@ public class AuditProecessController extends BladeController {
 			auditProecessService.routeCostCheck(auditProecess);
 		} else if ("FYSQ".equals(proecess.getCheckType()) || "FYSQ-C".equals(proecess.getCheckType())) {
 			auditProecessService.pleaseVerifyCostCheck(auditProecess);
+		}else if ("FY-SQXG".equals(proecess.getCheckType()) || "FY-SQSC".equals(proecess.getCheckType())) {
+			auditProecessService.applyUpdateFee(auditProecess);
 		}
 		return R.data(auditProecess);
 	}

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/check/service/IAuditProecessService.java

@@ -68,4 +68,6 @@ public interface IAuditProecessService extends IService<LosAuditProecess> {
 	void routeCostCheck(LosAuditProecess auditProecess);
 
 	void pleaseVerifyCostCheck(LosAuditProecess auditProecess);
+
+	void applyUpdateFee(LosAuditProecess auditProecess);
 }

+ 335 - 3
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -28,6 +28,7 @@ import org.springblade.client.feign.IMessageClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.corps.entity.BCorps;
@@ -51,14 +52,15 @@ import org.springblade.los.check.mapper.AuditProecessMapper;
 import org.springblade.los.check.service.IAuditProecessService;
 import org.springblade.los.check.vo.LosAuditProecessVO;
 import org.springblade.los.finance.fee.entity.FeeCenter;
+import org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord;
 import org.springblade.los.finance.fee.entity.FinAccBills;
+import org.springblade.los.finance.fee.mapper.FeeCenterUpdateRecordMapper;
 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.mapper.FinInvoicesMapper;
 import org.springblade.los.finance.stl.entity.FinStlBills;
 import org.springblade.los.finance.stl.mapper.FinStlBillsMapper;
-import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -100,12 +102,14 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 
 	private final IBusinessBillNoService businessBillNoService;
 
-	private final ISysClient sysClient;
-
 	private final RouteCostMapper routeCostMapper;
 
 	private final ExpenseApplicationMapper expenseApplicationMapper;
 
+	private final FeeCenterUpdateRecordMapper feeCenterUpdateRecordMapper;
+
+	private final CurrencyUtils currencyUtils;
+
 
 	@Override
 	public IPage<LosAuditProecessVO> selectAuditProecessPage(IPage<LosAuditProecessVO> page, LosAuditProecessVO auditProecess) {
@@ -1576,6 +1580,334 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 		baseMapper.updateById(auditProecess);
 	}
 
+	@Override
+	public void applyUpdateFee(LosAuditProecess auditProecess) {
+		//查看最新操作记录,防止重复提交
+		LosAuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		if (proecessTemp == null) {
+			throw new SecurityException("未查到此审批记录,禁止操作");
+		}
+		if ("A".equals(proecessTemp.getAuditStatus()) || "B".equals(proecessTemp.getAuditStatus())) {
+			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
+		}
+
+		if (auditProecess.getAuditStatus() == null || !"S".equals(auditProecess.getAuditStatus())) {
+			throw new SecurityException("审批状态非待审,禁止操作");
+		}
+		//信息
+		Message sendMessage = new Message();
+		sendMessage.setParameter(String.valueOf(auditProecess.getBillId()));
+		sendMessage.setUserName(AuthUtil.getUserName());
+		sendMessage.setUserId(AuthUtil.getUserId());
+		sendMessage.setToUserId(auditProecess.getSendUserId());
+		sendMessage.setToUserName(auditProecess.getSendName());
+		sendMessage.setMessageType(1);
+		sendMessage.setTenantId(AuthUtil.getTenantId());
+		sendMessage.setCreateUser(AuthUtil.getUserId());
+		sendMessage.setCreateTime(new Date());
+		sendMessage.setUrl(auditProecess.getUrl());
+		sendMessage.setPageLabel(auditProecess.getPageLabel());
+		sendMessage.setPageStatus(auditProecess.getPageStatus());
+
+		//用户操作 1.通过  2.驳回
+		Integer operate = auditProecess.getOperate();
+		//查看当前审批是否为最后一级
+		String iffinalItem = auditProecess.getIffinalItem();
+		//审批人
+		auditProecess.setAuditUserId(String.valueOf(AuthUtil.getUserId()));
+		//审批时间
+		auditProecess.setAuditOpTime(new Date());
+
+		FeeCenterUpdateRecord feeCenterUpdateRecord = feeCenterUpdateRecordMapper.selectById(proecessTemp.getSrcBillId());
+		if (feeCenterUpdateRecord == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		FeeCenter feeCenter = feeCenterService.getById(feeCenterUpdateRecord.getItemId());
+		//不是最后一级
+		if ("F".equals(iffinalItem)) {
+
+			//通过
+			if (operate == 1) {
+				//如果是第一级, 则修改状态为审批中
+				if (auditProecess.getLevelId() == 1) {
+					feeCenterUpdateRecord.setStatus("2");
+					feeCenterUpdateRecord.setUpdateUser(AuthUtil.getUserId());
+					feeCenterUpdateRecord.setUpdateTime(new Date());
+					feeCenterUpdateRecord.setUpdateUserName(AuthUtil.getUserName());
+					feeCenterUpdateRecordMapper.updateById(feeCenterUpdateRecord);
+				}
+				auditProecess.setAuditStatus("A");
+				//查询下一级,开启待审
+				LambdaQueryWrapper<LosAuditProecess> auditProecessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				auditProecessLambdaQueryWrapper
+					.eq(LosAuditProecess::getBatchNo, auditProecess.getBatchNo())
+					.eq(LosAuditProecess::getSrcBillId, auditProecess.getSrcBillId())
+					.eq(LosAuditProecess::getIsDelete, 0)
+					.eq(LosAuditProecess::getActId, auditProecess.getActId())
+					.eq(LosAuditProecess::getBillId, auditProecess.getBillId())
+					.eq(LosAuditProecess::getBillNo, auditProecess.getBillNo())
+					.eq(LosAuditProecess::getTenantId, AuthUtil.getTenantId())
+					.eq(LosAuditProecess::getLevelId, auditProecess.getLevelId() + 1);
+				Integer count = baseMapper.selectCount(auditProecessLambdaQueryWrapper);
+				if (count != null && count > 1) {
+					throw new SecurityException("审核失败,获取下一级信息失败");
+				}
+				LosAuditProecess proecess = baseMapper.selectOne(auditProecessLambdaQueryWrapper);
+				if (proecess == null) {
+					throw new SecurityException("审批通过=>获取下一级信息失败");
+				}
+				proecess.setAuditStatus("S");
+				baseMapper.updateById(proecess);
+
+				SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
+
+				//获得订单创建日期
+				String billsDate = null;
+				if (proecessTemp.getBillId() != null) {
+					billsDate = simpleDateFormat.format(feeCenterUpdateRecord.getCreateTime());
+				}
+				Message message = new Message();
+				message.setUserName(AuthUtil.getUserName());
+				message.setUserId(AuthUtil.getUserId());
+				message.setParameter(String.valueOf(auditProecess.getBillId()));
+				message.setMessageType(1);
+				message.setTenantId(AuthUtil.getTenantId());
+				if ("费用-申请修改".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的费用-申请修改审核,业务单号:" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				} else if ("费用-申请删除".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的费用-申请删除审核,业务单号:" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				}
+				message.setUrl(auditProecess.getUrl());
+				message.setPageLabel(auditProecess.getPageLabel());
+				message.setPageStatus(auditProecess.getPageStatus());
+				message.setCreateUser(AuthUtil.getUserId());
+				message.setCreateTime(new Date());
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
+			}
+			//不通过
+			else if (operate == 2) {
+				auditProecess.setAuditStatus("B");
+				feeCenterUpdateRecord.setStatus("4");
+				feeCenterUpdateRecord.setUpdateUser(AuthUtil.getUserId());
+				feeCenterUpdateRecord.setUpdateTime(new Date());
+				feeCenterUpdateRecord.setUpdateUserName(AuthUtil.getUserName());
+				feeCenterUpdateRecordMapper.updateById(feeCenterUpdateRecord);
+
+				feeCenter.setAuditStatus("4");
+				int version = StringUtil.isBlank(feeCenter.getVersion()) ? 1 : Integer.parseInt(feeCenter.getVersion());
+				feeCenter.setVersion(String.valueOf(version + 1));
+				feeCenter.setUpdateUser(AuthUtil.getUserId());
+				feeCenter.setUpdateTime(new Date());
+				feeCenter.setUpdateUserName(AuthUtil.getUserName());
+				feeCenterService.updateById(feeCenter);
+				if ("费用-申请修改".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的费用-申请修改审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("费用-申请删除".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的费用-申请删除审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				}
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+		}
+		//是最后一级
+		else if ("T".equals(iffinalItem)) {
+			//通过
+			if (operate == 1) {
+				auditProecess.setAuditStatus("A");
+				this.updateFeeCenter(feeCenterUpdateRecord, feeCenter);
+				if ("费用-申请修改".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的费用-申请修改审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("费用-申请删除".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的费用-申请删除审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				}
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+			//不通过
+			else if (operate == 2) {
+				auditProecess.setAuditStatus("B");
+				feeCenterUpdateRecord.setStatus("4");
+				feeCenterUpdateRecord.setUpdateUser(AuthUtil.getUserId());
+				feeCenterUpdateRecord.setUpdateTime(new Date());
+				feeCenterUpdateRecord.setUpdateUserName(AuthUtil.getUserName());
+				feeCenterUpdateRecordMapper.updateById(feeCenterUpdateRecord);
+
+				feeCenter.setAuditStatus("4");
+				int version = StringUtil.isBlank(feeCenter.getVersion()) ? 1 : Integer.parseInt(feeCenter.getVersion());
+				feeCenter.setVersion(String.valueOf(version + 1));
+				feeCenter.setUpdateUser(AuthUtil.getUserId());
+				feeCenter.setUpdateTime(new Date());
+				feeCenter.setUpdateUserName(AuthUtil.getUserName());
+				feeCenterService.updateById(feeCenter);
+				if ("费用-申请修改".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的费用-申请修改审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("费用-申请删除".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的费用-申请删除审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				}
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+		} else {
+			throw new SecurityException("审批异常,请联系管理员");
+		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
+		//保存操作记录
+		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
+		auditProecess.setAuditItem(new Date());
+		baseMapper.updateById(auditProecess);
+	}
+
+	private void updateFeeCenter(FeeCenterUpdateRecord feeCenterUpdateRecord, FeeCenter feeCenter) {
+		feeCenterUpdateRecord.setStatus("3");
+		feeCenterUpdateRecord.setUpdateUser(AuthUtil.getUserId());
+		feeCenterUpdateRecord.setUpdateTime(new Date());
+		feeCenterUpdateRecord.setUpdateUserName(AuthUtil.getUserName());
+		feeCenterUpdateRecordMapper.updateById(feeCenterUpdateRecord);
+		FinAccBills finAccBills = finAccBillsService.getById(feeCenter.getAccBillId());
+		if (finAccBills == null) {
+			throw new RuntimeException("未查到账单信息");
+		}
+		Bills bills = new Bills();
+		String exrateType;
+		BigDecimal amountProfit = new BigDecimal("0.00");
+		BigDecimal amountProfitUsd = new BigDecimal("0.00");
+		BigDecimal amountProfitLoc = new BigDecimal("0.00");
+		BigDecimal oceanFreightProfit = new BigDecimal("0.00");
+		BigDecimal amountDr = new BigDecimal("0.00");
+		BigDecimal amountDrUsd = new BigDecimal("0.00");
+		BigDecimal amountDrLoc = new BigDecimal("0.00");
+		BigDecimal amountCr = new BigDecimal("0.00");
+		BigDecimal amountCrUsd = new BigDecimal("0.00");
+		BigDecimal amountCrLoc = new BigDecimal("0.00");
+		BigDecimal oceanFreightDr = new BigDecimal("0.00");
+		BigDecimal oceanFreightCr = new BigDecimal("0.00");
+		if ("HYJK,HYCK".contains(feeCenter.getBusinessType())) {
+			bills = billsMapper.selectById(feeCenterUpdateRecord.getPid());
+			if (bills == null) {
+				throw new RuntimeException("未查到单据信息");
+			}
+			exrateType = currencyUtils.standardCurrency(bills.getBranchId());
+			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getPid, bills.getId()));
+			if (feeCenterList.isEmpty()) {
+				throw new RuntimeException("未查到费用明细");
+			}
+
+			amountDr = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && exrateType.equals(e.getCurCode())
+				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			amountDrUsd = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && !exrateType.equals(e.getCurCode())
+				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			amountDrLoc = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && !e.getId().equals(feeCenter.getId()))
+				.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+			amountCr = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && exrateType.equals(e.getCurCode())
+				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			amountCrUsd = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && !exrateType.equals(e.getCurCode())
+				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			amountCrLoc = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && !e.getId().equals(feeCenter.getId()))
+				.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+			oceanFreightDr = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "HYF".equals(e.getFeeCode())
+				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+			oceanFreightCr = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "HYF".equals(e.getFeeCode())
+				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+		} else {
+			exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
+		}
+		if ("1".equals(feeCenterUpdateRecord.getType())) {
+			feeCenterService.removeById(feeCenter.getId());
+			finAccBillsService.removeById(finAccBills.getId());
+		} else {
+			feeCenter.setAuditStatus("4");
+			int version = StringUtil.isBlank(feeCenter.getVersion()) ? 1 : Integer.parseInt(feeCenter.getVersion());
+			feeCenter.setVersion(String.valueOf(version + 1));
+			feeCenter.setUpdateUser(AuthUtil.getUserId());
+			feeCenter.setUpdateTime(new Date());
+			feeCenter.setUpdateUserName(AuthUtil.getUserName());
+			feeCenter.setCorpId(feeCenterUpdateRecord.getCorpIdUpdate());
+			feeCenter.setCorpCnName(feeCenterUpdateRecord.getCorpCnNameUpdate());
+			feeCenter.setCorpEnName(feeCenterUpdateRecord.getCorpEnNameUpdate());
+			feeCenter.setShortName(feeCenterUpdateRecord.getShortNameUpdate());
+			feeCenter.setBillCorpId(feeCenterUpdateRecord.getBillCorpIdUpdate());
+			feeCenter.setBillCorpCnName(feeCenterUpdateRecord.getBillCorpCnNameUpdate());
+			feeCenter.setBillCorpEnName(feeCenterUpdateRecord.getBillCorpEnNameUpdate());
+			feeCenter.setBillShortName(feeCenterUpdateRecord.getBillShortNameUpdate());
+			feeCenter.setFeeId(feeCenterUpdateRecord.getFeeIdUpdate());
+			feeCenter.setFeeCode(feeCenterUpdateRecord.getFeeCodeUpdate());
+			feeCenter.setFeeCnName(feeCenterUpdateRecord.getFeeCnNameUpdate());
+			feeCenter.setFeeEnName(feeCenterUpdateRecord.getFeeEnNameUpdate());
+			feeCenter.setQuantity(feeCenterUpdateRecord.getQuantityUpdate());
+			feeCenter.setUnitNo(feeCenterUpdateRecord.getUnitNoUpdate());
+			feeCenter.setPrice(feeCenterUpdateRecord.getPriceUpdate());
+			feeCenter.setCurCode(feeCenterUpdateRecord.getCurCodeUpdate());
+			feeCenter.setExrate(feeCenterUpdateRecord.getExrateUpdate());
+			feeCenter.setAmount(feeCenterUpdateRecord.getAmountUpdate());
+			feeCenter.setAmountLoc(feeCenterUpdateRecord.getAmountLocUpdate());
+			feeCenter.setRemarks(feeCenterUpdateRecord.getRemarksUpdate());
+			feeCenterService.updateById(feeCenter);
+			if (feeCenter.getAccBillId() == null) {
+				throw new RuntimeException("账单id不能为空");
+			}
+			if ("D".equals(feeCenter.getDc())) {
+				if (exrateType.equals(feeCenter.getCurCode())) {
+					amountDr = amountDr.add(feeCenter.getAmount());
+					finAccBills.setAmountDr(feeCenter.getAmount());
+				} else {
+					amountDrUsd = amountDrUsd.add(feeCenter.getAmount());
+					finAccBills.setAmountDrUsd(feeCenter.getAmount());
+				}
+				amountDrLoc = amountDrLoc.add(feeCenter.getAmountLoc());
+				finAccBills.setAmountDrLoc(feeCenter.getAmountLoc());
+			} else {
+				if (exrateType.equals(feeCenter.getCurCode())) {
+					amountCr = amountCr.add(feeCenter.getAmount());
+					finAccBills.setAmountCr(feeCenter.getAmount());
+				} else {
+					amountCrUsd = amountCrUsd.add(feeCenter.getAmount());
+					finAccBills.setAmountCrUsd(feeCenter.getAmount());
+				}
+				amountCrLoc = amountCrLoc.add(feeCenter.getAmountLoc());
+				finAccBills.setAmountCrLoc(feeCenter.getAmountLoc());
+			}
+			finAccBillsService.updateById(finAccBills);
+		}
+		if ("HYJK,HYCK".contains(feeCenter.getBusinessType())) {
+			//利润 = 收 - 付
+			oceanFreightProfit = oceanFreightDr.subtract(oceanFreightCr);
+			amountProfit = amountDr.subtract(amountCr);
+			amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
+			amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
+			bills.setAmountDr(amountDr);
+			bills.setOceanFreightDr(oceanFreightDr);
+			bills.setAmountCr(amountCr);
+			bills.setOceanFreightCr(oceanFreightCr);
+			bills.setAmountProfit(amountProfit);
+			bills.setOceanFreightProfit(oceanFreightProfit);
+			bills.setAmountDrUsd(amountDrUsd);
+			bills.setAmountCrUsd(amountCrUsd);
+			bills.setAmountProfitUsd(amountProfitUsd);
+			bills.setAmountDrLoc(amountDrLoc);
+			bills.setAmountCrLoc(amountCrLoc);
+			bills.setAmountProfitLoc(amountProfitLoc);
+			billsMapper.updateById(bills);
+		}
+	}
+
 	private void updateData(ExpenseApplication expenseApplication, List<FeeCenter> feeCenterList, String number) {
 		int count = expenseApplicationMapper.updateById(expenseApplication);
 		if (count == 0) {

+ 12 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSoDto.java

@@ -373,12 +373,20 @@ public class InttraSoDto {
 	 * 发货人
 	 */
 	private String hShipper;
+	/**
+	 * 发货人描述
+	 */
+	private String hShipperDetail;
 
 	/*   NAD+CN+++   */
 	/**
 	 * 收货人
 	 */
 	private String hConsignee;
+	/**
+	 * 收货人描述
+	 */
+	private String hConsigneeDetail;
 
 	/*   NAD+NI+++   */
 	/**
@@ -386,6 +394,10 @@ public class InttraSoDto {
 	 */
 	private String hNotify;
 	/**
+	 * 通知人描述
+	 */
+	private String hNotifyDetail;
+	/**
 	 * 第二通知人
 	 */
 	private String hNotify2;

Разница между файлами не показана из-за своего большого размера
+ 127 - 343
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EDISenderServiceImpl.java


+ 16 - 15
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java

@@ -231,7 +231,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				.eq(BPorts::getEnName, details.getHpayplace()));
 			if (bPorts != null) {
 				String ediCode = RegularUtils.getEdiCode(ediCodeName, bPorts.getExtendedData());
-				inttraSoDto.setHPayPlaceCode(ediCode);
+				inttraSoDto.setHPayPlaceCode(bPorts.getUnCode());
 				inttraSoDto.setHPayPlaceName(bPorts.getEnName());
 			}
 		}
@@ -243,7 +243,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				.eq(BPorts::getEnName, details.getMpayplace()));
 			if (bPorts != null) {
 				String ediCode = RegularUtils.getEdiCode(ediCodeName, bPorts.getExtendedData());
-				inttraSoDto.setMPayPlaceCode(ediCode);
+				inttraSoDto.setMPayPlaceCode(bPorts.getUnCode());
 				inttraSoDto.setMPayPlaceName(bPorts.getEnName());
 			}
 		}
@@ -252,7 +252,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			BPorts bPorts = bPortsService.getById(details.getIssueAtId());
 			if (bPorts != null) {
 				String ediCode = RegularUtils.getEdiCode(ediCodeName, bPorts.getExtendedData());
-				inttraSoDto.setIssuanceLandCode(ediCode);
+				inttraSoDto.setIssuanceLandCode(bPorts.getUnCode());
 				inttraSoDto.setIssuanceLand(bPorts.getEnName());
 			}
 		}
@@ -335,7 +335,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			BPorts bPorts = bPortsService.getById(details.getPolId());
 			if (bPorts != null) {
 				String ediCode = RegularUtils.getEdiCode(ediCodeName, bPorts.getExtendedData());
-				inttraSoDto.setPolCode(ediCode);
+				inttraSoDto.setPolCode(bPorts.getUnCode());
 				if (ObjectUtils.isNull(inttraSoDto.getPolName())) {
 					inttraSoDto.setPolName(RegularUtils.forceEmpty(bPorts.getEnName()));
 				}
@@ -348,7 +348,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			BPorts bPorts = bPortsService.getById(details.getPlaceReceiptId());
 			if (bPorts != null) {
 				String ediCode = RegularUtils.getEdiCode(ediCodeName, bPorts.getExtendedData());
-				inttraSoDto.setPlaceReceiptCode(ediCode);
+				inttraSoDto.setPlaceReceiptCode(bPorts.getUnCode());
 				if (ObjectUtils.isNull(inttraSoDto.getPlaceReceiptName())) {
 					inttraSoDto.setPlaceReceiptName(RegularUtils.forceEmpty(bPorts.getEnName()));
 				}
@@ -360,7 +360,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			BPorts bPorts = bPortsService.getById(details.getPodId());
 			if (bPorts != null) {
 				String ediCode = RegularUtils.getEdiCode(ediCodeName, bPorts.getExtendedData());
-				inttraSoDto.setPodCode(ediCode);
+				inttraSoDto.setPodCode(bPorts.getUnCode());
 				if (ObjectUtils.isNull(inttraSoDto.getPodName())) {
 					inttraSoDto.setPodName(RegularUtils.forceEmpty(bPorts.getEnName()));
 				}
@@ -372,7 +372,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			BPorts bPorts = bPortsService.getById(details.getPotId());
 			if (bPorts != null) {
 				String ediCode = RegularUtils.getEdiCode(ediCodeName, bPorts.getExtendedData());
-				inttraSoDto.setPotCode(ediCode);
+				inttraSoDto.setPotCode(bPorts.getUnCode());
 				if (ObjectUtils.isNull(inttraSoDto.getPotName())) {
 					inttraSoDto.setPotName(RegularUtils.forceEmpty(bPorts.getEnName()));
 				}
@@ -385,7 +385,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			BPorts bPorts = bPortsService.getById(details.getPlaceDeliveryId());
 			if (bPorts != null) {
 				String ediCode = RegularUtils.getEdiCode(ediCodeName, bPorts.getExtendedData());
-				inttraSoDto.setPlaceDeliveryCode(ediCode);
+				inttraSoDto.setPlaceDeliveryCode(bPorts.getUnCode());
 				if (ObjectUtils.isNull(inttraSoDto.getPlaceDeliveryName())) {
 					inttraSoDto.setPlaceDeliveryName(RegularUtils.forceEmpty(bPorts.getEnName()));
 				}
@@ -398,7 +398,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			BPorts bPorts = bPortsService.getById(details.getDestinationId());
 			if (bPorts != null) {
 				String ediCode = RegularUtils.getEdiCode(ediCodeName, bPorts.getExtendedData());
-				inttraSoDto.setPlaceDestinationCode(ediCode);
+				inttraSoDto.setPlaceDestinationCode(bPorts.getUnCode());
 				if (ObjectUtils.isNull(inttraSoDto.getPlaceDestinationName())) {
 					inttraSoDto.setPlaceDestinationName(RegularUtils.forceEmpty(bPorts.getEnName()));
 				}
@@ -774,7 +774,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			// List<Bills> allBillsList = Arrays.asList(details);
 			List<Bills> hblBillsList = new ArrayList<>();
 			List<SeaBillsDetail> seaBillsDetailListhb = new ArrayList<>();
-			if (INCLUDING_HBL && "MM".equals(billType)) {
+		/*	if (INCLUDING_HBL && "MM".equals(billType)) {
 				List<Bills> hblBills = billsService.list(new LambdaQueryWrapper<Bills>()
 					.eq(Bills::getTenantId, AuthUtil.getTenantId())
 					.eq(Bills::getIsDeleted, 0)
@@ -796,7 +796,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 					}
 					hblBillsList.addAll(hblBills);
 				}
-			}
+			}*/
 
 			// 默认发送方
 			String defaultSenderId = "JMSLOGQDSO";
@@ -865,7 +865,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			FilesCenter filesCenter = null;
 			Map<String, Object> status = null;
 
-			if (inttraSoDto.ediTypeIsHYCK_INTTRA_SO()) {
+			/*if (inttraSoDto.ediTypeIsHYCK_INTTRA_SO()) {
 				status = Regular_INTTRA.notNullInttraSoDto(inttraSoDto, "SO");
 				if ("200".equals(status.get("code").toString())) {
 					try {
@@ -964,7 +964,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 						return R.fail(e.getMessage());
 					}
 				}
-			} else if (inttraSoDto.ediTypeIsHYCK_ZIM_Booking()) {
+			} else*/ if (inttraSoDto.ediTypeIsHYCK_ZIM_Booking()) {
 				status = Regular_ONE.notNullOneBookingDto(inttraSoDto, "SO");
 				if ("200".equals(status.get("code").toString())) {
 					try {
@@ -973,7 +973,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 						return R.fail(e.getMessage());
 					}
 				}
-			} else if (inttraSoDto.ediTypeIsHYCK_ZIM_SI()) {
+			} /*else if (inttraSoDto.ediTypeIsHYCK_ZIM_SI()) {
 				status = Regular_ONE.notNullOneSIDto(inttraSoDto);
 				if ("200".equals(status.get("code").toString())) {
 					try {
@@ -1027,7 +1027,8 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 						return R.fail(e.getMessage());
 					}
 				}
-			} else {
+			}*/
+			else {
 				return R.fail("EDI 未实现!");
 			}
 

+ 3 - 3
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterUpdateRecordController.java

@@ -137,10 +137,10 @@ public class FeeCenterUpdateRecordController extends BladeController {
 	/**
 	 * 撤销请核费用
 	 */
-	@PostMapping("/revokeapplyUpdate")
+	@GetMapping("/revokeapplyUpdate")
 	@RepeatSubmit
-	public R revokeapplyUpdate(@Valid @RequestBody FeeCenterUpdateRecord feeCenterUpdateRecord) {
-		return feeCenterUpdateRecordService.revokeapplyUpdate(feeCenterUpdateRecord);
+	public R revokeapplyUpdate(@RequestParam("itemId")Long itemId ,@RequestParam("billId")Long billId) {
+		return feeCenterUpdateRecordService.revokeapplyUpdate(itemId,billId);
 	}
 
 

+ 2 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterUpdateRecordService.java

@@ -21,6 +21,7 @@ import org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord;
 import org.springblade.los.finance.fee.vo.FeeCenterUpdateRecordVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * 费用中心修改记录表 服务类
@@ -41,5 +42,5 @@ public interface IFeeCenterUpdateRecordService extends IService<FeeCenterUpdateR
 
 	R applyUpdate(FeeCenterUpdateRecord feeCenterUpdateRecord);
 
-	R revokeapplyUpdate(FeeCenterUpdateRecord feeCenterUpdateRecord);
+	R revokeapplyUpdate(Long itemId , Long billId);
 }

+ 272 - 10
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterUpdateRecordServiceImpl.java

@@ -16,24 +16,47 @@
  */
 package org.springblade.los.finance.fee.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.los.check.dto.LosAuditProecessDTO;
+import org.springblade.los.check.entity.LosAuditPathsActs;
+import org.springblade.los.check.entity.LosAuditPathsLevels;
 import org.springblade.los.check.service.IAuditPathsActsService;
 import org.springblade.los.check.service.IAuditPathsLevelsService;
 import org.springblade.los.check.service.IAuditProecessService;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.entity.FeeCenterUpdateRecord;
-import org.springblade.los.finance.fee.service.IFeeCenterService;
-import org.springblade.los.finance.fee.vo.FeeCenterUpdateRecordVO;
 import org.springblade.los.finance.fee.mapper.FeeCenterUpdateRecordMapper;
+import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.service.IFeeCenterUpdateRecordService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.system.feign.ISysClient;
+import org.springblade.los.finance.fee.vo.FeeCenterUpdateRecordVO;
+import org.springblade.los.finance.genleg.entity.FinPeriod;
+import org.springblade.los.finance.genleg.mapper.FinPeriodMapper;
+import org.springblade.los.finance.invoices.entity.FinInvoices;
+import org.springblade.los.finance.invoices.entity.FinInvoicesItems;
+import org.springblade.los.finance.invoices.mapper.FinInvoicesItemsMapper;
+import org.springblade.los.finance.invoices.mapper.FinInvoicesMapper;
+import org.springblade.los.finance.stl.entity.FinStlBills;
+import org.springblade.los.finance.stl.entity.FinStlBillsItems;
+import org.springblade.los.finance.stl.mapper.FinStlBillsItemsMapper;
+import org.springblade.los.finance.stl.mapper.FinStlBillsMapper;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 费用中心修改记录表 服务实现类
@@ -53,7 +76,13 @@ public class FeeCenterUpdateRecordServiceImpl extends ServiceImpl<FeeCenterUpdat
 
 	private final IAuditProecessService auditProecessService;
 
-	private final ISysClient sysClient;
+	private final FinInvoicesItemsMapper finInvoicesItemsMapper;
+	private final FinInvoicesMapper finInvoicesMapper;
+
+	private final FinStlBillsItemsMapper finStlBillsItemsMapper;
+	private final FinStlBillsMapper finStlBillsMapper;
+
+	private final FinPeriodMapper finPeriodMapper;
 
 	@Override
 	public IPage<FeeCenterUpdateRecordVO> selectFeeCenterUpdateRecordPage(IPage<FeeCenterUpdateRecordVO> page, FeeCenterUpdateRecordVO feeCenterUpdateRecord) {
@@ -61,25 +90,258 @@ public class FeeCenterUpdateRecordServiceImpl extends ServiceImpl<FeeCenterUpdat
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public R applyUpdate(FeeCenterUpdateRecord feeCenterUpdateRecord) {
-		if (feeCenterUpdateRecord.getItemId() == null){
+		if (feeCenterUpdateRecord.getItemId() == null) {
 			throw new RuntimeException("缺少必要参数");
 		}
 		FeeCenter feeCenter = feeCenterService.getById(feeCenterUpdateRecord.getItemId());
-		if (feeCenter == null){
+		if (feeCenter == null) {
 			throw new RuntimeException("未查到费用明细");
 		}
-		if (!"4".equals(feeCenter.getAuditStatus())){
+		if ("1,2,3".contains(feeCenter.getAuditStatus())) {
 			throw new RuntimeException("费用明细审核未通过");
 		}
+		if ("5,6".contains(feeCenter.getAuditStatus())) {
+			throw new RuntimeException("该条费用明细正在审核中");
+		}
+		if (ObjectUtils.isNotNull(feeCenter.getBillDate())) {
+			LocalDate date = feeCenter.getBillDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+			int year = date.getYear();
+			int month = date.getMonthValue();
+			FinPeriod finPeriod = finPeriodMapper.selectOne(new LambdaQueryWrapper<FinPeriod>()
+				.eq(FinPeriod::getTenantId, AuthUtil.getTenantId())
+				.eq(FinPeriod::getIsDeleted, 0)
+				.eq(FinPeriod::getPeriodYear, year)
+				.eq(FinPeriod::getPeriodMonth, month));
+			if (finPeriod != null) {
+				if (1 == finPeriod.getIsClosed()) {
+					throw new RuntimeException(year + "年" + month + "月账期已结转,保存失败");
+				}
+				if (1 == finPeriod.getLockingStatus()) {
+					throw new RuntimeException(year + "年" + month + "月账期已锁定,保存失败");
+				}
+			}
+		}
+		List<FinInvoicesItems> finInvoicesItems = finInvoicesItemsMapper.selectList(new LambdaQueryWrapper<FinInvoicesItems>()
+			.eq(FinInvoicesItems::getTenantId, AuthUtil.getTenantId())
+			.eq(FinInvoicesItems::getIsDeleted, 0)
+			.eq(FinInvoicesItems::getAccBillId, feeCenter.getAccBillId()));
+		if (!finInvoicesItems.isEmpty()) {
+			List<Long> finInvoicesIds = finInvoicesItems.stream().map(FinInvoicesItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+			String finInvoices = finInvoicesMapper.selectList(new LambdaQueryWrapper<FinInvoices>()
+				.eq(FinInvoices::getTenantId, AuthUtil.getTenantId())
+				.eq(FinInvoices::getIsDeleted, 0)
+				.in(FinInvoices::getId, finInvoicesIds)).stream().map(FinInvoices::getBillNo).collect(Collectors.joining(","));
+			throw new RuntimeException("账单已生成发票单,撤销失败! 发票单号为:" + finInvoices);
+		}
+		List<FinStlBillsItems> finStlBillsItemsCHK = finStlBillsItemsMapper.selectList(new LambdaQueryWrapper<FinStlBillsItems>()
+			.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+			.eq(FinStlBillsItems::getIsDeleted, 0)
+			.eq(FinStlBillsItems::getItemType, "CHK")
+			.eq(FinStlBillsItems::getAccBillId, feeCenter.getAccBillId()));
+		if (!finStlBillsItemsCHK.isEmpty()) {
+			List<Long> finStlBillsIds = finStlBillsItemsCHK.stream().map(FinStlBillsItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+			String finStlBills = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
+				.eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBills::getIsDeleted, 0)
+				.in(FinStlBills::getId, finStlBillsIds)).stream().map(FinStlBills::getBillNo).collect(Collectors.joining(","));
+			throw new RuntimeException("账单已生成对账单,撤销失败! 对账单号为:" + finStlBills);
+		}
+		List<FinStlBillsItems> finStlBillsItemsSTLD = finStlBillsItemsMapper.selectList(new LambdaQueryWrapper<FinStlBillsItems>()
+			.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+			.eq(FinStlBillsItems::getIsDeleted, 0)
+			.eq(FinStlBillsItems::getItemType, "STL")
+			.eq(FinStlBillsItems::getDc, "D")
+			.eq(FinStlBillsItems::getAccBillId, feeCenter.getAccBillId()));
+		if (!finStlBillsItemsSTLD.isEmpty()) {
+			List<Long> finStlBillsIds = finStlBillsItemsSTLD.stream().map(FinStlBillsItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+			String finStlBills = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
+				.eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBills::getIsDeleted, 0)
+				.in(FinStlBills::getId, finStlBillsIds)).stream().map(FinStlBills::getBillNo).collect(Collectors.joining(","));
+			throw new RuntimeException("账单已生成收款单,撤销失败! 收款单号为:" + finStlBills);
+		}
+		List<FinStlBillsItems> finStlBillsItemsSTLC = finStlBillsItemsMapper.selectList(new LambdaQueryWrapper<FinStlBillsItems>()
+			.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+			.eq(FinStlBillsItems::getIsDeleted, 0)
+			.eq(FinStlBillsItems::getItemType, "STL")
+			.eq(FinStlBillsItems::getDc, "C")
+			.eq(FinStlBillsItems::getAccBillId, feeCenter.getAccBillId()));
+		if (!finStlBillsItemsSTLC.isEmpty()) {
+			List<Long> finStlBillsIds = finStlBillsItemsSTLC.stream().map(FinStlBillsItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+			String finStlBills = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
+				.eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBills::getIsDeleted, 0)
+				.in(FinStlBills::getId, finStlBillsIds)).stream().map(FinStlBills::getBillNo).collect(Collectors.joining(","));
+			throw new RuntimeException("账单已生成付款单,撤销失败! 付款单号为:" + finStlBills);
+		}
+		List<FinStlBillsItems> finStlBillsItemsFFSQ = finStlBillsItemsMapper.selectList(new LambdaQueryWrapper<FinStlBillsItems>()
+			.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+			.eq(FinStlBillsItems::getIsDeleted, 0)
+			.eq(FinStlBillsItems::getItemType, "FFSQ")
+			.eq(FinStlBillsItems::getAccBillId, feeCenter.getAccBillId()));
+		if (!finStlBillsItemsFFSQ.isEmpty()) {
+			List<Long> finStlBillsIds = finStlBillsItemsFFSQ.stream().map(FinStlBillsItems::getPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+			String finStlBills = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
+				.eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBills::getIsDeleted, 0)
+				.in(FinStlBills::getId, finStlBillsIds)).stream().map(FinStlBills::getBillNo).collect(Collectors.joining(","));
+			throw new RuntimeException("账单已付费申请,撤销失败! 付费申请单号为:" + finStlBills);
+		}
+		if ("0".equals(feeCenterUpdateRecord.getType())) {
+			feeCenter.setAuditStatus("5");
+		}else{
+			feeCenter.setAuditStatus("6");
+		}
+		int version = StringUtil.isBlank(feeCenter.getVersion()) ? 1 : Integer.parseInt(feeCenter.getVersion());
+		feeCenter.setVersion(String.valueOf(version + 1));
+		feeCenter.setUpdateUser(AuthUtil.getUserId());
+		feeCenter.setUpdateTime(new Date());
+		feeCenter.setUpdateUserName(AuthUtil.getUserName());
+		feeCenterService.updateById(feeCenter);
 		feeCenterUpdateRecord.setCreateUser(AuthUtil.getUserId());
 		feeCenterUpdateRecord.setCreateTime(new Date());
 		feeCenterUpdateRecord.setCreateUserName(AuthUtil.getUserName());
+		feeCenterUpdateRecord.setBranchId(feeCenter.getBranchId());
+		feeCenterUpdateRecord.setBranchName(feeCenter.getBranchName());
+		feeCenterUpdateRecord.setStatus("1");
+		baseMapper.insert(feeCenterUpdateRecord);
+		int actId;
+		String processType;
+		String checkType;
+		if ("0".equals(feeCenterUpdateRecord.getType())) {
+			actId = 1133;
+			processType = "费用-申请修改";
+			checkType = "FY-SQXG";
+		} else {
+			actId = 1134;
+			processType = "费用-申请删除";
+			checkType = "FY-SQSC";
+		}
+		//审批数据
+		LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
+		//获取审批级次
+		List<LosAuditPathsLevels> auditPathsLevels;
+		// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
+		LosAuditPathsActs pathsActs;
+		//是否开启流程
+		LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		auditPathsActsLambdaQueryWrapper
+			.eq(LosAuditPathsActs::getIsEnable, 1)
+			.eq(LosAuditPathsActs::getFidStatus, "status")
+			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
+			.eq(LosAuditPathsActs::getSalesCompanyId, feeCenterUpdateRecord.getBranchId())
+			.eq(LosAuditPathsActs::getActId, actId);
+		pathsActs = auditPathsActsService.getOne(auditPathsActsLambdaQueryWrapper);
+		//获取审批信息
+		LosAuditPathsActs losAuditPathsActs = auditPathsActsService.getOne(new LambdaQueryWrapper<LosAuditPathsActs>()
+			.eq(LosAuditPathsActs::getActId, actId)
+			.eq(LosAuditPathsActs::getFidStatus, "status")
+			.eq(LosAuditPathsActs::getSalesCompanyId, feeCenterUpdateRecord.getBranchId())
+			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId()));
+		Long pathId = losAuditPathsActs.getPathId();
+		auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
+			.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId())
+			.eq(LosAuditPathsLevels::getPathId, pathId)
+			.eq(LosAuditPathsLevels::getSalesCompanyId, feeCenterUpdateRecord.getBranchId())
+		);
+		auditProecessDTO.setTimes(1);
+		auditProecessDTO.setProcessType(processType);
+		// 没开启审批流直接走 通过流程
+		if (pathsActs == null || pathsActs.getIsEnable() == 2) {
+			throw new SecurityException("当前租户未查询到审批流配置");
+		} else {
+			if (CollectionUtils.isEmpty(auditPathsLevels)) {
+				throw new SecurityException("开启审批失败:未查询到审批信息");
+			}
+			// 绑定审核类型
+			auditProecessDTO.setCheckType(checkType);
+			// 追加跳转路由url
+			auditProecessDTO.setUrl(feeCenterUpdateRecord.getUrl());
+			auditProecessDTO.setPageStatus(feeCenterUpdateRecord.getPageStatus());
+			auditProecessDTO.setPageLabel(feeCenterUpdateRecord.getPageLabel());
+			auditProecessDTO.setOrderRemark(feeCenterUpdateRecord.getUpdateReason());
+			List<LosAuditPathsLevels> pathsLevelsList = feeCenterUpdateRecord.getAuditPathsLevels();
+			if (ObjectUtils.isNotNull(pathsLevelsList) && !pathsLevelsList.isEmpty()) {
+				List<Long> idList = pathsLevelsList.stream().map(LosAuditPathsLevels::getId).collect(Collectors.toList());
+				List<LosAuditPathsLevels> levelsList = new ArrayList<>();
+				for (LosAuditPathsLevels item : auditPathsLevels) {
+					if (2 == item.getUserMold()) {
+						if (idList.contains(item.getId())) {
+							levelsList.add(item);
+						}
+					} else {
+						levelsList.add(item);
+					}
+				}
+				auditProecessDTO.setPathsLevelsList(levelsList);
+			} else {
+				auditProecessDTO.setPathsLevelsList(auditPathsLevels);
+			}
+			auditProecessDTO.setActId(1);
+			auditProecessDTO.setSrcBillId(feeCenterUpdateRecord.getId());
+			auditProecessDTO.setBillId(feeCenterUpdateRecord.getPid());
+			auditProecessDTO.setBillNo(feeCenterUpdateRecord.getBillNo());
+			auditProecessDTO.setSendUserId(AuthUtil.getUserId());
+			auditProecessDTO.setSendName(AuthUtil.getUserName());
+			auditProecessDTO.setSendTime(new Date());
+			auditProecessDTO.setBillTime(feeCenterUpdateRecord.getCreateTime());
+			auditProecessDTO.setTenantId(AuthUtil.getTenantId());
+			auditProecessDTO.setCorpId(feeCenterUpdateRecord.getCorpId());
+			auditProecessDTO.setCorpsName(feeCenterUpdateRecord.getCorpCnName());
+			auditProecessDTO.setReferenceNumber(feeCenterUpdateRecord.getBillNo());
+			auditProecessDTO.setMorderNo(feeCenterUpdateRecord.getMblno());
+			auditProecessDTO.setSrcBusType(feeCenterUpdateRecord.getBusinessType());
+			auditProecessDTO.setSalesCompanyId(Long.parseLong(feeCenterUpdateRecord.getBranchId()));
+			auditProecessDTO.setSalesCompanyName(feeCenterUpdateRecord.getBranchName());
+			auditProecessDTO.setMblno(feeCenterUpdateRecord.getMblno());
+			auditProecessDTO.setHblno(feeCenterUpdateRecord.getHblno());
+			if ("D".equals(feeCenterUpdateRecord.getDc())) {
+				auditProecessDTO.setReceivableAmount(feeCenterUpdateRecord.getAmount());
+			} else {
+				auditProecessDTO.setPayAmount(feeCenterUpdateRecord.getAmount());
+			}
+			R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
+			if (!financeProcess.isSuccess()) {
+				throw new SecurityException("操作失败,请联系管理员");
+			}
+		}
 		return null;
 	}
 
 	@Override
-	public R revokeapplyUpdate(FeeCenterUpdateRecord feeCenterUpdateRecord) {
+	public R revokeapplyUpdate(Long itemId, Long billId) {
+		FeeCenterUpdateRecord feeCenterUpdateRecord = baseMapper.selectOne(new LambdaQueryWrapper<FeeCenterUpdateRecord>()
+			.eq(FeeCenterUpdateRecord::getPid, billId)
+			.eq(FeeCenterUpdateRecord::getItemId, itemId)
+			.apply("find_in_set(status,'1,2')  limit 1"));
+		if (feeCenterUpdateRecord == null) {
+			throw new RuntimeException("未查到费用明细申请记录");
+		}
+		feeCenterUpdateRecord.setStatus("5");
+		feeCenterUpdateRecord.setUpdateUser(AuthUtil.getUserId());
+		feeCenterUpdateRecord.setUpdateTime(new Date());
+		feeCenterUpdateRecord.setUpdateUserName(AuthUtil.getUserName());
+		baseMapper.updateById(feeCenterUpdateRecord);
+		FeeCenter feeCenter = feeCenterService.getById(itemId);
+		if (feeCenter == null) {
+			throw new RuntimeException("未查到费用明细");
+		}
+		if (!"5,6".contains(feeCenter.getAuditStatus())) {
+			throw new RuntimeException("该条费用明细未申请");
+		}
+		feeCenter.setAuditStatus("4");
+		int version = StringUtil.isBlank(feeCenter.getVersion()) ? 1 : Integer.parseInt(feeCenter.getVersion());
+		feeCenter.setVersion(String.valueOf(version + 1));
+		feeCenter.setUpdateUser(AuthUtil.getUserId());
+		feeCenter.setUpdateTime(new Date());
+		feeCenter.setUpdateUserName(AuthUtil.getUserName());
+		feeCenterService.updateById(feeCenter);
+		R financeProcess = auditProecessService.deteleBySrcBillId(feeCenterUpdateRecord.getId());
+		if (!financeProcess.isSuccess()) {
+			throw new SecurityException("操作失败,请联系管理员");
+		}
 		return null;
 	}
 

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

@@ -128,7 +128,8 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 			if (1 == item.getAccStatus()) {
 				throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单");
 			}
-			boolean amountStatus = true;
+			item.setBillKey(item.getId() + "");
+			/*boolean amountStatus = true;
 			if (new BigDecimal("0.00").compareTo(item.getAmount()) > 0) {
 				amountStatus = false;
 			}
@@ -137,7 +138,7 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 				item.setBillKey(item.getPid() + "-" + item.getCorpId() + "-" + item.getDc() + "-" + item.getFeeCode() + "-" + item.getCurCode() + "-" + amountStatus);
 			} else {
 				throw new RuntimeException("单据号、单位、费用类型、费用名称不能为空");
-			}
+			}*/
 		}
 		BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
 			.eq(BusinessType::getTenantId, AuthUtil.getTenantId())

Некоторые файлы не были показаны из-за большого количества измененных файлов