Browse Source

1.客户订舱-生成海运出口编号bug,费用明细增加代收逻辑修改
2.待付生成结算中心金额翻倍修改
3.销项发票添加明细合计bug修改
4.结算中心撤销费用明细计算金额bug修改
5.代收生成结算中心复制附件
6.海运进出口列表全部不查退舱的单据
7.费用撤销请核
8.财务查询账单明细-客户分组接口修改
9.发票申请生成销项发票金额翻倍修改
10.财务查询账单明细按客户分组多单号逗号拼接查询bug修改
11.财务检索账单数据增加检索条件是否结算

纪新园 6 months ago
parent
commit
51effcbd1c

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

@@ -210,4 +210,9 @@ public class ListAccBillVO extends FinAccBills {
 	 */
 	private Integer isDk;
 
+	/**
+	 * 是否 结算, 0 否, 1 是
+	 */
+	private String isStl;
+
 }

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/invoices/entity/FinInvoices.java

@@ -174,16 +174,19 @@ public class FinInvoices implements Serializable {
 	 * 客户 id
 	 */
 	@ApiModelProperty(value = "客户 id")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Long corpId;
 	/**
 	 * 客户中文名称,显示不修改
 	 */
 	@ApiModelProperty(value = "客户中文名称,显示不修改")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String corpCnName;
 	/**
 	 * 客户英文名称,显示不修改
 	 */
 	@ApiModelProperty(value = "客户英文名称,显示不修改")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String corpEnName;
 	/**
 	 * 客户开票单位名称,可修改
@@ -194,16 +197,19 @@ public class FinInvoices implements Serializable {
 	 * 开票单位 id
 	 */
 	@ApiModelProperty(value = "开票单位 id")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Long invCorpId;
 	/**
 	 * 开票单位中文名称
 	 */
 	@ApiModelProperty(value = "开票单位中文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String invCorpCnName;
 	/**
 	 * 开票单位英文名称
 	 */
 	@ApiModelProperty(value = "开票单位英文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String invCorpEnName;
 	/**
 	 * 开票单位税号

+ 335 - 183
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ExpenseApplicationServiceImpl.java

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.basic.business.entity.BusinessType;
@@ -336,7 +337,7 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 					throw new SecurityException("操作失败,请联系管理员");
 				}
 			}
-		}else{
+		} else {
 			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
 				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
 				.eq(BusinessType::getIsDeleted, 0)
@@ -505,194 +506,348 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 		if (feeCenterList.isEmpty()) {
 			throw new RuntimeException("未查到可申请费用");
 		}
-		List<ExpenseApplication> expenseApplicationList = new ArrayList<>();
-		if ("BUY,ZR,DL,OW-N,OW-F,XGFY,XGDX,CCSQ".contains(type)) {
-			List<TradingBox> tradingBoxList = tradingBoxService.list(new LambdaQueryWrapper<TradingBox>()
-				.eq(TradingBox::getIsDeleted, 0)
-				.eq(TradingBox::getTenantId, AuthUtil.getTenantId())
-				.apply("find_in_set(id,'" + ids + "')"));
-			for (TradingBox tradingBox : tradingBoxList) {
-				ExpenseApplication expenseApplication = new ExpenseApplication();
-				expenseApplication.setSrcId(tradingBox.getId());
-				expenseApplication.setSrcType(type);
-				expenseApplication.setCreateUser(AuthUtil.getUserId());
-				expenseApplication.setCreateTime(new Date());
-				expenseApplication.setCreateUserName(AuthUtil.getUserName());
-				expenseApplication.setSrcNo(tradingBox.getSysNo());
-				expenseApplication.setSrcMblno(tradingBox.getContractNo());
-				expenseApplication.setSrcContainerNumber(tradingBox.getContainerNumber());
-				expenseApplication.setSrcContractNo(tradingBox.getContractNo());
-				expenseApplication.setStatus("审核提交");
-				expenseApplication.setSrcBusDate(new Date());
-				expenseApplication.setCorpId(tradingBox.getPurchaseCompanyId());
-				expenseApplication.setCorpCnName(tradingBox.getPurchaseCompanyName());
-				expenseApplication.setCorpEnName(tradingBox.getPurchaseCompanyName());
-				expenseApplication.setBranchId(AuthUtil.getDeptId());
-				List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> e.getPid().equals(tradingBox.getId())).collect(Collectors.toList());
-				if (!feeCenters.isEmpty()) {
-					List<FeeCenter> feeCentersNew = new ArrayList<>();
-					for (FeeCenter item : feeCenters) {
-						item.setUpdateTime(new Date());
-						item.setUpdateUser(AuthUtil.getUserId());
-						item.setUpdateUserName(AuthUtil.getUserName());
-						item.setStlPid(expenseApplication.getId());
-						item.setAuditStatus("1");
-						item.setApplyId(AuthUtil.getUserId());
-						item.setApplyName(AuthUtil.getUserName());
-						item.setApplyTime(new Date());
-						feeCentersNew.add(item);
+		String status = sysClient.getParamService("expense.application");
+		if (status.equals("1")) {
+			List<ExpenseApplication> expenseApplicationList = new ArrayList<>();
+			if ("BUY,ZR,DL,OW-N,OW-F,XGFY,XGDX,CCSQ".contains(type)) {
+				List<TradingBox> tradingBoxList = tradingBoxService.list(new LambdaQueryWrapper<TradingBox>()
+					.eq(TradingBox::getIsDeleted, 0)
+					.eq(TradingBox::getTenantId, AuthUtil.getTenantId())
+					.apply("find_in_set(id,'" + ids + "')"));
+				for (TradingBox tradingBox : tradingBoxList) {
+					ExpenseApplication expenseApplication = new ExpenseApplication();
+					expenseApplication.setSrcId(tradingBox.getId());
+					expenseApplication.setSrcType(type);
+					expenseApplication.setCreateUser(AuthUtil.getUserId());
+					expenseApplication.setCreateTime(new Date());
+					expenseApplication.setCreateUserName(AuthUtil.getUserName());
+					expenseApplication.setSrcNo(tradingBox.getSysNo());
+					expenseApplication.setSrcMblno(tradingBox.getContractNo());
+					expenseApplication.setSrcContainerNumber(tradingBox.getContainerNumber());
+					expenseApplication.setSrcContractNo(tradingBox.getContractNo());
+					expenseApplication.setStatus("审核提交");
+					expenseApplication.setSrcBusDate(new Date());
+					expenseApplication.setCorpId(tradingBox.getPurchaseCompanyId());
+					expenseApplication.setCorpCnName(tradingBox.getPurchaseCompanyName());
+					expenseApplication.setCorpEnName(tradingBox.getPurchaseCompanyName());
+					expenseApplication.setBranchId(AuthUtil.getDeptId());
+					List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> e.getPid().equals(tradingBox.getId())).collect(Collectors.toList());
+					if (!feeCenters.isEmpty()) {
+						List<FeeCenter> feeCentersNew = new ArrayList<>();
+						for (FeeCenter item : feeCenters) {
+							item.setUpdateTime(new Date());
+							item.setUpdateUser(AuthUtil.getUserId());
+							item.setUpdateUserName(AuthUtil.getUserName());
+							item.setStlPid(expenseApplication.getId());
+							item.setAuditStatus("1");
+							item.setApplyId(AuthUtil.getUserId());
+							item.setApplyName(AuthUtil.getUserName());
+							item.setApplyTime(new Date());
+							feeCentersNew.add(item);
+						}
+						expenseApplication.setFeeCenterList(feeCentersNew);
+						expenseApplicationList.add(expenseApplication);
+					}
+				}
+			} else if ("HYJK,HYCK".contains(type)) {
+				List<Bills> billsList = billsService.list(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getIsDeleted, 0)
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.apply("find_in_set(id,'" + ids + "')"));
+				for (Bills bills : billsList) {
+					ExpenseApplication expenseApplication = new ExpenseApplication();
+					expenseApplication.setSrcId(bills.getId());
+					expenseApplication.setSrcType(type);
+					expenseApplication.setCreateUser(AuthUtil.getUserId());
+					expenseApplication.setCreateTime(new Date());
+					expenseApplication.setCreateUserName(AuthUtil.getUserName());
+					expenseApplication.setSrcNo(bills.getBillNo());
+					expenseApplication.setSrcMblno(bills.getMblno());
+					expenseApplication.setSrcHblno(bills.getHblno());
+					expenseApplication.setSrcContainerNumber("");
+					expenseApplication.setSrcContractNo(bills.getBookingNo());
+					expenseApplication.setStatus("审核提交");
+					expenseApplication.setSrcBusDate(new Date());
+					expenseApplication.setCorpId(bills.getCorpId());
+					expenseApplication.setCorpCnName(bills.getCorpCnName());
+					expenseApplication.setCorpEnName(bills.getCorpEnName());
+					expenseApplication.setBranchId(bills.getBranchId());
+					expenseApplication.setBranchName(bills.getBranchName());
+					List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> e.getPid().equals(bills.getId())).collect(Collectors.toList());
+					if (!feeCenters.isEmpty()) {
+						List<FeeCenter> feeCentersNew = new ArrayList<>();
+						for (FeeCenter item : feeCenters) {
+							item.setUpdateTime(new Date());
+							item.setUpdateUser(AuthUtil.getUserId());
+							item.setUpdateUserName(AuthUtil.getUserName());
+							item.setStlPid(expenseApplication.getId());
+							item.setAuditStatus("1");
+							item.setApplyId(AuthUtil.getUserId());
+							item.setApplyName(AuthUtil.getUserName());
+							item.setApplyTime(new Date());
+							feeCentersNew.add(item);
+						}
+						expenseApplication.setFeeCenterList(feeCentersNew);
+						expenseApplicationList.add(expenseApplication);
 					}
-					expenseApplication.setFeeCenterList(feeCentersNew);
-					expenseApplicationList.add(expenseApplication);
 				}
+			} else {
+				throw new RuntimeException("类型错误,未查到单据");
 			}
-		} else if ("HYJK,HYCK".contains(type)) {
-			List<Bills> billsList = billsService.list(new LambdaQueryWrapper<Bills>()
-				.eq(Bills::getIsDeleted, 0)
-				.eq(Bills::getTenantId, AuthUtil.getTenantId())
-				.apply("find_in_set(id,'" + ids + "')"));
-			for (Bills bills : billsList) {
-				ExpenseApplication expenseApplication = new ExpenseApplication();
-				expenseApplication.setSrcId(bills.getId());
-				expenseApplication.setSrcType(type);
-				expenseApplication.setCreateUser(AuthUtil.getUserId());
-				expenseApplication.setCreateTime(new Date());
-				expenseApplication.setCreateUserName(AuthUtil.getUserName());
-				expenseApplication.setSrcNo(bills.getBillNo());
-				expenseApplication.setSrcMblno(bills.getMblno());
-				expenseApplication.setSrcHblno(bills.getHblno());
-				expenseApplication.setSrcContainerNumber("");
-				expenseApplication.setSrcContractNo(bills.getBookingNo());
-				expenseApplication.setStatus("审核提交");
-				expenseApplication.setSrcBusDate(new Date());
-				expenseApplication.setCorpId(bills.getCorpId());
-				expenseApplication.setCorpCnName(bills.getCorpCnName());
-				expenseApplication.setCorpEnName(bills.getCorpEnName());
-				expenseApplication.setBranchId(bills.getBranchId());
-				expenseApplication.setBranchName(bills.getBranchName());
-				List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> e.getPid().equals(bills.getId())).collect(Collectors.toList());
-				if (!feeCenters.isEmpty()) {
-					List<FeeCenter> feeCentersNew = new ArrayList<>();
-					for (FeeCenter item : feeCenters) {
-						item.setUpdateTime(new Date());
-						item.setUpdateUser(AuthUtil.getUserId());
-						item.setUpdateUserName(AuthUtil.getUserName());
-						item.setStlPid(expenseApplication.getId());
-						item.setAuditStatus("1");
-						item.setApplyId(AuthUtil.getUserId());
-						item.setApplyName(AuthUtil.getUserName());
-						item.setApplyTime(new Date());
-						feeCentersNew.add(item);
+			this.saveBatch(expenseApplicationList);
+			for (ExpenseApplication item : expenseApplicationList) {
+				if (ObjectUtils.isNotNull(item.getFeeCenterList()) && !item.getFeeCenterList().isEmpty()) {
+					for (FeeCenter feeCenter : item.getFeeCenterList()) {
+						feeCenter.setUpdateTime(new Date());
+						feeCenter.setUpdateUser(AuthUtil.getUserId());
+						feeCenter.setUpdateUserName(AuthUtil.getUserName());
+						feeCenter.setStlPid(item.getId());
+						feeCenter.setAuditStatus("1");
+						feeCenter.setApplyId(AuthUtil.getUserId());
+						feeCenter.setApplyName(AuthUtil.getUserName());
+						feeCenter.setApplyTime(new Date());
 					}
-					expenseApplication.setFeeCenterList(feeCentersNew);
-					expenseApplicationList.add(expenseApplication);
+					feeCenterService.updateBatchById(item.getFeeCenterList());
 				}
 			}
-		} else {
-			throw new RuntimeException("类型错误,未查到单据");
-		}
-		this.saveBatch(expenseApplicationList);
-		for (ExpenseApplication item : expenseApplicationList) {
-			if (ObjectUtils.isNotNull(item.getFeeCenterList()) && !item.getFeeCenterList().isEmpty()) {
-				for (FeeCenter feeCenter : item.getFeeCenterList()) {
-					feeCenter.setUpdateTime(new Date());
-					feeCenter.setUpdateUser(AuthUtil.getUserId());
-					feeCenter.setUpdateUserName(AuthUtil.getUserName());
-					feeCenter.setStlPid(item.getId());
-					feeCenter.setAuditStatus("1");
-					feeCenter.setApplyId(AuthUtil.getUserId());
-					feeCenter.setApplyName(AuthUtil.getUserName());
-					feeCenter.setApplyTime(new Date());
-				}
-				feeCenterService.updateBatchById(item.getFeeCenterList());
+			int actId;
+			String processType;
+			String checkType;
+			if ("C".equals(dc)) {
+				actId = 1132;
+				processType = "请核费用-付费";
+				checkType = "FYSQ-C";
+			} else {
+				actId = 1130;
+				processType = "请核费用";
+				checkType = "FYSQ";
+			}
+			//审批流程
+			LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			auditPathsActsLambdaQueryWrapper
+				.eq(LosAuditPathsActs::getFidStatus, "status")
+				.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
+				.eq(LosAuditPathsActs::getActId, actId);
+			// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
+			List<LosAuditPathsActs> pathsActsList = auditPathsActsService.list(auditPathsActsLambdaQueryWrapper);
+			if (pathsActsList.isEmpty()) {
+				throw new RuntimeException("请先维护审批路径");
+			}
+			//获取审批级次
+			List<LosAuditPathsLevels> auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
+				.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()));
+			if (auditPathsLevels.isEmpty()) {
+				throw new RuntimeException("请先维护审批人");
+			}
+			for (ExpenseApplication expenseApplication : expenseApplicationList) {
+				//审批数据
+				LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
+				auditProecessDTO.setTimes(1);
+				auditProecessDTO.setProcessType(processType);
+				//获取审批信息
+				LosAuditPathsActs pathsActs = pathsActsList.stream().filter(e -> expenseApplication.getBranchId().equals(e.getSalesCompanyId() + ""))
+					.findFirst().orElse(null);
+				// 没开启审批流直接走 通过流程
+				if (pathsActs == null || pathsActs.getIsEnable() == 2) {
+					throw new SecurityException("当前租户未查询到审批流配置");
+				} else {
+					Long pathId = pathsActs.getPathId();
+					//获取审批级次
+					List<LosAuditPathsLevels> levelsList = auditPathsLevels.stream().filter(e -> e.getPathId().equals(pathId))
+						.collect(Collectors.toList());
+					if (CollectionUtils.isEmpty(levelsList)) {
+						throw new SecurityException("开启审批失败:未查询到审批信息");
+					}
+					// 绑定审核类型
+					auditProecessDTO.setCheckType(checkType);
+					auditProecessDTO.setPathsLevelsList(levelsList);
+					auditProecessDTO.setActId(1);
+					auditProecessDTO.setSendUserId(AuthUtil.getUserId());
+					auditProecessDTO.setSendName(AuthUtil.getUserName());
+					auditProecessDTO.setSendTime(new Date());
+					auditProecessDTO.setTenantId(AuthUtil.getTenantId());
+					// 追加跳转路由url
+					auditProecessDTO.setUrl(expenseApplication.getUrl());
+					auditProecessDTO.setPageStatus(expenseApplication.getPageStatus());
+					auditProecessDTO.setPageLabel(expenseApplication.getPageLabel());
+					auditProecessDTO.setOrderRemark(expenseApplication.getRemarks());
+					auditProecessDTO.setSrcBillId(expenseApplication.getId());
+					auditProecessDTO.setBillId(expenseApplication.getSrcId());
+					auditProecessDTO.setBillNo(expenseApplication.getSrcNo());
+					auditProecessDTO.setBillTime(expenseApplication.getCreateTime());
+					auditProecessDTO.setCorpId(expenseApplication.getCorpId());
+					auditProecessDTO.setCorpsName(expenseApplication.getCorpCnName());
+					auditProecessDTO.setReferenceNumber(expenseApplication.getSrcContainerNumber());
+					auditProecessDTO.setMorderNo(expenseApplication.getSrcMblno());
+					auditProecessDTO.setSrcBusType(expenseApplication.getSrcType());
+					auditProecessDTO.setSalesCompanyId(Long.parseLong(expenseApplication.getBranchId()));
+					auditProecessDTO.setSalesCompanyName(expenseApplication.getBranchName());
+					auditProecessDTO.setMblno(expenseApplication.getSrcMblno());
+					auditProecessDTO.setHblno(expenseApplication.getSrcHblno());
+					BigDecimal salesPrice = expenseApplication.getFeeCenterList().stream().filter(e -> e.getDc().equals("D"))
+						.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal costPrice = expenseApplication.getFeeCenterList().stream().filter(e -> e.getDc().equals("C"))
+						.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+					auditProecessDTO.setPayAmount(costPrice);
+					auditProecessDTO.setReceivableAmount(salesPrice);
+					auditProecessDTO.setGrossProfit(salesPrice.subtract(costPrice));
+					R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
+					if (!financeProcess.isSuccess()) {
+						throw new SecurityException("操作失败,请联系管理员");
+					}
+				}
 			}
-		}
-		int actId;
-		String processType;
-		String checkType;
-		if ("C".equals(dc)) {
-			actId = 1132;
-			processType = "请核费用-付费";
-			checkType = "FYSQ-C";
 		} else {
-			actId = 1130;
-			processType = "请核费用";
-			checkType = "FYSQ";
-		}
-		//审批流程
-		LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
-		auditPathsActsLambdaQueryWrapper
-			.eq(LosAuditPathsActs::getFidStatus, "status")
-			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
-			.eq(LosAuditPathsActs::getActId, actId);
-		// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
-		List<LosAuditPathsActs> pathsActsList = auditPathsActsService.list(auditPathsActsLambdaQueryWrapper);
-		if (pathsActsList.isEmpty()) {
-			throw new RuntimeException("请先维护审批路径");
-		}
-		//获取审批级次
-		List<LosAuditPathsLevels> auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
-			.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()));
-		if (auditPathsLevels.isEmpty()) {
-			throw new RuntimeException("请先维护审批人");
-		}
-		for (ExpenseApplication expenseApplication : expenseApplicationList) {
-			//审批数据
-			LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
-			auditProecessDTO.setTimes(1);
-			auditProecessDTO.setProcessType(processType);
-			//获取审批信息
-			LosAuditPathsActs pathsActs = pathsActsList.stream().filter(e -> expenseApplication.getBranchId().equals(e.getSalesCompanyId() + ""))
-				.findFirst().orElse(null);
-			// 没开启审批流直接走 通过流程
-			if (pathsActs == null || pathsActs.getIsEnable() == 2) {
-				throw new SecurityException("当前租户未查询到审批流配置");
-			} else {
-				Long pathId = pathsActs.getPathId();
-				//获取审批级次
-				List<LosAuditPathsLevels> levelsList = auditPathsLevels.stream().filter(e -> e.getPathId().equals(pathId))
-					.collect(Collectors.toList());
-				if (CollectionUtils.isEmpty(levelsList)) {
-					throw new SecurityException("开启审批失败:未查询到审批信息");
+			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
+				.eq(BusinessType::getIsDeleted, 0)
+				.eq(BusinessType::getStatus, 0)
+				.eq(BusinessType::getCode, "YWZD"));
+			if (businessType == null) {
+				throw new RuntimeException("未找到可用业务类型");
+			}
+			List<Bills> bills = new ArrayList<>();
+			if ("HYJK,HYCK".contains(type)) {
+				bills = billsService.list(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getIsDeleted, 0)
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.in(Bills::getId, Func.toLongList(ids)));
+			}
+			for (FeeCenter item : feeCenterList) {
+				if (1 == item.getAccStatus()) {
+					throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单");
 				}
-				// 绑定审核类型
-				auditProecessDTO.setCheckType(checkType);
-				auditProecessDTO.setPathsLevelsList(levelsList);
-				auditProecessDTO.setActId(1);
-				auditProecessDTO.setSendUserId(AuthUtil.getUserId());
-				auditProecessDTO.setSendName(AuthUtil.getUserName());
-				auditProecessDTO.setSendTime(new Date());
-				auditProecessDTO.setTenantId(AuthUtil.getTenantId());
-				// 追加跳转路由url
-				auditProecessDTO.setUrl(expenseApplication.getUrl());
-				auditProecessDTO.setPageStatus(expenseApplication.getPageStatus());
-				auditProecessDTO.setPageLabel(expenseApplication.getPageLabel());
-				auditProecessDTO.setOrderRemark(expenseApplication.getRemarks());
-				auditProecessDTO.setSrcBillId(expenseApplication.getId());
-				auditProecessDTO.setBillId(expenseApplication.getSrcId());
-				auditProecessDTO.setBillNo(expenseApplication.getSrcNo());
-				auditProecessDTO.setBillTime(expenseApplication.getCreateTime());
-				auditProecessDTO.setCorpId(expenseApplication.getCorpId());
-				auditProecessDTO.setCorpsName(expenseApplication.getCorpCnName());
-				auditProecessDTO.setReferenceNumber(expenseApplication.getSrcContainerNumber());
-				auditProecessDTO.setMorderNo(expenseApplication.getSrcMblno());
-				auditProecessDTO.setSrcBusType(expenseApplication.getSrcType());
-				auditProecessDTO.setSalesCompanyId(Long.parseLong(expenseApplication.getBranchId()));
-				auditProecessDTO.setSalesCompanyName(expenseApplication.getBranchName());
-				auditProecessDTO.setMblno(expenseApplication.getSrcMblno());
-				auditProecessDTO.setHblno(expenseApplication.getSrcHblno());
-				BigDecimal salesPrice = expenseApplication.getFeeCenterList().stream().filter(e -> e.getDc().equals("D"))
-					.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
-				BigDecimal costPrice = expenseApplication.getFeeCenterList().stream().filter(e -> e.getDc().equals("C"))
-					.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
-				auditProecessDTO.setPayAmount(costPrice);
-				auditProecessDTO.setReceivableAmount(salesPrice);
-				auditProecessDTO.setGrossProfit(salesPrice.subtract(costPrice));
-				R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
-				if (!financeProcess.isSuccess()) {
-					throw new SecurityException("操作失败,请联系管理员");
+				FinAccBills data = new FinAccBills();
+				data.setGenerationCorpId(item.getGenerationCorpId());
+				data.setGenerationCorpCnName(item.getGenerationCorpCnName());
+				data.setGenerationCorpEnName(item.getGenerationCorpEnName());
+				data.setCreateTime(new Date());
+				data.setCreateUser(AuthUtil.getUserId());
+				data.setCreateUserName(AuthUtil.getUserName());
+				if (ObjectUtils.isNull(item.getBranchId())) {
+					data.setCreateDept(AuthUtil.getDeptId());
+					R<String> res = sysClient.getDeptName(Long.parseLong(AuthUtil.getDeptId()));
+					if (res.isSuccess()) {
+						data.setCreateDeptName(res.getData());
+						data.setBranchName(res.getData());
+						data.setDeptName(res.getData());
+					}
+					data.setBranchId(item.getBranchId());
+					data.setDeptId(Long.parseLong(AuthUtil.getDeptId()));
+				} else {
+					data.setCreateDept(item.getBranchId());
+					data.setCreateDeptName(item.getBranchName());
+					data.setBranchId(item.getBranchId());
+					data.setBranchName(item.getBranchName());
+					data.setDeptId(Long.parseLong(item.getBranchId()));
+					data.setDeptName(item.getBranchName());
+				}
+				data.setBookingAgentId(item.getBookingAgentId());
+				data.setBookingAgentCnName(item.getBookingAgentCnName());
+				data.setBookingAgentEnName(item.getBookingAgentEnName());
+				data.setQuantityCntrDescr(item.getQuantityCntrDescr());
+				data.setTeu(item.getTeu());
+				BusinessBillNo businessBillNo = new BusinessBillNo();
+				businessBillNo.setBusinessTypeId(businessType.getId());
+				businessBillNo.setCode("YWZD");
+				businessBillNo.setBranchId(item.getBranchId());
+				R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+				if (!clientBillNo.isSuccess()) {
+					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+					throw new RuntimeException("生成订单编号失败");
+				}
+				data.setWarehousingDate(item.getStorageDate());
+				data.setOutboundDate(item.getOutboundDate());
+				data.setBillNo((String) clientBillNo.getData());
+				data.setBillDate(new Date());
+				data.setAccountDc(item.getDc());
+				data.setAccountDate(item.getBillDate());
+				data.setBusinessType(item.getBusinessType());
+				data.setBusinessBillId(item.getPid());
+				data.setBusinessBillNo(item.getBillNo());
+				data.setBusinessDate(item.getBillDate());
+				data.setBillType(item.getBillType());
+				data.setSrcId(item.getSrcId());
+				data.setSrcCnName(item.getSrcCnName());
+				data.setSrcEnName(item.getSrcEnName());
+				data.setSrcType(item.getSrcType());
+				if (!bills.isEmpty()){
+					Bills bills1 = bills.stream().filter(e-> e.getId().equals(item.getPid())).findFirst().orElse(null);
+					if (bills1 != null){
+						data.setOperatorId(bills1.getOperatorId());
+						data.setOperatorName(bills1.getOperatorName());
+					}
+				}
+				data.setPaymode(item.getPaymode());
+				data.setCorpId(item.getCorpId());
+				data.setCorpCnName(item.getCorpCnName());
+				data.setCorpEnName(item.getCorpEnName());
+				data.setBillCorpId(item.getBillCorpId());
+				data.setBillCorpCnName(item.getBillCorpCnName());
+				data.setBillCorpEnName(item.getBillCorpEnName());
+				data.setVesselId(item.getVesselId());
+				data.setVesselCnName(item.getVesselCnName());
+				data.setVesselEnName(item.getVesselEnName());
+				data.setVoyageNo(item.getVoyageNo());
+				data.setMblno(item.getMblno());
+				data.setHblno(item.getHblno());
+				data.setRefno(item.getRefno());
+				data.setBookingNo(item.getBookingNo());
+				data.setEtd(item.getEtd());
+				data.setEta(item.getEta());
+				data.setPolId(item.getPolId());
+				data.setPolCnName(item.getPolCnName());
+				data.setPolEnName(item.getPolEnName());
+				data.setPodId(item.getPodId());
+				data.setPodCnName(item.getPodCnName());
+				data.setPodCode(item.getPodCode());
+				data.setPodEnName(item.getPodEnName());
+				BigDecimal amountDrLoc = new BigDecimal("0.00");
+				BigDecimal amountCrLoc = new BigDecimal("0.00");
+				if ("CNY".equals(item.getCurCode())) {
+					if ("D".equals(item.getDc())) {
+						data.setAmountDr(item.getAmount());
+						data.setAmountCr(new BigDecimal("0.00"));
+					} else {
+						data.setAmountCr(item.getAmount());
+						data.setAmountDr(new BigDecimal("0.00"));
+					}
+					data.setAmountDrUsd(new BigDecimal("0.00"));
+					data.setAmountCrUsd(new BigDecimal("0.00"));
+				} else {
+					if ("D".equals(item.getDc())) {
+						data.setAmountDrUsd(item.getAmount());
+						data.setAmountCrUsd(new BigDecimal("0.00"));
+					} else {
+						data.setAmountDrUsd(new BigDecimal("0.00"));
+						data.setAmountCrUsd(item.getAmount());
+					}
+					data.setAmountDr(new BigDecimal("0.00"));
+					data.setAmountCr(new BigDecimal("0.00"));
+				}
+				if (ObjectUtils.isNotNull(data.getAmountCrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
+					BigDecimal crCny = data.getAmountCrUsd().multiply(item.getExrate());
+					amountCrLoc = amountCrLoc.add(data.getAmountCr()).add(crCny);
+				}
+				if (ObjectUtils.isNotNull(data.getAmountDrUsd()) && ObjectUtils.isNotNull(item.getExrate())) {
+					BigDecimal drCny = data.getAmountDrUsd().multiply(item.getExrate());
+					amountDrLoc = amountDrLoc.add(data.getAmountDr()).add(drCny);
 				}
+				data.setAmountDrLoc(amountDrLoc);
+				data.setAmountCrLoc(amountCrLoc);
+				finAccBillsService.save(data);
+				item.setAccBillId(data.getId());
+				item.setAccBillNo(data.getBillNo());
+				item.setAccDate(data.getBillDate());
+				item.setAccAmount(amountDrLoc.add(amountCrLoc));
+				item.setAccStatus(1);
+				item.setAccById(AuthUtil.getUserId());
+				item.setAccByName(AuthUtil.getUserName());
+				item.setAuditStatus("4");
+				int version = StringUtil.isBlank(item.getVersion()) ? 1 : Integer.parseInt(item.getVersion());
+				item.setVersion(String.valueOf(version + 1));
 			}
+			feeCenterService.updateBatchById(feeCenterList);
 		}
 		return R.data("操作成功");
 	}
@@ -706,7 +861,7 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 			throw new RuntimeException("请选择明细");
 		}
 		String status = sysClient.getParamService("expense.application");
-		if (status.equals("1")){
+		if (status.equals("1")) {
 			List<Long> idList = expenseApplication.getFeeCenterList().stream().map(FeeCenter::getStlPid).filter(Objects::nonNull).distinct().collect(Collectors.toList());
 			if (idList.isEmpty()) {
 				throw new RuntimeException("数据错误,请联系管理员");
@@ -755,13 +910,10 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 					throw new SecurityException("操作失败,请联系管理员");
 				}
 			}
-		}else{
+		} else {
 			StringBuilder text = new StringBuilder();
 			List<FeeCenter> feeCenterList = new ArrayList<>();
 			for (FeeCenter item : expenseApplication.getFeeCenterList()) {
-				if (item.getStlPid() == null) {
-					text.append("费用:").append(item.getFeeCnName()).append("金额:").append(item.getAmount()).append("未申请,");
-				}
 				if (item.getStlTtlAmount().compareTo(BigDecimal.ZERO) != 0) {
 					text.append("费用:").append(item.getFeeCnName()).append("已结算");
 				}

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

@@ -200,6 +200,8 @@ public class BillsController extends BladeController {
 				} else if (12 == bills.getBillStatus()) {
 					lambdaQueryWrapper.eq(Bills::getStatus, 0);
 					lambdaQueryWrapper.eq(Bills::getTransferOrderStatus, "已转单");
+				}else{
+					lambdaQueryWrapper.ne(Bills::getBillStatus, "1");
 				}
 			} else if ("SI".equals(bills.getBusinessType())) {
 				if ("1,2,3".contains(bills.getBillStatus() + "")) {
@@ -221,6 +223,8 @@ public class BillsController extends BladeController {
 				} else if (10 == bills.getBillStatus()) {
 					lambdaQueryWrapper.isNotNull(Bills::getClearanceDate);
 					lambdaQueryWrapper.eq(Bills::getBillStatus, 0);
+				}else{
+					lambdaQueryWrapper.ne(Bills::getBillStatus, "1");
 				}
 			}
 		}

+ 12 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml

@@ -334,6 +334,12 @@
         <if test='acc.branchId != null and acc.branchId != ""'>
             and acc.branch_id = #{acc.branchId}
         </if>
+        <if test='acc.isStl != null and acc.isStl != "" and acc.isStl == "1"'>
+            and fee.amount = fee.unsettled_amount
+        </if>
+        <if test='acc.isStl == null or acc.isStl == "" and acc.isStl == "0"'>
+            and fee.amount != fee.unsettled_amount
+        </if>
         <if test='acc.type != null and acc.type != "" and acc.type == "1"'>
             <if test='acc.isChecked != null and acc.isChecked == "0"'>
                 and acc.is_checked in (0,1,2)
@@ -966,6 +972,12 @@
         <if test='acc.branchId != null and acc.branchId != ""'>
             and acc.branch_id = #{acc.branchId}
         </if>
+        <if test='acc.isStl != null and acc.isStl != "" and acc.isStl == "1"'>
+            and fee.amount = fee.unsettled_amount
+        </if>
+        <if test='acc.isStl == null or acc.isStl == "" and acc.isStl == "0"'>
+            and fee.amount != fee.unsettled_amount
+        </if>
         <if test='acc.type != null and acc.type != "" and acc.type == "1"'>
             <if test='acc.isChecked != null and acc.isChecked == "0"'>
                 and acc.is_checked in (0,1,2)

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

@@ -4546,6 +4546,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		businessBillNo.setBusinessTypeId(businessType.getId());
 		businessBillNo.setCode("HYCK-PH");
 		businessBillNo.setBranchId(detail.getBranchId());
+		businessBillNo.setDate(detail.getEtd());
 		R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
 		if (!clientBillNo.isSuccess()) {
 			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -6159,6 +6160,12 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			feeCenter.setCorpEnName(bills.getCorpEnName());
 			feeCenter.setShortName(bills.getShortName());
 			feeCenter.setPrice(items.getOceanFreight());
+			BCorps bCorps = bCorpsService.getById(bills.getCorpId());
+			if (bCorps != null) {
+				feeCenter.setGenerationCorpId(bCorps.getBookingAgentId());
+				feeCenter.setGenerationCorpCnName(bCorps.getBookingAgentCnName());
+				feeCenter.setGenerationCorpEnName(bCorps.getBookingAgentEnName());
+			}
 		} else if ("2".equals(type)) {
 		/*	BCorps bCorps = bCorpsService.getOne(new LambdaQueryWrapper<BCorps>()
 				.eq(BCorps::getTenantId, AuthUtil.getTenantId())
@@ -6172,6 +6179,12 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			feeCenter.setCorpEnName(bills.getCarrierEnName());
 			feeCenter.setShortName(bills.getCarrierShortName());
 			feeCenter.setPrice(items.getCostPrice());
+			BCorps bCorps = bCorpsService.getById(bills.getCarrierId());
+			if (bCorps != null) {
+				feeCenter.setGenerationCorpId(bCorps.getBookingAgentId());
+				feeCenter.setGenerationCorpCnName(bCorps.getBookingAgentCnName());
+				feeCenter.setGenerationCorpEnName(bCorps.getBookingAgentEnName());
+			}
 		}
 		feeCenter.setAmount(feeCenter.getPrice().multiply(feeCenter.getQuantity()));
 		if (ObjectUtils.isNull(feeCenter.getAmount())) {

+ 20 - 10
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java

@@ -19,7 +19,6 @@ package org.springblade.los.finance.fee.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.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -441,7 +440,7 @@ public class FinAccBillsController extends BladeController {
 			listAccBillVO.setVagueM("1");
 		}
 		List<FinAccBillsVO> finAccBillsVOPage = new ArrayList<>();
-		List<FinAccBillsVO> list = finAccBillsService.listAccBillV2( listAccBillVO);
+		List<FinAccBillsVO> list = finAccBillsService.listAccBillV2(listAccBillVO);
 		List<FinAccBillsVO> listAll = finAccBillsService.listAccBill(listAccBillVO);
 		for (FinAccBillsVO item : list) {
 			item.setBusinessType(BusinessTypeEnums.getName(item.getBusinessType()));
@@ -449,9 +448,9 @@ public class FinAccBillsController extends BladeController {
 				e.getCorpId().equals(item.getCorpId()) && e.getBusinessBillId().equals(item.getBusinessBillId()) &&
 				e.getAccountDc().equals(item.getAccountDc()) && e.getMblno().equals(item.getMblno()) &&
 				e.getHblno().equals(item.getHblno()) && e.getCurCode().equals(item.getCurCode())).collect(Collectors.toList());
-			if (!accBillsVOList.isEmpty()){
+			if (!accBillsVOList.isEmpty()) {
 				List<FinAccBillsVO> finAccBillsVOList = new ArrayList<>();
-				for (FinAccBillsVO accBillsVO : accBillsVOList){
+				for (FinAccBillsVO accBillsVO : accBillsVOList) {
 					accBillsVO.setQuantityCntrTypesDescr(accBillsVO.getQuantityCntrDescr());
 					BigDecimal amount = accBillsVO.getAppliedAmount().subtract(accBillsVO.getAppliedAmountStl());
 					accBillsVO.setAppliedCurrentStlAmount(accBillsVO.getAmount().subtract(amount).subtract(accBillsVO.getStlTtlAmount()));
@@ -495,12 +494,12 @@ public class FinAccBillsController extends BladeController {
 						finAccBillsVOList.add(accBillsVO);
 					}
 				}
-				if (!finAccBillsVOList.isEmpty()){
+				if (!finAccBillsVOList.isEmpty()) {
 					item.setFinAccBillsVOList(finAccBillsVOList);
-					item.setAppliedCurrentStlAmount(finAccBillsVOList.stream().map(FinAccBillsVO::getAppliedCurrentStlAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
-					item.setAppliedInvoiceCurrentStlAmount(finAccBillsVOList.stream().map(FinAccBillsVO::getAppliedInvoiceCurrentStlAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
-					item.setReconciliationCurrentAmount(finAccBillsVOList.stream().map(FinAccBillsVO::getReconciliationCurrentAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
-					item.setAppliedInvoiceCurrentAmount(finAccBillsVOList.stream().map(FinAccBillsVO::getAppliedInvoiceCurrentAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
+					item.setAppliedCurrentStlAmount(finAccBillsVOList.stream().map(FinAccBillsVO::getAppliedCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+					item.setAppliedInvoiceCurrentStlAmount(finAccBillsVOList.stream().map(FinAccBillsVO::getAppliedInvoiceCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+					item.setReconciliationCurrentAmount(finAccBillsVOList.stream().map(FinAccBillsVO::getReconciliationCurrentAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+					item.setAppliedInvoiceCurrentAmount(finAccBillsVOList.stream().map(FinAccBillsVO::getAppliedInvoiceCurrentAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
 				}
 				if ("2".equals(type)) {
 					//收
@@ -571,6 +570,12 @@ public class FinAccBillsController extends BladeController {
 		if (ObjectUtils.isNotNull(listAccBillVO.getAuditStatus()) && "0".equals(listAccBillVO.getAuditStatus())) {
 			listAccBillVO.setAuditStatus(null);
 		}
+		if (ObjectUtils.isNotNull(listAccBillVO.getHblno()) && listAccBillVO.getHblno().contains(",")) {
+			listAccBillVO.setVagueH("1");
+		}
+		if (ObjectUtils.isNotNull(listAccBillVO.getMblno()) && listAccBillVO.getMblno().contains(",")) {
+			listAccBillVO.setVagueM("1");
+		}
 		List<FinAccBillsVO> finAccBillsVOList = new ArrayList<>();
 		List<BCorps> bCorpsList = new ArrayList<>();
 		List<FinAccBillsVO> list = finAccBillsService.listAccBill(listAccBillVO);
@@ -619,7 +624,12 @@ public class FinAccBillsController extends BladeController {
 			}
 		}
 		if (!finAccBillsVOList.isEmpty()) {
-			List<Long> ids = finAccBillsVOList.stream().map(FinAccBillsVO::getCorpId).distinct().collect(Collectors.toList());
+			List<Long> ids = new ArrayList<>();
+			if (ObjectUtils.isNotNull(listAccBillVO.getIsDk()) && listAccBillVO.getIsDk() == 1) {
+				ids = finAccBillsVOList.stream().map(FinAccBillsVO::getGenerationCorpId).distinct().collect(Collectors.toList());
+			} else {
+				ids = finAccBillsVOList.stream().map(FinAccBillsVO::getCorpId).distinct().collect(Collectors.toList());
+			}
 			bCorpsList = bCorpsService.list(new LambdaQueryWrapper<BCorps>()
 				.eq(BCorps::getTenantId, AuthUtil.getTenantId())
 				.eq(BCorps::getIsDeleted, 0)

+ 25 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java

@@ -863,6 +863,21 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 	public R submitListOptimization(List<FeeCenter> list) {
 		List<FeeCenter> feeCenterList = new ArrayList<>();
 		if (ObjectUtils.isNotNull(list) && !list.isEmpty()) {
+			List<Long> corpList = list.stream().map(FeeCenter::getCorpId).distinct()
+				.filter(Objects::nonNull).collect(Collectors.toList());
+			if (ObjectUtils.isNull(corpList)) {
+				corpList = new ArrayList<>();
+			} else {
+				List<Long> billCorpList = list.stream().map(FeeCenter::getBillCorpId).distinct()
+					.filter(Objects::nonNull).collect(Collectors.toList());
+				if (!billCorpList.isEmpty()) {
+					corpList.addAll(billCorpList);
+				}
+			}
+			List<BCorps> bCorpsList = bCorpsService.list(new LambdaQueryWrapper<BCorps>()
+				.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+				.eq(BCorps::getIsDeleted, 0)
+				.in(BCorps::getId, corpList));
 			String deptId = AuthUtil.getDeptId();
 			String branchId = AuthUtil.getDeptId();
 			String deptName = "";
@@ -881,6 +896,16 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					.in(FeeCenter::getId, idList));
 			}
 			for (FeeCenter feeCenter : list) {
+				if (!bCorpsList.isEmpty()) {
+					BCorps bCorps = bCorpsList.stream().filter(e -> e.getId().equals(feeCenter.getCorpId())).findFirst().orElse(null);
+					if (bCorps != null) {
+						if (ObjectUtils.isNull(feeCenter.getGenerationCorpId()) || 0 == feeCenter.getGenerationCorpId()) {
+							feeCenter.setGenerationCorpId(bCorps.getBookingAgentId());
+							feeCenter.setGenerationCorpCnName(bCorps.getBookingAgentCnName());
+							feeCenter.setGenerationCorpEnName(bCorps.getBookingAgentEnName());
+						}
+					}
+				}
 				if (feeCenter.getId() == null) {
 					feeCenter.setCreateTime(new Date());
 					feeCenter.setCreateUser(AuthUtil.getUserId());

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

@@ -232,6 +232,17 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 			finInvoices.setAmountSub(amountCnyD.subtract(amountCnyC));
 			finInvoices.setAmountLoc(finInvoices.getAmountCny().add(finInvoices.getAmountUsd().multiply(finInvoices.getExrate())));
 			finInvoices.setAmountSubUsd(amountUsdD.subtract(amountUsdC));
+			if (ObjectUtils.isNotNull(finInvoices.getApplyNo())) {
+				List<String> appapplyNoList = Func.toStrList(finInvoices.getApplyNo());
+				List<FinInvoices> finInvoicesList = baseMapper.selectList(new LambdaQueryWrapper<FinInvoices>()
+					.eq(FinInvoices::getTenantId, AuthUtil.getTenantId())
+					.eq(FinInvoices::getIsDeleted, 0)
+					.in(FinInvoices::getBillNo, appapplyNoList));
+				for (FinInvoices item : finInvoicesList) {
+					item.setTaxInvoiceNo(finInvoices.getTaxInvoiceNo());
+				}
+				this.updateBatchById(finInvoicesList);
+			}
 		}
 		BigDecimal taxRate = new BigDecimal("0.00");
 		BigDecimal invoiceAmount = new BigDecimal("0.00");
@@ -1270,6 +1281,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public R feeItemsSynchronize(FinInvoices finInvoices) {
 		if (finInvoices.getId() == null || ObjectUtils.isNull(finInvoices.getFinAccBillsVOList()) ||
 			finInvoices.getFinAccBillsVOList().isEmpty() || ObjectUtils.isNull(finInvoices.getCostType())) {
@@ -1372,8 +1384,8 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				}
 				feeCenterService.saveOrUpdateBatch(feeCenterList);
 				finAccBillsService.saveOrUpdateBatch(finAccBillsList);
-				this.countFeeItems(invoicesApply, finInvoicesItemsList, exrateType);
-				baseMapper.updateById(invoicesApply);
+				FinInvoices invoicesUpdate = this.countFeeItems(invoicesApply, finInvoicesItemsList, exrateType);
+				baseMapper.updateById(invoicesUpdate);
 			}
 		} else if ("5".equals(finInvoices.getCostType())) {
 			FinInvoices invoices = baseMapper.selectById(finInvoices.getId());
@@ -1496,8 +1508,8 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				}
 				feeCenterService.saveOrUpdateBatch(feeCenterList);
 				finAccBillsService.saveOrUpdateBatch(finAccBillsList);
-				this.countFeeItems(invoices, finInvoicesItemsList, exrateType);
-				baseMapper.updateById(invoices);
+				FinInvoices invoicesUpdate = this.countFeeItems(invoices, finInvoicesItemsList, exrateType);
+				baseMapper.updateById(invoicesUpdate);
 			}
 		} else {
 			throw new RuntimeException("类型错误");
@@ -1506,6 +1518,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public R feeItemsDelete(FinInvoices finInvoices) {
 		if (finInvoices.getId() == null || finInvoices.getIds() == null || ObjectUtils.isNull(finInvoices.getCostType())) {
 			throw new RuntimeException("缺少必要参数");
@@ -1708,9 +1721,9 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				invoiceAmount = invoiceAmount.add(item.getAmount());
 			}
 		}
-		if (new BigDecimal("0.00").compareTo(finInvoices.getAmountLoc()) >= 0) {
+	/*	if (new BigDecimal("0.00").compareTo(finInvoices.getAmountLoc()) >= 0) {
 			throw new RuntimeException("开票失败:开票金额不能小于等于0");
-		}
+		}*/
 		if (invoiceAmount.compareTo(finInvoices.getAmountLoc()) > 0) {
 			throw new RuntimeException("开票失败:开票金额大于合计金额,保存失败");
 		}
@@ -1726,6 +1739,9 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 			throw new RuntimeException("缺少必要参数");
 		}
 		FinInvoices detail = baseMapper.selectById(finInvoices.getId());
+		if ("1".equals(detail.getBillStatus())) {
+			throw new RuntimeException("发票申请已开票,撤销失败");
+		}
 		if (ObjectUtils.isNotNull(detail.getInvoiceDate())) {
 			LocalDate date = detail.getInvoiceDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 			int year = date.getYear();
@@ -1771,17 +1787,6 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				.eq(FeeCenter::getAccStatus, 1)
 				.eq(FeeCenter::getIsDeleted, 0));
 			finInvoicesItemsService.saveOrUpdateBatch(finInvoices.getFinInvoicesItemsList());
-			if (ObjectUtils.isNotNull(finInvoices.getApplyNo())) {
-				List<String> appapplyNoList = Func.toStrList(finInvoices.getApplyNo());
-				List<FinInvoices> finInvoicesList = baseMapper.selectList(new LambdaQueryWrapper<FinInvoices>()
-					.eq(FinInvoices::getTenantId, AuthUtil.getTenantId())
-					.eq(FinInvoices::getIsDeleted, 0)
-					.in(FinInvoices::getBillNo, appapplyNoList));
-				for (FinInvoices item : finInvoicesList) {
-					item.setTaxInvoiceNo(detail.getTaxInvoiceNo());
-				}
-				this.updateBatchById(finInvoicesList);
-			}
 			updateBillsStatus(finInvoices.getFinInvoicesItemsList(), feeCenterList);
 		} else {
 			throw new RuntimeException("请选择明细");
@@ -1792,9 +1797,9 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				invoiceAmount = invoiceAmount.add(item.getAmount());
 			}
 		}
