Browse Source

2024年1月16日17:40:30

纪新园 2 years ago
parent
commit
68fde3826a
13 changed files with 885 additions and 117 deletions
  1. 59 3
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/amends/entity/Amends.java
  2. 17 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FinAccBills.java
  3. 92 8
      blade-service/blade-los/src/main/java/org/springblade/los/business/amends/controller/AmendsController.java
  4. 35 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/amends/service/IAmendsService.java
  5. 245 9
      blade-service/blade-los/src/main/java/org/springblade/los/business/amends/service/impl/AmendsServiceImpl.java
  6. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  7. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java
  8. 47 25
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  9. 4 1
      blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java
  10. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/IAuditProecessService.java
  11. 300 39
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java
  12. 15 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/service/impl/FinInvoicesServiceImpl.java
  13. 66 29
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

+ 59 - 3
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/amends/entity/Amends.java

@@ -97,9 +97,9 @@ public class Amends implements Serializable {
 	@ApiModelProperty(value = "修改时间")
 	private Date updateTime;
 	/**
-	 * 业务类型, SEA=海运出口AMEND SIA=海运进口AMEND
+	 * 业务类型, SEA=海运出口AMEND SIA=海运进口AMEND AEA=空运出口AMEND AIA=空运进口AMEND
 	 */
-	@ApiModelProperty(value = "业务类型, SEA=海运出口AMEND SIA=海运进口AMEND")
+	@ApiModelProperty(value = "业务类型, SEA=海运出口AMEND SIA=海运进口AMEND AEA=空运出口AMEND AIA=空运进口AMEND")
 	private String businessType;
 	/**
 	 * 单据编号
@@ -114,6 +114,18 @@ public class Amends implements Serializable {
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date billDate;
+
+	/**
+	 * 单据日期
+	 */
+	@TableField(exist = false)
+	private Date billDateStart;
+
+	/**
+	 * 单据日期
+	 */
+	@TableField(exist = false)
+	private Date billDateEnd;
 	/**
 	 * 财务日期
 	 */
@@ -289,6 +301,18 @@ public class Amends implements Serializable {
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date etd;
+
+	/**
+	 * 开船日期
+	 */
+	@TableField(exist = false)
+	private Date etdStart;
+
+	/**
+	 * 开船日期
+	 */
+	@TableField(exist = false)
+	private Date etdEnd;
 	/**
 	 * 到港日期
 	 */
@@ -298,6 +322,16 @@ public class Amends implements Serializable {
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date eta;
 	/**
+	 * 到港日期
+	 */
+	@TableField(exist = false)
+	private Date etaStart;
+	/**
+	 * 到港日期
+	 */
+	@TableField(exist = false)
+	private Date etaEnd;
+	/**
 	 * 装货港 id
 	 */
 	@ApiModelProperty(value = "装货港 id")
@@ -413,7 +447,7 @@ public class Amends implements Serializable {
 	@ApiModelProperty(value = "版本")
 	private String version;
 	/**
-	 * 状态(0 正常 1停用)
+	 * 状态 0 = 新建  1=审核提交  2=审核中  3= 审核通过  4=审核驳回
 	 */
 	@ApiModelProperty(value = "状态(0 正常 1停用)")
 	private Integer status;
@@ -453,5 +487,27 @@ public class Amends implements Serializable {
 	@TableField(exist = false)
 	private List<FeeCenter> feeCenterListD;
 
+	//跳转对应页面的路由
+	@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;
+
 
 }

+ 17 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FinAccBills.java

@@ -647,5 +647,22 @@ public class FinAccBills implements Serializable {
 	@TableField(exist = false)
 	private BigDecimal appliedInvoiceAmountUsd;
 
+	/**
+	 * 已对账金额
+	 */
+	@ApiModelProperty(value = "已对账金额")
+	private BigDecimal reconciliationAmount;
+
+	/**
+	 * 已申请结算金额
+	 */
+	@ApiModelProperty(value = "已申请金额")
+	private BigDecimal appliedAmountStl;
+	/**
+	 * 已申请发票结算金额
+	 */
+	@ApiModelProperty(value = "已申请发票金额")
+	private BigDecimal appliedInvoiceAmountStl;
+
 
 }

+ 92 - 8
blade-service/blade-los/src/main/java/org/springblade/los/business/amends/controller/AmendsController.java

@@ -16,23 +16,27 @@
  */
 package org.springblade.los.business.amends.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 com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-import javax.validation.Valid;
-
+import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.business.amends.entity.Amends;
-import org.springblade.los.business.amends.vo.AmendsVO;
 import org.springblade.los.business.amends.service.IAmendsService;
-import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.los.business.amends.vo.AmendsVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
 
 /**
  * 业务-业务费用 AmendDate 控制器
@@ -66,7 +70,28 @@ public class AmendsController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入amends")
 	public R<IPage<Amends>> list(Amends amends, Query query) {
-		IPage<Amends> pages = amendsService.page(Condition.getPage(query), Condition.getQueryWrapper(amends));
+		LambdaQueryWrapper<Amends> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Amends::getTenantId, AuthUtil.getTenantId())
+			.eq(ObjectUtils.isNotNull(amends.getStatus()), Amends::getStatus, amends.getStatus())
+			.like(ObjectUtils.isNotNull(amends.getBillNo()), Amends::getBillNo, amends.getBillNo())
+			.eq(ObjectUtils.isNotNull(amends.getBusinessType()), Amends::getBusinessType, amends.getBusinessType())
+			.like(ObjectUtils.isNotNull(amends.getMblno()), Amends::getStatus, amends.getStatus())
+			.like(ObjectUtils.isNotNull(amends.getHblno()), Amends::getStatus, amends.getStatus())
+			.like(ObjectUtils.isNotNull(amends.getRefno()), Amends::getStatus, amends.getStatus())
+			.like(ObjectUtils.isNotNull(amends.getBookingNo()), Amends::getStatus, amends.getStatus())
+			.and(ObjectUtils.isNotNull(amends.getCorpCnName()), i -> i.like(Amends::getCorpCnName, amends.getCorpCnName()).or()
+				.like(Amends::getCorpEnName, amends.getCorpCnName()))
+			.and(ObjectUtils.isNotNull(amends.getVesselCnName()), i -> i.like(Amends::getVesselCnName, amends.getVesselCnName()).or()
+				.like(Amends::getVesselEnName, amends.getVesselCnName()))
+			.like(ObjectUtils.isNotNull(amends.getVoyageNo()), Amends::getVoyageNo, amends.getVoyageNo())
+			.ge(ObjectUtils.isNotNull(amends.getBillDateStart()), Amends::getStatus, amends.getBillDateStart())
+			.le(ObjectUtils.isNotNull(amends.getBillDateEnd()), Amends::getStatus, amends.getBillDateEnd())
+			.ge(ObjectUtils.isNotNull(amends.getEtdStart()), Amends::getEtd, amends.getEtdStart())
+			.le(ObjectUtils.isNotNull(amends.getEtdEnd()), Amends::getEtd, amends.getEtdEnd())
+			.ge(ObjectUtils.isNotNull(amends.getEtaStart()), Amends::getEta, amends.getEtaStart())
+			.le(ObjectUtils.isNotNull(amends.getEtaEnd()), Amends::getEta, amends.getEtaEnd())
+			.eq(Amends::getIsDeleted, 0);
+		IPage<Amends> pages = amendsService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -123,4 +148,63 @@ public class AmendsController extends BladeController {
 	}
 
 
+	/**
+	 * 单据请核
+	 */
+	@PostMapping("/checkAmends")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "请核", notes = "传入amends")
+	@RepeatSubmit
+	public R checkAmends(@RequestBody Amends amends) {
+		Amends declare = amendsService.checkAmends(amends);
+		return R.data(declare);
+	}
+
+	/**
+	 * 撤销单据请核
+	 */
+	@PostMapping("/revokeCheckAmends")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "撤销请核", notes = "传入amends")
+	@RepeatSubmit
+	public R revokeCheckAmends(@RequestBody Amends amends) {
+		Amends declare = amendsService.revokeCheckAmends(amends);
+		return R.data(declare);
+	}
+
+	/**
+	 * 审核通过
+	 */
+	@PostMapping("/passCheck")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "审核通过", notes = "传入id")
+	@RepeatSubmit
+	public R passCheck(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		return amendsService.passCheck(id);
+	}
+
+	/**
+	 * 审核中
+	 */
+	@PostMapping("/underReview")
+	@ApiOperationSupport(order = 15)
+	@ApiOperation(value = "审核中", notes = "传入id")
+	@RepeatSubmit
+	public R underReview(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		return amendsService.underReview(id);
+	}
+
+	/**
+	 * 审核不通过
+	 */
+	@PostMapping("/passCancel")
+	@ApiOperationSupport(order = 16)
+	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
+	@RepeatSubmit
+	public R passCancel(@ApiParam(value = "财务主表id", required = true) @RequestParam Long id) {
+		amendsService.passCancel(id);
+		return R.success("操作成功");
+	}
+
+
 }

