Преглед изворни кода

1.业务配置-编号管理列表增加所属部门检索条件,保存逻辑修改
2.发票保存主表增加订舱代理
3.海运出口,客户订舱模本导入问题修改

纪新园 пре 1 месец
родитељ
комит
ec0d5d5689
13 измењених фајлова са 439 додато и 27 уклоњено
  1. 4 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/TradingBox.java
  2. 77 6
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsBoxServiceImpl.java
  3. 6 1
      blade-service/blade-los/src/main/java/org/springblade/los/billno/controller/BusinessBillNoController.java
  4. 13 9
      blade-service/blade-los/src/main/java/org/springblade/los/billno/service/impl/BusinessBillNoServiceImpl.java
  5. 19 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxController.java
  6. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/ITradingBoxService.java
  7. 143 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java
  8. 0 9
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  9. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/TemplateImportServiceImpl.java
  10. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java
  11. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/IAuditProecessService.java
  12. 163 0
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java
  13. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/invoices/service/impl/FinInvoicesServiceImpl.java

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

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springblade.los.finance.fee.dto.ExpenseApplicationFeeReports;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.entity.FeeCenterItems;
 import org.springblade.system.entity.Dept;
@@ -686,6 +687,9 @@ public class TradingBox implements Serializable {
 	@TableField(exist = false)
 	private List<FeeCenter> feeCenterList;
 
+	@TableField(exist = false)
+	private List<ExpenseApplicationFeeReports> reportsListC;
+
 	/**
 	 * 文件
 	 */

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

@@ -29,7 +29,6 @@ import org.springblade.los.basic.cur.entity.BCurExrate;
 import org.springblade.los.basic.reports.service.IReportsBoxService;
 import org.springblade.los.box.entity.ExpenseApplication;
 import org.springblade.los.box.entity.TradingBox;
-import org.springblade.los.box.entity.TradingBoxItem;
 import org.springblade.los.box.service.IExpenseApplicationService;
 import org.springblade.los.box.service.ITradingBoxService;
 import org.springblade.los.business.mktSlot.entity.MktSlot;
@@ -219,9 +218,9 @@ public class ReportsBoxServiceImpl implements IReportsBoxService {
 						ExpenseApplicationFeeReports reports = new ExpenseApplicationFeeReports();
 						reports.setPid(item.getPid());
 						reports.setStlPid(item.getStlPid());
-						if (ObjectUtils.isNotNull(item.getShortName())){
+						if (ObjectUtils.isNotNull(item.getShortName())) {
 							reports.setCorpCnName(item.getShortName());
-						}else{
+						} else {
 							reports.setCorpCnName(item.getCorpCnName());
 						}
 						reports.setFeeCnName(item.getFeeCnName());
@@ -433,8 +432,8 @@ public class ReportsBoxServiceImpl implements IReportsBoxService {
 			}
 		} else if (MagicValues.YASJ.equals(reportCode) && MagicValues.YASJ.equals(groupCode) && MagicValues.YASJ.equals(type)) {
 			Receipt receipt = receiptService.getOne(new LambdaQueryWrapper<Receipt>()
-				.eq(Receipt::getIsDeleted,0)
-				.eq(Receipt::getBillNo,billId)
+				.eq(Receipt::getIsDeleted, 0)
+				.eq(Receipt::getBillNo, billId)
 				.last("LIMIT 1"));
 			if (receipt != null) {
 				receipt.setDept(dept);
@@ -442,7 +441,79 @@ public class ReportsBoxServiceImpl implements IReportsBoxService {
 			} else {
 				map.put(MagicValues.DATA, null);
 			}
-		}else {
+		} else if (MagicValues.XGDX.equals(reportCode) && MagicValues.XGDX.equals(groupCode) && MagicValues.XGDX.equals(type)) {
+			TradingBox tradingBox = tradingBoxService.getById(billId);
+			if (tradingBox != null) {
+				BigDecimal amountDr = new BigDecimal("0.00");
+				BigDecimal amountCr = new BigDecimal("0.00");
+				BigDecimal amountProfit;
+				BigDecimal amountDrUsd = new BigDecimal("0.00");
+				BigDecimal amountCrUsd = new BigDecimal("0.00");
+				BigDecimal amountProfitUsd;
+				BigDecimal amountDrLoc = new BigDecimal("0.00");
+				BigDecimal amountCrLoc = new BigDecimal("0.00");
+				BigDecimal amountProfitLoc;
+				String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
+				List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "1", AuthUtil.getDeptId());
+				LambdaQueryWrapper<FeeCenter> feeCenterLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				feeCenterLambdaQueryWrapper.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getDc, "C")
+					.eq(FeeCenter::getPid, tradingBox.getId());
+				List<FeeCenter> feeCenterList = feeCenterService.list(feeCenterLambdaQueryWrapper);
+				if (!feeCenterList.isEmpty()) {
+					List<ExpenseApplicationFeeReports> reportsListC = new ArrayList<>();
+					for (FeeCenter item : feeCenterList) {
+						ExpenseApplicationFeeReports reports = new ExpenseApplicationFeeReports();
+						reports.setPid(item.getPid());
+						reports.setStlPid(item.getStlPid());
+						if (ObjectUtils.isNotNull(item.getShortName())) {
+							reports.setCorpCnName(item.getShortName());
+						} else {
+							reports.setCorpCnName(item.getCorpCnName());
+						}
+						reports.setFeeCnName(item.getFeeCnName());
+						reports.setDc(item.getDc());
+						reports.setRemarks(item.getRemarks());
+						reports.setQuantity(item.getQuantity());
+						reports.setUnitNo(item.getUnitNo());
+						reports.setPrice(item.getPrice());
+						reports.setFeeEnName(item.getFeeEnName());
+						if (exrateType.equals(item.getCurCode())) {
+							amountCr = amountCr.add(item.getAmount());
+							amountCrLoc = amountCrLoc.add(item.getAmount());
+							reports.setAmount(item.getAmount());
+							reports.setAmountUsd(new BigDecimal("0.00"));
+							reports.setAmountLoc(item.getAmount());
+						} else {
+							BigDecimal amount = currencyUtils.converter(item.getDc(), curExrateList, item.getAmount(), item.getCurCode(), "1");
+							amountCrUsd = amountCrUsd.add(item.getAmount());
+							amountCrLoc = amountCrLoc.add(amount);
+							reports.setAmount(new BigDecimal("0.00"));
+							reports.setAmountUsd(item.getAmount());
+							reports.setAmountLoc(amount);
+						}
+						reportsListC.add(reports);
+					}
+					amountProfit = amountDr.subtract(amountCr);
+					amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
+					amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
+					tradingBox.setAmountDr(amountDr);
+					tradingBox.setAmountCr(amountCr);
+					tradingBox.setAmountProfit(amountProfit);
+					tradingBox.setAmountDrUsd(amountDrUsd);
+					tradingBox.setAmountCrUsd(amountCrUsd);
+					tradingBox.setAmountProfitUsd(amountProfitUsd);
+					tradingBox.setAmountDrLoc(amountDrLoc);
+					tradingBox.setAmountCrLoc(amountCrLoc);
+					tradingBox.setAmountProfitLoc(amountProfitLoc);
+					tradingBox.setReportsListC(reportsListC);
+				}
+				map.put(MagicValues.DATA, tradingBox);
+			} else {
+				map.put(MagicValues.DATA, null);
+			}
+		} else {
 			map.put(MagicValues.DATA, null);
 		}
 		return R.data(map);

+ 6 - 1
blade-service/blade-los/src/main/java/org/springblade/los/billno/controller/BusinessBillNoController.java

@@ -32,6 +32,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.IDeptUtils;
+import org.springblade.los.basic.cur.entity.BCurrency;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.billno.vo.BusinessBillNoVO;
@@ -75,8 +76,12 @@ public class BusinessBillNoController extends BladeController {
 		lambdaQueryWrapper.eq(BusinessBillNo::getTenantId, AuthUtil.getTenantId())
 			.eq(BusinessBillNo::getIsDeleted, 0)
 			.eq(ObjectUtils.isNotNull(businessBillNo.getBusinessTypeId()), BusinessBillNo::getBusinessTypeId, businessBillNo.getBusinessTypeId())
-			.eq(BusinessBillNo::getBranchId, AuthUtil.getDeptId())
 			.orderByDesc(BusinessBillNo::getCreateTime);
+		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
+			lambdaQueryWrapper.eq(BusinessBillNo::getBranchId, AuthUtil.getDeptId());
+		} else {
+			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(businessBillNo.getBranchId()), BusinessBillNo::getBranchId, businessBillNo.getBranchId());
+		}
 		IPage<BusinessBillNo> pages = businessBillNoService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}