-		if (new BigDecimal("0.00").compareTo(finInvoices.getAmountLoc()) >= 0) {
+		/*if (new BigDecimal("0.00").compareTo(finInvoices.getAmountLoc()) >= 0) {
 			throw new RuntimeException("开票失败:开票金额不能小于等于0");
-		}
+		}*/
 		if (invoiceAmount.compareTo(finInvoices.getAmountLoc()) > 0) {
 			throw new RuntimeException("开票失败:开票金额大于合计金额,保存失败");
 		}
@@ -1810,6 +1815,9 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 			throw new RuntimeException("缺少必要参数");
 		}
 		FinInvoices detail = baseMapper.selectById(finInvoices.getId());
+		if ("1".equals(detail.getBillStatus())) {
+			throw new RuntimeException("销项发票已结算,撤销失败");
+		}
 		if (ObjectUtils.isNotNull(detail.getInvoiceDate())) {
 			LocalDate date = detail.getInvoiceDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 			int year = date.getYear();
@@ -1876,6 +1884,13 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 		finInvoices.setApplyNo(finInvoicesList.stream().map(FinInvoices::getBillNo).collect(Collectors.joining(",")));
 		finInvoices.setInvoiceDate(invoiceDate);
 		finInvoices.setExrate(exrate);
+		finInvoices.setAmountCny(new BigDecimal("0.00"));
+		finInvoices.setAmountUsd(new BigDecimal("0.00"));
+		finInvoices.setAmountLoc(new BigDecimal("0.00"));
+		finInvoices.setAmountSub(new BigDecimal("0.00"));
+		finInvoices.setAmountSubLoc(new BigDecimal("0.00"));
+		finInvoices.setAmountSubUsd(new BigDecimal("0.00"));
+		finInvoices.setAmountSubLocNet(new BigDecimal("0.00"));
 		BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
 			.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
 			.eq(BusinessType::getIsDeleted, 0)
@@ -2489,6 +2504,23 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 			this.countFeeItemsStl(finStlBills, finStlBillsItemsList, exrateType);
 			finStlBillsMapper.updateById(finStlBills);
 		}