+ 35 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/amends/service/IAmendsService.java

@@ -52,4 +52,39 @@ public interface IAmendsService extends IService<Amends> {
 	 * @return
 	 */
 	Amends detail(Amends amends);
+
+
+	/**
+	 * 单据请核
+	 * @param amends
+	 * @return
+	 */
+    Amends checkAmends(Amends amends);
+
+	/**
+	 * 撤销单据请核
+	 * @param amends
+	 * @return
+	 */
+	Amends revokeCheckAmends(Amends amends);
+
+	/**
+	 * 审核通过
+	 * @param id
+	 * @return
+	 */
+	R passCheck(Long id);
+
+	/**
+	 * 审核中
+	 * @param id
+	 * @return
+	 */
+	R underReview(Long id);
+
+	/**
+	 * 审核不通过
+	 * @param id
+	 */
+	R passCancel(Long id);
 }

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

@@ -18,24 +18,40 @@ package org.springblade.los.business.amends.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.los.Util.IDeptUtils;
+import org.springblade.los.basic.business.entity.BusinessType;
+import org.springblade.los.basic.business.service.IBusinessTypeService;
+import org.springblade.los.billno.entity.BusinessBillNo;
+import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.amends.mapper.AmendsMapper;
 import org.springblade.los.business.amends.service.IAmendsService;
 import org.springblade.los.business.amends.vo.AmendsVO;
+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.FinAccBills;
 import org.springblade.los.finance.fee.service.IFeeCenterService;
+import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 业务-业务费用 AmendDate 服务实现类
@@ -53,6 +69,18 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 
 	private final IFeeCenterService feeCenterService;
 
+	private final IAuditPathsActsService auditPathsActsService;
+
+	private final IAuditPathsLevelsService auditPathsLevelsService;
+
+	private final IAuditProecessService auditProecessService;
+
+	private final IFinAccBillsService finAccBillsService;
+
+	private final IBusinessBillNoService businessBillNoService;
+
+	private final IBusinessTypeService bBusinessTypeService;
+
 	@Override
 	public IPage<AmendsVO> selectAmendsPage(IPage<AmendsVO> page, AmendsVO amends) {
 		return page.setRecords(baseMapper.selectAmendsPage(page, amends));
@@ -77,7 +105,25 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 				branchId = deptId;
 			}
 		}
+		amends.setBillDate(new Date());
 		if (amends.getId() == null) {
+			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
+				.eq(BusinessType::getIsDeleted, 0)
+				.eq(BusinessType::getStatus, 0)
+				.eq(BusinessType::getCode, amends.getBusinessTypeCode()));
+			if (businessType == null) {
+				throw new RuntimeException("未找到可用业务类型");
+			}
+			BusinessBillNo businessBillNo = new BusinessBillNo();
+			businessBillNo.setBusinessTypeId(businessType.getId());
+			businessBillNo.setCode(amends.getBillNoFormat());
+			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+			if (!clientBillNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				return R.fail(500, "生成订单编号失败");
+			}
+			amends.setBillNo((String) clientBillNo.getData());
 			amends.setCreateTime(new Date());
 			amends.setCreateUser(AuthUtil.getUserId());
 			amends.setCreateUserName(AuthUtil.getUserName());
@@ -92,11 +138,11 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 			amends.setUpdateUserName(AuthUtil.getUserName());
 		}
 		this.saveOrUpdate(amends);
