Browse Source

贸易代理 2024年7月29日17:09:54

纪新园 1 year ago
parent
commit
48ac76dcfe

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

@@ -912,5 +912,17 @@ public class FeeCenter implements Serializable {
 	@ApiModelProperty(value = "费用类型")
 	private String feeType;
 
+	/**
+	 * 是否已同步关税
+	 */
+	@ApiModelProperty(value = "是否已同步关税")
+	private String whetherSynchronizationTariff;
+
+	/**
+	 * 是否已同步增值税
+	 */
+	@ApiModelProperty(value = "是否已同步增值税")
+	private String whetherSynchronizationZzs;
+
 }
 

+ 12 - 11
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/TradeBillsController.java

@@ -26,25 +26,17 @@ import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.excel.util.ExcelUtil;
 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.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.service.IBillsService;
-import org.springblade.los.excel.BillsExcel;
-import org.springblade.system.entity.DictBiz;
-import org.springblade.system.feign.IDictBizClient;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * 贸易代理-海运进口 控制器
@@ -117,7 +109,7 @@ public class TradeBillsController extends BladeController {
 			.like(ObjectUtils.isNotNull(bills.getBookingNo()), Bills::getBookingNo, bills.getBookingNo())
 			.and(ObjectUtils.isNotNull(bills.getCorpCnName()), i -> i.like(Bills::getCorpCnName, bills.getCorpCnName()).or()
 				.like(Bills::getCorpEnName, bills.getCorpCnName()))
-			;
+		;
 		if (ObjectUtils.isNotNull(bills.getBookingDateList()) && !bills.getBookingDateList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getBookingDate, bills.getBookingDateList().get(0));
 			lambdaQueryWrapper.le(Bills::getBookingDate, bills.getBookingDateList().get(1));
@@ -130,7 +122,7 @@ public class TradeBillsController extends BladeController {
 			lambdaQueryWrapper.ge(Bills::getEtd, bills.getEtdList().get(0));
 			lambdaQueryWrapper.le(Bills::getEtd, bills.getEtdList().get(1));
 		}
-			lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
+		lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
 		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getBillType()), Bills::getBillType, bills.getBillType())
 			.eq(Bills::getBusinessType, "SI")
 			.eq(Bills::getSeaType, "I")
@@ -150,7 +142,7 @@ public class TradeBillsController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入bills")
 	@RepeatSubmit
-	public R submitTrade(@Valid @RequestBody Bills bills){
+	public R submitTrade(@Valid @RequestBody Bills bills) {
 		return billsService.submitTrade(bills);
 	}
 
@@ -167,5 +159,14 @@ public class TradeBillsController extends BladeController {
 	}
 
 
+	/**
+	 * 同步增值税或关税
+	 */
+	@GetMapping("/synchronization")
+	public R synchronization(@RequestParam("id") Long id, @RequestParam("type")String type) {
+		return billsService.synchronization(id, type);
+	}
+
+
 }
 

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

@@ -152,4 +152,6 @@ public interface IBillsService extends IService<Bills> {
 	R submitTrade(Bills bills);
 
 	Bills detailTradeByMblno(Bills bills);
+
+	R synchronization(Long id, String type);
 }

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

@@ -58,10 +58,12 @@ import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.los.finance.genleg.entity.FinPeriod;
 import org.springblade.los.finance.genleg.mapper.FinPeriodMapper;
+import org.springblade.los.trade.entity.Agent;
 import org.springblade.los.trade.entity.AgentItems;
 import org.springblade.los.trade.entity.DispatchVehicles;
 import org.springblade.los.trade.entity.InOutStorage;
 import org.springblade.los.trade.mapper.AgentItemsMapper;
+import org.springblade.los.trade.mapper.AgentMapper;
 import org.springblade.los.trade.mapper.DispatchVehiclesMapper;
 import org.springblade.los.trade.mapper.InOutStorageMapper;
 import org.springblade.system.entity.Dept;
@@ -136,6 +138,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final InOutStorageMapper inOutStorageMapper;
 
