Browse Source

贸易代理 2024年8月1日17:29:50

纪新园 1 year ago
parent
commit
414fc76467

+ 86 - 81
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/AdvanceCharge.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.trade.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -25,6 +26,7 @@ import lombok.Data;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 贸易代理客户预付款实体类
@@ -41,85 +43,85 @@ public class AdvanceCharge implements Serializable {
 
 	private Long id;
 	/**
-	* 客户id
-	*/
-		@ApiModelProperty(value = "客户id")
-		private Long corpId;
-	/**
-	* 客户名称
-	*/
-		@ApiModelProperty(value = "客户名称")
-		private String corpName;
-	/**
-	* 预付款余额
-	*/
-		@ApiModelProperty(value = "预付款余额")
-		private BigDecimal advancePaymentBalance;
-	/**
-	* 增加金额
-	*/
-		@ApiModelProperty(value = "增加金额")
-		private BigDecimal inOverpayment;
-	/**
-	* 消费金额
-	*/
-		@ApiModelProperty(value = "消费金额")
-		private BigDecimal outOverpaymen;
-	/**
-	* 备注
-	*/
-		@ApiModelProperty(value = "备注")
-		private String remarks;
-	/**
-	* 版本
-	*/
-		@ApiModelProperty(value = "版本")
-		private String version;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建人名称
-	*/
-		@ApiModelProperty(value = "创建人名称")
-		private String createUserName;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private Long createDept;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private String createDeptName;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private Date createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改人名称
-	*/
-		@ApiModelProperty(value = "修改人名称")
-		private String updateUserName;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private Date updateTime;
-	/**
-	* 状态(0 正常 1停用)
-	*/
-		@ApiModelProperty(value = "状态(0 正常 1停用)")
-		private Integer status;
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	private Long corpId;
+	/**
+	 * 客户名称
+	 */
+	@ApiModelProperty(value = "客户名称")
+	private String corpName;
+	/**
+	 * 预付款余额
+	 */
+	@ApiModelProperty(value = "预付款余额")
+	private BigDecimal advancePaymentBalance;
+	/**
+	 * 增加金额
+	 */
+	@ApiModelProperty(value = "增加金额")
+	private BigDecimal inOverpayment;
+	/**
+	 * 消费金额
+	 */
+	@ApiModelProperty(value = "消费金额")
+	private BigDecimal outOverpaymen;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建人名称
+	 */
+	@ApiModelProperty(value = "创建人名称")
+	private String createUserName;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private String createDeptName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改人名称
+	 */
+	@ApiModelProperty(value = "修改人名称")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
 
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
@@ -128,8 +130,11 @@ public class AdvanceCharge implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@TableLogic(value = "0", delval = "1")
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	@TableField(exist = false)
+	private List<AdvanceChargeItem> advanceChargeItemList;
 
 
 }

+ 101 - 101
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/AdvanceChargeItem.java

@@ -41,105 +41,105 @@ public class AdvanceChargeItem implements Serializable {
 
 	private Long id;
 	/**
-	* 主表id
-	*/
-		@ApiModelProperty(value = "主表id")
-		private Long pid;
-	/**
-	* 来源id
-	*/
-		@ApiModelProperty(value = "来源id")
-		private Long srcId;
-	/**
-	* 来源主表id
-	*/
-		@ApiModelProperty(value = "来源主表id")
-		private Long srcPid;
-	/**
-	* 订单号
-	*/
-		@ApiModelProperty(value = "订单号")
-		private String orderNo;
-	/**
-	* 发货单号
-	*/
-		@ApiModelProperty(value = "发货单号")
-		private String billNo;
-	/**
-	* 金额
-	*/
-		@ApiModelProperty(value = "金额")
-		private BigDecimal overpayment;
-	/**
-	* 消费类型 0 增加 1 消费
-	*/
-		@ApiModelProperty(value = "消费类型 0 增加 1 消费")
-		private Integer overpaymentType;
-	/**
-	* 来源单号
-	*/
-		@ApiModelProperty(value = "来源单号")
-		private String srcOrderNo;
-	/**
-	* 生成标识(0 系统生成  1手动添加)
-	*/
-		@ApiModelProperty(value = "生成标识(0 系统生成  1手动添加)")
-		private Integer identifier;
-	/**
-	* 备注
-	*/
-		@ApiModelProperty(value = "备注")
-		private String remarks;
-	/**
-	* 版本
-	*/
-		@ApiModelProperty(value = "版本")
-		private String version;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建人名称
-	*/
-		@ApiModelProperty(value = "创建人名称")
-		private String createUserName;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private Long createDept;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private String createDeptName;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private Date createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改人名称
-	*/
-		@ApiModelProperty(value = "修改人名称")
-		private String updateUserName;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private Date updateTime;
-	/**
-	* 状态(0 正常 1停用)
-	*/
-		@ApiModelProperty(value = "状态(0 正常 1停用)")
-		private Integer status;
+	 * 主表id
+	 */
+	@ApiModelProperty(value = "主表id")
+	private Long pid;
+	/**
+	 * 来源id
+	 */
+	@ApiModelProperty(value = "来源id")
+	private Long srcId;
+	/**
+	 * 来源主表id
+	 */
+	@ApiModelProperty(value = "来源主表id")
+	private Long srcPid;
+	/**
+	 * 订单号
+	 */
+	@ApiModelProperty(value = "订单号")
+	private String orderNo;
+	/**
+	 * 发货单号
+	 */
+	@ApiModelProperty(value = "发货单号")
+	private String billNo;
+	/**
+	 * 金额
+	 */
+	@ApiModelProperty(value = "金额")
+	private BigDecimal overpayment;
+	/**
+	 * 消费类型 0 增加 1 消费
+	 */
+	@ApiModelProperty(value = "消费类型 0 增加 1 消费")
+	private Integer overpaymentType;
+	/**
+	 * 来源单号
+	 */
+	@ApiModelProperty(value = "来源单号")
+	private String srcOrderNo;
+	/**
+	 * 生成标识(0 系统生成  1手动添加)
+	 */
+	@ApiModelProperty(value = "生成标识(0 系统生成  1手动添加)")
+	private Integer identifier;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建人名称
+	 */
+	@ApiModelProperty(value = "创建人名称")
+	private String createUserName;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private String createDeptName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改人名称
+	 */
+	@ApiModelProperty(value = "修改人名称")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
 
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
@@ -148,8 +148,8 @@ public class AdvanceChargeItem implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@TableLogic(value = "0", delval = "1")
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
 
 
 }

+ 0 - 11
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/Agent.java