+		List<FilesCenter> filesCenterList = filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
+			.eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FilesCenter::getIsDeleted, 0)
+			.in(FilesCenter::getPid, idList));
+		if (!filesCenterList.isEmpty()) {
+			for (FilesCenter item : filesCenterList) {
+				item.setId(null);
+				item.setPid(finStlBills.getId());
+				item.setCreateTime(new Date());
+				item.setCreateUser(AuthUtil.getUserId());
+				item.setCreateUserName(AuthUtil.getUserName());
+				item.setUpdateUser(null);
+				item.setUpdateTime(null);
+				item.setUpdateUserName(null);
+			}
+			filesCenterService.saveBatch(filesCenterList);
+		}
 		return R.data(finStlBills);
 	}
 
@@ -2738,13 +2770,11 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 		return R.data(finInvoices);
 	}
 
-	private void countFeeItems(FinInvoices reconciliation, List<FinInvoicesItems> finStlBillsItemsList, String exrateType) {
+	private FinInvoices countFeeItems(FinInvoices reconciliation, List<FinInvoicesItems> finStlBillsItemsList, String exrateType) {
 		BigDecimal amountCnyD = new BigDecimal("0.00");
 		BigDecimal amountUsdD = new BigDecimal("0.00");
 		BigDecimal amountCnyC = new BigDecimal("0.00");
 		BigDecimal amountUsdC = new BigDecimal("0.00");
-		BigDecimal amountLocD = new BigDecimal("0.00");
-		BigDecimal amountLocC = new BigDecimal("0.00");
 		for (FinInvoicesItems item : finStlBillsItemsList) {
 			//计算字段null值处理
 			item.setCurrentAmount(ObjectUtils.isNotNull(item.getCurrentAmount()) ? item.getCurrentAmount() : new BigDecimal("0.00"));
@@ -2756,10 +2786,8 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				item.setCurrentAmountEx(item.getCurrentAmount());
 				if ("D".equals(item.getDc())) {
 					amountCnyD = amountCnyD.add(item.getCurrentAmount());
-					amountLocD = amountLocD.add(item.getCurrentAmount());
 				} else {
 					amountCnyC = amountCnyC.add(item.getCurrentAmount());
-					amountLocD = amountLocD.add(item.getCurrentAmount());
 				}
 			} else {
 				item.setCurrentAmountLoc(item.getCurrentAmount().multiply(reconciliation.getExrate()));
@@ -2770,18 +2798,18 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
 				}
 				if ("D".equals(item.getDc())) {
 					amountUsdD = amountUsdD.add(item.getCurrentAmount());
-					amountLocC = amountLocC.add(item.getCurrentAmount().multiply(reconciliation.getExrate()));
 				} else {
 					amountUsdC = amountUsdC.add(item.getCurrentAmount());
-					amountLocC = amountLocC.add(item.getCurrentAmount().multiply(reconciliation.getExrate()));
 				}
 			}
 		}