+	private final AgentMapper agentMapper;
+
 	@Override
 	public IPage<BillsVO> selectBillsPage(IPage<BillsVO> page, BillsVO bills) {
 		return page.setRecords(baseMapper.selectBillsPage(page, bills));
@@ -2673,4 +2677,96 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		return detail;
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R synchronization(Long id, String type) {
+		LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getPid, id);
+		if ("1".equals(type)) {
+			lambdaQueryWrapper.eq(FeeCenter::getFeeCode, "ZZS");
+		} else {
+			lambdaQueryWrapper.eq(FeeCenter::getFeeCode, "GS");
+		}
+		Bills bills = baseMapper.selectById(id);
+		List<AgentItems> agentItemsList = new ArrayList<>();
+		if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
+			agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+				.apply("find_in_set(id,'" + bills.getMconsigneeCntyName() + "')")
+				.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+				.eq(AgentItems::getIsDeleted, 0));
+		}
+		if (agentItemsList.isEmpty()) {
+			throw new RuntimeException("未找到对应贸易代理单据明细");
+		}
+		Agent agent = agentMapper.selectById(agentItemsList.get(0).getPid());
+		if (agent == null) {
+			throw new RuntimeException("未找到对应贸易代理单据");
+		}
+		List<FeeCenter> feeCenterList = feeCenterService.list(lambdaQueryWrapper);
+		for (FeeCenter item: feeCenterList){
+			if ("1".equals(type)) {
+				item.setWhetherSynchronizationZzs("1");
+			} else {
+				item.setWhetherSynchronizationTariff("1");
+			}
+		}
+		feeCenterService.updateBatchById(feeCenterList);
+		if (feeCenterList.isEmpty()) {
+			if ("1".equals(type)) {
+				throw new RuntimeException("未找到增值税费用信息");
+			} else {
+				throw new RuntimeException("未找到关税费用信息");
+			}
+		}
+		FeeCenter feeCenter = new FeeCenter();
+		feeCenter.setCreateTime(new Date());
+		feeCenter.setCreateUser(AuthUtil.getUserId());
+		feeCenter.setCreateUserName(AuthUtil.getUserName());
+		if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+			feeCenter.setCreateDept(agent.getCreateDept() + "");
+			feeCenter.setBranchId(AuthUtil.getDeptId());
+			feeCenter.setCreateDeptName(agent.getCreateDeptName());
+		}
+		feeCenter.setBusinessType("MYDL");
+		feeCenter.setPid(agentItemsList.get(0).getPid());
+		feeCenter.setLineNo(1L);
+		feeCenter.setBillNo(agent.getContractNo());
+		feeCenter.setBillDate(agent.getBusinessDate());
+		feeCenter.setCorpId(agent.getDomesticConsigneeId());
+		feeCenter.setCorpCnName(agent.getDomesticConsigneeCname());
+		feeCenter.setBillCorpId(agent.getCorpId());
+		feeCenter.setBillCorpCnName(agent.getCorpName());
+		feeCenter.setPolId(agent.getPolId());
+		feeCenter.setPolCode(agent.getPolCode());
+		feeCenter.setPolCnName(agent.getPolCnName());
+		feeCenter.setPolEnName(agent.getPolEnName());
+		feeCenter.setPodId(agent.getPodId());
+		feeCenter.setPodCode(agent.getPodCode());
+		feeCenter.setPodCnName(agent.getPodCnName());
+		feeCenter.setPodEnName(agent.getPodEnName());
+		FeeCenter feeCenter1 = feeCenterList.get(0);
+		feeCenter.setFeeId(feeCenter1.getFeeId());
+		feeCenter.setFeeCode(feeCenter1.getFeeCode());
+		feeCenter.setFeeCnName(feeCenter1.getFeeCnName());
+		feeCenter.setFeeEnName(feeCenter1.getFeeEnName());
+		feeCenter.setDc("C");
+		feeCenter.setCurCode(feeCenter1.getCurCode());
+		feeCenter.setSort(1);
+		feeCenter.setElementsId(feeCenter1.getElementsId());
+		feeCenter.setElementsCode(feeCenter1.getElementsCode());
+		feeCenter.setElementsCnName(feeCenter1.getElementsCnName());
+		feeCenter.setElementsEnName(feeCenter1.getElementsEnName());
+		feeCenter.setUnitNo("JOB");
+		feeCenter.setMblno(bills.getMblno());
+		BigDecimal amount = feeCenterList.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+		feeCenter.setQuantity(new BigDecimal("1"));
+		feeCenter.setPrice(amount);
+		feeCenter.setAmount(amount);
+		feeCenterService.save(feeCenter);
+		return R.success("操作成功");
+	}
+
 }

+ 2 - 65
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -28,7 +28,6 @@ import org.springblade.client.entity.Message;
 import org.springblade.client.feign.IMessageClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.basic.acc.entity.Accounts;
 import org.springblade.los.basic.acc.service.IAccountsService;
@@ -3250,8 +3249,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					}
 					if ("FFSQ-SK".equals(auditProecess.getPaidApplication())) {
 						detail.setFirstStatus("审核中");
-					} else if ("FFSQ-WK".equals(auditProecess.getPaidApplication())) {
-						detail.setFinalStatus("审核中");
 					} else {
 						detail.setBusinessStatus("审核中");
 					}
@@ -3344,9 +3341,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				}
 				if ("FFSQ-SK".equals(auditProecess.getPaidApplication())) {
 					detail.setFirstStatus("录入");
-				} else if ("FFSQ-WK".equals(auditProecess.getPaidApplication())) {
-					detail.setFinalStatus("录入");
-				} else {
+				}  else {
 					detail.setBusinessStatus("录入");
 				}
 				int count = agentMapper.updateById(detail);
@@ -3380,67 +3375,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				if (detail == null) {
 					throw new SecurityException("审批通过失败");
 				}
-				String feeType = "";
-				String feeTypeName = "";
 				if ("FFSQ-SK".equals(auditProecess.getPaidApplication())) {
 					detail.setFirstStatus("审核通过");
-					feeType = "1";
-					feeTypeName = "首付款";
-				} else if ("FFSQ-WK".equals(auditProecess.getPaidApplication())) {
-					detail.setFinalStatus("审核通过");
-					feeType = "2";
-					feeTypeName = "尾款";
 				} else {
 					detail.setBusinessStatus("审核通过");
 				}