@@ -419,11 +419,6 @@ public class Agent implements Serializable {
 	 */
 	@ApiModelProperty(value = "是否首款账单")
 	private String downPayment;
-	/**
-	 * 是否尾款账单 0否1是
-	 */
-	@ApiModelProperty(value = "是否尾款账单")
-	private String balancePayment;
 
 	/**
 	 * 是否申请付款首付款 0否1是
@@ -432,12 +427,6 @@ public class Agent implements Serializable {
 	private String applyForPayment;
 
 	/**
-	 * 是否申请付款尾款 0否1是
-	 */
-	@ApiModelProperty(value = "是否申请付款尾款")
-	private String applyForPaymentBalance;
-
-	/**
 	 * 是否已收货款  已收货款/未收货款/部分货款
 	 */
 	@ApiModelProperty(value = "是否已收货款")

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/AgentItems.java

@@ -278,5 +278,11 @@ public class AgentItems implements Serializable {
 	@ApiModelProperty(value = "是否生成尾款")
 	private String whetherBalancePayment;
 
+	/**
+	 * 是否申请付款尾款 0否1是
+	 */
+	@ApiModelProperty(value = "是否申请付款尾款")
+	private String applyForPaymentBalance;
+
 
 }

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/AdvanceChargeController.java

@@ -55,7 +55,7 @@ public class AdvanceChargeController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入advanceCharge")
 	public R<AdvanceCharge> detail(AdvanceCharge advanceCharge) {
-		AdvanceCharge detail = advanceChargeService.getOne(Condition.getQueryWrapper(advanceCharge));
+		AdvanceCharge detail = advanceChargeService.detail(advanceCharge);
 		return R.data(detail);
 	}
 
@@ -108,7 +108,7 @@ public class AdvanceChargeController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入advanceCharge")
 	public R submit(@Valid @RequestBody AdvanceCharge advanceCharge) {
-		return R.status(advanceChargeService.saveOrUpdate(advanceCharge));
+		return advanceChargeService.submit(advanceCharge);
 	}
 
 

+ 1 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/AgentController.java

@@ -100,6 +100,7 @@ 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())
+			.like(ObjectUtils.isNotNull(agent.getDeclarationNumber()), Agent::getDeclarationNumber, agent.getDeclarationNumber())
 			.eq(ObjectUtils.isNotNull(agent.getDc()), Agent::getDc, agent.getDc())
 			.eq(ObjectUtils.isNotNull(agent.getBusinessType()), Agent::getBusinessType, agent.getBusinessType())
 			.orderByDesc(Agent::getCreateTime);

+ 0 - 2
blade-service/blade-los/src/main/java/org/springblade/los/trade/mapper/AgentMapper.xml

@@ -52,8 +52,6 @@
         <result column="salesman_id" property="salesmanId"/>
         <result column="salesman_name" property="salesmanName"/>
         <result column="business_status" property="businessStatus"/>
-        <result column="down_payments_net_receipts" property="downPaymentsNetReceipts"/>
-        <result column="balance_payment_net_receipts" property="balancePaymentNetReceipts"/>
     </resultMap>
 
 

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IAdvanceChargeService.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.trade.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.los.trade.entity.AdvanceCharge;
 import org.springblade.los.trade.vo.AdvanceChargeVO;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -38,4 +39,7 @@ public interface IAdvanceChargeService extends IService<AdvanceCharge> {
 	 */
 	IPage<AdvanceChargeVO> selectAdvanceChargePage(IPage<AdvanceChargeVO> page, AdvanceChargeVO advanceCharge);
 
+    AdvanceCharge detail(AdvanceCharge advanceCharge);
+
+	R submit(AdvanceCharge advanceCharge);
 }

+ 76 - 3
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AdvanceChargeServiceImpl.java

@@ -16,13 +16,27 @@
  */
 package org.springblade.los.trade.service.impl;
 
+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;
+import org.springblade.los.Util.IDeptUtils;
 import org.springblade.los.trade.entity.AdvanceCharge;
-import org.springblade.los.trade.vo.AdvanceChargeVO;
+import org.springblade.los.trade.entity.AdvanceChargeItem;
+import org.springblade.los.trade.entity.StorageFeeItems;
 import org.springblade.los.trade.mapper.AdvanceChargeMapper;
+import org.springblade.los.trade.service.IAdvanceChargeItemService;
 import org.springblade.los.trade.service.IAdvanceChargeService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.los.trade.vo.AdvanceChargeVO;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
 
 /**
  * 贸易代理客户预付款 服务实现类
@@ -31,11 +45,70 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2024-07-16
  */
 @Service
+@AllArgsConstructor
 public class AdvanceChargeServiceImpl extends ServiceImpl<AdvanceChargeMapper, AdvanceCharge> implements IAdvanceChargeService {
 
+	private final ISysClient sysClient;
+
+	private final IDeptUtils deptUtils;
+
+	private final IAdvanceChargeItemService advanceChargeItemService;
+
 	@Override
 	public IPage<AdvanceChargeVO> selectAdvanceChargePage(IPage<AdvanceChargeVO> page, AdvanceChargeVO advanceCharge) {
 		return page.setRecords(baseMapper.selectAdvanceChargePage(page, advanceCharge));
 	}
 
+	@Override
+	public AdvanceCharge detail(AdvanceCharge advanceCharge) {
+		if (advanceCharge.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		AdvanceCharge detail = baseMapper.selectById(advanceCharge.getId());
+		detail.setAdvanceChargeItemList(advanceChargeItemService.list(new LambdaQueryWrapper<AdvanceChargeItem>()
+			.eq(AdvanceChargeItem::getTenantId, AuthUtil.getTenantId())
+			.eq(AdvanceChargeItem::getIsDeleted, 0)
+			.eq(AdvanceChargeItem::getPid, detail.getId())));
+		return detail;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R submit(AdvanceCharge advanceCharge) {
+		Long deptId = 0L;
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid())) {
+			deptId = deptUtils.getDeptPid();
+		}
+		if (advanceCharge.getId() == null) {
+			advanceCharge.setCreateTime(new Date());
+			advanceCharge.setCreateUser(AuthUtil.getUserId());
+			if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+				advanceCharge.setCreateDept(deptId);
+			}
+		} else {
+			advanceCharge.setUpdateUser(AuthUtil.getUserId());
+			advanceCharge.setUpdateTime(new Date());
+		}
+		this.saveOrUpdate(advanceCharge);
+		if (ObjectUtils.isNotNull(advanceCharge.getAdvanceChargeItemList()) && !advanceCharge.getAdvanceChargeItemList().isEmpty()) {
+			for (AdvanceChargeItem item : advanceCharge.getAdvanceChargeItemList()) {
+				item.setPid(advanceCharge.getId());
+				if (item.getId() == null) {
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+					if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+						item.setCreateDept(deptId);
+					}
+				} else {
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+				}
+			}
+			advanceChargeItemService.saveOrUpdateBatch(advanceCharge.getAdvanceChargeItemList());
+		}
+		return R.data(advanceCharge);
+	}
+
 }

+ 413 - 110
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -181,7 +181,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				} else {
 					detail.setFeeCenterListC(new ArrayList<>());
 				}