-		if (ObjectUtils.isNotNull(amends.getFeeCenterListC())) {
-			feeCenterService.submitList(amends.getFeeCenterListC());
-		}
-		if (ObjectUtils.isNotNull(amends.getFeeCenterListD())) {
-			feeCenterService.submitList(amends.getFeeCenterListD());
+		if (ObjectUtils.isNotNull(amends.getFeeCenterList())) {
+			for (FeeCenter item:amends.getFeeCenterList()) {
+				item.setPid(amends.getId());
+			}
+			feeCenterService.submitList(amends.getFeeCenterList());
 		}
 		return R.data(amends);
 	}
@@ -115,18 +161,208 @@ public class AmendsServiceImpl extends ServiceImpl<AmendsMapper, Amends> impleme
 		detail.setFeeCenterListC(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-			.eq(FeeCenter::getPid, detail.getId())
+			.eq(FeeCenter::getPid, detail.getOrigId())
 			.eq(FeeCenter::getDc, "C")
-			.eq(FeeCenter::getBillNo, detail.getOrigId())
 		));
 		detail.setFeeCenterListD(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-			.eq(FeeCenter::getPid, detail.getId())
+			.eq(FeeCenter::getPid, detail.getOrigId())
 			.eq(FeeCenter::getDc, "D")
-			.eq(FeeCenter::getBillNo, detail.getOrigId())
 		));
 		return detail;
 	}
 
+	@Override
+	public Amends checkAmends(Amends amends) {
+		Amends declare = baseMapper.selectById(amends.getId());
+		Integer actId = null;
+		String processType = "";
+		String checkType = "";
+		if ("SEA".equals(declare.getBusinessType())) {
+			actId = 1111;
+			processType = "海运出口AMEND";
+			checkType = "sea-approve";
+		} else if ("SIA".equals(declare.getBusinessType())) {
+			actId = 1112;
+			processType = "海运进口AMEND";
+			checkType = "sia-approve";
+		} else if ("AEA".equals(declare.getBusinessType())) {
+			actId = 1112;
+			processType = "空运进口AMEND";
+			checkType = "aea-approve";
+		} else if ("AIA".equals(declare.getBusinessType())) {
+			actId = 1112;
+			processType = "空运进口AMEND";
+			checkType = "aia-approve";
+		}
+		//审批数据
+		LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
+		//获取审批级次
+		List<LosAuditPathsLevels> auditPathsLevels = null;
+		// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
+		LosAuditPathsActs pathsActs = null;
+		//是否开启流程
+		LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		auditPathsActsLambdaQueryWrapper
+			.eq(LosAuditPathsActs::getIsEnable, 1)
+			.eq(LosAuditPathsActs::getFidStatus, "status")
+			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
+			.eq(LosAuditPathsActs::getSalesCompanyId, AuthUtil.getDeptId())
+			.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, AuthUtil.getDeptId())
+			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId()));
+		Long pathId = losAuditPathsActs.getPathId();
+		auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
+			.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
+		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(amends.getUrl());
+			auditProecessDTO.setPageStatus(amends.getPageStatus());
+			auditProecessDTO.setPageLabel(amends.getPageLabel());
+			auditProecessDTO.setOrderRemark(declare.getRemarks());
+			auditProecessDTO.setPathsLevelsList(auditPathsLevels);
+			auditProecessDTO.setActId(1);
+			auditProecessDTO.setSrcBillId(declare.getId());
+			auditProecessDTO.setBillId(declare.getId());
+			auditProecessDTO.setBillNo(declare.getBillNo());
+			auditProecessDTO.setSendUserId(AuthUtil.getUserId());
+			auditProecessDTO.setSendName(AuthUtil.getUserName());
+			auditProecessDTO.setSendTime(new Date());
+			auditProecessDTO.setBillTime(declare.getCreateTime());
+			auditProecessDTO.setTenantId(AuthUtil.getTenantId());
+			auditProecessDTO.setCorpId(declare.getCorpId());
+			auditProecessDTO.setSalesCompanyId(Long.parseLong(declare.getCreateDept()));
+			auditProecessDTO.setSalesCompanyName(declare.getCreateDeptName());
+			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getPid, declare.getId())
+			);
+			BigDecimal amountC = feeCenterList.stream().filter(e -> "C".equals(e.getDc())).map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal amountD = feeCenterList.stream().filter(e -> "D".equals(e.getDc())).map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			auditProecessDTO.setPayAmount(amountC);
+			auditProecessDTO.setReceivableAmount(amountD);
+			auditProecessDTO.setGrossProfit(amountD.subtract(amountC));
+			auditProecessDTO.setSalesCompanyName(declare.getCreateDeptName());
+			R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
+			if (!financeProcess.isSuccess()) {
+				throw new SecurityException("操作失败,请联系管理员");
+			}
+		}
+		declare.setStatus(1);
+		baseMapper.updateById(declare);
+		return declare;
+	}
+
+	@Override
+	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("操作失败,请联系管理员");
+		}
+		declare.setStatus(0);
+		baseMapper.updateById(declare);
+		return declare;
+	}
+
+	@Override
+	public R passCheck(Long id) {
+		Amends bills = baseMapper.selectById(id);
+		if (bills == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		bills.setStatus(3);
+		bills.setBillStatus(2);
+		baseMapper.updateById(bills);
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getAccStatus, 0)
+			.eq(FeeCenter::getPid, bills.getId()));
+		for (FeeCenter item : feeCenterList) {
+			item.setApproverId(AuthUtil.getUserId());
+			item.setApproverName(AuthUtil.getUserName());
+			item.setApproveTime(new Date());
+		}
+		feeCenterService.saveOrUpdateBatch(feeCenterList);
+		if (feeCenterList.size() != 0) {
+			FinAccBills finAccBills = new FinAccBills();
+			finAccBills.setFeeCenterList(feeCenterList);
+			finAccBills.setBusinessTypeCode("HYZD");
+			finAccBills.setBillNoFormat("HYZD");
+			finAccBills.setAccountType("");
+			finAccBills.setCorpArgreementNo(bills.getCorpArgreementNo());
+			finAccBills.setRefno(bills.getRefno());
+			finAccBills.setBookingNo(bills.getBookingNo());
+			finAccBills.setPolNamePrint(bills.getPolNamePrint());
+			finAccBills.setPodNamePrint(bills.getPodNamePrint());
+			finAccBillsService.generateBill(finAccBills);
+		}
+		return R.success("操作成功");
+	}
+
+	@Override
+	public R underReview(Long id) {
+		Amends bills = baseMapper.selectById(id);
+		if (bills == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		bills.setStatus(2);
+		baseMapper.updateById(bills);
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getPid, bills.getId()));
+		for (FeeCenter item : feeCenterList) {
+			item.setApproverId(AuthUtil.getUserId());
+			item.setApproverName(AuthUtil.getUserName());
+			item.setApproveTime(new Date());
+		}
+		feeCenterService.saveOrUpdateBatch(feeCenterList);
+		return R.success("操作成功");
+	}
+
+	@Override
+	public R passCancel(Long id) {
+		Amends bills = baseMapper.selectById(id);
+		if (bills == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		bills.setStatus(4);
+		baseMapper.updateById(bills);
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getPid, bills.getId()));
+		for (FeeCenter item : feeCenterList) {
+			item.setApproverId(AuthUtil.getUserId());
+			item.setApproverName(AuthUtil.getUserName());
+			item.setApproveTime(new Date());
+		}
+		feeCenterService.saveOrUpdateBatch(feeCenterList);
+		return R.success("操作成功");
+	}
+
 }

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