-				if ("FFSQ-SK".equals(auditProecess.getPaidApplication()) || "FFSQ-WK".equals(auditProecess.getPaidApplication())) {
-					List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-						.eq(FeeCenter::getPid, agent.getId())
-						.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-						.eq(FeeCenter::getIsDeleted, 0)
-						.eq(FeeCenter::getFeeType, feeType));
-					if ("FFSQ-SK".equals(agent.getPaidApplication())) {
-						detail.setFirstPaymentPayable(feeCenters.stream().filter(e-> "SFK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
-							.reduce(BigDecimal.ZERO,BigDecimal::add));
-					} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-						detail.setFinalPaymentPayable(feeCenters.stream().filter(e-> "WK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
-							.reduce(BigDecimal.ZERO,BigDecimal::add));
-					}
-					List<FeeCenter> feeCenterList = new ArrayList<>();
-					for (FeeCenter item : feeCenters) {
-						FeeCenter feeCenter = new FeeCenter();
-						BeanUtil.copyProperties(item, feeCenter);
-						feeCenter.setDc("C");
-						feeCenter.setId(null);
-						feeCenter.setCreateTime(new Date());
-						feeCenter.setCreateUser(AuthUtil.getUserId());
-						feeCenter.setCreateUserName(AuthUtil.getUserName());
-						feeCenter.setFeeType(feeType);
-						feeCenter.setAccBillId(null);
-						feeCenter.setAccBillNo(null);
-						feeCenter.setAccDate(null);
-						feeCenter.setAccAmount(new BigDecimal("0"));
-						feeCenter.setAccStatus(0);
-						feeCenter.setAccById(null);
-						feeCenter.setAccByName(null);
-						feeCenter.setUnsettledAmount(item.getAmount());
-						feeCenter.setStlTtlAmount(new BigDecimal("0.00"));
-						feeCenter.setStlOrgAmount(new BigDecimal("0.00"));
-						feeCenter.setStlCurCode(null);
-						feeCenter.setStlAmount(new BigDecimal("0.00"));
-						feeCenter.setStlAmountLoc(new BigDecimal("0.00"));
-						feeCenter.setStlStatus(0);
-						feeCenter.setStlById(null);
-						feeCenter.setStlByName(null);
-						feeCenter.setUnsettledAmount(new BigDecimal("0.00"));
-						feeCenter.setStlTtlAmount(new BigDecimal("0.00"));
-						feeCenterList.add(feeCenter);
-					}
-					if (!feeCenterList.isEmpty()) {
-						feeCenterService.saveBatch(feeCenterList);
-					}
-				}
-
 				int count = agentMapper.updateById(detail);
 				if (count == 0) {
 					throw new SecurityException("修改订单数据失败");
@@ -3471,9 +3410,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 				}
 				if ("FFSQ-SK".equals(auditProecess.getPaidApplication())) {
 					detail.setFirstStatus("录入");
-				} else if ("FFSQ-WK".equals(auditProecess.getPaidApplication())) {
-					detail.setFinalStatus("录入");
-				} else {
+				}else {
 					detail.setBusinessStatus("录入");
 				}
 				int count = agentMapper.updateById(detail);

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

@@ -45,6 +45,8 @@ import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.mapper.FeeCenterMapper;
 import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.vo.FeeCenterVO;
+import org.springblade.los.trade.entity.Agent;
+import org.springblade.los.trade.mapper.AgentMapper;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -84,6 +86,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 
 	private final IPreContainersService preContainersService;
 