-				if (!ids.isEmpty()){
+				if (!ids.isEmpty()) {
 					List<Agent> agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
 						.eq(Agent::getTenantId, AuthUtil.getTenantId())
 						.eq(Agent::getIsDeleted, 0)
@@ -484,6 +484,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				String billNo = agent.getFeeCenterListC().stream().map(FeeCenter::getMblno).filter(Objects::nonNull)
 					.distinct().collect(Collectors.joining(","));
 				agent.setBillNoJoin(billNo);
+				String contractNo = agent.getFeeCenterListC().stream().map(FeeCenter::getBillNo).filter(Objects::nonNull)
+					.distinct().collect(Collectors.joining(","));
+				agent.setContractNo(contractNo);
 				agent.setPaymentInUsd(agent.getFeeCenterListC().stream().filter(e -> "SFK,WK".contains(e.getFeeCode()))
 					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
 				agent.setActualAmount(agent.getExchangeRate().multiply(agent.getPaymentInUsd()));
@@ -493,7 +496,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			for (FeeCenter item : agent.getFeeCenterListC()) {
 				if (!"MYDL-STL".equals(agent.getBusinessType())) {
 					item.setBusinessType(agent.getBusinessType());
-					item.setBillNo(agent.getBusinessNo());
+					item.setBillNo(agent.getContractNo());
 					item.setBillDate(agent.getBusinessDate());
 					item.setCorpId(agent.getAbroadConsignorId());
 					item.setCorpCnName(agent.getAbroadConsignorCname());
@@ -559,6 +562,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				} else {
 					agent.setBillNoJoin(agent.getBillNoJoin() + "," + billNo);
 				}
+				String contractNo = agent.getFeeCenterListD().stream().map(FeeCenter::getBillNo).filter(Objects::nonNull)
+					.distinct().collect(Collectors.joining(","));
+				agent.setContractNo(contractNo);
 				agent.setPaymentInUsd(agent.getFeeCenterListD().stream().filter(e -> "SFK,WK".contains(e.getFeeCode()))
 					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
 				agent.setActualAmount(agent.getExchangeRate().multiply(agent.getPaymentInUsd()));
@@ -568,7 +574,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			for (FeeCenter item : agent.getFeeCenterListD()) {
 				if (!"MYDL-STL".equals(agent.getBusinessType())) {
 					item.setBusinessType(agent.getBusinessType());
-					item.setBillNo(agent.getBusinessNo());
+					item.setBillNo(agent.getContractNo());
 					item.setBillDate(agent.getBusinessDate());
 					item.setCorpId(agent.getDomesticConsigneeId());
 					item.setCorpCnName(agent.getDomesticConsigneeCname());
@@ -918,6 +924,28 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		agentNew.setOrderStatus(null);
 		agentNew.setBillNoFormat("MYDL");
 		agentNew.setBusinessTypeCode("MYDL");
+		agentNew.setGoodsValueStl(new BigDecimal("0.00"));
+		agentNew.setPrepaidAmountStl(new BigDecimal("0.00"));
+		agentNew.setFirstAccountsReceivable(new BigDecimal("0.00"));
+		agentNew.setFirstPaymentPayable(new BigDecimal("0.00"));
+		agentNew.setFirstPaidInPayment(new BigDecimal("0.00"));
+		agentNew.setFirstPaidInPaymentDate(null);
+		agentNew.setFirstActualPayment(new BigDecimal("0.00"));
+		agentNew.setFirstActualPaymentDate(null);
+		agentNew.setFinalPaymentPayable(new BigDecimal("0.00"));
+		agentNew.setFinalPaymentReceived(new BigDecimal("0.00"));
+		agentNew.setFinalPaymentReceivedDate(null);
+		agentNew.setFinalPaymentInFull(new BigDecimal("0.00"));
+		agentNew.setFinalPaymentInFullDate(null);
+		agentNew.setBusinessStatus("录入");
+		agentNew.setOrderStatus("录入");
+		agentNew.setReviewStatus("草稿");
+		agentNew.setFirstStatus("0");
+		agentNew.setFinalStatus("0");
+		agentNew.setDownPayment("0");
+		agentNew.setApplyForPayment("0");
+		agentNew.setWhetherReceivedDownPayments("未收货款");
+		agentNew.setWhetherReceivedBalancePayment("未付汇");
 		return agentNew;
 	}
 
@@ -1015,7 +1043,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		} else {
 			throw new RuntimeException("请选择明细");
 		}
-		detail.setBalancePayment("1");
 		detail.setOrderStatus("尾款账单已生成");
 		detail.setExchangeRate(agent.getExchangeRate());
 		List<BFees> feesList = bFeesService.list(new LambdaQueryWrapper<BFees>()
@@ -1115,6 +1142,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		List<Agent> agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
 			.eq(Agent::getTenantId, AuthUtil.getTenantId())
 			.eq(Agent::getIsDeleted, 0)
+			.eq(Agent::getBusinessType, "MYDL")
 			.apply("find_in_set(contract_no,'" + billNo + "')"));
 //		Agent detail = baseMapper.selectById(feeCenterList.get(0).getPid());
 		if (agentList.isEmpty()) {
@@ -1588,7 +1616,6 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				deptName = res.getData().getDeptName();
 			}
 		}
-		agent.setOrderStatus("已结算");
 		BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
 			.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
 			.eq(BusinessType::getIsDeleted, 0)
@@ -1605,8 +1632,21 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			throw new RuntimeException("未找到费用明细");
 		}
 		List<Long> pids = feeCentersList.stream().map(FeeCenter::getPid).distinct().collect(Collectors.toList());
+		List<FeeCenter> feeCentersWK = feeCentersList.stream().filter(e -> "WK".equals(e.getFeeCode())).collect(Collectors.toList());
+		List<FeeCenter> feeCentersSK = feeCentersList.stream().filter(e -> "SFK".equals(e.getFeeCode())).collect(Collectors.toList());
+		String type = "";
+		if (!feeCentersWK.isEmpty() && !feeCentersSK.isEmpty()) {
+			throw new RuntimeException("首款与尾款不能同时付费");
+		}
+		if (!feeCentersWK.isEmpty()) {
+			type = "WK";
+		}
+		if (!feeCentersSK.isEmpty()) {
+			type = "SFK";
+		}
 		List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.in(FeeCenter::getPid, pids)
+			.apply("find_in_set(fee_code,'SXF,YDF,YFK," + type + "')")
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getIsDeleted, 0));
 		List<FeeCenter> feeCenterListD = feeCenters.stream().filter(e -> "D".equals(e.getDc())).collect(Collectors.toList());
@@ -1618,6 +1658,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		List<Agent> agentList = baseMapper.selectList(new LambdaQueryWrapper<Agent>()
 			.eq(Agent::getTenantId, AuthUtil.getTenantId())
 			.eq(Agent::getIsDeleted, 0)
+			.eq(Agent::getBusinessType, "MYDL")
 			.apply("find_in_set(contract_no,'" + billNo + "')"));
 //		Agent detail = baseMapper.selectById(feeCenterList.get(0).getPid());
 		if (agentList.isEmpty()) {
@@ -1626,7 +1667,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		List<Long> agentIdList = agentList.stream().map(Agent::getId).distinct().collect(Collectors.toList());
 		BigDecimal amountD = feeCenterListD.stream().map(FeeCenter::getStlTtlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 		BigDecimal amount = feeCenterListD.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-		List<FeeCenter> feeCenterList = feeCenters.stream().filter(e -> "C".equals(e.getDc())).collect(Collectors.toList());
+		List<FeeCenter> feeCenterList = feeCenters.stream().filter(e -> "C".equals(e.getDc()) && 0 == e.getStlStatus()).collect(Collectors.toList());
 		if (feeCenterList.isEmpty()) {
 			throw new RuntimeException("未找到应付费用明细");
 		}
@@ -1701,9 +1742,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				BFees feesSFK = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
 					.eq(BFees::getTenantId, AuthUtil.getTenantId())
 					.eq(BFees::getIsDeleted, 0)
-					.eq(BFees::getCode, "YFK"));
+					.eq(BFees::getCode, "DSK"));
 				if (feesSFK == null) {
-					throw new RuntimeException("请先维护预付款费用信息");
+					throw new RuntimeException("请先维护待收款费用信息");
 				}
 				feeCenter.setFeeId(feesSFK.getId());
 				feeCenter.setFeeCode(feesSFK.getCode());
@@ -1748,7 +1789,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			if (new BigDecimal("0").compareTo(finalPaymentInFull) != 0) {
 				BigDecimal amountWk = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode()) && item.getContractNo().equals(e.getBillNo()))
 					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