@@ -376,8 +376,8 @@ public class BillsController extends BladeController {
 	@GetMapping("/getDetail")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入bills")
-	public R<Bills> getDetail(Bills bills) {
-		Bills detail = billsService.getDetail(bills);
+	public R<List<Bills>> getDetail(Bills bills) {
+		List<Bills> detail = billsService.getDetail(bills);
 		return R.data(detail);
 	}
 

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

@@ -141,5 +141,5 @@ public interface IBillsService extends IService<Bills> {
 	 */
 	R revokeDisembarking(String ids);
 
-	Bills getDetail(Bills bills);
+	List<Bills> getDetail(Bills bills);
 }

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

@@ -960,7 +960,18 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public Bills checkBills(Bills bills) {
 		Bills declare = baseMapper.selectById(bills.getId());
-
+		Integer actId = null;
+		String processType = "";
+		String checkType = "";
+		if ("SE".equals(declare.getBusinessType())) {
+			actId = 1108;
+			processType = "海运出口审核";
+			checkType = "HYCK-DJ";
+		} else if ("SI".equals(declare.getBusinessType())) {
+			actId = 1113;
+			processType = "海运进口审核";
+			checkType = "HYJK-DJ";
+		}
 		//审批数据
 		LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
 		//获取审批级次
@@ -974,11 +985,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.eq(LosAuditPathsActs::getFidStatus, "status")
 			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
 			.eq(LosAuditPathsActs::getSalesCompanyId, AuthUtil.getDeptId())
-			.eq(LosAuditPathsActs::getActId, 1108);
+			.eq(LosAuditPathsActs::getActId, actId);
 		pathsActs = auditPathsActsService.getOne(auditPathsActsLambdaQueryWrapper);
 		//获取审批信息
 		LosAuditPathsActs losAuditPathsActs = auditPathsActsService.getOne(new LambdaQueryWrapper<LosAuditPathsActs>()
-			.eq(LosAuditPathsActs::getActId, 1108)
+			.eq(LosAuditPathsActs::getActId, actId)
 			.eq(LosAuditPathsActs::getFidStatus, "status")
 			.eq(LosAuditPathsActs::getSalesCompanyId, AuthUtil.getDeptId())
 			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId()));
@@ -986,7 +997,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
 			.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
 		auditProecessDTO.setTimes(1);
-		auditProecessDTO.setProcessType("海运出口审核");
+		auditProecessDTO.setProcessType(processType);
 
 		// 没开启审批流直接走 通过流程
 		if (pathsActs == null || pathsActs.getIsEnable() == 2) {
@@ -997,7 +1008,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				throw new SecurityException("开启审批失败:未查询到审批信息");
 			}
 			// 绑定审核类型
-			auditProecessDTO.setCheckType("HYCK-DJ");
+			auditProecessDTO.setCheckType(checkType);
 			// 追加跳转路由url
 			auditProecessDTO.setUrl(bills.getUrl());
 			auditProecessDTO.setPageStatus(bills.getPageStatus());
@@ -1416,7 +1427,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 	}
 
 	@Override
-	public Bills getDetail(Bills bills) {
+	public List<Bills> getDetail(Bills bills) {
 		if (ObjectUtils.isNull(bills.getMblno()) &&
 			ObjectUtils.isNull(bills.getHblno()) &&
 			ObjectUtils.isNull(bills.getBookingNo()) &&
@@ -1424,32 +1435,43 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		) {
 			throw new RuntimeException("缺少必要参数");
 		}
-		Bills detail = baseMapper.selectOne(new LambdaQueryWrapper<Bills>()
+		List<Bills> billsList = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
 			.eq(ObjectUtils.isNotNull(bills.getMblno()), Bills::getMblno, bills.getMblno())
 			.eq(ObjectUtils.isNotNull(bills.getHblno()), Bills::getHblno, bills.getHblno())
 			.eq(ObjectUtils.isNotNull(bills.getBookingNo()), Bills::getBookingNo, bills.getBookingNo())
 			.eq(ObjectUtils.isNotNull(bills.getRefno()), Bills::getRefno, bills.getRefno())
+			.eq(Bills::getIsDeleted, 0)
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getStatus, 3)
+			.eq(Bills::getBillStatus, 3)
 		);
-		if (detail == null) {
+		if (billsList.size() == 0) {
 			throw new RuntimeException("未查到单据信息");
 		}
-		detail.setFeeCenterListC(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-			.eq(FeeCenter::getIsDeleted, 0)
-			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-			.eq(FeeCenter::getBillType, detail.getBillType())
-			.eq(FeeCenter::getPid, detail.getId())
-			.eq(FeeCenter::getDc, "C")
-			.eq(FeeCenter::getBillNo, detail.getBillNo())
-		));
-		detail.setFeeCenterListD(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-			.eq(FeeCenter::getIsDeleted, 0)
-			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-			.eq(FeeCenter::getBillType, detail.getBillType())
-			.eq(FeeCenter::getPid, detail.getId())
-			.eq(FeeCenter::getDc, "D")
-			.eq(FeeCenter::getBillNo, detail.getBillNo())
-		));
-		return detail;
+		for (Bills detail : billsList) {
+			detail.setFeeCenterListC(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getBillType, detail.getBillType())
+				.eq(FeeCenter::getPid, detail.getId())
+				.eq(FeeCenter::getDc, "C")
+				.eq(FeeCenter::getBillNo, detail.getBillNo())
+			));
+			detail.setFeeCenterListD(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getBillType, detail.getBillType())
+				.eq(FeeCenter::getPid, detail.getId())
+				.eq(FeeCenter::getDc, "D")
+				.eq(FeeCenter::getBillNo, detail.getBillNo())
+			));
+			detail.setPreContainersList(preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+				.eq(PreContainers::getIsDeleted, 0)
+				.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+				.eq(PreContainers::getPid, detail.getId())));
+		}
+
+		return billsList;
 	}
 
 