+	private final AgentMapper agentMapper;
+
 	@Override
 	public IPage<FeeCenterVO> selectFeeCenterPage(IPage<FeeCenterVO> page, FeeCenterVO feeCenter) {
 		return page.setRecords(baseMapper.selectFeeCenterPage(page, feeCenter));
@@ -1030,7 +1034,58 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		}
 		List<FeeCenter> feeCenterList = new ArrayList<>();
 		if (ObjectUtils.isNotNull(list) && !list.isEmpty()) {
+			Bills bills = null;
+			Agent agent = null;
+			if ("SI".equals(list.get(0).getBusinessType())) {
+				bills = billsMapper.selectById(list.get(0).getPid());
+				if (bills == null) {
+					throw new RuntimeException("未找到主表信息");
+				}
+			} else {
+				agent = agentMapper.selectById(list.get(0).getPid());
+				if (agent == null) {
+					throw new RuntimeException("未找到主表信息");
+				}
+			}
 			for (FeeCenter feeCenter : list) {
+				if ("SI".equals(list.get(0).getBusinessType())) {
+					if (bills != null) {
+						feeCenter.setBillNo(bills.getBillNo());
+						feeCenter.setBillDate(bills.getBillDate());
+						feeCenter.setCorpId(bills.getCorpId());
+						feeCenter.setCorpCnName(bills.getCorpCnName());
+						feeCenter.setBillCorpId(bills.getCorpId());
+						feeCenter.setBillCorpCnName(bills.getCorpCnName());
+						feeCenter.setPolId(bills.getPolId());
+						feeCenter.setPolCode(bills.getPolCode());
+						feeCenter.setPolCnName(bills.getPolCnName());
+						feeCenter.setPolEnName(bills.getPolEnName());
+						feeCenter.setPodId(bills.getPodId());
+						feeCenter.setPodCode(bills.getPodCode());
+						feeCenter.setPodCnName(bills.getPodCnName());
+						feeCenter.setPodEnName(bills.getPodEnName());
+						feeCenter.setEta(bills.getEta());
+						feeCenter.setEtd(bills.getEtd());
+						feeCenter.setMblno(bills.getMblno());
+					}
+				} else {
+					if (agent != null) {
+						feeCenter.setBillNo(agent.getContractNo());
+						feeCenter.setBillDate(agent.getBusinessDate());
+						feeCenter.setCorpId(agent.getDomesticConsigneeId());
+						feeCenter.setCorpCnName(agent.getDomesticConsigneeCname());
+						feeCenter.setBillCorpId(agent.getCorpId());
+						feeCenter.setBillCorpCnName(agent.getCorpName());
+						feeCenter.setPolId(agent.getPolId());
+						feeCenter.setPolCode(agent.getPolCode());
+						feeCenter.setPolCnName(agent.getPolCnName());
+						feeCenter.setPolEnName(agent.getPolEnName());
+						feeCenter.setPodId(agent.getPodId());
+						feeCenter.setPodCode(agent.getPodCode());
+						feeCenter.setPodCnName(agent.getPodCnName());
+						feeCenter.setPodEnName(agent.getPodEnName());
+					}
+				}
 				if (feeCenter.getId() == null) {
 					feeCenter.setCreateTime(new Date());
 					feeCenter.setCreateUser(AuthUtil.getUserId());

+ 7 - 5
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/AgentController.java

@@ -100,6 +100,8 @@ public class AgentController extends BladeController {
 			.like(ObjectUtils.isNotNull(agent.getBillNoJoin()), Agent::getBillNoJoin, agent.getBillNoJoin())
 			.like(ObjectUtils.isNotNull(agent.getOrderNoJoin()), Agent::getOrderNoJoin, agent.getOrderNoJoin())
 			.like(ObjectUtils.isNotNull(agent.getBoxNoJoin()), Agent::getBoxNoJoin, agent.getBoxNoJoin())
+			.eq(ObjectUtils.isNotNull(agent.getDc()), Agent::getDc, agent.getDc())
+			.eq(ObjectUtils.isNotNull(agent.getBusinessType()), Agent::getBusinessType, agent.getBusinessType())
 			.orderByDesc(Agent::getCreateTime);
 		if (ObjectUtils.isNotNull(agent.getBusinessDateList()) && !agent.getBusinessDateList().isEmpty()) {
 			lambdaQueryWrapper.gt(Agent::getBusinessDate, agent.getBusinessDateList().get(0));
@@ -328,24 +330,24 @@ public class AgentController extends BladeController {
 	}
 
 	/**
-	 * 申请付款
+	 * 申请付款请核
 	 */
-	/*@PostMapping("/ApplyForPayment")
+	@PostMapping("/applyForPayment")
 	@RepeatSubmit
 	public R ApplyForPayment(@RequestBody Agent agent) {
 		Agent declare = agentService.ApplyForPayment(agent);
 		return R.data(declare);
-	}*/
+	}
 
 	/**
 	 * 撤销申请付款
 	 */
-	/*@PostMapping("/revokeApplyForPayment")
+	@PostMapping("/revokeApplyForPayment")
 	@RepeatSubmit
 	public R revokeApplyForPayment(@RequestBody Agent agent) {
 		Agent declare = agentService.revokeApplyForPayment(agent);
 		return R.data(declare);
-	}*/
+	}
 
 
 	/**

+ 3 - 3
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/AgentViewController.java

@@ -32,8 +32,6 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.los.excel.BAccElementsExcel;
-import org.springblade.los.excel.BCntrTypesExcel;
 import org.springblade.los.trade.dto.AgentViewExport;
 import org.springblade.los.trade.entity.AgentView;
 import org.springblade.los.trade.service.IAgentViewService;
@@ -95,6 +93,7 @@ public class AgentViewController extends BladeController {
 			.like(ObjectUtils.isNotNull(agentView.getBillNo()), AgentView::getBillNo, agentView.getBillNo())
 			.like(ObjectUtils.isNotNull(agentView.getBusinessNo()), AgentView::getBusinessNo, agentView.getBusinessNo())
 			.like(ObjectUtils.isNotNull(agentView.getOrderNo()), AgentView::getOrderNo, agentView.getOrderNo())
+			.eq(ObjectUtils.isNotNull(agentView.getBusinessType()), AgentView::getBusinessType, agentView.getBusinessType())
 			.like(ObjectUtils.isNotNull(agentView.getBoxNo()), AgentView::getBoxNo, agentView.getBoxNo())
 			.like(ObjectUtils.isNotNull(agentView.getInvoiceNo()), AgentView::getInvoiceNo, agentView.getInvoiceNo());
 		if (ObjectUtils.isNotNull(agentView.getEtdList()) && !agentView.getEtdList().isEmpty()) {
@@ -163,6 +162,7 @@ public class AgentViewController extends BladeController {
 			.like(ObjectUtils.isNotNull(agentView.getContractNo()), AgentView::getContractNo, agentView.getContractNo())
 			.like(ObjectUtils.isNotNull(agentView.getBillNo()), AgentView::getBillNo, agentView.getBillNo())
 			.like(ObjectUtils.isNotNull(agentView.getBusinessNo()), AgentView::getBusinessNo, agentView.getBusinessNo())
+			.eq(ObjectUtils.isNotNull(agentView.getBusinessType()), AgentView::getBusinessType, agentView.getBusinessType())
 			.like(ObjectUtils.isNotNull(agentView.getOrderNo()), AgentView::getOrderNo, agentView.getOrderNo())
 			.like(ObjectUtils.isNotNull(agentView.getBoxNo()), AgentView::getBoxNo, agentView.getBoxNo())
 			.like(ObjectUtils.isNotNull(agentView.getInvoiceNo()), AgentView::getInvoiceNo, agentView.getInvoiceNo());
@@ -179,7 +179,7 @@ public class AgentViewController extends BladeController {
 			lambdaQueryWrapper.lt(AgentView::getActualReachHarbor, agentView.getActualReachHarborList().get(1));
 		}
 		lambdaQueryWrapper.orderByDesc(AgentView::getBusinessDate);
-		List<AgentView> list = agentViewService.list( lambdaQueryWrapper);
+		List<AgentView> list = agentViewService.list(lambdaQueryWrapper);
 		if (!list.isEmpty()) {
 			List<AgentView> pageList = new ArrayList<>();
 			for (AgentView item : list) {

+ 9 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/InOutStorageController.java

@@ -146,6 +146,15 @@ public class InOutStorageController extends BladeController {
 	}
 
 	/**
+	 * 计算仓储单价
+	 */
+	@PostMapping("/calculationWarehouseUnitPrice")
+	@RepeatSubmit
+	public R calculationWarehouseUnitPrice(@Valid @RequestBody InOutStorage inOutStorage){
+		return inOutStorageService.calculationWarehouseUnitPrice(inOutStorage);
+	}
+
+	/**
 	 * 生成出库
 	 */
 	@PostMapping("/generateOutbound")

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IInOutStorageService.java

@@ -46,4 +46,6 @@ public interface IInOutStorageService extends IService<InOutStorage> {
 	R generateOutbound(InOutStorage inOutStorage);
 
 	R submitList(List<InOutStorage> inOutStorage);
+
+	R calculationWarehouseUnitPrice(InOutStorage inOutStorage);
 }

+ 55 - 142
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -182,7 +182,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					.eq(FinStlBills::getIsDeleted, 0)
 					.in(FinStlBills::getId, ids));
 				if (!finStlBillsList.isEmpty()) {
-					List<FinStlBills> recordListD = finStlBillsList.stream().filter(e -> "D".equals(e.getDc()) && "1".equals(e.getWhetherManual())).collect(Collectors.toList());
+					List<FinStlBills> recordListD = finStlBillsList.stream().filter(e -> "D".equals(e.getDc()) && "0".equals(e.getWhetherManual())).collect(Collectors.toList());
 					if (!recordListD.isEmpty()) {
 						List<Record> recordList = new ArrayList<>();
 						for (FinStlBills item : recordListD) {
@@ -202,7 +202,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 						}
 						detail.setRecordListD(recordList);
 					}
-					List<FinStlBills> recordListC = finStlBillsList.stream().filter(e -> "C".equals(e.getDc()) && "1".equals(e.getWhetherManual())).collect(Collectors.toList());
+					List<FinStlBills> recordListC = finStlBillsList.stream().filter(e -> "C".equals(e.getDc()) && "0".equals(e.getWhetherManual())).collect(Collectors.toList());
 					if (!recordListC.isEmpty()) {
 						List<Record> recordList = new ArrayList<>();
 						for (FinStlBills item : recordListC) {
@@ -430,9 +430,11 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					item.setPodCode(agent.getPodCode());
 					item.setPodCnName(agent.getPodCnName());
 					item.setPodEnName(agent.getPodEnName());
+					item.setPid(agent.getId());
+				} else {
+					item.setStlPid(agent.getId());
 				}
 				if (item.getId() == null) {
-					item.setPid(agent.getId());
 					item.setCreateTime(new Date());
 					item.setCreateUser(AuthUtil.getUserId());
 					item.setCreateUserName(AuthUtil.getUserName());
@@ -466,10 +468,11 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					item.setPodId(agent.getPodId());
 					item.setPodCode(agent.getPodCode());
 					item.setPodCnName(agent.getPodCnName());
-					item.setPodEnName(agent.getPodEnName());
+					item.setPid(agent.getId());
+				} else {
+					item.setStlPid(agent.getId());
 				}
 				if (item.getId() == null) {
-					item.setPid(agent.getId());
 					item.setCreateTime(new Date());
 					item.setCreateUser(AuthUtil.getUserId());
 					item.setCreateUserName(AuthUtil.getUserName());
@@ -1301,26 +1304,12 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			throw new RuntimeException("缺少必要参数");
 		}
 		Agent declare = baseMapper.selectById(agent.getId());
-		Integer actId = null;
-		String processType = "";
-		String checkType = "";
-		String fidStatus = "";
-		if ("FFSQ-SK".equals(agent.getPaidApplication())) {
-			actId = 1123;
-			processType = "贸易代理首款付费申请";
-			checkType = "FFSQ-SK";
-			fidStatus = "first_status";
-			declare.setApplyForPayment("1");
-			declare.setOrderStatus("已申请首付款");
-
-		} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-			actId = 1124;
-			processType = "贸易代理尾款付费申请";
-			checkType = "FFSQ-WK";
-			fidStatus = "final_status";
-			declare.setApplyForPaymentBalance("1");
-			declare.setOrderStatus("已申请尾款");
-		}
+		Integer actId = 1123;
+		String processType = "贸易代理首款付费申请";
+		String checkType = "FFSQ-SK";
+		String fidStatus = "first_status";
+		declare.setApplyForPayment("1");
+		declare.setOrderStatus("已申请首付款");
 		//获取审批级次
 		List<LosAuditPathsLevels> auditPathsLevels;
 		// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
@@ -1378,67 +1367,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					throw new SecurityException("发送消息失败");
 				}
 			}
-
-			String feeType = "";
-			if ("FFSQ-SK".equals(agent.getPaidApplication())) {
-				declare.setFirstStatus("审核通过");
-				feeType = "1";
-			} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-				declare.setFinalStatus("审核通过");
-				feeType = "2";
-			}
-			List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-				.eq(FeeCenter::getPid, agent.getId())
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0)
-				.eq(FeeCenter::getDc, "D")
-				.eq(FeeCenter::getFeeType, feeType));
-			if ("FFSQ-SK".equals(agent.getPaidApplication())) {
-				declare.setFirstPaymentPayable(feeCenters.stream().filter(e -> "SFK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
-					.reduce(BigDecimal.ZERO, BigDecimal::add));
-			} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-				declare.setFinalPaymentPayable(feeCenters.stream().filter(e -> "WK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
-					.reduce(BigDecimal.ZERO, BigDecimal::add));
-			}
-			List<FeeCenter> feeCenterList = new ArrayList<>();
-			for (FeeCenter item : feeCenters) {
-				FeeCenter feeCenter = new FeeCenter();
-				BeanUtil.copyProperties(item, feeCenter);
-				feeCenter.setDc("C");
-				feeCenter.setId(null);
-				feeCenter.setCreateTime(new Date());
-				feeCenter.setCreateUser(AuthUtil.getUserId());
-				feeCenter.setCreateUserName(AuthUtil.getUserName());
-				feeCenter.setFeeType(feeType);
-				feeCenter.setAccBillId(null);
-				feeCenter.setAccBillNo(null);
-				feeCenter.setAccDate(null);
-				feeCenter.setAccAmount(new BigDecimal("0"));
-				feeCenter.setAccStatus(0);
-				feeCenter.setAccById(null);
-				feeCenter.setAccByName(null);
-				feeCenter.setUnsettledAmount(item.getAmount());
-				feeCenter.setStlTtlAmount(new BigDecimal("0.00"));
-				feeCenter.setStlOrgAmount(new BigDecimal("0.00"));
-				feeCenter.setStlCurCode(null);
-				feeCenter.setStlAmount(new BigDecimal("0.00"));
-				feeCenter.setStlAmountLoc(new BigDecimal("0.00"));
-				feeCenter.setStlStatus(0);
-				feeCenter.setStlById(null);
-				feeCenter.setStlByName(null);
-				feeCenter.setUnsettledAmount(new BigDecimal("0.00"));
-				feeCenter.setStlTtlAmount(new BigDecimal("0.00"));
-				feeCenterList.add(feeCenter);
-			}
-			if (!feeCenterList.isEmpty()) {
-				feeCenterService.saveBatch(feeCenterList);
-			}
+			declare.setFirstStatus("审核通过");
 		} else {
-			if ("FFSQ-SK".equals(agent.getPaidApplication())) {
-				declare.setFirstStatus("审核提交");
-			} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-				declare.setFinalStatus("审核提交");
-			}
+			declare.setFirstStatus("审核提交");
 			//审批数据
 			LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
 			auditProecessDTO.setTimes(1);