-		reconciliation.setAmountCny(amountCnyD.subtract(amountCnyC));
-		reconciliation.setAmountUsd(amountUsdD.subtract(amountUsdC));
-		reconciliation.setAmountSub(amountCnyD.subtract(amountCnyC));
-		reconciliation.setAmountLoc(reconciliation.getAmountCny().add(reconciliation.getAmountUsd().multiply(reconciliation.getExrate())));
-		reconciliation.setAmountSubUsd(amountUsdD.subtract(amountUsdC));
+		reconciliation.setAmountCny(reconciliation.getAmountCny().add(amountCnyD.subtract(amountCnyC)));
+		reconciliation.setAmountUsd(reconciliation.getAmountUsd().add(amountUsdD.subtract(amountUsdC)));
+		reconciliation.setAmountSub(reconciliation.getAmountSub().add(amountCnyD.subtract(amountCnyC)));
+		reconciliation.setAmountSubUsd(reconciliation.getAmountSubUsd().add(amountUsdD.subtract(amountUsdC)));
+		reconciliation.setAmountSubLoc(reconciliation.getAmountSubLoc().add(reconciliation.getAmountUsd().multiply(reconciliation.getExrate())));
+		reconciliation.setAmountLoc(reconciliation.getAmountLoc().add(reconciliation.getAmountUsd().multiply(reconciliation.getExrate())));
+		return reconciliation;
 	}
 
 	private void countFeeItemsStl(FinStlBills reconciliation, List<FinStlBillsItems> finStlBillsItemsList, String exrateType) {

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

@@ -3266,6 +3266,10 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			auditProecessDTO.setPayAmount(detail.getAmountCrLoc());
 			auditProecessDTO.setReceivableAmount(detail.getAmountDrLoc());
 			auditProecessDTO.setGrossProfit(detail.getAmountSubLoc());
+			if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())){
+				auditProecessDTO.setMblno(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getMblno).distinct().collect(Collectors.joining(",")));
+				auditProecessDTO.setHblno(finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getHblno).distinct().collect(Collectors.joining(",")));
+			}
 			List<FinStlBillsItems> finStlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
 				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
 				.eq(FinStlBillsItems::getIsDeleted, 0)