+ 4 - 1
blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java

@@ -224,12 +224,15 @@ public class AuditProecessController extends BladeController {
 		if (StringUtils.isBlank(proecess.getCheckType())) {
 			throw new SecurityException("审核失败,未填写审批类型");
 		}
-		if ("HYCK-DJ".equals(proecess.getCheckType())) {
+		if ("HYCK-DJ".equals(proecess.getCheckType()) || "HYJK-DJ".equals(proecess.getCheckType())) {
 			auditProecessService.losBillsCheck(auditProecess);
 		}else if ("HYCK-FFSQ".equals(proecess.getCheckType())) {
 			auditProecessService.losStlBillsCheck(auditProecess);
 		}else if ("HYCK-FPSQ".equals(proecess.getCheckType())) {
 			auditProecessService.losFinInvoicesCheck(auditProecess);
+		}else if ("sea-approve".equals(proecess.getCheckType()) || "sia-approve".equals(proecess.getCheckType())||
+			"aea-approve".equals(proecess.getCheckType()) || "aia-approve".equals(proecess.getCheckType())) {
+			auditProecessService.amendsCheck(auditProecess);
 		}
 		return R.data(auditProecess);
 	}

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

@@ -60,4 +60,6 @@ public interface IAuditProecessService extends IService<LosAuditProecess> {
 	void losStlBillsCheck(LosAuditProecess auditProecess);
 
 	void losFinInvoicesCheck(LosAuditProecess auditProecess);
+
+    void amendsCheck(LosAuditProecess auditProecess);
 }

+ 300 - 39
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -29,6 +29,8 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.corps.service.IBCorpsService;
+import org.springblade.los.business.amends.entity.Amends;
+import org.springblade.los.business.amends.mapper.AmendsMapper;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.mapper.BillsMapper;
 import org.springblade.los.check.dto.LosAuditProecessDTO;
@@ -80,6 +82,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 
 	private final IFinAccBillsService finAccBillsService;
 
+	private final AmendsMapper amendsMapper;
+
 
 	@Override
 	public IPage<LosAuditProecessVO> selectAuditProecessPage(IPage<LosAuditProecessVO> page, LosAuditProecessVO auditProecess) {
@@ -345,14 +349,21 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				message.setParameter(String.valueOf(auditProecess.getBillId()));
 				message.setMessageType(1);
 				message.setTenantId(AuthUtil.getTenantId());
-
-				message.setMessageBody("您有新的审核,业务单号:" + "" + proecessTemp.getBillNo() + ","
-					+ "单据日期:" + billsDate + ",请审核。"
-					+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
-				);
-
+				message.setUrl(auditProecess.getUrl());
+				message.setPageLabel(auditProecess.getPageLabel());
+				message.setPageStatus(auditProecess.getPageStatus());
+				if ("海运出口审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的海运出口审核,业务单号:" + "" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				} if ("海运进口审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的海运进口审核,业务单号:" + "" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				}
 				message.setCreateUser(AuthUtil.getUserId());
-				message.setUrl("/salesManagement/saleOrder/index");
 				message.setCreateTime(new Date());
 
 				// 消息批量通知下一级
@@ -380,7 +391,12 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					item.setApproveTime(new Date());
 				}
 				feeCenterService.saveOrUpdateBatch(feeCenterList);
-				sendMessage.setMessageBody("您的审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				if ("海运出口审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运出口审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} if ("海运进口审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运进口审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				}
+
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -446,7 +462,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					finAccBills.setPodNamePrint(bills.getPodNamePrint());
 					finAccBillsService.generateBill(finAccBills);
 				}
-				sendMessage.setMessageBody("您的审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
+				if ("海运出口审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运出口审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} if ("海运进口审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运进口审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -475,7 +495,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					item.setApproveTime(new Date());
 				}
 				feeCenterService.saveOrUpdateBatch(feeCenterList);
-				sendMessage.setMessageBody("您的审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				if ("海运出口审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运出口审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} if ("海运进口审核".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运进口审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -590,20 +614,17 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				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())) {
+				 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.setUrl("/iosBasicData/SeafreightExportF/bills/approvalDetails");
+
 				message.setCreateTime(new Date());
 
 				// 消息批量通知下一级
@@ -622,7 +643,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					throw new SecurityException("修改订单数据失败");
 				}
 
-				sendMessage.setMessageBody("您的审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				sendMessage.setMessageBody("您的付费申请未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -646,7 +667,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					throw new SecurityException("修改订单数据失败");
 				}
 
-				sendMessage.setMessageBody("您的审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
+				sendMessage.setMessageBody("您的付费申请已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -666,7 +687,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				if (count == 0) {
 					throw new SecurityException("修改订单数据失败");
 				}
-				sendMessage.setMessageBody("您的审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				sendMessage.setMessageBody("您的付费申请未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -781,26 +802,15 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				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())
-					);
-					message.setUrl("/iosBasicData/SeafreightExportF/bills/index");
-				} else if ("付费申请".equals(auditProecess.getProcessType())) {
-					message.setMessageBody("您有新的付费申请,申请单号:" + "" + proecessTemp.getBillNo() + ","
-						+ "单据日期:" + billsDate + ",请审核。"
-						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
-					);
-					message.setUrl("/iosBasicData/PaymentApplication/index");
-				} else if ("发票申请".equals(auditProecess.getProcessType())) {
+				if ("发票申请".equals(auditProecess.getProcessType())) {
 					message.setMessageBody("您有新的发票申请,申请单号:" + "" + proecessTemp.getBillNo() + ","
 						+ "单据日期:" + billsDate + ",请审核。"
 						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-					message.setUrl("/iosBasicData/fininvoicesApplyfor/index");
 				}
-
+				message.setUrl(auditProecess.getUrl());
+				message.setPageLabel(auditProecess.getPageLabel());
+				message.setPageStatus(auditProecess.getPageStatus());
 				message.setCreateUser(AuthUtil.getUserId());
 				message.setCreateTime(new Date());
 
@@ -820,7 +830,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					throw new SecurityException("修改订单数据失败");
 				}
 
-				sendMessage.setMessageBody("您的审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				sendMessage.setMessageBody("您的发票申请未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -843,7 +853,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					throw new SecurityException("修改订单数据失败");
 				}
 
-				sendMessage.setMessageBody("您的审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
+				sendMessage.setMessageBody("您的发票申请已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -862,7 +872,258 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				if (count == 0) {
 					throw new SecurityException("修改订单数据失败");
 				}
-				sendMessage.setMessageBody("您的审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				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);
+	}
+
+	@Override
+	public void amendsCheck(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());
+
+		Amends bills = amendsMapper.selectById(proecessTemp.getBillId());
+
+		//不是最后一级
+		if ("F".equals(iffinalItem)) {
+
+			//通过
+			if (operate == 1) {
+				//如果是第一级, 则修改状态为审批中
+				if (auditProecess.getLevelId() == 1) {
+					Amends detail = amendsMapper.selectById(auditProecess.getSrcBillId());
+					if (detail == null) {
+						throw new SecurityException("审批通过失败");
+					}
+					detail.setStatus(2);
+					int count = amendsMapper.updateById(detail);
+					if (count == 0) {
+						throw new SecurityException("审批开始修改审核状态失败");
+					}
+				}
+
+				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) {
+					if (bills != null) {
+						billsDate = simpleDateFormat.format(bills.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 ("海运出口AMEND".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的海运出口AMEND审核,业务单号:" + "" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				} else if ("海运进口口AMEND".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的海运进口口AMEND审核,业务单号:" + "" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				} else if ("空运出口AMEND".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的空运出口AMEND审核,业务单号:" + "" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				} else if ("空运进口口AMEND".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的空运进口口AMEND审核,业务单号:" + "" + 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");
+				Amends detail = amendsMapper.selectById(auditProecess.getSrcBillId());
+				if (detail == null) {
+					throw new SecurityException("审批通过失败");
+				}
+				detail.setStatus(4);
+				int count = amendsMapper.updateById(detail);
+				if (count == 0) {
+					throw new SecurityException("修改订单数据失败");
+				}
+				if ("海运出口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运出口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("海运进口口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运进口口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("空运出口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的空运出口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("空运进口口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的空运进口口AMEND审核未通过" + ",业务单号:" + 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");
+				Amends detail = amendsMapper.selectById(auditProecess.getSrcBillId());
+				if (bills == null) {
+					throw new SecurityException("审批通过失败");
+				}
+				detail.setStatus(3);
+				int count = amendsMapper.updateById(detail);
+				if (count == 0) {
+					throw new SecurityException("修改订单数据失败");
+				}
+				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getAccStatus, 0)
+					.eq(FeeCenter::getPid, bills.getId()));
+				for (FeeCenter item : feeCenterList) {
+					item.setApproverId(AuthUtil.getUserId());
+					item.setApproverName(AuthUtil.getUserName());
+					item.setApproveTime(new Date());
+				}
+				feeCenterService.saveOrUpdateBatch(feeCenterList);
+				if (feeCenterList.size() != 0) {
+					FinAccBills finAccBills = new FinAccBills();
+					finAccBills.setFeeCenterList(feeCenterList);
+					if ("SEA".equals(detail.getBusinessType()) || "SIA".equals(detail.getBusinessType())) {
+						finAccBills.setBusinessTypeCode("HYZD");
+						finAccBills.setBillNoFormat("HYZD");
+					} else if ("AEA".equals(detail.getBusinessType()) || "AIA".equals(detail.getBusinessType())) {
+						finAccBills.setBusinessTypeCode("KYZD");
+						finAccBills.setBillNoFormat("KYZD");
+					}
+					finAccBills.setAccountType("");
+					finAccBills.setCorpArgreementNo(bills.getCorpArgreementNo());
+					finAccBills.setRefno(bills.getRefno());
+					finAccBills.setBookingNo(bills.getBookingNo());
+					finAccBills.setPolNamePrint(bills.getPolNamePrint());
+					finAccBills.setPodNamePrint(bills.getPodNamePrint());
+					finAccBillsService.generateBill(finAccBills);
+				}
+				if ("海运出口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运出口AMEND审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("海运进口口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运进口口AMEND审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("空运出口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的空运出口AMEND审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("空运进口口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的空运进口口AMEND审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				}
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+			//不通过
+			else if (operate == 2) {
+				//todo 调用feign取消
+				auditProecess.setAuditStatus("B");
+				Amends detail = amendsMapper.selectById(auditProecess.getSrcBillId());
+				if (detail == null) {
+					throw new SecurityException("审批通过失败");
+				}
+				detail.setStatus(4);
+				int count = amendsMapper.updateById(detail);
+				if (count == 0) {
+					throw new SecurityException("修改订单数据失败");
+				}
+				if ("海运出口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运出口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("海运进口口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的海运进口口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("空运出口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的空运出口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("空运进口口AMEND".equals(auditProecess.getProcessType())) {
+					sendMessage.setMessageBody("您的空运进口口AMEND审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");

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

@@ -533,12 +533,19 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 		}
 		FinInvoices detail = baseMapper.selectById(finInvoices.getId());
 		List<FeeCenter> feeCenterList = new ArrayList<>();
+		List<FinAccBills> finAccBillsList = new ArrayList<>();
 		if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
 			for (FinInvoicesItems item : finInvoices.getFinInvoicesItemsList()) {
 				FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
 				if (finAccBills == null) {
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
+				BigDecimal amount = finAccBills.getAppliedInvoiceAmount().subtract(finAccBills.getAppliedInvoiceAmountStl());
+				if (item.getCurrentAmount().compareTo(finAccBills.getAmountDrLoc().subtract(amount).subtract(finAccBills.getStlAmountDrLoc())) > 0) {
+					throw new RuntimeException("本次申请金额大于未申请金额");
+				}
+				finAccBills.setAppliedInvoiceAmount(finAccBills.getAppliedInvoiceAmount().add(item.getCurrentAmount()));
+				finAccBillsList.add(finAccBills);
 				/**-----------------------费用中心数据处理--------------------------- */
 				List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
@@ -572,6 +579,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				}
 			}
 			feeCenterService.saveOrUpdateBatch(feeCenterList);
+			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
 		}
 		BigDecimal invoiceAmount = new BigDecimal("0.00");
 		if (ObjectUtils.isNotNull(finInvoices.getFinInvoiceItemDetailList())) {
@@ -596,6 +604,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 		}
 		FinInvoices detail = baseMapper.selectById(finInvoices.getId());
 		List<FeeCenter> feeCenterList = new ArrayList<>();
+		List<FinAccBills> finAccBillsList = new ArrayList<>();
 		if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
 			for (FinInvoicesItems item : finInvoices.getFinInvoicesItemsList()) {
 				if ("1".equals(item.getGenerateInvoices())) {
@@ -605,6 +614,11 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				if (finAccBills == null) {
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
+				if (item.getCurrentAmount().compareTo(finAccBills.getAppliedInvoiceAmount()) > 0) {
+					throw new RuntimeException("本次申请金额大于未申请金额");
+				}
+				finAccBills.setAppliedInvoiceAmount(finAccBills.getAppliedInvoiceAmount().subtract(item.getCurrentAmount()));
+				finAccBillsList.add(finAccBills);
 				/**-----------------------费用中心数据处理--------------------------- */
 				List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
@@ -638,6 +652,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				}
 			}
 			feeCenterService.saveOrUpdateBatch(feeCenterList);
+			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
 		}
 		detail.setStatus(0);
 		baseMapper.updateById(detail);

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

@@ -294,6 +294,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		}
 		FinStlBills detail = baseMapper.selectById(finStlBills.getId());
 		if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
+			List<FinAccBills> finAccBillsList = new ArrayList<>();
 			//对账明细状态修改  已对账
 			for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
 				item.setIsChecked(1);
@@ -301,29 +302,36 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				item.setUpdateUser(AuthUtil.getUserId());
 				item.setUpdateTime(new Date());
 				item.setUpdateUserName(AuthUtil.getUserName());
+				FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+				if (finAccBills != null) {
+					finAccBills.setIsChecked(1);
+					finAccBills.setUpdateUser(AuthUtil.getUserId());
+					finAccBills.setUpdateTime(new Date());
+					finAccBills.setUpdateUserName(AuthUtil.getUserName());
+					if ("D".equals(finAccBills.getAccountDc())) {
+						if (finAccBills.getAmountDrLoc().compareTo(item.getCurrentStlAmount()) < 0) {
+							throw new RuntimeException("本次对账金额大于账单应收金额");
+						}
+					} else {
+						if (finAccBills.getAmountCrLoc().compareTo(item.getCurrentStlAmount()) < 0) {
+							throw new RuntimeException("本次对账金额大于账单应付金额");
+						}
+					}
+					finAccBills.setReconciliationAmount(finAccBills.getReconciliationAmount().add(item.getCurrentStlAmount()));
+					finAccBillsList.add(finAccBills);
+				}
 			}
 			finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
 			//通过对账明细里账单id查询具体账单数据
 			List<Long> accIds = finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getAccBillId)
 				.filter(Objects::nonNull).collect(Collectors.toList());
-			List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
-				.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
-				.eq(FinAccBills::getIsDeleted, 0)
-				.in(FinAccBills::getId, accIds));
-			//修改账单中对账状态
-			for (FinAccBills item : finAccBillsList) {
-				item.setIsChecked(1);
-				item.setUpdateUser(AuthUtil.getUserId());
-				item.setUpdateTime(new Date());
-				item.setUpdateUserName(AuthUtil.getUserName());
-			}
 			//通过账单id查询具体费用中心数据
 			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 				.in(FeeCenter::getAccBillId, accIds)
 				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 				.eq(FeeCenter::getIsDeleted, 0));
-			BigDecimal amount =  finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getCurrentStlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
-			List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 1,amount);
+			BigDecimal amount = finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getCurrentStlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 1, amount);
 			feeCenterService.saveOrUpdateBatch(feeCenterListNew);
 			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
 		}