@@ -1509,9 +1440,16 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		if (businessType == null) {
 			throw new RuntimeException("未找到可用业务类型");
 		}
-
+		List<FeeCenter> feeCentersList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getStlPid, agent.getId())
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0));
+		if (feeCentersList.isEmpty()) {
+			throw new RuntimeException("未找到费用明细");
+		}
+		List<Long> pids = feeCentersList.stream().map(FeeCenter::getPid).distinct().collect(Collectors.toList());
 		List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-			.eq(FeeCenter::getPid, agent.getId())
+			.in(FeeCenter::getPid, pids)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0));
 		List<FeeCenter> feeCenterListD = feeCenters.stream().filter(e -> "D".equals(e.getDc())).collect(Collectors.toList());
@@ -2296,47 +2234,16 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			throw new RuntimeException("缺少必要参数");
 		}
 		Agent declare = baseMapper.selectById(agent.getId());
-		if ("FFSQ-SK".equals(agent.getPaidApplication())) {
-			if ("审核通过".equals(declare.getFirstStatus())) {
-				throw new SecurityException("审核已通过,撤销失败");
-			}
-			declare.setFirstStatus("录入");
-			declare.setOrderStatus("申请首付款撤销");
-		} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-			if ("审核通过".equals(declare.getFinalStatus())) {
-				throw new SecurityException("审核已通过,撤销失败");
-			}
-			declare.setFinalStatus("录入");
-			declare.setOrderStatus("申请尾款撤销");
+		if ("审核通过".equals(declare.getFirstStatus())) {
+			throw new SecurityException("审核已通过,撤销失败");
 		}