@@ -3313,6 +3317,9 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			throw new RuntimeException("缺少必要参数");
 		}
 		FinStlBills detail = baseMapper.selectById(finStlBills.getId());
+		if ("1".equals(detail.getBillStatus())){
+			throw new RuntimeException("付费申请已结算,撤销失败");
+		}
 		if (ObjectUtils.isNotNull(detail.getBillDate())) {
 			LocalDate date = detail.getBillDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 			int year = date.getYear();
@@ -3378,6 +3385,22 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		finStlBills.setBusinessType("STL");
 		finStlBills.setBillDate(date);
 		finStlBills.setDc("C");
+		finStlBills.setAmountDr(new BigDecimal("0.00"));
+		finStlBills.setAmountCr(new BigDecimal("0.00"));
+		finStlBills.setAmountDrUsd(new BigDecimal("0.00"));
+		finStlBills.setAmountCrUsd(new BigDecimal("0.00"));
+		finStlBills.setAmountDrLoc(new BigDecimal("0.00"));
+		finStlBills.setAmountCrLoc(new BigDecimal("0.00"));
+		finStlBills.setAmountDrNet(new BigDecimal("0.00"));
+		finStlBills.setAmountCrNet(new BigDecimal("0.00"));
+		finStlBills.setAmountDrUsdNet(new BigDecimal("0.00"));
+		finStlBills.setAmountCrUsdNet(new BigDecimal("0.00"));
+		finStlBills.setAmountDrLocNet(new BigDecimal("0.00"));
+		finStlBills.setAmountCrLocNet(new BigDecimal("0.00"));
+		finStlBills.setAmountSub(new BigDecimal("0.00"));
+		finStlBills.setAmountSubLoc(new BigDecimal("0.00"));
+		finStlBills.setAmountSubUsd(new BigDecimal("0.00"));
+		finStlBills.setAmountSubLocNet(new BigDecimal("0.00"));
 		finStlBills.setMblno(finStlBillsList.stream().map(FinStlBills::getMblno).filter(Objects::nonNull).distinct()
 			.collect(Collectors.joining(",")));
 		finStlBills.setHblno(finStlBillsList.stream().map(FinStlBills::getHblno).filter(Objects::nonNull).distinct()
@@ -3684,7 +3707,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(item.getCurrentStlAmount()));
 					} else {
 						finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().subtract(item.getCurrentStlAmount()));