@@ -333,7 +341,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		return R.data(detail);
 	}
 
-	private List<FeeCenter> reconciliationFeeCenter(FinStlBills detail, List<FeeCenter> feeCenterList, int count,BigDecimal amount) {
+	private List<FeeCenter> reconciliationFeeCenter(FinStlBills detail, List<FeeCenter> feeCenterList, int count, BigDecimal amount) {
 		BigDecimal currentStlAmount = amount;
 		for (FeeCenter item : feeCenterList) {
 			if (count == 1) {
@@ -430,33 +438,35 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		}
 		FinStlBills detail = baseMapper.selectById(finStlBills.getId());
 		if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
+			List<FinAccBills> finAccBillsList = new ArrayList<>();
 			for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
 				item.setIsChecked(0);
 				item.setBillDate(null);
 				item.setUpdateUser(AuthUtil.getUserId());
 				item.setUpdateTime(new Date());
 				item.setUpdateUserName(AuthUtil.getUserName());
+				FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+				if (finAccBills != null) {
+					finAccBills.setIsChecked(1);
+					finAccBills.setUpdateUser(AuthUtil.getUserId());
+					finAccBills.setUpdateTime(new Date());
+					finAccBills.setUpdateUserName(AuthUtil.getUserName());
+					if (finAccBills.getReconciliationAmount().compareTo(item.getCurrentStlAmount()) < 0) {
+						throw new RuntimeException("撤销失败,本次对账金额大于已对账金额");
+					}
+					finAccBills.setReconciliationAmount(finAccBills.getReconciliationAmount().subtract(item.getCurrentStlAmount()));
+					finAccBillsList.add(finAccBills);
+				}
 			}
 			finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
 			List<Long> accIds = finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getAccBillId)
 				.filter(Objects::nonNull).collect(Collectors.toList());
-			List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
-				.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
-				.eq(FinAccBills::getIsDeleted, 0)
-				.in(FinAccBills::getId, accIds)
-				.eq(FinAccBills::getIsChecked, 1));
-			for (FinAccBills item : finAccBillsList) {
-				item.setIsChecked(0);
-				item.setUpdateUser(AuthUtil.getUserId());
-				item.setUpdateTime(new Date());
-				item.setUpdateUserName(AuthUtil.getUserName());
-			}
 			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 				.in(FeeCenter::getAccBillId, accIds)
 				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 				.eq(FeeCenter::getIsDeleted, 0));