+ 13 - 9
blade-service/blade-los/src/main/java/org/springblade/los/billno/service/impl/BusinessBillNoServiceImpl.java

@@ -79,9 +79,9 @@ public class BusinessBillNoServiceImpl extends ServiceImpl<BusinessBillNoMapper,
 			throw new RuntimeException("未找到可用生成编码规则");
 		}
 		Date date;
-		if (ObjectUtils.isNull(businessBillNo.getDate())){
+		if (ObjectUtils.isNull(businessBillNo.getDate())) {
 			date = new Date();
-		}else{
+		} else {
 			date = businessBillNo.getDate();
 		}
 		//编码开头
@@ -451,18 +451,22 @@ public class BusinessBillNoServiceImpl extends ServiceImpl<BusinessBillNoMapper,
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public R submit(BusinessBillNo businessBillNo) {
+		String branchId;
+		if (ObjectUtils.isNull(businessBillNo.getBranchId())) {
+			branchId = AuthUtil.getDeptId();
+		} else {
+			branchId = businessBillNo.getBranchId();
+		}
 		if (businessBillNo.getId() == null) {
 			businessBillNo.setCreateTime(new Date());
 			businessBillNo.setCreateUser(AuthUtil.getUserId());
 			businessBillNo.setCreateUserName(AuthUtil.getUserName());
-			businessBillNo.setBranchId(AuthUtil.getDeptId());
+			businessBillNo.setBranchId(branchId);
 			//获取部门ids对应中文名
-			if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
-				businessBillNo.setCreateDept(AuthUtil.getDeptId());
-				R<List<String>> res = sysClient.getDeptNames(AuthUtil.getDeptId());
-				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
-					businessBillNo.setCreateDeptName(String.join(",", res.getData()));
-				}
+			businessBillNo.setCreateDept(branchId);
+			R<String> res = sysClient.getDeptName(Long.parseLong(branchId));
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				businessBillNo.setCreateDeptName(res.getData());
 			}
 		} else {
 			businessBillNo.setUpdateUser(AuthUtil.getUserId());

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

@@ -35,6 +35,7 @@ import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.box.dto.ExportTradingBoxItemOut;
 import org.springblade.los.box.dto.ExportTradingBoxOut;
+import org.springblade.los.box.entity.ExpenseApplication;
 import org.springblade.los.box.entity.TradingBox;
 import org.springblade.los.box.entity.TradingBoxItem;
 import org.springblade.los.box.service.ITradingBoxItemService;
@@ -427,4 +428,22 @@ public class TradingBoxController extends BladeController {
 		return tradingBoxService.synchronousPutBoxData(tradingBox);
 	}
 
+	/**
+	 * 请核
+	 */
+	@PostMapping("/approval")
+	@ApiOperationSupport(order = 6)
+	public R approval(@Valid @RequestBody TradingBox tradingBox) {
+		return tradingBoxService.approval(tradingBox);
+	}
+
+	/**
+	 * 撤销请核
+	 */
+	@PostMapping("/revokeApproval")
+	@RepeatSubmit
+	public R revokeApproval(@Valid @RequestBody TradingBox tradingBox) {
+		return tradingBoxService.revokeApproval(tradingBox);
+	}
+
 }

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