+		declare.setFirstStatus("录入");
 		String status = sysClient.getParamServiceByDept("whether.apply.for.payment", AuthUtil.getTenantId(), AuthUtil.getDeptId());
 		if (ObjectUtils.isNotNull(status) && !"0".equals(status)) {
 			R financeProcess = auditProecessService.deteleByBillIdAndType(agent.getId(), agent.getPaidApplication());
 			if (!financeProcess.isSuccess()) {
 				throw new SecurityException("操作失败,请联系管理员");
 			}
-			if ("FFSQ-SK".equals(agent.getPaidApplication())) {
-				declare.setApplyForPayment("0");
-			} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-				declare.setApplyForPaymentBalance("0");
-			}
-		} else {
-			String feeType = "";
-			if ("FFSQ-SK".equals(agent.getPaidApplication())) {
-				feeType = "1";
-			} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-				feeType = "2";
-			}
-			List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-				.eq(FeeCenter::getPid, agent.getId())
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0)
-				.eq(FeeCenter::getDc, "C")
-				.eq(FeeCenter::getFeeType, feeType));
-			if (!feeCenters.isEmpty()) {
-				List<Long> ids = feeCenters.stream().map(FeeCenter::getId).collect(Collectors.toList());
-				feeCenterService.removeByIds(ids);
-			}
 		}
 		baseMapper.updateById(declare);
 		return declare;
@@ -2471,34 +2378,35 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		if (agent.getId() == null) {
 			throw new RuntimeException("缺少必要参数");
 		}
-		String feeType = "";
-		String feeTypeName = "";
-		if ("SK".equals(agent.getPaidApplication())) {
-			feeType = "1";
-			feeTypeName = "首付款";
-		} else if ("WK".equals(agent.getPaidApplication())) {
-			feeType = "2";
-			feeTypeName = "尾款";
-		}
 		List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-			.eq(FeeCenter::getPid, agent.getId())