-			BigDecimal amount =  finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getCurrentStlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add);
-			List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 2,amount);
+			BigDecimal amount = finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getCurrentStlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 2, amount);
 			feeCenterService.saveOrUpdateBatch(feeCenterListNew);
 			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
 		}
@@ -607,6 +617,9 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						finAccBills.getAmountDrUsd().compareTo(finAccBills.getStlAmountDrUsd()) == 0) {
 						status = true;
 					}
+					if (ids.size() > 0) {
+						finAccBills.setAppliedInvoiceAmountStl(finAccBills.getAppliedInvoiceAmountStl().add(item.getCurrentStlDiscount()));
+					}
 				}
 				/**-----------------------账单数据处理 收--------------------------- */
 				/**-----------------------账单数据处理 付--------------------------- */
@@ -623,6 +636,9 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
 						status = true;
 					}
+					if (ids.size() > 0) {
+						finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().add(item.getCurrentStlDiscount()));
+					}
 				}
 				/**-----------------------账单数据处理 付--------------------------- */
 				if (finAccBills.getStlAmountCr().compareTo(finAccBills.getAmountCr()) > 0 ||
@@ -874,6 +890,9 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 							finAccBills.setIsCleared(3);
 						}
 					}
+					if (ids.size() > 0) {
+						finAccBills.setAppliedInvoiceAmountStl(finAccBills.getAppliedInvoiceAmountStl().subtract(item.getCurrentStlDiscount()));
+					}
 				}
 				/**-----------------------账单数据处理 收--------------------------- */
 				/**-----------------------账单数据处理 付--------------------------- */