@@ -87,4 +87,8 @@ public interface ITradingBoxService extends IService<TradingBox> {
 	List<BoxReminderExcel> boxUsageReminder(BoxReminderExcel boxReminderExcel);
 
 	R revokePickUpCost(Long id,String itemIds);
+
+	R approval(TradingBox tradingBox);
+
+	R revokeApproval(TradingBox tradingBox);
 }

+ 143 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java

@@ -17,6 +17,7 @@
 package org.springblade.los.box.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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;
@@ -44,6 +45,12 @@ import org.springblade.los.business.sea.entity.Containers;
 import org.springblade.los.business.sea.service.IBillsService;
 import org.springblade.los.business.sea.service.IContainersService;
 import org.springblade.los.business.sea.service.ISeaContainerNumberItemService;
+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.FeeCenterItems;
 import org.springblade.los.finance.fee.service.IFeeCenterItemsService;
@@ -109,6 +116,12 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 	private final IFeeCenterItemsService feeCenterItemsService;
 
+	private final IAuditPathsActsService auditPathsActsService;
+
+	private final IAuditPathsLevelsService auditPathsLevelsService;
+
+	private final IAuditProecessService auditProecessService;
+
 	@Override
 	public TradingBox getDetail(TradingBox tradingBox) {
 		if (tradingBox.getId() == null) {
@@ -3375,4 +3388,134 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		return R.data(detail);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R approval(TradingBox tradingBox) {
+		TradingBox detail = baseMapper.selectById(tradingBox.getId());
+		detail.setApprovalStatus("1");
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateTime(new Date());
+		baseMapper.updateById(detail);
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getPid, detail.getId()));
+		if (!feeCenterList.isEmpty()) {
+			for (FeeCenter item : feeCenterList) {
+				item.setUpdateTime(new Date());
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setAuditStatus("1");
+				item.setApplyId(AuthUtil.getUserId());
+				item.setApplyName(AuthUtil.getUserName());
+				item.setApplyTime(new Date());
+			}
+			feeCenterService.updateBatchById(feeCenterList);
+		}
+		int actId = 1132;
+		String processType = "箱管调箱审核";
+		String checkType = "CGDX";
+		//审批数据
+		LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
+		//获取审批级次
+		List<LosAuditPathsLevels> auditPathsLevels;
+		// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
+		LosAuditPathsActs pathsActs;
+		//是否开启流程
+		LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		auditPathsActsLambdaQueryWrapper
+			.eq(LosAuditPathsActs::getIsEnable, 1)
+			.eq(LosAuditPathsActs::getFidStatus, "status")
+			.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
+			.eq(LosAuditPathsActs::getSalesCompanyId, 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)
+			.eq(LosAuditPathsLevels::getSalesCompanyId, AuthUtil.getDeptId())
+		);
+		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("/boxManagement/boxAdjustment/index");
+			auditProecessDTO.setPageStatus("this.$store.getters.feeApproval");
+			auditProecessDTO.setPageLabel("箱管调箱");
+			auditProecessDTO.setOrderRemark(detail.getRemarks());
+			auditProecessDTO.setPathsLevelsList(auditPathsLevels);
+			auditProecessDTO.setActId(1);
+			auditProecessDTO.setSrcBillId(detail.getId());
+			auditProecessDTO.setBillId(detail.getId());
+			auditProecessDTO.setBillNo(detail.getSysNo());
+			auditProecessDTO.setSendUserId(AuthUtil.getUserId());
+			auditProecessDTO.setSendName(AuthUtil.getUserName());
+			auditProecessDTO.setSendTime(new Date());
+			auditProecessDTO.setBillTime(detail.getPurchaseDate());
+			auditProecessDTO.setTenantId(AuthUtil.getTenantId());
+			auditProecessDTO.setCorpId(detail.getPurchaseCompanyId());
+			auditProecessDTO.setCorpsName(detail.getPurchaseCompanyName());
+			auditProecessDTO.setSalesCompanyId(Long.parseLong(AuthUtil.getDeptId()));
+			auditProecessDTO.setMblno(detail.getContractNo());
+			auditProecessDTO.setHblno(detail.getContractNo());
+			R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
+			if (!financeProcess.isSuccess()) {
+				throw new SecurityException("操作失败,请联系管理员");
+			}
+		}
+		return R.data(detail);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R revokeApproval(TradingBox tradingBox) {
+		TradingBox detail = baseMapper.selectById(tradingBox.getId());
+		detail.setApprovalStatus("0");
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateTime(new Date());
+		baseMapper.updateById(detail);
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getPid, detail.getId()));
+		StringBuilder text = new StringBuilder();
+		for (FeeCenter item : feeCenterList) {
+			if (item.getStlTtlAmount().compareTo(BigDecimal.ZERO) != 0) {
+				text.append("费用:").append(item.getFeeCnName()).append("已结算");
+			}
+		}
+		if (ObjectUtils.isNotNull(text.toString())) {
+			throw new RuntimeException(text.toString());
+		}
+		for (FeeCenter item : feeCenterList) {
+			item.setAuditStatus("0");
+			item.setAccStatus(0);
+			item.setApplyId(0L);
+			item.setApplyName("");
+			item.setApplyTime(null);
+		}
+		feeCenterService.updateBatchById(feeCenterList);
+		R financeProcess = auditProecessService.deteleBySrcBillId(detail.getId());
+		if (!financeProcess.isSuccess()) {
+			throw new SecurityException("操作失败,请联系管理员");
+		}
+		return R.data(detail);
+	}
+
 }

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