-				if (item.getFinalPaymentInFull().add(amountWk).compareTo(item.getFinalPaymentPayable()) > 0) {
+				if (item.getFinalPaymentInFull().add(amountWk).compareTo(item.getGoodsValue().subtract(item.getPrepaidAmount())) > 0) {
 					throw new RuntimeException("实付金额大于应付金额");
 				}
 				item.setFinalPaymentInFull(item.getFinalPaymentInFull().add(amountWk));
@@ -2039,8 +2080,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		if (!finAccBills.isEmpty()) {
 			finAccBillsService.saveOrUpdateBatch(finAccBills);
 		}
-		updateById(agent);
 		this.updateBatchById(agentList);
+		agent.setOrderStatus("已结算");
+		updateById(agent);
 		return agent;
 	}
 
@@ -2585,64 +2627,108 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		if (agent.getId() == null) {
 			throw new RuntimeException("缺少必要参数");
 		}
+		Long deptId = 0L;
+		String deptName = "";
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid())) {
+			deptId = deptUtils.getDeptPid();
+			R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = res.getData().getDeptName();
+			}
+		}
+		List<BFees> feesList = bFeesService.list(new LambdaQueryWrapper<BFees>()
+			.eq(BFees::getTenantId, AuthUtil.getTenantId())
+			.eq(BFees::getIsDeleted, 0)
+			.apply("find_in_set(code,'SFK,YDF,SXF,YFK,WK')")
+		);
+		if (feesList.isEmpty()) {
+			throw new RuntimeException("请先维护费用信息");
+		}
 		Agent declare = baseMapper.selectById(agent.getId());
-		String feeType = "";
 		if ("FFSQ-SK".equals(agent.getPaidApplication())) {
 			declare.setApplyForPayment("1");
 			declare.setOrderStatus("已生成应付首付款");
-			feeType = "1";
 		} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-			declare.setApplyForPaymentBalance("1");
+			if (ObjectUtils.isNotNull(agent.getAgentItemsRList())) {
+				String billNo = agent.getAgentItemsRList().stream().map(AgentItemsR::getBillNo).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 (AgentItems items : agentItemsList) {
+					items.setApplyForPaymentBalance("1");
+				}
+				agentItemsService.updateBatchById(agentItemsList);
+				declare.setAgentItemsRList(agent.getAgentItemsRList());
+			} else {
+				throw new RuntimeException("请选择明细");
+			}
 			declare.setOrderStatus("已生成应付尾款");
-			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));
+			if (feeCenterService.count(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getPid, agent.getId())
+				.eq(FeeCenter::getDc, "C")
+				.eq(FeeCenter::getFeeCode, "SFK")) > 0) {
+				throw new RuntimeException("首付款已生成,生成失败");
+			}
+			List<FeeCenter> feeCenterList = new ArrayList<>();
+			FeeCenter feeCenterSFK = cAssemblyDataSK("MYDL", declare, "SFK", 1L, 1, deptId, deptName, feesList);
+			if (feeCenterSFK != null) {
+				declare.setFirstPaymentPayable(feeCenterSFK.getAmountLoc());
+				feeCenterList.add(feeCenterSFK);
+			}
+			FeeCenter feeCenterYDF = cAssemblyDataSK("MYDL", declare, "YDF", 2L, 2, deptId, deptName, feesList);
+			if (feeCenterYDF != null) {
+				feeCenterList.add(feeCenterYDF);
+			}
+			FeeCenter feeCenterSXF = cAssemblyDataSK("MYDL", declare, "SXF", 3L, 3, deptId, deptName, feesList);
+			if (feeCenterSXF != null) {
+				feeCenterList.add(feeCenterSXF);
+			}
+			if (!feeCenterList.isEmpty()) {
+				feeCenterService.saveOrUpdateBatch(feeCenterList);
+			}
 		} 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.setCorpId(declare.getAbroadConsignorId());
-			feeCenter.setCorpCnName(declare.getAbroadConsignorCname());
-			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);
+			List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getPid, agent.getId())
+				.eq(FeeCenter::getDc, "C")
+				.eq(FeeCenter::getFeeCode, "WK"));
+			if (!feeCenters.isEmpty()) {
+				BigDecimal amount = feeCenters.stream().map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal amountSum = declare.getGoodsValue().subtract(declare.getPrepaidAmount());
+				BigDecimal thisSettlementAmount = agent.getAgentItemsRList().stream().map(AgentItemsR::getThisSettlementAmount)
+					.reduce(BigDecimal.ZERO, BigDecimal::add);
+				if (amount.compareTo(amountSum) == 0) {
+					throw new RuntimeException("尾款剩余生成金额为零,生成失败");
+				}
+				BigDecimal amountSub = amountSum.subtract(amount);
+				if (thisSettlementAmount.compareTo(amountSub) > 0) {
+					throw new RuntimeException("本次生成金额大于剩余金额,剩余未生成金额:" + amountSub);
+				}
+			}
+			List<FeeCenter> feeCenterList = new ArrayList<>();
+			FeeCenter feeCenterSFK = cAssemblyDataWK("MYDL", declare, "WK", 1L, 1, deptId, deptName, feesList);
+			if (feeCenterSFK != null) {
+				declare.setFinalPaymentPayable(feeCenterSFK.getAmountLoc());
+				feeCenterList.add(feeCenterSFK);
+			}
+			FeeCenter feeCenterYDF = cAssemblyDataWK("MYDL", declare, "YDF", 2L, 2, deptId, deptName, feesList);
+			if (feeCenterYDF != null) {
+				feeCenterList.add(feeCenterYDF);
+			}
+			FeeCenter feeCenterSXF = cAssemblyDataWK("MYDL", declare, "SXF", 3L, 3, deptId, deptName, feesList);
+			if (feeCenterSXF != null) {
+				feeCenterList.add(feeCenterSXF);
+			}
+			if (!feeCenterList.isEmpty()) {
+				feeCenterService.saveOrUpdateBatch(feeCenterList);
+			}
 		}
 		baseMapper.updateById(declare);
 		return declare;