+			.eq(FeeCenter::getStlPid, agent.getId())
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-			.eq(FeeCenter::getIsDeleted, 0)
-			.eq(FeeCenter::getFeeType, feeType));
-		List<FeeCenter> feeCenterListD = feeCenters.stream().filter(e -> "D".equals(e.getDc())).collect(Collectors.toList());
-		if (feeCenterListD.isEmpty()) {
-			throw new RuntimeException("未找到" + feeTypeName + "应收费用明细");
-		}
-		BigDecimal amountD = feeCenterListD.stream().map(FeeCenter::getStlTtlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-		BigDecimal amount = feeCenterListD.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-		if (amount.compareTo(amountD) != 0) {
-			return R.data(feeTypeName + "实收未全部到账是否继续确认付款");
+			.eq(FeeCenter::getIsDeleted, 0));
+		if (!feeCenters.isEmpty()) {
+			List<Long> pids = feeCenters.stream().map(FeeCenter::getPid).distinct().collect(Collectors.toList());
+			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.in(FeeCenter::getPid, pids)
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0));
+			List<FeeCenter> feeCenterListD = feeCenterList.stream().filter(e -> "D".equals(e.getDc())).collect(Collectors.toList());
+			if (feeCenterListD.isEmpty()) {
+				throw new RuntimeException("未找到应收费用明细");
+			}
+			BigDecimal amountD = feeCenterListD.stream().map(FeeCenter::getStlTtlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal amount = feeCenterListD.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			if (amount.compareTo(amountD) != 0) {
+				return R.data("实收未全部到账是否继续确认付款");
+			} else {
+				return R.data("是否确认付款");
+			}
 		} else {
-			return R.data("是否确认付款");
+			throw new RuntimeException("未找到费用明细");
 		}
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public Agent generatePayment(Agent agent) {
 		if (agent.getId() == null) {
 			throw new RuntimeException("缺少必要参数");
@@ -2590,6 +2498,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R applyForPaymentList(String ids, String dc) {
 		List<Agent> agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
 			.eq(Agent::getTenantId, AuthUtil.getTenantId())
@@ -2611,6 +2521,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R generate(List<FeeCenter> feeCenterList) {
 		Long deptId = 0L;
 		String deptName = "";
@@ -2638,6 +2550,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		stlAgent.setBusinessType("MYDL-STL");
 		stlAgent.setDc(feeCenterList.get(0).getDc());
 		stlAgent.setBusinessDate(date);
+		stlAgent.setGoodsValue(feeCenterList.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
 		BusinessBillNo businessBillNo = new BusinessBillNo();
 		businessBillNo.setBusinessTypeId(businessType.getId());
 		businessBillNo.setCode("MYDL-STL");

+ 129 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java

@@ -127,7 +127,7 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 					.eq(FeeCenter::getIsDeleted, 0)
 					.eq(FeeCenter::getDc, "C")
 					.apply("find_in_set(fee_code,'SXF,YDF')")
-					.apply("find_in_set(" + bills.getMblno() + ",'mblno')"));
+					.apply("find_in_set(" + bills.getMblno() + ",mblno)"));
 				if (feeCenterTradeList.isEmpty()) {
 					throw new RuntimeException("未查到提单号:" + bills.getMblno() + "对应贸易代理费用信息");
 				}
@@ -420,4 +420,132 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 		return R.data(inOutStorageList);
 	}
 
+	@Override
+	public R calculationWarehouseUnitPrice(InOutStorage inOutStorage) {
+		String text = "";
+		if ("RK".equals(inOutStorage.getBillType())) {
+			Bills bills = billsMapper.selectById(inOutStorage.getPid());
+			if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
+				List<FeeCenter> feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getPid, bills.getId())
+					.eq(FeeCenter::getDc, "C")
+					.apply("find_in_set(fee_code,'ZZS,GS')"));
+				if (feeCenterList.stream().noneMatch(e -> "GS".equals(e.getFeeCode()))) {
+					throw new RuntimeException("请先维护关税费用");
+				}
+				BigDecimal amountGS = feeCenterList.stream().filter(e -> "GS".equals(e.getFeeCode())).map(FeeCenter::getAmount)
+					.reduce(BigDecimal.ZERO, BigDecimal::add);
+				text = text + "关税:" + amountGS + ";";
+				if (feeCenterList.stream().noneMatch(e -> "ZZS".equals(e.getFeeCode()))) {
+					throw new RuntimeException("请先维护增值税费用");
+				}
+				BigDecimal amountZZS = feeCenterList.stream().filter(e -> "ZZS".equals(e.getFeeCode())).map(FeeCenter::getAmount)
+					.reduce(BigDecimal.ZERO, BigDecimal::add);
+				text = text + "增值税:" + amountZZS + ";";
+				List<FeeCenter> feeCenterTradeList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.eq(FeeCenter::getDc, "C")
+					.apply("find_in_set(fee_code,'SXF,YDF')")
+					.apply("find_in_set(" + bills.getMblno() + ",mblno)"));
+				if (feeCenterTradeList.isEmpty()) {
+					throw new RuntimeException("未查到提单号:" + bills.getMblno() + "对应贸易代理费用信息");
+				}
+				List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+					.eq(AgentItems::getPid, feeCenterTradeList.get(0).getPid())
+					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+					.eq(AgentItems::getIsDeleted, 0));
+				if (agentItemsList.isEmpty()) {
+					throw new RuntimeException("未查到提单号:" + bills.getMblno() + "对应贸易代理明细信息");
+				}
+				if (feeCenterTradeList.stream().noneMatch(e -> "SXF".equals(e.getFeeCode()) && "1".equals(e.getFeeType()))) {
+					throw new RuntimeException("请先维护首款手续费用");
+				}
+				BigDecimal amountSkSxf = feeCenterTradeList.stream().filter(e -> "SXF".equals(e.getFeeCode()) && "1".equals(e.getFeeType()))
+					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				text = text + "首款手续费:" + amountSkSxf + ";";
+				if (feeCenterTradeList.stream().noneMatch(e -> "SXF".equals(e.getFeeCode()) && "2".equals(e.getFeeType()))) {
+					throw new RuntimeException("请先维护尾款手续费用");
+				}
+				if (feeCenterTradeList.stream().noneMatch(e -> "YDF".equals(e.getFeeCode()) && "1".equals(e.getFeeType()))) {
+					throw new RuntimeException("请先维护首款邮电费用");
+				}
+				BigDecimal amountSkYdf = feeCenterTradeList.stream().filter(e -> "YDF".equals(e.getFeeCode()) && "1".equals(e.getFeeType()))
+					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				text = text + "首款邮电费:" + amountSkYdf + ";";
+				if (feeCenterTradeList.stream().noneMatch(e -> "YDF".equals(e.getFeeCode()) && "2".equals(e.getFeeType()))) {
+					throw new RuntimeException("请先维护尾款邮电费用");
+				}
+				long count = agentItemsList.stream().map(AgentItems::getBillNo).distinct().count();
+				text = text + "提单数量:" + count + ";<br>";
+				//首款手续费平摊金额 = 首款手续费 ÷ 总提单数量
+				BigDecimal singleSkSxf = amountSkSxf.divide(new BigDecimal(count), 2, RoundingMode.HALF_UP);
+				text = text + "首款手续费平摊金额(首款手续费 ÷ 总提单数量):" + singleSkSxf + ";<br>";
+				//首款邮电费平摊金额 = 首款邮电费 ÷ 总提单数量
+				BigDecimal singleSkYdf = amountSkYdf.divide(new BigDecimal(count), 2, RoundingMode.HALF_UP);
+				text = text + "首款邮电费平摊金额(首款邮电费 ÷ 总提单数量):" + singleSkYdf + ";<br>";
+				//单个提单号尾款手续费金额 = 尾款手续费 ÷ 提单数量
+				BigDecimal singleWkSxf = new BigDecimal("0.00");
+				//单个提单号尾款邮电费金额 = 尾款邮电费 ÷ 提单数量
+				BigDecimal singleWkYdf = new BigDecimal("0.00");
+				for (FeeCenter item : feeCenterTradeList) {
+					if ("SXF".equals(item.getFeeCode()) && "2".equals(item.getFeeType())) {
+						String[] arr = item.getMblno().split(",");
+						singleWkSxf = singleWkSxf.add(item.getAmount().divide(new BigDecimal(arr.length), 2, RoundingMode.HALF_UP));
+						text = text + "单个提单号尾款手续费金额(尾款手续费:" + item.getAmount() + " ÷ 尾款提单数量:" + arr.length + "):" + singleWkSxf + ";<br>";
+					}
+					if ("YDF".equals(item.getFeeCode()) && "2".equals(item.getFeeType())) {
+						String[] arr = item.getMblno().split(",");
+						singleWkYdf = singleWkYdf.add(item.getAmount().divide(new BigDecimal(arr.length), 2, RoundingMode.HALF_UP));
+						text = text + "单个提单号尾款手续费金额(尾款手续费:" + item.getAmount() + " ÷ 尾款提单数量:" + arr.length + "):" + singleWkYdf + ";<br>";
+					}
+				}
+				//总的分摊金额 = 关税 + 增值税 + 单个提单号尾款手续费金额 + 单个提单号尾款邮电费金额+ 首款单个提单号尾款手续费金额 + 首款单个提单号尾款邮电费金额
+				BigDecimal sharedAmountSum = singleSkSxf.add(singleSkYdf).add(singleWkSxf).add(singleWkYdf).add(amountGS).add(amountZZS);
+				text = text + "总的分摊金额(关税 + 增值税 + 单个提单号手续费金额 + 单个提单号邮电费金额+ 首款单个提单号尾款手续费金额 + 首款单个提单号尾款邮电费金额):" + sharedAmountSum + ";<br>";
+				//箱的货值
+				BigDecimal amount = inOutStorage.getQuantity().multiply(inOutStorage.getPrice());
+				text = text + "箱的货值:" + amount + ";";
+				List<PreContainers> preContainersList = preContainersMapper.selectList(new LambdaQueryWrapper<PreContainers>()
+					.eq(PreContainers::getIsDeleted, 0)
+					.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+					.eq(PreContainers::getPid, bills.getId()));
+				//提单号的总货值
+				BigDecimal amountSum = preContainersList.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getNumber().multiply(y.getPrice())), BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+				text = text + "提单号的总货值:" + amountSum + ";<br>";
+				LocalDate localDate = bills.getEta().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+				int year = localDate.getYear();
+				int month = localDate.getMonthValue();
+				int day = localDate.getDayOfMonth();
+				LambdaQueryWrapper<BCurExrate> lambdaQueryWrapper = new LambdaQueryWrapper<BCurExrate>()
+					.eq(BCurExrate::getCode, "USD")
+					.eq(BCurExrate::getTenantId, AuthUtil.getTenantId())
+					.eq(BCurExrate::getIsDeleted, 0)
+					.eq(BCurExrate::getExrateYear, year)
+					.eq(BCurExrate::getExrateMonth, month)
+					.eq(BCurExrate::getExrateDay, day)
+					.eq(BCurExrate::getType, "日汇率");
+				BCurExrate bCurExrate = curExrateMapper.selectOne(lambdaQueryWrapper);
+				if (bCurExrate == null) {
+					throw new RuntimeException("未找到" + year + "年-" + month + "月-" + day + "日实付汇率");
+				}
+				text = text + "汇率:" + bCurExrate.getExratePayment() + ";<br>";
+				//分摊比例 = 箱的货值 ÷ 提单号的总货值 * 汇率
+				BigDecimal sharingRatio = amount.divide(amountSum, 2, RoundingMode.HALF_UP).multiply(bCurExrate.getExratePayment());
+				text = text + "分摊比例(箱的货值 ÷ 提单号的总货值 * 汇率):" + sharingRatio + ";<br>";
+				//本次分摊金额 = 总的分摊金额 * 分摊比例 ÷ 件数
+				BigDecimal sharedAmount = sharedAmountSum.multiply(sharingRatio).divide(inOutStorage.getQuantity(), 2, RoundingMode.HALF_UP);
+				text = text + "本次分摊金额(总的分摊金额 * 分摊比例 ÷ 件数:" + inOutStorage.getQuantity() + "):" + sharedAmount + ";<br>";
+				//仓储单价 = 单价 + 本次分摊金额
+				inOutStorage.setWarehouseUnitPrice(inOutStorage.getPrice().add(sharedAmount));
+				text = text + "仓储单价(单价 + 本次分摊金额):" + inOutStorage.getWarehouseUnitPrice() + ";";
+			}
+			return R.data(text);
+		} else {
+			return null;
+		}
+	}
+
 }