@@ -147,15 +147,6 @@ public class BillsController extends BladeController {
 					.eq(AuthUtil.getUserRole().contains("操作员"), Bills::getOperatorId, AuthUtil.getUserId()).or()
 					.eq(AuthUtil.getUserRole().contains("客服"), Bills::getCustomerServiceId, AuthUtil.getUserId()).or()
 					.eq(Bills::getCreateUser, AuthUtil.getUserId()));
-				/*if (AuthUtil.getUserRole().contains("业务员")) {
-					lambdaQueryWrapper.eq(Bills::getSrcId, AuthUtil.getUserId());
-				} else if (AuthUtil.getUserRole().contains("操作员")) {
-					lambdaQueryWrapper.eq(Bills::getOperatorId, AuthUtil.getUserId());
-				} else if (AuthUtil.getUserRole().contains("客服")) {
-					lambdaQueryWrapper.eq(Bills::getCustomerServiceId, AuthUtil.getUserId());
-				} else {
-					lambdaQueryWrapper.eq(Bills::getCreateUser, AuthUtil.getUserId());
-				}*/
 			}else{
 				lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getSrcType()), Bills::getSrcType, bills.getSrcType())
 					.and(ObjectUtils.isNotNull(bills.getSrcCnName()), i -> i.like(Bills::getSrcCnName, bills.getSrcCnName()).or()

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/TemplateImportServiceImpl.java

@@ -1450,7 +1450,7 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 						throw new RuntimeException("包装单位" + packingUnit + "未在基础资料中维护");
 					}
 					bills.setPackingUnitId(packages.getId());
