Browse Source

2024年10月26日17:29:26

纪新园 1 year ago
parent
commit
d29544f6f0
13 changed files with 461 additions and 91 deletions
  1. 5 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/check/entity/LosAuditProecess.java
  2. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java
  3. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/cur/service/impl/BCurrencyServiceImpl.java
  4. 6 2
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/controller/ReportsController.java
  5. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/TradeBillsController.java
  6. 57 49
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  7. 11 4
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java
  8. 8 1
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java
  9. 41 11
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  10. 5 2
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FinAccBillsServiceImpl.java
  11. 8 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java
  12. 9 1
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AdvanceChargeServiceImpl.java
  13. 307 19
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

+ 5 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/check/entity/LosAuditProecess.java

@@ -318,6 +318,11 @@ public class LosAuditProecess implements Serializable {
 	 */
 	@ApiModelProperty(value = "付费申请类型  SK  WK")
 	private String paidApplication;
+	/**
+	 * 参考号
+	 */
+	@ApiModelProperty(value = "参考号")
+	private String referenceNumber;
 
 
 }

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java

@@ -34,6 +34,8 @@ public class MagicValues {
 	public static final String ORDER_ALLOCATION = "配单";
 
 	public static final String THE_FIRST_ONE = "货款";
+
+	public static final String THE_FIRST_ONE_CORP = "货款-客户";
 	public static final String BALANCE_PAYMENT = "尾款";
 	public static final String MASTER_BILLS = "MASTER 提单";
 	public static final String BILLS_DETAIL = "提单详情";

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/basic/cur/service/impl/BCurrencyServiceImpl.java

@@ -555,7 +555,7 @@ public class BCurrencyServiceImpl extends ServiceImpl<CurrencyMapper, BCurrency>
 		calendar.setTime(bCurrency.getDate());
 		int year = calendar.get(Calendar.YEAR); // 获取年份
 		int month = calendar.get(Calendar.MONTH) + 1; // 获取月份(注意需加上1,因为月份从0开始计数)
-		int day = calendar.get(Calendar.DATE) + 1;
+		int day = calendar.get(Calendar.DATE);
 		List<BCurrency> bCurrencyList = baseMapper.selectList(new LambdaQueryWrapper<BCurrency>()
 			.eq(BCurrency::getTenantId, AuthUtil.getTenantId())
 			.eq(BCurrency::getIsDeleted, 0)

+ 6 - 2
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/controller/ReportsController.java

@@ -35,6 +35,7 @@ import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.basic.reports.entity.Reports;
 import org.springblade.los.basic.reports.service.IReportsService;
 import org.springblade.los.basic.reports.vo.ReportsVO;
+import org.springblade.los.business.sea.entity.Bills;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -77,7 +78,7 @@ public class ReportsController extends BladeController {
 		lambdaQueryWrapper.eq(Reports::getTenantId, AuthUtil.getTenantId())
 			.eq(Reports::getIsDeleted, 0)
 			.eq(Reports::getBranchId, deptUtils.getDeptPid())
-			.like(ObjectUtils.isNotNull(reports.getCnName()),Reports::getCnName, reports.getCnName())
+			.like(ObjectUtils.isNotNull(reports.getCnName()), Reports::getCnName, reports.getCnName())
 			.apply(ObjectUtils.isNotNull(reports.getCode()), "find_in_set(code,'" + reports.getCode() + "')")
 			.apply(ObjectUtils.isNotNull(reports.getGroupCode()), "find_in_set(group_code,'" + reports.getGroupCode() + "')")
 			.eq(ObjectUtils.isNotNull(reports.getBusinessType()), Reports::getBusinessType, reports.getBusinessType());
@@ -86,6 +87,9 @@ public class ReportsController extends BladeController {
 		} else {
 			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(reports.getClassifyCode()), Reports::getClassifyCode, reports.getClassifyCode());
 		}
+		if (!AuthUtil.getUserRole().contains("admin")) {
+			lambdaQueryWrapper.apply("find_in_set('"+AuthUtil.getUserId()+"',authorized_users_id)");
+		}
 		IPage<Reports> pages = reportsService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
@@ -158,7 +162,7 @@ public class ReportsController extends BladeController {
 						   @RequestParam(value = "curCode", required = false) String curCode,
 						   @RequestParam(value = "type", required = false) String type
 	) {
-		return reportsService.getReportData(billId, reportCode, groupCode, corpIds, itemIds, type,curCode);
+		return reportsService.getReportData(billId, reportCode, groupCode, corpIds, itemIds, type, curCode);
 	}
 
 

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

@@ -127,7 +127,7 @@ public class TradeBillsController extends BladeController {
 			if (AuthUtil.getUserRole().contains("业务员") || AuthUtil.getUserRole().contains("操作员")) {
 				lambdaQueryWrapper.and(i -> i.eq(Bills::getSrcId, AuthUtil.getUserId()).or()
 					.eq(Bills::getOperatorId, AuthUtil.getUserId()));
-				lambdaQueryWrapper.eq(Bills::getSrcId, AuthUtil.getUserId());
+//				lambdaQueryWrapper.eq(Bills::getSrcId, AuthUtil.getUserId());
 			} else {
 				lambdaQueryWrapper.eq(Bills::getCreateUser, AuthUtil.getUserId());
 			}

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

@@ -482,7 +482,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setBillCorpId(bills.getCorpId());
 				item.setBillCorpCnName(bills.getCorpCnName());
 				item.setBillCorpEnName(bills.getCorpEnName());
-				if (corps != null){
+				if (corps != null) {
 					item.setBillShortName(corps.getShortName());
 				}
 				item.setLineId(bills.getLineId());
@@ -537,7 +537,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setBillCorpId(bills.getCorpId());
 				item.setBillCorpCnName(bills.getCorpCnName());
 				item.setBillCorpEnName(bills.getCorpEnName());
-				if (corps != null){
+				if (corps != null) {
 					item.setBillShortName(corps.getShortName());
 				}
 				item.setLineId(bills.getLineId());
@@ -1256,6 +1256,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			auditProecessDTO.setBillTime(declare.getCreateTime());
 			auditProecessDTO.setTenantId(AuthUtil.getTenantId());
 			auditProecessDTO.setCorpId(declare.getCorpId());
+			auditProecessDTO.setCorpsName(declare.getCorpCnName());
+			auditProecessDTO.setReferenceNumber(declare.getMblno());
 			Dept dept = deptUtils.getDept(declare.getCreateDept());
 			if (dept != null) {
 				auditProecessDTO.setSalesCompanyId(dept.getId());
@@ -2514,6 +2516,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		BigDecimal teu = new BigDecimal("0.00");
 		StringBuilder boxTypeSum = new StringBuilder();
 		if (ObjectUtils.isNotNull(bills.getPreContainersList())) {
+			bills.setCommodityDescr(bills.getPreContainersList().stream().map(PreContainers::getGoodsName)
+				.distinct().filter(Objects::nonNull).collect(Collectors.joining(",")));
 			for (PreContainers item : bills.getPreContainersList()) {
 				if (item.getId() == null) {
 					item.setPid(bills.getId());
@@ -2789,6 +2793,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getAccStatus, 1)
 			.eq(FeeCenter::getPid, id);
 		if ("1".equals(type)) {
 			lambdaQueryWrapper.eq(FeeCenter::getFeeCode, "ZZS");
@@ -2821,56 +2826,59 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		feeCenterService.updateBatchById(feeCenterList);
 		if (feeCenterList.isEmpty()) {
 			if ("1".equals(type)) {
-				throw new RuntimeException("未找到增值税费用信息");
+				throw new RuntimeException("未找到已生成账单增值税费用信息");
 			} else {
-				throw new RuntimeException("未找到关税费用信息");
+				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(feeCenterList.get(0).getCorpId());
-		feeCenter.setCorpCnName(feeCenterList.get(0).getCorpCnName());
-		feeCenter.setBillCorpId(feeCenterList.get(0).getBillCorpId());
-		feeCenter.setBillCorpCnName(feeCenterList.get(0).getBillCorpCnName());
-		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);
+		List<FeeCenter> feeCenterListMYDL = new ArrayList<>();
+		for (FeeCenter item : feeCenterList) {
+			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(item.getCorpId());
+			feeCenter.setCorpCnName(item.getCorpCnName());
+			feeCenter.setBillCorpId(item.getBillCorpId());
+			feeCenter.setBillCorpCnName(item.getBillCorpCnName());
+			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.setFeeId(item.getFeeId());
+			feeCenter.setFeeCode(item.getFeeCode());
+			feeCenter.setFeeCnName(item.getFeeCnName());
+			feeCenter.setFeeEnName(item.getFeeEnName());
+			feeCenter.setDc(item.getDc());
+			feeCenter.setCurCode(item.getCurCode());
+			feeCenter.setSort(1);
+			feeCenter.setElementsId(item.getElementsId());
+			feeCenter.setElementsCode(item.getElementsCode());
+			feeCenter.setElementsCnName(item.getElementsCnName());
+			feeCenter.setElementsEnName(item.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);
+			feeCenterListMYDL.add(feeCenter);
+		}
+		feeCenterService.submitList(feeCenterListMYDL);
 		return R.success("操作成功");
 	}
 

+ 11 - 4
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java

@@ -20,7 +20,6 @@ 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.service.impl.ServiceImpl;
-import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -164,6 +163,10 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 		bills.setUpdateTime(new Date());
 		bills.setUpdateUserName(AuthUtil.getUserName());
 		bills.setTeu(teu);
+		if ("263057".equals(AuthUtil.getTenantId())) {
+			bills.setCommodityDescr(preContainersList.stream().map(PreContainers::getGoodsName)
+				.distinct().filter(Objects::nonNull).collect(Collectors.joining(",")));
+		}
 		billsMapper.updateById(bills);
 		this.saveOrUpdate(preContainers);
 		List<Containers> removeContainersList = containersService.list(new LambdaQueryWrapper<Containers>()
@@ -294,6 +297,10 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 				bills.setQuantity(quantitySum);
 			}
 			bills.setTeu(teu.intValue());
+			if ("263057".equals(AuthUtil.getTenantId())) {
+				bills.setCommodityDescr(preContainersList.stream().map(PreContainers::getGoodsName)
+					.distinct().filter(Objects::nonNull).collect(Collectors.joining(",")));
+			}
 			billsMapper.updateById(bills);
 		}
 		List<Containers> containersList = new ArrayList<>();
@@ -333,8 +340,8 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 				containersBillsService.removeByPid(ids);
 			}
 			String ediCode = "";
-			if (!bCntrTypesList.isEmpty()){
-				BCntrTypes bCntrTypes = bCntrTypesList.stream().filter(e-> e.getCnName().equals(preContainers.getCntrTypeCode()))
+			if (!bCntrTypesList.isEmpty()) {
+				BCntrTypes bCntrTypes = bCntrTypesList.stream().filter(e -> e.getCnName().equals(preContainers.getCntrTypeCode()))
 					.findFirst().orElse(null);
 				if (bCntrTypes != null && bills != null) {
 					ediCode = RegularUtils.getEdiCode(bills.getCyCode(), bCntrTypes.getExtendedData());
@@ -424,7 +431,7 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 		dispatchVehicles.setBoxNo(preContainers.getBoxNo());
 		dispatchVehicles.setPrice(preContainers.getPrice());
 		dispatchVehicles.setNumber(preContainers.getNumber());
-		if (new BigDecimal("0.00").compareTo(preContainers.getGrossWeight()) == 0){
+		if (new BigDecimal("0.00").compareTo(preContainers.getGrossWeight()) == 0) {
 			preContainers.setGrossWeight(preContainers.getNetWeight());
 		}
 		dispatchVehicles.setGrossWeight(preContainers.getGrossWeight());

+ 8 - 1
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -207,6 +207,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 			auditProecess.setGrossProfit(auditProecessDTO.getGrossProfit());
 			auditProecess.setGrossProfitUsd(auditProecessDTO.getGrossProfitUsd());
 			auditProecess.setGrossProfitLoc(auditProecessDTO.getGrossProfitLoc());
+			auditProecess.setReferenceNumber(auditProecessDTO.getReferenceNumber());
 			//除了第一级是待审,其他都N
 			if (e.getLevelId() == 1) {
 				SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
@@ -216,6 +217,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					if (corpMessage != null) {
 						corpName = corpMessage.getCorpName();
 					}
+				}else{
+					corpName = auditProecessDTO.getCorpsName();
 				}
 				String billsDate = null;
 				//开启之后, 给第一级推送消息
@@ -250,9 +253,13 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					message.setMessageBody("您有新的贸易代理货款付费待确认,业务单号:" + auditProecessDTO.getBillNo()+",请审核。"
 						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
 					);
+				}else if ("付费申请".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的付费申请待确认,业务单号:" + auditProecessDTO.getBillNo()+",请审核。"
+						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
+					);
 				}
 
-				message.setUrl("/approveDataL/index");
+				message.setUrl("/approveDataH/index");
 				sendMsgToGroup(message, e.getAuditUserId());
 				auditProecess.setAuditStatus("S");
 			} else {

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

@@ -20,7 +20,6 @@ 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.service.impl.ServiceImpl;
-import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -111,12 +110,18 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				deptName = String.join(",", res.getData());
 			}
 		}
-		if (ObjectUtils.isNotNull(feeCenter.getBillCorpId())){
+		if (ObjectUtils.isNotNull(feeCenter.getBillCorpId())) {
 			BCorps corps = bCorpsService.getById(feeCenter.getBillCorpId());
-			if (corps != null){
+			if (corps != null) {
 				feeCenter.setBillShortName(corps.getShortName());
 			}
 		}
+		if (ObjectUtils.isNotNull(feeCenter.getCorpId())) {
+			BCorps corps = bCorpsService.getById(feeCenter.getCorpId());
+			if (corps != null) {
+				feeCenter.setShortName(corps.getShortName());
+			}
+		}
 		if (feeCenter.getId() == null) {
 			feeCenter.setCreateTime(new Date());
 			feeCenter.setCreateUser(AuthUtil.getUserId());
@@ -539,13 +544,19 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		}
 		List<FeeCenter> feeCenterList = new ArrayList<>();
 		if (ObjectUtils.isNotNull(list) && !list.isEmpty()) {
-			BCorps corps = null;
-			if (ObjectUtils.isNotNull(list.get(0).getBillCorpId())){
-				 corps = bCorpsService.getById(list.get(0).getBillCorpId());
-			}
+			List<BCorps> bCorpsList = bCorpsService.list(new LambdaQueryWrapper<BCorps>()
+				.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+				.eq(BCorps::getIsDeleted, 0));
 			for (FeeCenter feeCenter : list) {
-				if (corps != null){
-					feeCenter.setBillShortName(corps.getShortName());
+				if (!bCorpsList.isEmpty()){
+					BCorps bCorps = bCorpsList.stream().filter(e-> e.getCorpId().equals(feeCenter.getCorpId())).findFirst().orElse(null);
+					if (bCorps != null){
+						feeCenter.setShortName(bCorps.getShortName());
+					}
+					BCorps bCorps1 = bCorpsList.stream().filter(e-> e.getCorpId().equals(feeCenter.getBillCorpId())).findFirst().orElse(null);
+					if (bCorps1 != null){
+						feeCenter.setBillCorpEnName(bCorps1.getShortName());
+					}
 				}
 				if (feeCenter.getId() == null) {
 					feeCenter.setCreateTime(new Date());
@@ -1115,12 +1126,18 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				deptName = String.join(",", res.getData());
 			}
 		}
-		if (ObjectUtils.isNotNull(feeCenter.getBillCorpId())){
+		if (ObjectUtils.isNotNull(feeCenter.getBillCorpId())) {
 			BCorps corps = bCorpsService.getById(feeCenter.getBillCorpId());
-			if (corps != null){
+			if (corps != null) {
 				feeCenter.setBillShortName(corps.getShortName());
 			}
 		}
+		if (ObjectUtils.isNotNull(feeCenter.getCorpId())) {
+			BCorps corps = bCorpsService.getById(feeCenter.getCorpId());
+			if (corps != null) {
+				feeCenter.setShortName(corps.getShortName());
+			}
+		}
 		if (feeCenter.getId() == null) {
 			feeCenter.setCreateTime(new Date());
 			feeCenter.setCreateUser(AuthUtil.getUserId());
@@ -1155,6 +1172,9 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				deptName = String.join(",", res.getData());
 			}
 		}
+		List<BCorps> bCorpsList = bCorpsService.list(new LambdaQueryWrapper<BCorps>()
+			.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+			.eq(BCorps::getIsDeleted, 0));
 		List<FeeCenter> feeCenterList = new ArrayList<>();
 		if (ObjectUtils.isNotNull(list) && !list.isEmpty()) {
 			Bills bills = null;
@@ -1177,6 +1197,16 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					if (ObjectUtils.isNull(item.getDiscountExrate())) {
 						throw new RuntimeException("首款、尾款优惠汇率不能为空");
 					}
+					if (!bCorpsList.isEmpty()){
+						BCorps bCorps = bCorpsList.stream().filter(e-> e.getCorpId().equals(item.getCorpId())).findFirst().orElse(null);
+						if (bCorps != null){
+							item.setShortName(bCorps.getShortName());
+						}
+						BCorps bCorps1 = bCorpsList.stream().filter(e-> e.getCorpId().equals(item.getBillCorpId())).findFirst().orElse(null);
+						if (bCorps1 != null){
+							item.setBillCorpEnName(bCorps1.getShortName());
+						}
+					}
 					if (!"SXF".equals(item.getFeeCode())) {
 						BigDecimal amount = item.getAmountLoc().multiply(item.getDiscountExrate());
 						item.setProfit(item.getAmount().subtract(amount));

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

@@ -438,8 +438,11 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 
 	@Override
 	public List<FinAccBillsVO> listAccBill(ListAccBillVO finAccBills) {
-		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("财务")) {
-			finAccBills.setPostId(AuthUtil.getPostId());
+		String whetherPostIdOpen = sysClient.getParamService("whether.postId.open");
+		if (ObjectUtils.isNotNull(whetherPostIdOpen) && "1".equals(whetherPostIdOpen)){
+			if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("财务")) {
+				finAccBills.setPostId(AuthUtil.getPostId());
+			}
 		}
 		if (!AuthUtil.getUserRole().contains("admin")) {
 			finAccBills.setDeptId(deptUtils.getDeptPid());

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

@@ -1687,6 +1687,14 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			auditProecessDTO.setPayAmount(detail.getAmountCrLoc());
 			auditProecessDTO.setReceivableAmount(detail.getAmountDrLoc());
 			auditProecessDTO.setGrossProfit(detail.getAmountSubLoc());
+			List<FinStlBillsItems> finStlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
+				.eq(FinStlBillsItems::getTenantId,AuthUtil.getTenantId())
+				.eq(FinStlBillsItems::getIsDeleted,0)
+				.eq(FinStlBillsItems::getPid,detail.getId()));
+			if (!finStlBillsItemsList.isEmpty()){
+				auditProecessDTO.setReferenceNumber(finStlBillsItemsList.stream().map(FinStlBillsItems::getMblno)
+					.distinct().collect(Collectors.joining(",")));
+			}
 			R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
 			if (!financeProcess.isSuccess()) {
 				throw new SecurityException("操作失败,请联系管理员");

+ 9 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AdvanceChargeServiceImpl.java

@@ -20,7 +20,6 @@ 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.service.impl.ServiceImpl;
-import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -35,6 +34,7 @@ import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -101,6 +101,13 @@ public class AdvanceChargeServiceImpl extends ServiceImpl<AdvanceChargeMapper, A
 					if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
 						item.setCreateDept(deptId);
 					}
+					if (new BigDecimal("0.00").compareTo(item.getOverpayment()) >= 0) {
+						advanceCharge.setAdvancePaymentBalance(advanceCharge.getAdvancePaymentBalance().add(item.getOverpayment()));
+						advanceCharge.setInOverpayment(advanceCharge.getInOverpayment().add(item.getOverpayment()));
+					} else {
+						advanceCharge.setAdvancePaymentBalance(advanceCharge.getAdvancePaymentBalance().add(item.getOverpayment()));
+						advanceCharge.setOutOverpaymen(advanceCharge.getOutOverpaymen().add(item.getOverpayment()));
+					}
 				} else {
 					item.setUpdateUser(AuthUtil.getUserId());
 					item.setUpdateTime(new Date());
@@ -108,6 +115,7 @@ public class AdvanceChargeServiceImpl extends ServiceImpl<AdvanceChargeMapper, A
 			}
 			advanceChargeItemService.saveOrUpdateBatch(advanceCharge.getAdvanceChargeItemList());
 		}
+		this.saveOrUpdate(advanceCharge);
 		return R.data(advanceCharge);
 	}
 

+ 307 - 19
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -32,7 +32,6 @@ import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.Util.MagicValues;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
-import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.corps.entity.BCorpsBank;
 import org.springblade.los.basic.corps.service.IBCorpsBankService;
 import org.springblade.los.basic.corps.service.IBCorpsService;
@@ -764,6 +763,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			}
 			filesCenterService.saveOrUpdateBatch(agent.getFilesCenterList());
 		}
+		if (agent.getGoodsValue().compareTo(agent.getPrepaidAmount()) < 0) {
+			throw new RuntimeException("预付款不能大于货值");
+		}
 		return R.data(agent);
 	}
 
@@ -833,6 +835,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			auditProecessDTO.setSalesCompanyName(declare.getCreateDeptName());
 			auditProecessDTO.setPayAmount(declare.getSumAmount());
 			auditProecessDTO.setReceivableAmount(declare.getSumAmount());
+			auditProecessDTO.setReferenceNumber(declare.getBillNoJoin());
 			R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
 			if (!financeProcess.isSuccess()) {
 				throw new SecurityException("操作失败,请联系管理员");
@@ -1365,17 +1368,17 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			agentItemsService.updateBatchById(agentItemsList);
 		}
 		BigDecimal advanceChargeAmount = feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())).map(FeeCenter::getAmount)
-			.reduce(BigDecimal.ZERO, BigDecimal::add).abs();
+			.reduce(BigDecimal.ZERO, BigDecimal::add);
 		if (new BigDecimal("0").compareTo(advanceChargeAmount) != 0) {
 			AdvanceCharge advanceCharge = advanceChargeService.getOne(new LambdaQueryWrapper<AdvanceCharge>()
 				.eq(AdvanceCharge::getTenantId, AuthUtil.getTenantId())
 				.eq(AdvanceCharge::getIsDeleted, 0)
 				.eq(AdvanceCharge::getCorpId, agentList.get(0).getCorpId()));
 			if (advanceCharge != null) {
-				if (advanceCharge.getAdvancePaymentBalance().compareTo(advanceChargeAmount) < 0) {
+				/*if (advanceCharge.getAdvancePaymentBalance().compareTo(advanceChargeAmount) < 0) {
 					throw new RuntimeException("当前客户" + agentList.get(0).getCorpName() + "剩余预付款:" + advanceCharge.getAdvancePaymentBalance() +
 						"小于本次使用预付款:" + advanceChargeAmount + ",确认收款失败!");
-				}
+				}*/
 				advanceCharge.setAdvancePaymentBalance(advanceCharge.getAdvancePaymentBalance().subtract(advanceChargeAmount));
 				advanceCharge.setOutOverpaymen(advanceCharge.getOutOverpaymen().subtract(advanceChargeAmount));
 				advanceChargeService.updateById(advanceCharge);
@@ -1814,6 +1817,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				auditProecessDTO.setCorpId(declare.getCorpId());
 				auditProecessDTO.setSalesCompanyId(deptUtils.getDeptPid());
 				auditProecessDTO.setSalesCompanyName(declare.getCreateDeptName());
+				auditProecessDTO.setReferenceNumber(declare.getBillNoJoin());
 				if ("D".equals(declare.getDc())) {
 					auditProecessDTO.setReceivableAmount(feeCentersList.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
 				} else {
@@ -2568,6 +2572,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			data.setPodCnName(item.getPodCnName());
 			data.setPodCode(item.getPodCode());
 			data.setPodEnName(item.getPodEnName());
+			data.setRemarks(item.getRemarks());
 			if ("D".equals(item.getDc())) {
 				data.setAmountDr(item.getAmount());
 				data.setAmountCr(new BigDecimal("0.00"));
@@ -3474,12 +3479,16 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 									if (stlAgent != null) {
 										List<FeeCenter> feeCenters = feeCenterListD.stream().filter(e -> "WK,SFK".contains(e.getFeeCode())
 											&& stlAgent.getId().equals(e.getStlPid())).collect(Collectors.toList());
+										BigDecimal feeCentersSY = feeCenterListD.stream().filter(e -> "SXF,YDF".contains(e.getFeeCode())
+											&& stlAgent.getId().equals(e.getStlPid())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+										BigDecimal feeCentersYFK = feeCenterListD.stream().filter(e -> "YFK".contains(e.getFeeCode())
+											&& stlAgent.getId().equals(e.getStlPid())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
 										if (!feeCenters.isEmpty()) {
 											AgentDReport agentDReport = new AgentDReport();
 											agentDReport.setRemitter(feeCenters.get(0).getCorpCnName());
 											agentDReport.setRemittanceTime(dateFormat.format(stlAgent.getBusinessDate()));
-											agentDReport.setRemittanceAmount(feeCenters.stream().map(FeeCenter::getAmountLoc)
-												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+											agentDReport.setRemittanceAmount(feeCenters.stream().map(FeeCenter::getAmount)
+												.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).add(feeCentersSY).subtract(feeCentersYFK));
 											agentDReportList.add(agentDReport);
 										}
 									}
@@ -3492,6 +3501,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 								List<AgentCReport> agentCReportList = new ArrayList<>();
 								List<Long> stlPidsC = feeCenterListC.stream().map(FeeCenter::getStlPid)
 									.filter(Objects::nonNull).distinct().collect(Collectors.toList());
+
 								for (Long id : stlPidsC) {
 									Agent stlAgent = agentList.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null);
 									if (stlAgent != null) {
@@ -3504,7 +3514,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 											agentCReport.setDeclarationNumber(stlAgent.getDeclarationNumber());
 											agentCReport.setPaymentInUsd(feeCenters.stream().filter(e -> "WK,SFK".contains(e.getFeeCode()))
 												.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-											agentCReport.setExchangeRate(stlAgent.getExchangeRate());
+											agentCReport.setExchangeRate(feeCenters.get(0).getDiscountExrate());
 											agentCReport.setActualAmount(agentCReport.getPaymentInUsd().multiply(agentCReport.getExchangeRate()));
 											agentCReport.setPostElectricFee(feeCenters.stream().filter(e -> "YDF".equals(e.getFeeCode()))
 												.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -3518,6 +3528,16 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 							}
 						}
 					}
+					// todo 增值税
+					List<AgentZzsReport> agentZzsReportList = new ArrayList<>();
+					List<FeeCenter> feeCenterListC = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) &&
+						"ZZS".equals(e.getFeeCode())).collect(Collectors.toList());
+					for (FeeCenter item : feeCenterListC){
+						AgentZzsReport agentZzsReport = new AgentZzsReport();
+						agentZzsReport.setValueAddedTax(item.getAmount());
+						agentZzsReportList.add(agentZzsReport);
+					}
+					agentReport.setAgentZzsReportList(agentZzsReportList);
 				}
 				List<Bills> billsList = billsService.list(new LambdaQueryWrapper<Bills>()
 					.eq(Bills::getTenantId, AuthUtil.getTenantId())
@@ -3526,29 +3546,24 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				List<AgentBillReport> agentBillReportList = new ArrayList<>();
 				if (!billsList.isEmpty()) {
 					List<Long> billIds = billsList.stream().map(Bills::getId).distinct().collect(Collectors.toList());
-					List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+					/*List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
 						.eq(PreContainers::getIsDeleted, 0)
 						.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
-						.in(PreContainers::getPid, billIds));
+						.in(PreContainers::getPid, billIds));*/
 					for (Bills item : billsList) {
 						AgentBillReport agentBillReport = new AgentBillReport();
 						agentBillReport.setDeclarationDate(dateFormat.format(item.getBillDate()));
-						agentBillReport.setCustomsDeclarationNumber(item.getBillNo());
+						agentBillReport.setCustomsDeclarationNumber(item.getMnotify2CntyName());
 						agentBillReport.setGoodsName(item.getCommodityCnName());
-						agentBillReport.setNumber(item.getQuantity());
-						if (!preContainersList.isEmpty()) {
-							BigDecimal reduce = preContainersList.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getPrice().multiply(y.getNumber())), BigDecimal::add);
+						agentBillReport.setNumber(item.getNetWeight());
+						if (!agentItemsList.isEmpty()) {
+							BigDecimal reduce = agentItemsList.stream().filter(e-> item.getMblno().equals(e.getBillNo())).map(AgentItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 							agentBillReport.setAmount(reduce);
 						}
 						agentBillReportList.add(agentBillReport);
 					}
 				}
 				agentReport.setAgentBillReportList(agentBillReportList);
-				// todo 增值税
-				List<AgentZzsReport> agentZzsReportList = new ArrayList<>();
-				AgentZzsReport agentZzsReport = new AgentZzsReport();
-				agentZzsReportList.add(agentZzsReport);
-				agentReport.setAgentZzsReportList(agentZzsReportList);
 				agentReport.setDept(dept);
 			}
 			agentReport.setAgentDReportList(ObjectUtils.isNull(agentReport.getAgentDReportList()) ? new ArrayList<>() : agentReport.getAgentDReportList());
@@ -3834,6 +3849,278 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			} else {
 				map.put(MagicValues.DATA, new AgentFeeReport());
 			}
+		} else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.THE_FIRST_ONE_CORP.equals(groupCode) && MagicValues.MYDL_STL.equals(type)) {
+			Agent agent = baseMapper.selectById(billId);
+			DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd");
+			if (agent != null) {
+				R<Dept> res = sysClient.getDept(agent.getAffiliatedCompanyId());
+				Dept dept;
+				if (res.isSuccess() && res.getData() != null) {
+					dept = res.getData();
+					String status = sysClient.getParamServiceNew("is.update.default");
+					if ("1".equals(status)) {
+						R<User> resUser = userClient.userInfoById(AuthUtil.getUserId());
+						if (resUser.isSuccess() && resUser.getData() != null) {
+							dept.setEmail(resUser.getData().getEmail());
+							dept.setTel(resUser.getData().getPhone());
+							dept.setContacts(resUser.getData().getRealName());
+						}
+					}
+				} else {
+					throw new RuntimeException("获取报表表头数据失败");
+				}
+				AgentFeeReport agentFeeReport = new AgentFeeReport();
+				List<AgentFeeItemsReport> agentFeeItemsReportList = new ArrayList<>();
+				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getStlPid, agent.getId())
+					.eq(FeeCenter::getDc, "D")
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0));
+				if (feeCenterList.isEmpty()) {
+					throw new RuntimeException("请先维护首款费用信息");
+				}
+				List<Long> ids = feeCenterList.stream().map(FeeCenter::getPid).filter(Objects::nonNull).collect(Collectors.toList());
+				List<FeeCenter> feeCenterListC = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.in(FeeCenter::getPid, ids)
+					.eq(FeeCenter::getDc, "C")
+					.apply("stl_pid is not null")
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0));
+				if (feeCenterList.isEmpty()) {
+					throw new RuntimeException("请先维护首款费用信息");
+				}
+				List<AgentRecordReport> reportList = new ArrayList<>();
+				List<FeeCenter> feeCentersSk = feeCenterList.stream().filter(e -> ObjectUtils.isNotNull(e.getFeeType()) &&
+						"1".equals(e.getFeeType()) && "SFK".equals(e.getFeeCode()))
+					.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+						Comparator.comparing(FeeCenter::getBillNo))), ArrayList::new));
+				if (!feeCentersSk.isEmpty()) {
+					List<Long> agentIdList = feeCentersSk.stream().map(FeeCenter::getPid).filter(Objects::nonNull).collect(Collectors.toList());
+					List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
+						.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+						.eq(AgentItems::getIsDeleted, 0)
+						.in(AgentItems::getPid, agentIdList));
+					for (FeeCenter item : feeCentersSk) {
+						AgentFeeItemsReport agentFeeItemsReport = new AgentFeeItemsReport();
+						agentFeeItemsReport.setContractNo(item.getBillNo());
+						agentFeeItemsReport.setOrderNo(item.getOrderNo());
+						agentFeeItemsReport.setFactoryNumber(item.getFactoryNumber());
+						agentFeeItemsReport.setBillNo(item.getMblno());
+						agentFeeItemsReport.setBoxNo(item.getCntrNo());
+						agentFeeItemsReport.setGoodsName(item.getGoodsName());
+						if (!agentItemsList.isEmpty()) {
+							List<AgentItems> agentItems = agentItemsList.stream().filter(e -> e.getPid().equals(item.getPid())).collect(Collectors.toList());
+							if (!agentItems.isEmpty()) {
+								agentFeeItemsReport.setAmountUsd(agentItems.stream().map(AgentItems::getAmount)
+									.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								if (ObjectUtils.isNotNull(agentItems.get(0).getEstimateReachHarbor())) {
+									agentFeeItemsReport.setEta(dateFormat.format(agentItems.get(0).getEstimateReachHarbor()));
+								}
+							}
+						}
+						agentFeeItemsReport.setSkAmountUsd(item.getAmountLoc());
+						agentFeeItemsReport.setExchangeRate(item.getExrate());
+						agentFeeItemsReport.setAmount(item.getAmountLoc().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						FeeCenter feeCenter = feeCenterListC.stream().filter(e -> e.getFeeCode().equals(item.getFeeCode())
+								&& ObjectUtils.isNotNull(e.getFeeType()) && "1".equals(e.getFeeType()) && "SFK".equals(e.getFeeCode()))
+							.findFirst().orElse(null);
+						if (feeCenter != null) {
+							AgentRecordReport report = new AgentRecordReport();
+							if (ObjectUtils.isNotNull(feeCenter.getStlDate())) {
+								report.setDate(dateFormat.format(feeCenter.getStlDate()));
+							}
+							report.setExchangeRate(feeCenter.getDiscountExrate());
+							report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+							reportList.add(report);
+							agentFeeItemsReport.setRealityExchangeRate(feeCenter.getStlExrate());
+							agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+						} else {
+							agentFeeItemsReport.setRealityExchangeRate(null);
+							agentFeeItemsReport.setRealityAmount(null);
+						}
+						agentFeeItemsReportList.add(agentFeeItemsReport);
+					}
+					agentFeeReport.setRealityPostElectricFee(feeCenterListC.stream().filter(e -> e.getFeeCode().equals("YDF")
+							&& ObjectUtils.isNotNull(e.getFeeType()) && "1".equals(e.getFeeType()))
+						.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+					agentFeeReport.setRealityServiceCharge(feeCenterListC.stream().filter(e -> e.getFeeCode().equals("SXF")
+							&& ObjectUtils.isNotNull(e.getFeeType()) && "1".equals(e.getFeeType()))
+						.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+					BigDecimal realityAmount = agentFeeItemsReportList.stream().map(AgentFeeItemsReport::getRealityAmount)
+						.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+					agentFeeReport.setRealitySumAmount(realityAmount.add(agentFeeReport.getRealityPostElectricFee()).add(agentFeeReport.getRealityServiceCharge()));
+				}
+				List<FeeCenter> feeCentersWk = feeCenterList.stream().filter(e -> ObjectUtils.isNotNull(e.getFeeType()) &&
+						"2".equals(e.getFeeType()) && "WK".equals(e.getFeeCode()))
+					.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+						Comparator.comparing(FeeCenter::getMblno))), ArrayList::new));
+				if (!feeCentersWk.isEmpty()) {
+					List<Long> agentIdList = feeCentersWk.stream().map(FeeCenter::getPid).filter(Objects::nonNull).collect(Collectors.toList());
+					List<Agent> agents = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
+						.eq(Agent::getTenantId, AuthUtil.getTenantId())
+						.eq(Agent::getIsDeleted, 0)
+						.eq(Agent::getBusinessType, "MYDL")
+						.in(Agent::getId, agentIdList));
+					String billNo = feeCentersWk.stream().map(FeeCenter::getMblno).filter(Objects::nonNull).collect(Collectors.joining(","));
+					List<AgentItems> agentItemsList = agentItemsService.list(new LambdaQueryWrapper<AgentItems>()
+						.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+						.eq(AgentItems::getIsDeleted, 0)
+						.apply("find_in_set(bill_no,'" + billNo + "')"));
+					for (FeeCenter item : feeCentersWk) {
+						AgentFeeItemsReport agentFeeItemsReport = new AgentFeeItemsReport();
+						agentFeeItemsReport.setContractNo(item.getBillNo());
+						agentFeeItemsReport.setOrderNo(item.getOrderNo());
+						agentFeeItemsReport.setFactoryNumber(item.getFactoryNumber());
+						agentFeeItemsReport.setBillNo(item.getMblno());
+						agentFeeItemsReport.setBoxNo(item.getCntrNo());
+						agentFeeItemsReport.setGoodsName(item.getGoodsName());
+						if (!agentItemsList.isEmpty()) {
+							List<AgentItems> agentItems = agentItemsList.stream().filter(e -> e.getBillNo().equals(item.getMblno())).collect(Collectors.toList());
+							if (!agentItems.isEmpty()) {
+								agentFeeItemsReport.setAmountUsd(agentItems.stream().map(AgentItems::getAmount)
+									.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+								if (ObjectUtils.isNotNull(agentItems.get(0).getEstimateReachHarbor())) {
+									agentFeeItemsReport.setEta(dateFormat.format(agentItems.get(0).getEstimateReachHarbor()));
+								}
+							}
+						}
+						if (!agents.isEmpty()) {
+							Agent agent1 = agents.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(null);
+							if (agent1 != null) {
+								agentFeeItemsReport.setSkAmountUsd(agent1.getPrepaidAmount());
+
+							}
+						}
+						agentFeeItemsReport.setWkAmountUsd(item.getAmountLoc());
+						agentFeeItemsReport.setExchangeRate(item.getExrate());
+						agentFeeItemsReport.setAmount(agentFeeItemsReport.getWkAmountUsd().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
+						FeeCenter feeCenter = feeCenterListC.stream().filter(e -> e.getFeeCode().equals(item.getFeeCode())
+								&& ObjectUtils.isNotNull(e.getFeeType()) && "2".equals(e.getFeeType()) && "WK".equals(e.getFeeCode()))
+							.findFirst().orElse(null);
+						if (feeCenter != null) {
+							AgentRecordReport report = new AgentRecordReport();
+							if (ObjectUtils.isNotNull(feeCenter.getStlDate())) {
+								report.setDate(dateFormat.format(feeCenter.getStlDate()));
+							}
+							report.setExchangeRate(feeCenter.getDiscountExrate());
+							report.setDiscountAmount(item.getAmountLoc().multiply(feeCenter.getDiscountExrate()).setScale(2, RoundingMode.HALF_UP));
+							reportList.add(report);
+							agentFeeItemsReport.setRealityExchangeRate(feeCenter.getStlExrate());
+							agentFeeItemsReport.setRealityAmount(item.getAmountLoc().multiply(feeCenter.getStlExrate()).setScale(2, RoundingMode.HALF_UP));
+						} else {
+							agentFeeItemsReport.setRealityExchangeRate(null);
+							agentFeeItemsReport.setRealityAmount(null);
+						}
+						agentFeeItemsReportList.add(agentFeeItemsReport);
+					}
+					if (ObjectUtils.isNotNull(agentFeeReport.getRealityPostElectricFee())) {
+						agentFeeReport.setRealityPostElectricFee(agentFeeReport.getRealityPostElectricFee().add(
+							feeCenterListC.stream().filter(e -> e.getFeeCode().equals("YDF")
+									&& ObjectUtils.isNotNull(e.getFeeType()) && "2".equals(e.getFeeType()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)
+						));
+					} else {
+						agentFeeReport.setRealityPostElectricFee(feeCenterListC.stream().filter(e -> e.getFeeCode().equals("YDF")
+								&& ObjectUtils.isNotNull(e.getFeeType()) && "2".equals(e.getFeeType()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+					}
+					if (ObjectUtils.isNotNull(agentFeeReport.getRealityServiceCharge())) {
+						agentFeeReport.setRealityServiceCharge(agentFeeReport.getRealityServiceCharge().add(
+							feeCenterListC.stream().filter(e -> e.getFeeCode().equals("SXF")
+									&& ObjectUtils.isNotNull(e.getFeeType()) && "2".equals(e.getFeeType()))
+								.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)
+						));
+					} else {
+						agentFeeReport.setRealityServiceCharge(feeCenterListC.stream().filter(e -> e.getFeeCode().equals("SXF")
+								&& ObjectUtils.isNotNull(e.getFeeType()) && "2".equals(e.getFeeType()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+					}
+					if (ObjectUtils.isNotNull(agentFeeReport.getRealitySumAmount())) {
+						BigDecimal realityAmount = agentFeeItemsReportList.stream().map(AgentFeeItemsReport::getRealityAmount)
+							.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+						agentFeeReport.setRealitySumAmount(realityAmount.add(agentFeeReport.getRealityPostElectricFee())
+							.add(agentFeeReport.getRealityServiceCharge()).add(agentFeeReport.getRealitySumAmount()));
+					} else {
+						BigDecimal realityAmount = agentFeeItemsReportList.stream().map(AgentFeeItemsReport::getRealityAmount)
+							.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+						agentFeeReport.setRealitySumAmount(realityAmount.add(agentFeeReport.getRealityPostElectricFee()).add(agentFeeReport.getRealityServiceCharge()));
+					}
+				}
+				agentFeeReport.setPostElectricFee(agent.getPostElectricFee());
+				agentFeeReport.setServiceCharge(agent.getServiceCharge());
+				agentFeeReport.setSumAmount(agent.getActualAmount());
+				/*agentFeeReport.setRealityPostElectricFee(feeCenterListC.stream().filter(e -> e.getFeeCode().equals("YDF"))
+					.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				agentFeeReport.setRealityServiceCharge(feeCenterListC.stream().filter(e -> e.getFeeCode().equals("SXF"))
+					.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));*/
+				agentFeeReport.setRemainingAmount(feeCenterList.stream().filter(e -> e.getFeeCode().equals("YFK")).map(FeeCenter::getAmount).filter(Objects::nonNull)
+					.reduce(BigDecimal.ZERO, BigDecimal::add));
+				agentFeeReport.setRepairAmount(agentFeeReport.getRealitySumAmount().subtract(agentFeeReport.getSumAmount())
+					.subtract(agentFeeReport.getRemainingAmount()));
+				if (new BigDecimal("0.00").compareTo(agentFeeReport.getRepairAmount()) > 0) {
+					agentFeeReport.setSurplusAmount(agentFeeReport.getRepairAmount().abs());
+					agentFeeReport.setRepairAmount(agentFeeReport.getRepairAmount().abs());
+					agentFeeReport.setText("需退金额:");
+				} else {
+					agentFeeReport.setText("需补金额:");
+				}
+				agentFeeReport.setDate(dateFormat.format(agent.getBusinessDate()));
+				agentFeeReport.setPaymentMethod(agent.getAdvanceRatio());
+
+				agentFeeReport.setReportPostElectricFee(agentFeeReport.getRealityPostElectricFee());
+				BigDecimal discountAmount = reportList.stream().map(AgentRecordReport::getDiscountAmount)
+					.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				String serviceCharge = sysClient.getParamServiceByDept("service.charge", AuthUtil.getTenantId(), AuthUtil.getDeptId());
+				if (ObjectUtils.isNotNull(serviceCharge)) {
+					BigDecimal serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal(serviceCharge), serviceCharge.length(), RoundingMode.HALF_UP);
+					BigDecimal amount = serviceChargeAmount.multiply(discountAmount).setScale(2, RoundingMode.HALF_UP);
+					if (amount.compareTo(new BigDecimal("1000")) > 0) {
+						agentFeeReport.setReportServiceCharge(new BigDecimal("1000"));
+					} else if (amount.compareTo(new BigDecimal("50")) < 0) {
+						agentFeeReport.setReportServiceCharge(new BigDecimal("50"));
+					} else {
+						agentFeeReport.setReportServiceCharge(amount);
+					}
+				} else {
+					agentFeeReport.setReportServiceCharge(new BigDecimal("0.00"));
+				}
+				agentFeeReport.setReportSumAmount(discountAmount.add(agentFeeReport.getReportPostElectricFee())
+					.add(agentFeeReport.getReportServiceCharge()));
+				agentFeeReport.setDiscountAmountSub(agentFeeReport.getRealitySumAmount().subtract(agentFeeReport.getReportSumAmount()));
+				agentFeeReport.setDept(dept);
+				agentFeeReport.setReportList(reportList);
+				List<AgentFeeItemsReport> agentFeeItemsReports = new ArrayList<>();
+				for (AgentFeeItemsReport item : agentFeeItemsReportList) {
+					if (!agentFeeItemsReports.isEmpty()) {
+						String billNo = agentFeeItemsReports.stream().map(AgentFeeItemsReport::getContractNo)
+							.filter(Objects::nonNull).collect(Collectors.joining(","));
+
+						if (billNo.contains(item.getContractNo())) {
+							if (ObjectUtils.isNotNull(item.getBillNo())) {
+								item.setSkAmountUsd(null);
+							} else {
+								item.setSkAmountUsd(null);
+								item.setWkAmountUsd(null);
+								item.setExchangeRate(null);
+								item.setAmount(null);
+								item.setSkAmount(null);
+								item.setWkAmount(null);
+								item.setRealityExchangeRate(null);
+								item.setRealityAmount(null);
+							}
+							agentFeeItemsReports.add(item);
+						} else {
+							agentFeeItemsReports.add(item);
+						}
+					} else {
+						agentFeeItemsReports.add(item);
+					}
+				}
+				agentFeeReport.setSkItemsReports(agentFeeItemsReports);
+				map.put(MagicValues.DATA, agentFeeReport);
+			} else {
+				map.put(MagicValues.DATA, new AgentFeeReport());
+			}
 		} else if (MagicValues.COST.equals(reportCode) && MagicValues.RECEIVABLE.equals(groupCode) && MagicValues.MYDL.equals(type)) {
 			Agent agent = baseMapper.selectById(billId);
 			if (agent != null) {
@@ -4069,7 +4356,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			agentItemsService.updateBatchById(agentItemsList);
 		}
 		BigDecimal advanceChargeAmount = feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode())).map(FeeCenter::getAmount)
-			.reduce(BigDecimal.ZERO, BigDecimal::add).abs();
+			.reduce(BigDecimal.ZERO, BigDecimal::add);
 		if (new BigDecimal("0").compareTo(advanceChargeAmount) != 0) {
 			AdvanceCharge advanceCharge = advanceChargeService.getOne(new LambdaQueryWrapper<AdvanceCharge>()
 				.eq(AdvanceCharge::getTenantId, AuthUtil.getTenantId())
@@ -4403,6 +4690,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		feeCenter.setPid(detail.getId());
 		feeCenter.setLineNo(lineNo);
 		feeCenter.setBillNo(detail.getContractNo());
+		feeCenter.setMblno(detail.getBillNoJoin());
 		feeCenter.setBillDate(detail.getBusinessDate());
 		feeCenter.setCorpId(detail.getCorpId());
 		feeCenter.setCorpCnName(detail.getCorpName());