@@ -2867,7 +2953,10 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			if (agent != null) {
 				agentReport.setContractNo(agent.getContractNo());
 				// todo 发票
-				agentReport.setAgentFpReportList(new ArrayList<>());
+				List<AgentFpReport> agentFpReportList = new ArrayList<>();
+				AgentFpReport agentFpReport = new AgentFpReport();
+				agentFpReportList.add(agentFpReport);
+				agentReport.setAgentFpReportList(agentFpReportList);
 				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 					.eq(FeeCenter::getPid, agent.getId())
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
@@ -2926,9 +3015,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 											agentCReport.setExchangeRate(stlAgent.getExchangeRate());
 											agentCReport.setActualAmount(agentCReport.getPaymentInUsd().multiply(agentCReport.getExchangeRate()));
 											agentCReport.setPostElectricFee(feeCenters.stream().filter(e -> "YDF".equals(e.getFeeCode()))
-												.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+												.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 											agentCReport.setServiceCharge(feeCenters.stream().filter(e -> "SXF".equals(e.getFeeCode()))
-												.map(FeeCenter::getAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+												.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 											agentCReportList.add(agentCReport);
 										}
 									}
@@ -2964,9 +3053,22 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				}
 				agentReport.setAgentBillReportList(agentBillReportList);
 				// todo 增值税
-				agentReport.setAgentZzsReportList(new ArrayList<>());
+				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());
+			agentReport.setAgentCReportList(ObjectUtils.isNull(agentReport.getAgentCReportList()) ? new ArrayList<>() : agentReport.getAgentCReportList());
+			agentReport.setAgentFpReportList(ObjectUtils.isNull(agentReport.getAgentFpReportList()) ? new ArrayList<>() : agentReport.getAgentFpReportList());
+			agentReport.setAgentBillReportList(ObjectUtils.isNull(agentReport.getAgentBillReportList()) ? new ArrayList<>() : agentReport.getAgentBillReportList());
+			agentReport.setAgentZzsReportList(ObjectUtils.isNull(agentReport.getAgentZzsReportList()) ? new ArrayList<>() : agentReport.getAgentZzsReportList());
+			map.put("agentDReportList", new ArrayList<>());
+			map.put("agentCReportList", new ArrayList<>());
+			map.put("agentFpReportList", new ArrayList<>());
+			map.put("agentBillReportList", new ArrayList<>());
+			map.put("agentZzsReportList", new ArrayList<>());
 			map.put(MagicValues.DATA, agentReport);
 		} else if (MagicValues.BUSINESS.equals(reportCode) && MagicValues.THE_FIRST_ONE.equals(groupCode) && MagicValues.MYDL.equals(type)) {
 			Agent agent = baseMapper.selectById(billId);
@@ -3007,45 +3109,45 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 						agentSKReport.setBillNo(item);
 						agentSKReport.setPrepaidTime(dateFormat.format(agent.getBusinessDate()));
 						agentSKReport.setSkAmountUsd(sumAmount.subtract(amount));
-						List<FeeCenter> feeCenters =  feeCenterList.stream().filter(e-> "SK".equals(e.getFeeCode())
+						List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> "SK".equals(e.getFeeCode())
 							&& "D".equals(e.getDc())).collect(Collectors.toList());
-						if (!feeCenters.isEmpty()){
+						if (!feeCenters.isEmpty()) {
 							agentSKReport.setExchangeRate(feeCenters.get(0).getExrate());
 						}
-						agentSKReport.setSkAmount(feeCenterList.stream().filter(e-> "SK".equals(e.getFeeCode())&& "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentSKReport.setPostElectricFee(feeCenterList.stream().filter(e-> "YDF".equals(e.getFeeCode())&& "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentSKReport.setServiceCharge(feeCenterList.stream().filter(e-> "SXF".equals(e.getFeeCode())&& "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentSKReport.setRemainingAmount(feeCenterList.stream().filter(e-> "YFK".equals(e.getFeeCode())&& "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
+						agentSKReport.setSkAmount(feeCenterList.stream().filter(e -> "SK".equals(e.getFeeCode()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentSKReport.setPostElectricFee(feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentSKReport.setServiceCharge(feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentSKReport.setRemainingAmount(feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						agentSKReport.setSumAmount(agentSKReport.getSkAmount().add(agentSKReport.getPostElectricFee()
 							.add(agentSKReport.getServiceCharge()).subtract(agentSKReport.getRemainingAmount())));
-						List<FeeCenter> feeCentersC =  feeCenterList.stream().filter(e-> "SK".equals(e.getFeeCode())
+						List<FeeCenter> feeCentersC = feeCenterList.stream().filter(e -> "SK".equals(e.getFeeCode())
 							&& "C".equals(e.getDc())).collect(Collectors.toList());
-						if (!feeCentersC.isEmpty()){
+						if (!feeCentersC.isEmpty()) {
 							agentSKReport.setRealityExchangeRate(feeCentersC.get(0).getStlExrate());
 						}
-						agentSKReport.setRealitySkAmount(feeCenterList.stream().filter(e-> "SK".equals(e.getFeeCode())&& "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentSKReport.setRealityPostElectricFee(feeCenterList.stream().filter(e-> "YDF".equals(e.getFeeCode())&& "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentSKReport.setRealityServiceCharge(feeCenterList.stream().filter(e-> "SXF".equals(e.getFeeCode())&& "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
+						agentSKReport.setRealitySkAmount(feeCenterList.stream().filter(e -> "SK".equals(e.getFeeCode()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentSKReport.setRealityPostElectricFee(feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentSKReport.setRealityServiceCharge(feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						agentSKReport.setRealitySumAmount(agentSKReport.getRealitySkAmount().add(agentSKReport.getRealityPostElectricFee()
 							.add(agentSKReport.getRealityServiceCharge())));
 						agentSKReport.setRepairAmount(agentSKReport.getRealitySumAmount().subtract(agentSKReport.getSumAmount())
 							.subtract(agentSKReport.getRemainingAmount()));
-						if (!agentList.isEmpty()){
-							if (!feeCentersC.isEmpty()){
-								Agent detail = agentList.stream().filter(e-> e.getId().equals(feeCentersC.get(0).getStlPid())).findFirst().orElse(null);
-								if (detail != null){
+						if (!agentList.isEmpty()) {
+							if (!feeCentersC.isEmpty()) {
+								Agent detail = agentList.stream().filter(e -> e.getId().equals(feeCentersC.get(0).getStlPid())).findFirst().orElse(null);
+								if (detail != null) {
 									agentSKReport.setRealityTime(dateFormat.format(detail.getBusinessDate()));
 								}
 							}
 						}
-						agentSKReport.setAgentItems(agentItemsList.stream().filter(e-> e.getBillNo().equals(item)).collect(Collectors.toList()));
+						agentSKReport.setAgentItems(agentItemsList.stream().filter(e -> e.getBillNo().equals(item)).collect(Collectors.toList()));
 						agentSKReportList.add(agentSKReport);
 					}
 				}
@@ -3092,45 +3194,45 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 						agentWKReport.setPrepaidAmount(amount);
 						agentWKReport.setPrepaidTime(dateFormat.format(agent.getBusinessDate()));
 						agentWKReport.setWkAmountUsd(sumAmount.subtract(amount));
-						List<FeeCenter> feeCenters =  feeCenterList.stream().filter(e-> "WK".equals(e.getFeeCode())
-								&& "D".equals(e.getDc())).collect(Collectors.toList());
-						if (!feeCenters.isEmpty()){
+						List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())
+							&& "D".equals(e.getDc())).collect(Collectors.toList());
+						if (!feeCenters.isEmpty()) {
 							agentWKReport.setExchangeRate(feeCenters.get(0).getExrate());
 						}
-						agentWKReport.setWkAmount(feeCenterList.stream().filter(e-> "WK".equals(e.getFeeCode())&& "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentWKReport.setPostElectricFee(feeCenterList.stream().filter(e-> "YDF".equals(e.getFeeCode())&& "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentWKReport.setServiceCharge(feeCenterList.stream().filter(e-> "SXF".equals(e.getFeeCode())&& "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentWKReport.setRemainingAmount(feeCenterList.stream().filter(e-> "YFK".equals(e.getFeeCode())&& "D".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
+						agentWKReport.setWkAmount(feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentWKReport.setPostElectricFee(feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentWKReport.setServiceCharge(feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentWKReport.setRemainingAmount(feeCenterList.stream().filter(e -> "YFK".equals(e.getFeeCode()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						agentWKReport.setSumAmount(agentWKReport.getWkAmount().add(agentWKReport.getPostElectricFee()
 							.add(agentWKReport.getServiceCharge()).subtract(agentWKReport.getRemainingAmount())));
-						List<FeeCenter> feeCentersC =  feeCenterList.stream().filter(e-> "WK".equals(e.getFeeCode())
+						List<FeeCenter> feeCentersC = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())
 							&& "C".equals(e.getDc())).collect(Collectors.toList());
-						if (!feeCentersC.isEmpty()){
+						if (!feeCentersC.isEmpty()) {
 							agentWKReport.setRealityExchangeRate(feeCentersC.get(0).getStlExrate());
 						}
-						agentWKReport.setRealityWkAmount(feeCenterList.stream().filter(e-> "WK".equals(e.getFeeCode())&& "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentWKReport.setRealityPostElectricFee(feeCenterList.stream().filter(e-> "YDF".equals(e.getFeeCode())&& "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
-						agentWKReport.setRealityServiceCharge(feeCenterList.stream().filter(e-> "SXF".equals(e.getFeeCode())&& "C".equals(e.getDc()))
-							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO,BigDecimal::add));
+						agentWKReport.setRealityWkAmount(feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentWKReport.setRealityPostElectricFee(feeCenterList.stream().filter(e -> "YDF".equals(e.getFeeCode()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						agentWKReport.setRealityServiceCharge(feeCenterList.stream().filter(e -> "SXF".equals(e.getFeeCode()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						agentWKReport.setRealitySumAmount(agentWKReport.getRealityWkAmount().add(agentWKReport.getRealityPostElectricFee()
 							.add(agentWKReport.getRealityServiceCharge())));
 						agentWKReport.setRepairAmount(agentWKReport.getRealitySumAmount().subtract(agentWKReport.getSumAmount())
 							.subtract(agentWKReport.getRemainingAmount()));
-						if (!agentList.isEmpty()){
-							if (!feeCentersC.isEmpty()){
-								Agent detail = agentList.stream().filter(e-> e.getId().equals(feeCentersC.get(0).getStlPid())).findFirst().orElse(null);
-								if (detail != null){
+						if (!agentList.isEmpty()) {
+							if (!feeCentersC.isEmpty()) {
+								Agent detail = agentList.stream().filter(e -> e.getId().equals(feeCentersC.get(0).getStlPid())).findFirst().orElse(null);
+								if (detail != null) {
 									agentWKReport.setRealityTime(dateFormat.format(detail.getBusinessDate()));
 								}
 							}
 						}
-						agentWKReport.setAgentItems(agentItemsList.stream().filter(e-> e.getBillNo().equals(item)).collect(Collectors.toList()));
+						agentWKReport.setAgentItems(agentItemsList.stream().filter(e -> e.getBillNo().equals(item)).collect(Collectors.toList()));
 						agentWKReportList.add(agentWKReport);
 					}
 				}
@@ -3343,4 +3445,205 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			return null;
 		}
 	}
+
+	private FeeCenter cAssemblyDataSK(String businessType, Agent detail, String type, long lineNo, int sort, long deptId, String deptName, List<BFees> feesList) {
+		FeeCenter feeCenter = new FeeCenter();
+		feeCenter.setFeeType("1");
+		feeCenter.setCreateTime(new Date());
+		feeCenter.setCreateUser(AuthUtil.getUserId());
+		feeCenter.setCreateUserName(AuthUtil.getUserName());
+		if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+			feeCenter.setCreateDept(deptId + "");
+			feeCenter.setBranchId(deptId + "");
+			feeCenter.setCreateDeptName(deptName);
+		}
+		feeCenter.setBusinessType(businessType);
+		feeCenter.setPid(detail.getId());
+		feeCenter.setLineNo(lineNo);
+		feeCenter.setBillNo(detail.getContractNo());
+		feeCenter.setBillDate(detail.getBusinessDate());
+		feeCenter.setCorpId(detail.getDomesticConsigneeId());
+		feeCenter.setCorpCnName(detail.getDomesticConsigneeCname());
+		feeCenter.setBillCorpId(detail.getCorpId());
+		feeCenter.setBillCorpCnName(detail.getCorpName());
+		feeCenter.setPolId(detail.getPolId());
+		feeCenter.setPolCode(detail.getPolCode());
+		feeCenter.setPolCnName(detail.getPolCnName());
+		feeCenter.setPolEnName(detail.getPolEnName());
+		feeCenter.setPodId(detail.getPodId());
+		feeCenter.setPodCode(detail.getPodCode());
+		feeCenter.setPodCnName(detail.getPodCnName());
+		feeCenter.setPodEnName(detail.getPodEnName());
+		BFees feesSFK = feesList.stream().filter(e -> type.equals(e.getCode()))
+			.findFirst().orElse(null);
+		if (feesSFK == null) {
+			throw new RuntimeException("请先维护" + type + "费用信息");
+		}
+		feeCenter.setFeeId(feesSFK.getId());
+		feeCenter.setFeeCode(feesSFK.getCode());
+		feeCenter.setFeeCnName(feesSFK.getCnName());
+		feeCenter.setFeeEnName(feesSFK.getEnName());
+		feeCenter.setDc("C");
+		feeCenter.setCurCode(feesSFK.getCurNo());
+		feeCenter.setSort(sort);
+		feeCenter.setElementsId(feesSFK.getAccElementId());
+		feeCenter.setElementsCode(feesSFK.getElementsCode());
+		feeCenter.setElementsCnName(feesSFK.getAccElementName());
+		feeCenter.setElementsEnName(feesSFK.getElementsEnName());
+		feeCenter.setUnitNo("JOB");
+		if ("SFK".equals(type)) {
+			feeCenter.setQuantity(new BigDecimal("1"));
+			feeCenter.setAmountLoc(detail.getPrepaidAmount());
+			if (ObjectUtils.isNotNull(detail.getExchangeRate())) {
+				feeCenter.setExrate(detail.getExchangeRate());
+				feeCenter.setPrice(detail.getPrepaidAmount().multiply(detail.getExchangeRate()));
+				feeCenter.setAmount(detail.getPrepaidAmount().multiply(detail.getExchangeRate()));
+			}
+			return feeCenter;
+		} else if ("YDF".equals(type)) {
+			feeCenter.setQuantity(new BigDecimal("1"));
+			String postElectricFee = sysClient.getParamServiceByDept("post.electric.fee", AuthUtil.getTenantId(), AuthUtil.getDeptId());
+			if (ObjectUtils.isNotNull(postElectricFee)) {
+				BigDecimal postElectricFeeAmount = new BigDecimal(postElectricFee);
+				feeCenter.setPrice(postElectricFeeAmount);
+				feeCenter.setAmount(postElectricFeeAmount);
+			} else {
+				feeCenter.setPrice(new BigDecimal("150"));
+				feeCenter.setAmount(new BigDecimal("150"));
+			}
+			return feeCenter;
+		} else if ("SXF".equals(type)) {
+			feeCenter.setQuantity(new BigDecimal("1"));
+			BigDecimal prepaidAmount = detail.getPrepaidAmount().multiply(detail.getExchangeRate());
+			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);
+				feeCenter.setPrice(prepaidAmount.multiply(serviceChargeAmount));
+				feeCenter.setAmount(prepaidAmount.multiply(serviceChargeAmount));
+			} else {
+				BigDecimal serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal("1000"), serviceCharge.length(), RoundingMode.HALF_UP);
+				feeCenter.setPrice(prepaidAmount.multiply(serviceChargeAmount));
+				feeCenter.setAmount(prepaidAmount.multiply(serviceChargeAmount));
+			}
+			return feeCenter;
+		} else if ("YFK".equals(type)) {
+			feeCenter.setQuantity(new BigDecimal("1"));
+			AdvanceCharge advanceCharge = advanceChargeService.getOne(new LambdaQueryWrapper<AdvanceCharge>()
+				.eq(AdvanceCharge::getTenantId, AuthUtil.getTenantId())
+				.eq(AdvanceCharge::getIsDeleted, 0)
+				.eq(AdvanceCharge::getCorpId, detail.getDomesticConsigneeId()));
+			if (advanceCharge != null) {
+				feeCenter.setPrice(new BigDecimal("0").subtract(advanceCharge.getAdvancePaymentBalance()));
+				feeCenter.setAmount(new BigDecimal("0").subtract(advanceCharge.getAdvancePaymentBalance()));
+				return feeCenter;
+			} else {
+				return null;
+			}
+		} else {
+			return null;
+		}
+	}
+
+	private FeeCenter cAssemblyDataWK(String businessType, Agent detail, String type, long lineNo, int sort, long deptId, String deptName, List<BFees> feesList) {
+		FeeCenter feeCenter = new FeeCenter();
+		feeCenter.setFeeType("2");
+		feeCenter.setCreateTime(new Date());
+		feeCenter.setCreateUser(AuthUtil.getUserId());
+		feeCenter.setCreateUserName(AuthUtil.getUserName());
+		if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+			feeCenter.setCreateDept(deptId + "");
+			feeCenter.setBranchId(deptId + "");
+			feeCenter.setCreateDeptName(deptName);
+		}
+		feeCenter.setBusinessType(businessType);
+		feeCenter.setPid(detail.getId());
+		feeCenter.setLineNo(lineNo);
+		feeCenter.setBillNo(detail.getContractNo());
+		feeCenter.setBillDate(detail.getBusinessDate());
+		feeCenter.setCorpId(detail.getDomesticConsigneeId());
+		feeCenter.setCorpCnName(detail.getDomesticConsigneeCname());
+		feeCenter.setBillCorpId(detail.getCorpId());
+		feeCenter.setBillCorpCnName(detail.getCorpName());
+		feeCenter.setPolId(detail.getPolId());
+		feeCenter.setPolCode(detail.getPolCode());
+		feeCenter.setPolCnName(detail.getPolCnName());
+		feeCenter.setPolEnName(detail.getPolEnName());
+		feeCenter.setPodId(detail.getPodId());
+		feeCenter.setPodCode(detail.getPodCode());
+		feeCenter.setPodCnName(detail.getPodCnName());
+		feeCenter.setPodEnName(detail.getPodEnName());
+		BFees feesSFK = feesList.stream().filter(e -> type.equals(e.getCode()))
+			.findFirst().orElse(null);
+		if (feesSFK == null) {
+			throw new RuntimeException("请先维护" + type + "费用信息");
+		}
+		feeCenter.setFeeId(feesSFK.getId());
+		feeCenter.setFeeCode(feesSFK.getCode());
+		feeCenter.setFeeCnName(feesSFK.getCnName());
+		feeCenter.setFeeEnName(feesSFK.getEnName());
+		feeCenter.setDc("C");
+		feeCenter.setCurCode(feesSFK.getCurNo());
+		feeCenter.setSort(sort);
+		feeCenter.setElementsId(feesSFK.getAccElementId());
+		feeCenter.setElementsCode(feesSFK.getElementsCode());
+		feeCenter.setElementsCnName(feesSFK.getAccElementName());
+		feeCenter.setElementsEnName(feesSFK.getElementsEnName());
+		feeCenter.setUnitNo("JOB");
+		List<AgentItemsR> agentItemsRList = detail.getAgentItemsRList();
+		String billNo = agentItemsRList.stream().map(AgentItemsR::getBillNo).collect(Collectors.joining(","));
+		feeCenter.setMblno(billNo);
+		if ("WK".equals(type)) {
+			BigDecimal amount = agentItemsRList.stream().map(AgentItemsR::getThisSettlementAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			feeCenter.setQuantity(new BigDecimal("1"));
+			feeCenter.setAmountLoc(amount);
+			if (ObjectUtils.isNotNull(detail.getExchangeRate())) {
+				feeCenter.setExrate(detail.getExchangeRate());
+				feeCenter.setPrice(feeCenter.getAmountLoc().multiply(detail.getExchangeRate()));
+				feeCenter.setAmount(feeCenter.getAmountLoc().multiply(detail.getExchangeRate()));
+			}
+			return feeCenter;
+		} else if ("YDF".equals(type)) {
+			feeCenter.setQuantity(new BigDecimal("1"));
+			String postElectricFee = sysClient.getParamServiceByDept("post.electric.fee", AuthUtil.getTenantId(), AuthUtil.getDeptId());
+			if (ObjectUtils.isNotNull(postElectricFee)) {
+				BigDecimal postElectricFeeAmount = new BigDecimal(postElectricFee);
+				feeCenter.setPrice(postElectricFeeAmount);
+				feeCenter.setAmount(postElectricFeeAmount);
+			} else {
+				feeCenter.setPrice(new BigDecimal("150"));
+				feeCenter.setAmount(new BigDecimal("150"));
+			}
+			return feeCenter;
+		} else if ("SXF".equals(type)) {
+			feeCenter.setQuantity(new BigDecimal("1"));
+			BigDecimal amount = agentItemsRList.stream().map(AgentItemsR::getThisSettlementAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal prepaidAmount = amount.multiply(detail.getExchangeRate());
+			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);
+				feeCenter.setPrice(prepaidAmount.multiply(serviceChargeAmount));
+				feeCenter.setAmount(prepaidAmount.multiply(serviceChargeAmount));
+			} else {
+				BigDecimal serviceChargeAmount = new BigDecimal("1").divide(new BigDecimal("1000"), serviceCharge.length(), RoundingMode.HALF_UP);
+				feeCenter.setPrice(prepaidAmount.multiply(serviceChargeAmount));
+				feeCenter.setAmount(prepaidAmount.multiply(serviceChargeAmount));
+			}
+			return feeCenter;
+		} else if ("YFK".equals(type)) {
+			feeCenter.setQuantity(new BigDecimal("1"));
+			AdvanceCharge advanceCharge = advanceChargeService.getOne(new LambdaQueryWrapper<AdvanceCharge>()
+				.eq(AdvanceCharge::getTenantId, AuthUtil.getTenantId())
+				.eq(AdvanceCharge::getIsDeleted, 0)
+				.eq(AdvanceCharge::getCorpId, detail.getDomesticConsigneeId()));
+			if (advanceCharge != null) {
+				feeCenter.setPrice(new BigDecimal("0").subtract(advanceCharge.getAdvancePaymentBalance()));
+				feeCenter.setAmount(new BigDecimal("0").subtract(advanceCharge.getAdvancePaymentBalance()));
+				return feeCenter;
+			} else {
+				return null;
+			}
+		} else {
+			return null;
+		}
+	}
 }

+ 25 - 2
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java

@@ -58,6 +58,7 @@ import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -127,10 +128,21 @@ 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() + "对应贸易代理费用信息");
 				}
+				List<Long> ids = feeCenterTradeList.stream().map(FeeCenter::getPid).filter(Objects::nonNull)
+					.distinct().collect(Collectors.toList());
+				List<FeeCenter> feeCenterTradeList1 = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.in(FeeCenter::getPid, ids)
+					.eq(FeeCenter::getDc, "C")
+					.apply("find_in_set(fee_code,'SXF,YDF') and (mblno IS NULL or mblno = '')"));
+				if (!feeCenterTradeList1.isEmpty()){
+					feeCenterTradeList.addAll(feeCenterTradeList1);
+				}
 				List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
 					.eq(AgentItems::getPid, feeCenterTradeList.get(0).getPid())
 					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
@@ -449,10 +461,21 @@ 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() + "对应贸易代理费用信息");
 				}
+				List<Long> ids = feeCenterTradeList.stream().map(FeeCenter::getPid).filter(Objects::nonNull)
+					.distinct().collect(Collectors.toList());
+				List<FeeCenter> feeCenterTradeList1 = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.in(FeeCenter::getPid, ids)
+					.eq(FeeCenter::getDc, "C")
+					.apply("find_in_set(fee_code,'SXF,YDF') and (mblno IS NULL or mblno = '')"));
+				if (!feeCenterTradeList1.isEmpty()){
+					feeCenterTradeList.addAll(feeCenterTradeList1);
+				}
 				List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
 					.eq(AgentItems::getPid, feeCenterTradeList.get(0).getPid())
 					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())

+ 32 - 32
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -1724,39 +1724,39 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						throw new SecurityException("发送消息失败");
 					}
 				}
-				if (ObjectUtils.isNull(order.getDocumentaryDate()) && ObjectUtils.isNull(order.getDeliverQuantity())) {
-					LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-					lambdaQueryWrapper.eq(OrderItems::getPid, order.getId()).eq(OrderItems::getIsDeleted, 0).eq(OrderItems::getTenantId, AuthUtil.getTenantId());
-					// 获取销售单明细数据
-					List<OrderItems> orderItemsList = orderItemsMapper.selectList(lambdaQueryWrapper);
-					//跟单生成
-					order.setOrderItemsList(orderItemsList);
-					order.setDeliverQuantity(orderItemsList.stream().map(OrderItems::getOrderQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
-					order.setDocumentaryDate(order.getDocumentaryDate());
-					// 获取订单费用信息
-					List<OrderFees> orderFeesList = orderFeesService.getOrderFees(order);
-					order.setOrderFeesList(orderFeesList);
-					deliveryClient.saveAddDelivery(order);
-					//发送消息跟单
-					Message sendMessage = new Message();
-					sendMessage.setParameter(String.valueOf(order.getId()));
-					sendMessage.setUserName(AuthUtil.getUserName());
-					sendMessage.setUserId(AuthUtil.getUserId());
-					sendMessage.setToUserId(order.getDocumenterId());
-					sendMessage.setToUserName(order.getDocumenterName());
-					sendMessage.setMessageType(1);
-					sendMessage.setTenantId(AuthUtil.getTenantId());
-					sendMessage.setCreateUser(AuthUtil.getUserId());
-					sendMessage.setCreateTime(new Date());
-					sendMessage.setUrl("/exportTrade/invoice/index");
-					sendMessage.setPageLabel(order.getPageLabel());
-					sendMessage.setPageStatus(order.getPageStatus());
-					sendMessage.setMessageBody("销售订单" + order.getOrderNo() + "已审核通过");
-					R save = messageClient.save(sendMessage);
-					if (!save.isSuccess()) {
-						throw new SecurityException("发送消息失败");
-					}
+//				if (ObjectUtils.isNull(order.getDocumentaryDate()) && ObjectUtils.isNull(order.getDeliverQuantity())) {
+				LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+				lambdaQueryWrapper.eq(OrderItems::getPid, order.getId()).eq(OrderItems::getIsDeleted, 0).eq(OrderItems::getTenantId, AuthUtil.getTenantId());
+				// 获取销售单明细数据
+				List<OrderItems> orderItemsList = orderItemsMapper.selectList(lambdaQueryWrapper);
+				//跟单生成
+				order.setOrderItemsList(orderItemsList);
+				order.setDeliverQuantity(orderItemsList.stream().map(OrderItems::getOrderQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+				order.setDocumentaryDate(order.getDocumentaryDate());
+				// 获取订单费用信息
+				List<OrderFees> orderFeesList = orderFeesService.getOrderFees(order);
+				order.setOrderFeesList(orderFeesList);
+				deliveryClient.saveAddDelivery(order);
+				//发送消息跟单
+				Message sendMessage = new Message();
+				sendMessage.setParameter(String.valueOf(order.getId()));
+				sendMessage.setUserName(AuthUtil.getUserName());
+				sendMessage.setUserId(AuthUtil.getUserId());
+				sendMessage.setToUserId(order.getDocumenterId());
+				sendMessage.setToUserName(order.getDocumenterName());
+				sendMessage.setMessageType(1);
+				sendMessage.setTenantId(AuthUtil.getTenantId());
+				sendMessage.setCreateUser(AuthUtil.getUserId());
+				sendMessage.setCreateTime(new Date());
+				sendMessage.setUrl("/exportTrade/invoice/index");
+				sendMessage.setPageLabel(order.getPageLabel());
+				sendMessage.setPageStatus(order.getPageStatus());
+				sendMessage.setMessageBody("销售订单" + order.getOrderNo() + "已审核通过");
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
 				}
+//				}
 			}
 			baseMapper.updateById(order);
 		}