-					bills.setPackingUnit(packingUnit);
+					bills.setPackingUnit(packingUnit.trim());
 				}
 			}
 		}
@@ -1760,7 +1760,7 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 						throw new RuntimeException("包装单位" + packingUnit + "未在基础资料中维护");
 					}
 					bills.setPackingUnitId(packages.getId());
-					bills.setPackingUnit(packingUnit);
+					bills.setPackingUnit(packingUnit.trim());
 				}
 			}
 		}

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

@@ -252,6 +252,8 @@ public class AuditProecessController extends BladeController {
 			auditProecessService.checkMktSlot(auditProecess);
 		}else if ("YYFY".equals(proecess.getCheckType())) {
 			auditProecessService.checkOperatingExpenses(auditProecess);
+		}else if ("CGDX".equals(proecess.getCheckType())) {
+			auditProecessService.checkTradingBox(auditProecess);
 		}
 		return R.data(auditProecess);
 	}

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

@@ -74,4 +74,6 @@ public interface IAuditProecessService extends IService<LosAuditProecess> {
 	void checkMktSlot(LosAuditProecess auditProecess);
 
 	void checkOperatingExpenses(LosAuditProecess auditProecess);
+
+	void checkTradingBox(LosAuditProecess auditProecess);
 }

+ 163 - 0
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -2103,6 +2103,169 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 		baseMapper.updateById(auditProecess);
 	}
 