@@ -903,6 +922,9 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 							finAccBills.setIsCleared(3);
 						}
 					}
+					if (ids.size() > 0) {
+						finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().subtract(item.getCurrentStlDiscount()));
+					}
 				}
 				/**-----------------------账单数据处理 付--------------------------- */
 
@@ -966,7 +988,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 									e.setAppliedInvoiceAmountStl(new BigDecimal("0.00"));
 									currentStlAmount = currentStlAmount.subtract(e.getAmount());
 								}
-							}else{
+							} else {
 								if (e.getStlTtlAmount().compareTo(currentStlAmount) > 0) {
 									e.setStlTtlAmount(e.getStlTtlAmount().subtract(currentStlAmount));
 									e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
@@ -984,7 +1006,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 									currentStlAmount = currentStlAmount.subtract(e.getAmount());
 								}
 							}
-						}else{
+						} else {
 							if (e.getStlTtlAmount().compareTo(currentStlAmount) > 0) {
 								e.setStlTtlAmount(e.getStlTtlAmount().subtract(currentStlAmount));
 								e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
@@ -1242,11 +1264,18 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		detail.setAuditDateFrom(new Date());
 		if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
 			List<FeeCenter> feeCenterList = new ArrayList<>();
+			List<FinAccBills> finAccBillsList = new ArrayList<>();
 			for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
 				FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
 				if (finAccBills == null) {
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
+				BigDecimal amount = finAccBills.getAppliedAmount().subtract(finAccBills.getAppliedAmountStl());
+				if (item.getCurrentStlAmount().compareTo(finAccBills.getAmountCrLoc().subtract(amount).subtract(finAccBills.getStlAmountCrLoc())) > 0) {
+					throw new RuntimeException("本次申请金额大于未申请金额");
+				}
+				finAccBills.setAppliedAmount(finAccBills.getAppliedAmount().add(item.getCurrentStlAmount()));
+				finAccBillsList.add(finAccBills);
 				//计算字段null值处理
 				item.setStlTtlAmount(ObjectUtils.isNotNull(item.getStlTtlAmount()) ? item.getStlTtlAmount() : new BigDecimal("0.00"));
 				item.setUnsettledAmount(ObjectUtils.isNotNull(item.getUnsettledAmount()) ? item.getUnsettledAmount() : new BigDecimal("0.00"));
@@ -1288,6 +1317,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				/**-----------------------费用中心数据处理--------------------------- */
 			}
 			feeCenterService.saveOrUpdateBatch(feeCenterList);
+			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
 		}
 		baseMapper.updateById(detail);
 		return R.data(detail);
@@ -1311,11 +1341,17 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			}
 			detail.setStatus(0);
 			List<FeeCenter> feeCenterList = new ArrayList<>();
+			List<FinAccBills> finAccBillsList = new ArrayList<>();
 			for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
 				FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
 				if (finAccBills == null) {
 					throw new RuntimeException("未找到账单明细,操作失败");
 				}
+				if (item.getCurrentStlAmount().compareTo(finAccBills.getAppliedAmount()) > 0) {
+					throw new RuntimeException("本次申请金额大于未申请金额");
+				}
+				finAccBills.setAppliedAmount(finAccBills.getAppliedAmount().subtract(item.getCurrentStlAmount()));
+				finAccBillsList.add(finAccBills);
 				//计算字段null值处理
 				item.setStlTtlAmount(ObjectUtils.isNotNull(item.getStlTtlAmount()) ? item.getStlTtlAmount() : new BigDecimal("0.00"));
 				item.setUnsettledAmount(ObjectUtils.isNotNull(item.getUnsettledAmount()) ? item.getUnsettledAmount() : new BigDecimal("0.00"));
@@ -1358,6 +1394,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				/**-----------------------费用中心数据处理--------------------------- */
 			}
 			feeCenterService.saveOrUpdateBatch(feeCenterList);
+			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
 		}
 		baseMapper.updateById(detail);
 		return R.data(detail);