-						BigDecimal cny = currencyUtils.converter(item.getDc(), curExrateList, item.getCurrentStlAmount(), item.getCurCode(), "2");
+						BigDecimal cny = item.getCurrentStlExrate().multiply(item.getCurrentStlAmount());
 						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(cny));
 					}
 					if (finAccBills.getAmountDr().compareTo(new BigDecimal("0.00")) == 0 &&
@@ -3711,7 +3734,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().subtract(item.getCurrentStlAmount()));
 					} else {
 						finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().subtract(item.getCurrentStlAmount()));
-						BigDecimal cny = currencyUtils.converter(item.getDc(), curExrateList, item.getCurrentStlAmount(), item.getCurCode(), "2");
+						BigDecimal cny = item.getCurrentStlExrate().multiply(item.getCurrentStlAmount());
 						finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(cny));
 						finAccBills.setAppliedAmountStlUsd(finAccBills.getAppliedAmountStlUsd().subtract(item.getCurrentStlAmount()));
 					}
@@ -3773,7 +3796,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						} else if (e.getStlTtlAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
 							e.setStlTtlAmount(new BigDecimal("0.00"));
 							e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
-							e.setAppliedAmountStl(e.getAmount().subtract(e.getAppliedAmountStl()).subtract(currentStlAmount));
+							e.setAppliedAmountStl(e.getAppliedAmountStl().subtract(currentStlAmount));
 							currentStlAmount = new BigDecimal("0.00");
 						} else {
 							e.setStlTtlAmount(new BigDecimal("0.00"));
@@ -3797,6 +3820,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public R confirmSettlementV1(FinStlBills finStlBills) {
 		if (finStlBills.getId() == null) {
 			throw new RuntimeException("缺少必要参数");
@@ -3874,6 +3898,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public R revokeSettlementV1(FinStlBills finStlBills) {
 		if (finStlBills.getId() == null) {
 			throw new RuntimeException("缺少必要参数");