+	@Override
+	public void checkTradingBox(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());
+		TradingBox tradingBox = tradingBoxMapper.selectById(proecessTemp.getBillId());
+		//不是最后一级
+		if ("F".equals(iffinalItem)) {
+
+			//通过
+			if (operate == 1) {
+				//如果是第一级, 则修改状态为审批中
+				if (auditProecess.getLevelId() == 1) {
+					tradingBox.setApprovalStatus("2");
+					int count = tradingBoxMapper.updateById(tradingBox);
+					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 (tradingBox != null) {
+						billsDate = simpleDateFormat.format(tradingBox.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());
+				message.setMessageBody("您有新的营业费用审核,申请单号:" + proecessTemp.getBillNo() + ","
+					+ "单据日期:" + billsDate + ",请审核。"
+					+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+				);
+				message.setUrl(auditProecess.getUrl());
+				message.setPageLabel(auditProecess.getPageLabel());
+				message.setPageStatus(auditProecess.getPageStatus());
+				message.setCreateUser(AuthUtil.getUserId());
+
+				message.setCreateTime(new Date());
+
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
+			}
+			//不通过
+			else if (operate == 2) {
+				auditProecess.setAuditStatus("B");
+				tradingBox.setApprovalStatus("4");
+				int count = tradingBoxMapper.updateById(tradingBox);
+				if (count == 0) {
+					throw new SecurityException("修改订单数据失败");
+				}
+
+				sendMessage.setMessageBody("您的营业费用审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+
+		}
+		//是最后一级
+		else if ("T".equals(iffinalItem)) {
+			//通过
+			if (operate == 1) {
+				auditProecess.setAuditStatus("A");
+				tradingBox.setApprovalStatus("3");
+				int count = tradingBoxMapper.updateById(tradingBox);
+				if (count == 0) {
+					throw new SecurityException("修改订单数据失败");
+				}
+
+				sendMessage.setMessageBody("您的营业费用审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+			//不通过
+			else if (operate == 2) {
+				auditProecess.setAuditStatus("B");
+				tradingBox.setApprovalStatus("4");
+				int count = tradingBoxMapper.updateById(tradingBox);
+				if (count == 0) {
+					throw new SecurityException("修改订单数据失败");
+				}
+				sendMessage.setMessageBody("您的营业费用审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+		} else {
+			throw new SecurityException("审批异常,请联系管理员");
+		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
+		//保存操作记录
+		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
+		auditProecess.setAuditItem(new Date());
+		baseMapper.updateById(auditProecess);
+	}
+
 	private void updateFeeCenter(FeeCenterUpdateRecord feeCenterUpdateRecord, FeeCenter feeCenter) {
 		feeCenterUpdateRecord.setStatus("3");
 		feeCenterUpdateRecord.setUpdateUser(AuthUtil.getUserId());

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

@@ -232,6 +232,10 @@ 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));
+			finInvoices.setBookingAgentCnName(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getBookingAgentCnName)
+				.distinct().collect(Collectors.joining(",")));
+			finInvoices.setBookingAgentEnName(finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getBookingAgentEnName)
+				.distinct().collect(Collectors.joining(",")));
 			if (ObjectUtils.isNotNull(finInvoices.getApplyNo())) {
 				List<String> appapplyNoList = Func.toStrList(finInvoices.getApplyNo());
 				List<FinInvoices> finInvoicesList = baseMapper.selectList(new LambdaQueryWrapper<FinInvoices>()