瀏覽代碼

Merge remote-tracking branch 'origin/dev' into dev

wangzhuo 2 年之前
父節點
當前提交
c1ae92409e
共有 13 個文件被更改,包括 839 次插入17 次删除
  1. 2 2
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBox.java
  2. 1 1
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBoxFees.java
  3. 7 1
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBoxItem.java
  4. 2 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/goods/enums/RedisKey.java
  5. 138 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransferController.java
  6. 41 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/ITransferService.java
  7. 53 9
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java
  8. 556 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransferServiceImpl.java
  9. 5 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransportServiceImpl.java
  10. 2 2
      blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java
  11. 20 0
      blade-service/blade-client/src/main/java/org/springblade/client/RedisClient.java
  12. 7 1
      blade-service/blade-client/src/main/java/org/springblade/client/fees/controller/FeesDescController.java
  13. 5 1
      blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

+ 2 - 2
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBox.java

@@ -226,13 +226,13 @@ public class TradingBox implements Serializable {
 	/**
 	 * 起租,退租地点
 	 */
-	@TableField(exist = false)
+	@ApiModelProperty(value = "地点")
 	private String address;
 
 	/**
 	 * 起租,退租地点id
 	 */
-	@TableField(exist = false)
+	@ApiModelProperty(value = "地点id")
 	private Long addressId;
 
 	/**

+ 1 - 1
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBoxFees.java

@@ -69,7 +69,7 @@ public class TradingBoxFees implements Serializable {
 	/**
 	 * 客户
 	 */
-	@TableField(exist = false)
+	@ApiModelProperty(value = "客户")
 	private String corpName;
 	/**
 	 * 客户id

+ 7 - 1
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBoxItem.java

@@ -235,7 +235,7 @@ public class TradingBoxItem implements Serializable {
 	/**
 	 * 是否计算过租金
 	 */
-	@TableField(exist = false)
+	@ApiModelProperty(value = "费用数量")
 	private int count;
 
 	/**
@@ -244,4 +244,10 @@ public class TradingBoxItem implements Serializable {
 	@ApiModelProperty(value = "修改char值")
 	private String updateChar;
 
+	/**
+	 * 堆存状态(0  堆存中  1 已使用)
+	 */
+	@ApiModelProperty(value = "堆存状态")
+	private String stockpilingStatus;
+
 }

+ 2 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/goods/enums/RedisKey.java

@@ -21,5 +21,7 @@ public class RedisKey {
 	public static final String STOCK_GOODS = "stockGoods";
 	//全部
 	public static final String ALL = "all";
+	//费用名称
+	public static final String FEE_NAME = "feeName";
 
 }

+ 138 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransferController.java

@@ -0,0 +1,138 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.box.tube.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.box.tube.dto.ExportTransportOut;
+import org.springblade.box.tube.dto.TransportItemExcelEnter;
+import org.springblade.box.tube.entity.TradingBox;
+import org.springblade.box.tube.entity.Transport;
+import org.springblade.box.tube.service.ITradingBoxService;
+import org.springblade.box.tube.service.ITransferService;
+import org.springblade.box.tube.service.ITransportService;
+import org.springblade.box.tube.vo.TransportVO;
+import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 调箱 控制器
+ *
+ * @author BladeX
+ * @since 2022-11-16
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/transfer")
+@Api(value = "调箱信息表", tags = "调箱信息表接口")
+public class TransferController extends BladeController {
+
+	private final ITransferService transferService;
+
+	private final ITradingBoxService tradingBoxService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入tradingBox")
+	public R<TradingBox> detail(TradingBox tradingBox) {
+		TradingBox detail = tradingBoxService.getDetail(tradingBox);
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 买(卖)箱表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入tradingBox")
+	public R<IPage<TradingBox>> list(TradingBox tradingBox, Query query) {
+		LambdaQueryWrapper<TradingBox> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(TradingBox::getTenantId, AuthUtil.getTenantId())
+			.eq(TradingBox::getIsDeleted, 0)
+			.like(ObjectUtils.isNotNull(tradingBox.getSysNo()), TradingBox::getSysNo, tradingBox.getSysNo())//业务编号
+			.like(ObjectUtils.isNotNull(tradingBox.getContractNo()), TradingBox::getContractNo, tradingBox.getContractNo())//合同号
+			.like(ObjectUtils.isNotNull(tradingBox.getPurchaseCompanyId()), TradingBox::getPurchaseCompanyId, tradingBox.getPurchaseCompanyId())//买入公司id
+			.eq(ObjectUtils.isNotNull(tradingBox.getStatus()), TradingBox::getStatus, tradingBox.getStatus())//状态
+			.like(ObjectUtils.isNotNull(tradingBox.getCode()), TradingBox::getCode, tradingBox.getCode())//箱号
+			.eq(ObjectUtils.isNotNull(tradingBox.getType()), TradingBox::getType, tradingBox.getType());//业务类型
+		if (tradingBox.getPurchaseDateList() != null && tradingBox.getPurchaseDateList().size() > 1) {//买入时间
+			lambdaQueryWrapper.ge(TradingBox::getPurchaseDate, tradingBox.getPurchaseDateList().get(0));
+			lambdaQueryWrapper.le(TradingBox::getPurchaseDate, tradingBox.getPurchaseDateList().get(1));
+		}
+		lambdaQueryWrapper.orderByDesc(TradingBox::getCreateTime);
+		IPage<TradingBox> pages = tradingBoxService.page(Condition.getPage(query), lambdaQueryWrapper);
+		return R.data(pages);
+	}
+
+	/**
+	 * 保存
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入transport")
+	public R<TradingBox> submit(TradingBox tradingBox) {
+		TradingBox detail = transferService.submit(tradingBox);
+		return R.data(detail);
+	}
+
+	/**
+	 * 租金计算
+	 */
+	@PostMapping("/rentCalculation")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入tradingBox")
+	@RepeatSubmit
+	public R rentCalculation(@Valid @RequestBody TradingBox tradingBox) {
+		return R.data(transferService.rentCalculation(tradingBox));
+	}
+
+	/**
+	 * 撤销租金计算
+	 */
+	@PostMapping("/revokeRentCalculation")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入tradingBox")
+	@RepeatSubmit
+	public R revokeRentCalculation(@Valid @RequestBody TradingBox tradingBox) {
+		return R.data(transferService.revokeRentCalculation(tradingBox));
+	}
+
+}

+ 41 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/ITransferService.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.box.tube.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.box.tube.entity.TradingBox;
+import org.springblade.box.tube.entity.TradingBoxItem;
+import org.springblade.box.tube.entity.Transport;
+
+import java.util.List;
+
+/**
+ * 调箱 服务类
+ *
+ * @author BladeX
+ * @since 2022-11-14
+ */
+public interface ITransferService {
+
+	TradingBox submit(TradingBox tradingBox);
+
+	TradingBox rentCalculation(TradingBox tradingBox);
+
+	TradingBox revokeRentCalculation(TradingBox tradingBox);
+
+	void stockpilingFee(List<String> codeList);
+}

+ 53 - 9
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java

@@ -28,6 +28,7 @@ import org.springblade.box.tube.dto.TradingBoxItemRentExcelEnter;
 import org.springblade.box.tube.entity.*;
 import org.springblade.box.tube.mapper.*;
 import org.springblade.box.tube.service.ITradingBoxService;
+import org.springblade.box.tube.service.ITransferService;
 import org.springblade.box.tube.vo.TradingBoxVO;
 import org.springblade.check.dto.AuditProecessDTO;
 import org.springblade.check.entity.AuditPathsActs;
@@ -47,6 +48,7 @@ import org.springblade.purchase.sales.enums.OrderStatusEnum;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -69,6 +71,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 	private final TradingBoxFeesMapper tradingBoxFeesMapper;
 
+	private final ITransferService transferService;
+
 	private final TradingBoxItemMapper tradingBoxItemMapper;
 
 	private final TradingBoxFilesMapper tradingBoxFilesMapper;
@@ -99,6 +103,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 	private final IPortClient portClient;
 
+	private final RedisTemplate<String, Object> redisTemplate;
+	private IRedisClient redisClient;
+
 	@Override
 	public IPage<TradingBoxVO> selectTradingBoxPage(IPage<TradingBoxVO> page, TradingBoxVO tradingBox) {
 		return page.setRecords(baseMapper.selectTradingBoxPage(page, tradingBox));
@@ -125,7 +132,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
 				.eq(TradingBoxItem::getPid, details.getId());
 			List<TradingBoxItem> tradingBoxItemList = tradingBoxItemMapper.selectList(tradingBoxItemLambdaQueryWrapper);
-			for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+			/*for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
 				//获取费用信息
 				LambdaQueryWrapper<TradingBoxFees> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
 				tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getIsDeleted, 0)
@@ -135,9 +142,15 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					.eq(TradingBoxFees::getPid, details.getId());
 				int count = tradingBoxFeesMapper.selectCount(tradingBoxFeesLambdaQueryWrapper);
 				tradingBoxItem.setCount(count);
-			}
+			}*/
 			details.setTradingBoxItemsList(tradingBoxItemList);
-
+			//商品
+			List<FeesDesc> feesDescList = new ArrayList<>();
+			feesDescList = castToList(redisTemplate.opsForValue().get("feeName"), FeesDesc.class);
+			if (feesDescList.size() == 0) {
+				redisClient.basicData("feeName");
+				feesDescList = castToList(redisTemplate.opsForValue().get("feeName"), FeesDesc.class);
+			}
 			//获取费用信息
 			LambdaQueryWrapper<TradingBoxFees> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getIsDeleted, 0)
@@ -145,14 +158,21 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				.eq(TradingBoxFees::getPid, details.getId());
 			List<TradingBoxFees> tradingBoxFeesList = tradingBoxFeesMapper.selectList(tradingBoxFeesLambdaQueryWrapper);
 			for (TradingBoxFees tradingBoxFees : tradingBoxFeesList) {
-				R<FeesDesc> r = feesDescClient.detail(tradingBoxFees.getItemId());
-				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
-					tradingBoxFees.setItemName(r.getData().getCname());
+				//品名
+				FeesDesc feesDesc = feesDescList.stream().filter(e -> e.getId().equals(tradingBoxFees.getItemId())).findFirst().orElse(null);
+				if (ObjectUtils.isNotNull(feesDesc)) {
+					tradingBoxFees.setItemName(feesDesc.getCname());
+				} else {
+					R<FeesDesc> r = feesDescClient.detail(tradingBoxFees.getItemId());
+					if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+						tradingBoxFees.setItemName(r.getData().getCname());
+					}
 				}
-				CorpsDesc corpsDesc = corpsDescClient.getCorpId(tradingBoxFees.getCorpId());
+
+				/*CorpsDesc corpsDesc = corpsDescClient.getCorpId(tradingBoxFees.getCorpId());
 				if (ObjectUtils.isNotNull(corpsDesc)) {
 					tradingBoxFees.setCorpName(corpsDesc.getCname());
-				}
+				}*/
 			}
 			details.setTradingBoxFeesList(tradingBoxFeesList);
 
@@ -449,7 +469,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			//箱号拼接字符串
 			List<String> codes = tradingBoxItemList.stream().map(TradingBoxItem::getCode).distinct().collect(Collectors.toList());
 			tradingBox.setCode(String.join(",", codes));
-
 			/*StringBuilder boxTypeNumber = new StringBuilder();
 			List<String> boxType = tradingBoxItemList.stream().map(TradingBoxItem::getBoxType).distinct().collect(Collectors.toList());
 			for (String boxType_ : boxType) {
@@ -484,6 +503,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 						} else {
 							tradingBoxItem.setStatus("录入");
 						}
+						transferService.stockpilingFee(codes);
 					}
 					tradingBoxItem.setCreateUser(AuthUtil.getUserId());
 					tradingBoxItem.setCreateTime(new Date());
@@ -1208,6 +1228,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxFees.setQuantity(BigDecimal.valueOf(days));
 			tradingBoxFees.setCurrency(tradingBoxItem.getCurrency());
 			tradingBoxFees.setCode(tradingBoxItem.getCode());
+			tradingBoxFees.setCorpName(tradingBox.getPurchaseCompanyName());
 			//获取费用id
 			R<FeesDesc> fees = feesDescClient.getFeesByName("租金");
 			if (fees.isSuccess() && fees.getData() != null) {
@@ -1238,6 +1259,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
 			tradingBoxItem.setRentEndDate(tradingBox.getRentCalculationDate());
 			tradingBoxItem.setRentStartDate(tradingBox.getRentStartDate());
+			tradingBoxItem.setCount(tradingBoxItem.getCount() + 1);
 			tradingBoxItemMapper.updateById(tradingBoxItem);
 
 			Items items = new Items();
@@ -1362,6 +1384,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxItem.setUpdateTime(new Date());
 			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
 			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
+			tradingBoxItem.setCount(tradingBoxItem.getCount() - 1);
 			if (tradingBoxFeesList.size() == 1) {
 				tradingBoxItem.setRentEndDate(tradingBoxItem.getLeaseCommencementDate());
 				tradingBoxItem.setRentStartDate(tradingBoxItem.getLeaseCommencementDate());
@@ -1770,4 +1793,25 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			}
 		}
 	}
+
+	/**
+	 * 将Object转换成List类型
+	 *
+	 * @param obj   Object对象
+	 * @param clazz 数据类型
+	 * @param <T>   泛型类型
+	 * @return List类型
+	 */
+	public static <T> List<T> castToList(Object obj, Class<T> clazz) {
+		List<T> resList = new ArrayList<>();
+		// 如果不是List<?>对象,是没有办法转换的
+		if (obj instanceof List<?>) {
+			for (Object o : (List<?>) obj) {
+				// 将对应的元素进行类型转换
+				resList.add(clazz.cast(o));
+			}
+			return resList;
+		}
+		return resList;
+	}
 }

+ 556 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransferServiceImpl.java

@@ -0,0 +1,556 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.box.tube.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.AllArgsConstructor;
+import org.springblade.box.tube.entity.*;
+import org.springblade.box.tube.mapper.*;
+import org.springblade.box.tube.service.ITransferService;
+import org.springblade.check.feign.ICheckClient;
+import org.springblade.client.entity.FeesDesc;
+import org.springblade.client.entity.Message;
+import org.springblade.client.feign.*;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.finance.dto.ApplyDTO;
+import org.springblade.finance.feign.IFinanceClient;
+import org.springblade.finance.vojo.Acc;
+import org.springblade.finance.vojo.Items;
+import org.springblade.system.feign.ISysClient;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 买(卖)箱表 服务实现类
+ *
+ * @author BladeX
+ * @since 2022-11-14
+ */
+@Service
+@AllArgsConstructor
+public class TransferServiceImpl implements ITransferService {
+
+	private final TradingBoxFeesMapper tradingBoxFeesMapper;
+
+	private final TradingBoxItemMapper tradingBoxItemMapper;
+
+	private final TradingBoxFilesMapper tradingBoxFilesMapper;
+
+	private final TradingBoxMapper tradingBoxMapper;
+
+	private final ICheckClient iCheckClient;
+
+	private final IFinanceClient financeClient;//财务
+
+	private final ISysClient sysClient;
+
+	private IUserClient userClient;//获取用户信息
+
+	private final IMessageClient messageClient;//消息
+
+	private final ArchivesMapper archivesMapper;
+
+	private ISerialClient serialClient;//生成系统编号
+
+	private IFeesDescClient feesDescClient;//费用
+
+	private ICorpsDescClient corpsDescClient;//公司
+
+	private final ArchivesTrajectoryMapper archivesTrajectoryMapper;
+
+	private final ArchivesFilesMapper archivesFilesMapper;
+
+	private final IContainerDescClient containerDescClient;
+
+	private final IPortClient portClient;
+
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public TradingBox submit(TradingBox tradingBox) {
+		if (tradingBox.getId() == null) {
+			//获取系统编号
+			R billNo = serialClient.getBillNo(tradingBox.getType(), "BOX", tradingBox.getType());
+			if (!billNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				throw new Error("生成系统编号失败");
+			}
+			tradingBox.setSysNo(billNo.getData().toString());
+			tradingBox.setCreateTime(new Date());
+			tradingBox.setCreateUser(AuthUtil.getUserId());
+			tradingBox.setCreateUserName(AuthUtil.getUserName());
+			tradingBox.setTenantId(AuthUtil.getTenantId());
+			tradingBox.setStatus(0);
+			tradingBox.setPurchaseDate(new Date());
+			tradingBoxMapper.insert(tradingBox);
+		} else {
+			tradingBox.setUpdateTime(new Date());
+			tradingBox.setUpdateUser(AuthUtil.getUserId());
+			tradingBox.setUpdateUserName(AuthUtil.getUserName());
+			tradingBoxMapper.updateById(tradingBox);
+		}
+		//明细数据
+		List<TradingBoxItem> tradingBoxItemList = tradingBox.getTradingBoxItemsList();
+		if (ObjectUtils.isNotNull(tradingBoxItemList) && tradingBoxItemList.size() > 0) {
+			//箱号拼接字符串
+			List<String> codes = tradingBoxItemList.stream().map(TradingBoxItem::getCode).distinct().collect(Collectors.toList());
+			tradingBox.setCode(String.join(",", codes));
+			for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+				tradingBoxItem.setAddress(tradingBox.getAddress());
+				tradingBoxItem.setAddressId(tradingBox.getAddressId());
+				//明细数据修改添加
+				if (tradingBoxItem.getId() == null) {
+					tradingBoxItem.setCreateUser(AuthUtil.getUserId());
+					tradingBoxItem.setCreateTime(new Date());
+					tradingBoxItem.setCreateUserName(AuthUtil.getUserName());
+					tradingBoxItem.setTenantId(AuthUtil.getTenantId());
+					tradingBoxItem.setPid(tradingBox.getId());
+					tradingBoxItem.setStatus("待使用");
+					tradingBoxItem.setStockpilingStatus("0");
+					tradingBoxItemMapper.insert(tradingBoxItem);
+				} else {
+					tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
+					tradingBoxItem.setUpdateTime(new Date());
+					tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
+					tradingBoxItem.setPid(tradingBox.getId());
+					tradingBoxItemMapper.updateById(tradingBoxItem);
+				}
+				//更新箱档案信息
+				if (ObjectUtils.isNotNull(tradingBoxItem.getCode())) {
+					Archives archives = new Archives();
+					archives.setStatus("待使用");
+					archives.setCode(tradingBoxItem.getCode());
+					archives.setAddress(tradingBox.getAddress());
+					archives.setAddressId(tradingBox.getAddressId());
+					archives.setNewDate(new Date());
+					archivesMapper.updateCode(archives);
+				} else {
+					throw new RuntimeException("箱号不能为空");
+				}
+			}
+			tradingBox.setTradingBoxItemsList(tradingBoxItemList);
+		}
+		tradingBox.setBoxNumber(tradingBoxItemList.size());
+		tradingBoxMapper.updateById(tradingBox);
+		//费用明细
+		List<TradingBoxFees> tradingBoxFeesList = tradingBox.getTradingBoxFeesList();
+		if (ObjectUtils.isNotNull(tradingBoxFeesList) && tradingBoxFeesList.size() > 0) {
+			for (TradingBoxFees tradingBoxFees : tradingBoxFeesList) {
+				if (tradingBoxFees.getId() == null) {
+					if ("ZR".equals(tradingBox.getType())) {
+						tradingBoxFees.setBillType("租入");
+					} else {
+						tradingBoxFees.setBillType("租出");
+					}
+					tradingBoxFees.setCreateUser(AuthUtil.getUserId());
+					tradingBoxFees.setCreateTime(new Date());
+					tradingBoxFees.setTenantId(AuthUtil.getTenantId());
+					tradingBoxFees.setPid(tradingBox.getId());
+					tradingBoxFeesMapper.insert(tradingBoxFees);
+				} else {
+					tradingBoxFees.setUpdateUser(AuthUtil.getUserId());
+					tradingBoxFees.setUpdateTime(new Date());
+					tradingBoxFees.setPid(tradingBox.getId());
+					tradingBoxFeesMapper.updateById(tradingBoxFees);
+				}
+			}
+			tradingBox.setTradingBoxFeesList(tradingBoxFeesList);
+		}
+		//主表附件
+		List<TradingBoxFiles> tradingBoxFilesList = tradingBox.getTradingBoxFilesList();
+		if (ObjectUtils.isNotNull(tradingBoxFilesList) && tradingBoxFilesList.size() > 0) {
+			for (TradingBoxFiles tradingBoxFiles : tradingBoxFilesList) {
+				if (tradingBoxFiles.getId() == null) {
+					tradingBoxFiles.setCreateUser(AuthUtil.getUserId());
+					tradingBoxFiles.setCreateTime(new Date());
+					tradingBoxFiles.setTenantId(AuthUtil.getTenantId());
+					tradingBoxFiles.setPid(tradingBox.getId());
+					tradingBoxFiles.setType("1");
+					tradingBoxFilesMapper.insert(tradingBoxFiles);
+				} else {
+					tradingBoxFiles.setUpdateUser(AuthUtil.getUserId());
+					tradingBoxFiles.setUpdateTime(new Date());
+					tradingBoxFiles.setPid(tradingBox.getId());
+					tradingBoxFiles.setType("1");
+					tradingBoxFilesMapper.updateById(tradingBoxFiles);
+				}
+			}
+			tradingBox.setTradingBoxFilesList(tradingBoxFilesList);
+		}
+		return tradingBox;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public TradingBox rentCalculation(TradingBox tradingBox) {
+		List<TradingBoxItem> tradingBoxItemList = tradingBox.getTradingBoxItemsList();
+		if (tradingBoxItemList.size() < 1) {
+			throw new RuntimeException("明细不能为空");
+		}
+		int days = 0;
+		if (ObjectUtils.isNotNull(tradingBox.getRentCalculationDate()) && ObjectUtils.isNotNull(tradingBox.getRentStartDate())) {
+			days = (int) ((tradingBox.getRentCalculationDate().getTime() - tradingBox.getRentStartDate().getTime()) / (1000 * 3600 * 24)) + 1;
+		}
+		Long pid = tradingBox.getId();
+
+		//账单数据
+		ApplyDTO applyDTO = new ApplyDTO();
+		applyDTO.setBillType("申请");
+		applyDTO.setTradeType("BOX");
+		applyDTO.setBelongCompany(tradingBox.getPurchaseCompanyName());
+		//账单明细
+		List<Items> itemsList = new ArrayList<>();
+		List<TradingBoxFees> tradingBoxFeesList = new ArrayList<>();
+		for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+			TradingBoxFees tradingBoxFees = new TradingBoxFees();
+			tradingBoxFees.setCorpId(tradingBox.getPurchaseCompanyId());
+			tradingBoxFees.setCorpName(tradingBox.getPurchaseCompanyName());
+			tradingBoxFees.setAmount(tradingBoxItem.getPrice().multiply(BigDecimal.valueOf(days)));
+			tradingBoxFees.setPrice(tradingBoxItem.getPrice());
+			tradingBoxFees.setQuantity(BigDecimal.valueOf(days));
+			tradingBoxFees.setCurrency(tradingBoxItem.getCurrency());
+			tradingBoxFees.setCode(tradingBoxItem.getCode());
+			//获取费用id
+			R<FeesDesc> fees = feesDescClient.getFeesByName("堆存费");
+			if (fees.isSuccess() && fees.getData() != null) {
+				tradingBoxFees.setItemId(fees.getData().getId());
+			}
+			if ("DCF".equals(tradingBox.getType())) {
+				tradingBoxFees.setFeesType(1);
+				tradingBoxFees.setBillType("堆存费");
+			}
+			tradingBoxFees.setPid(tradingBox.getId());
+			tradingBoxFees.setSrcOrderNo(tradingBox.getContractNo());
+			tradingBoxFees.setUnit(tradingBoxItem.getBoxType());
+			tradingBoxFees.setExchangeRate(new BigDecimal(1));
+			tradingBoxFees.setRentStartDate(tradingBox.getRentStartDate());
+			tradingBoxFees.setRentEndDate(tradingBox.getRentCalculationDate());
+			tradingBoxFees.setCreateUser(AuthUtil.getUserId());
+			tradingBoxFees.setCreateTime(new Date());
+			tradingBoxFees.setTenantId(AuthUtil.getTenantId());
+			tradingBoxFees.setSubmitPay(1);
+			tradingBoxFeesMapper.insert(tradingBoxFees);
+			tradingBoxFeesList.add(tradingBoxFees);
+			tradingBoxItem.setAmount(tradingBoxItem.getPrice().multiply(BigDecimal.valueOf(days)));
+			tradingBoxItem.setUpdateTime(new Date());
+			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
+			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
+			tradingBoxItem.setRentEndDate(tradingBox.getRentCalculationDate());
+			tradingBoxItem.setRentStartDate(tradingBox.getRentStartDate());
+			tradingBoxItemMapper.updateById(tradingBoxItem);
+
+			Items items = new Items();
+			if (1 == tradingBoxFees.getFeesType()) {
+				items.setSrcFeesType("收费");
+			} else {
+				items.setSrcFeesType("付费");
+			}
+			items.setSrcBoxBillType(tradingBoxFees.getBillType());
+			items.setItemType(tradingBox.getType());
+			items.setPrice(tradingBoxFees.getPrice());
+			//账单数据
+			items.setAmount(tradingBoxFees.getAmount());
+			items.setQuantity(tradingBoxFees.getQuantity());
+			items.setSrcOrderno(tradingBox.getContractNo());
+			items.setCorpId(tradingBoxFees.getCorpId());
+			items.setSrcParentId(pid);
+			items.setCurrency(tradingBoxFees.getCurrency());
+			items.setSrcType(5);
+			items.setTradeType("BOX");
+			items.setUnit(tradingBoxFees.getUnit());
+			items.setSrcSysNo(tradingBoxFees.getCode());
+			items.setRemarks(tradingBoxFees.getRemarks());
+			items.setSrcBillNo(tradingBox.getSysNo());
+			items.setStatusJT(0);
+			items.setBillNo(tradingBox.getSysNo());
+			items.setStockTime(tradingBox.getPurchaseDate());
+			items.setRentStartDate(tradingBox.getRentStartDate());
+			items.setRentEndDate(tradingBox.getRentCalculationDate());
+			//获取费用id
+			if (ObjectUtils.isNotNull(tradingBoxFees.getItemId())) {
+				items.setCostType(tradingBoxFees.getItemId().toString());
+			}
+			items.setSrcFeesId(tradingBoxFees.getId());
+			itemsList.add(items);
+			applyDTO.setItemsList(itemsList);
+		}
+		if (CollectionUtils.isNotEmpty(itemsList)) {
+			//生成账单
+			R paymentApply = financeClient.paymentApplyBoxTube(applyDTO);
+			if (!paymentApply.isSuccess()) {
+				throw new RuntimeException(paymentApply.getMsg());
+			}
+			//给角色为财务的人发送消息
+			R<String> clientDeptIds = sysClient.getRoleIds(SecureUtil.getTenantId(), "财务");
+			if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
+				R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()));
+				if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
+					for (User datum : userList.getData()) {
+						//循环发送消息
+						Message sendMessage = new Message();
+						sendMessage.setParameter(String.valueOf(pid));
+						sendMessage.setUserName(AuthUtil.getUserName());
+						sendMessage.setUserId(AuthUtil.getUserId());
+						sendMessage.setToUserId(datum.getId());
+						sendMessage.setToUserName(datum.getName());
+						sendMessage.setMessageType(1);
+						sendMessage.setTenantId(AuthUtil.getTenantId());
+						sendMessage.setCreateUser(AuthUtil.getUserId());
+						sendMessage.setCreateTime(new Date());
+						sendMessage.setUrl(tradingBox.getUrl());
+						sendMessage.setPageLabel(tradingBox.getPageLabel());
+						sendMessage.setPageStatus(tradingBox.getPageStatus());
+						sendMessage.setMessageBody("您订单" + tradingBox.getSysNo() + "审核通过,请查看");
+						R save = messageClient.save(sendMessage);
+						if (!save.isSuccess()) {
+							throw new SecurityException("发送消息失败");
+						}
+					}
+				}
+			}
+		}
+		tradingBox.setTradingBoxFeesList(tradingBoxFeesList);
+		return tradingBox;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public TradingBox revokeRentCalculation(TradingBox tradingBox) {
+		List<TradingBoxItem> tradingBoxItemList = tradingBox.getTradingBoxItemsList();
+		if (tradingBoxItemList.size() < 1) {
+			throw new RuntimeException("明细不能为空");
+		}
+		for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+			//获取订单费用信息
+			LambdaQueryWrapper<TradingBoxFees> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getIsDeleted, 0);
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getPid, tradingBox.getId());
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getTenantId, AuthUtil.getTenantId());
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getSubmitPay, 1);
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getCode, tradingBoxItem.getCode());
+			tradingBoxFeesLambdaQueryWrapper.orderByDesc(TradingBoxFees::getCreateTime);
+			List<TradingBoxFees> tradingBoxFeesList = tradingBoxFeesMapper.selectList(tradingBoxFeesLambdaQueryWrapper);
+			if (tradingBoxFeesList.size() > 0) {
+				tradingBoxFeesMapper.deleteById(tradingBoxFeesList.get(0).getId());
+				//获取账单信息
+				Acc acc = new Acc();
+				acc.setSrcParentId(tradingBox.getId());
+				acc.setSrcFeesId(tradingBoxFeesList.get(0).getId());
+				acc.setBillType("堆存费");
+				acc.setTradeType("BOX");
+				acc.setSrcType(5);
+				R<List<Acc>> r = financeClient.getAccListByCondition(acc);
+				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+					for (Acc acc_ : r.getData()) {
+						//判断是否有结算 true 不允许撤销审核  false 删除账单信息并撤销审核
+						if (!acc_.getSettlementAmount().equals(new BigDecimal("0.00"))) {
+							throw new SecurityException("订单已结算,不允许撤销");
+						} else {
+							financeClient.remove(acc_.getId() + "");
+						}
+					}
+				}
+			} else {
+				throw new SecurityException("箱号:" + tradingBoxItem.getCode() + "未计算租金,撤销失败");
+			}
+			tradingBoxItem.setUpdateTime(new Date());
+			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
+			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
+			if (tradingBoxFeesList.size() == 1) {
+				tradingBoxItem.setRentEndDate(tradingBoxItem.getLeaseCommencementDate());
+				tradingBoxItem.setRentStartDate(tradingBoxItem.getLeaseCommencementDate());
+			} else {
+				tradingBoxItem.setRentEndDate(tradingBoxFeesList.get(0).getRentEndDate());
+				tradingBoxItem.setRentStartDate(tradingBoxFeesList.get(0).getRentStartDate());
+			}
+			tradingBoxItemMapper.updateById(tradingBoxItem);
+		}
+		tradingBox.setTradingBoxItemsList(tradingBoxItemList);
+		return tradingBox;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public void stockpilingFee(List<String> codeList) {
+
+		if (ObjectUtils.isNull(codeList) || codeList.size() < 1) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		LambdaQueryWrapper<TradingBoxItem> tradingBoxItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		tradingBoxItemLambdaQueryWrapper.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
+			.eq(TradingBoxItem::getIsDeleted, 0)
+			.eq(TradingBoxItem::getCode, codeList.get(0))
+			.eq(TradingBoxItem::getStockpilingStatus, "0");
+		TradingBoxItem tradingBoxItemDetail = tradingBoxItemMapper.selectOne(tradingBoxItemLambdaQueryWrapper);
+		if (ObjectUtils.isNotNull(tradingBoxItemDetail)) {
+			TradingBox tradingBox = tradingBoxMapper.selectById(tradingBoxItemDetail.getPid());
+			if (ObjectUtils.isNull(tradingBox)) {
+				throw new RuntimeException("未找到单据信息");
+			}else{
+				//账单数据
+				ApplyDTO applyDTO = new ApplyDTO();
+				applyDTO.setBillType("申请");
+				applyDTO.setTradeType("BOX");
+				//账单明细
+				List<Items> itemsList = new ArrayList<>();
+				for (String code : codeList) {
+					LambdaQueryWrapper<TradingBoxItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+					lambdaQueryWrapper.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
+						.eq(TradingBoxItem::getIsDeleted, 0)
+						.eq(TradingBoxItem::getCode, code)
+						.eq(TradingBoxItem::getStockpilingStatus, "0");
+					TradingBoxItem tradingBoxItem1 = tradingBoxItemMapper.selectOne(lambdaQueryWrapper);
+					if (ObjectUtils.isNotNull()) {
+						tradingBoxItem1.setStockpilingStatus("1");
+						tradingBoxItem1.setUpdateTime(new Date());
+						tradingBoxItem1.setUpdateUser(AuthUtil.getUserId());
+						tradingBoxItem1.setUpdateUserName(AuthUtil.getUserName());
+						int days = 0;
+						if (ObjectUtils.isNotNull(tradingBoxItem1.getRentEndDate())) {
+							tradingBoxItem1.setRentStartDate(tradingBoxItem1.getRentEndDate());
+							days = (int) ((new Date().getTime() - tradingBoxItem1.getRentEndDate().getTime()) / (1000 * 3600 * 24)) + 1;
+						} else {
+							tradingBoxItem1.setRentStartDate(tradingBoxItem1.getCreateTime());
+							days = (int) ((new Date().getTime() - tradingBoxItem1.getCreateTime().getTime()) / (1000 * 3600 * 24)) + 1;
+						}
+						tradingBoxItem1.setRentEndDate(new Date());
+						tradingBoxItemMapper.updateById(tradingBoxItem1);
+						TradingBoxFees tradingBoxFees = new TradingBoxFees();
+						tradingBoxFees.setCorpId(tradingBox.getPurchaseCompanyId());
+						tradingBoxFees.setCorpName(tradingBox.getPurchaseCompanyName());
+						tradingBoxFees.setAmount(tradingBoxItem1.getPrice().multiply(BigDecimal.valueOf(days)));
+						tradingBoxFees.setPrice(tradingBoxItem1.getPrice());
+						tradingBoxFees.setQuantity(BigDecimal.valueOf(days));
+						tradingBoxFees.setCurrency(tradingBoxItem1.getCurrency());
+						tradingBoxFees.setCode(tradingBoxItem1.getCode());
+						//获取费用id
+						R<FeesDesc> fees = feesDescClient.getFeesByName("堆存费");
+						if (fees.isSuccess() && fees.getData() != null) {
+							tradingBoxFees.setItemId(fees.getData().getId());
+						}
+						if ("DCF".equals(tradingBox.getType())) {
+							tradingBoxFees.setFeesType(1);
+							tradingBoxFees.setBillType("堆存费");
+						}
+						tradingBoxFees.setPid(tradingBox.getId());
+						tradingBoxFees.setSrcOrderNo(tradingBox.getContractNo());
+						tradingBoxFees.setUnit(tradingBoxItem1.getBoxType());
+						tradingBoxFees.setExchangeRate(new BigDecimal(1));
+						tradingBoxFees.setRentStartDate(tradingBox.getRentStartDate());
+						tradingBoxFees.setRentEndDate(tradingBox.getRentCalculationDate());
+						tradingBoxFees.setCreateUser(AuthUtil.getUserId());
+						tradingBoxFees.setCreateTime(new Date());
+						tradingBoxFees.setTenantId(AuthUtil.getTenantId());
+						tradingBoxFees.setSubmitPay(1);
+						tradingBoxFeesMapper.insert(tradingBoxFees);
+
+						Items items = new Items();
+						if (1 == tradingBoxFees.getFeesType()) {
+							items.setSrcFeesType("收费");
+						} else {
+							items.setSrcFeesType("付费");
+						}
+						items.setSrcBoxBillType(tradingBoxFees.getBillType());
+						items.setItemType(tradingBox.getType());
+						items.setPrice(tradingBoxFees.getPrice());
+						//账单数据
+						items.setAmount(tradingBoxFees.getAmount());
+						items.setQuantity(tradingBoxFees.getQuantity());
+						items.setSrcOrderno(tradingBox.getContractNo());
+						items.setCorpId(tradingBoxFees.getCorpId());
+						items.setSrcParentId(tradingBox.getId());
+						items.setCurrency(tradingBoxFees.getCurrency());
+						items.setSrcType(5);
+						items.setTradeType("BOX");
+						items.setUnit(tradingBoxFees.getUnit());
+						items.setSrcSysNo(tradingBoxFees.getCode());
+						items.setRemarks(tradingBoxFees.getRemarks());
+						items.setSrcBillNo(tradingBox.getSysNo());
+						items.setStatusJT(0);
+						items.setBillNo(tradingBox.getSysNo());
+						items.setStockTime(tradingBox.getPurchaseDate());
+						items.setRentStartDate(tradingBox.getRentStartDate());
+						items.setRentEndDate(tradingBox.getRentCalculationDate());
+						//获取费用id
+						if (ObjectUtils.isNotNull(tradingBoxFees.getItemId())) {
+							items.setCostType(tradingBoxFees.getItemId().toString());
+						}
+						items.setSrcFeesId(tradingBoxFees.getId());
+						itemsList.add(items);
+						applyDTO.setItemsList(itemsList);
+					}
+
+				}
+				applyDTO.setBelongCompany(tradingBox.getPurchaseCompanyName());
+				if (CollectionUtils.isNotEmpty(itemsList)) {
+					//生成账单
+					R paymentApply = financeClient.paymentApplyBoxTube(applyDTO);
+					if (!paymentApply.isSuccess()) {
+						throw new RuntimeException(paymentApply.getMsg());
+					}
+					//给角色为财务的人发送消息
+					R<String> clientDeptIds = sysClient.getRoleIds(SecureUtil.getTenantId(), "财务");
+					if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
+						R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()));
+						if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
+							for (User datum : userList.getData()) {
+								//循环发送消息
+								Message sendMessage = new Message();
+								sendMessage.setParameter(String.valueOf(tradingBox.getId()));
+								sendMessage.setUserName(AuthUtil.getUserName());
+								sendMessage.setUserId(AuthUtil.getUserId());
+								sendMessage.setToUserId(datum.getId());
+								sendMessage.setToUserName(datum.getName());
+								sendMessage.setMessageType(1);
+								sendMessage.setTenantId(AuthUtil.getTenantId());
+								sendMessage.setCreateUser(AuthUtil.getUserId());
+								sendMessage.setCreateTime(new Date());
+								sendMessage.setUrl(tradingBox.getUrl());
+								sendMessage.setPageLabel(tradingBox.getPageLabel());
+								sendMessage.setPageStatus(tradingBox.getPageStatus());
+								sendMessage.setMessageBody("您订单" + tradingBox.getSysNo() + "审核通过,请查看");
+								R save = messageClient.save(sendMessage);
+								if (!save.isSuccess()) {
+									throw new SecurityException("发送消息失败");
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}

+ 5 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransportServiceImpl.java

@@ -28,6 +28,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.box.tube.dto.TransportItemExcelEnter;
 import org.springblade.box.tube.entity.*;
 import org.springblade.box.tube.mapper.*;
+import org.springblade.box.tube.service.ITransferService;
 import org.springblade.box.tube.service.ITransportService;
 import org.springblade.box.tube.vo.TransportVO;
 import org.springblade.check.dto.AuditProecessDTO;
@@ -100,6 +101,8 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 
 	private final IPortClient portClient;
 
+	private final ITransferService transferService;
+
 
 	@Override
 	public IPage<TransportVO> selectTransportPage(IPage<TransportVO> page, TransportVO transport) {
@@ -225,6 +228,8 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 					transportItem.setPid(transport.getId());
 					transportItem.setStatus("录入");
 					transportItemMapper.insert(transportItem);
+
+					transferService.stockpilingFee(codes);
 				} else {
 					transportItem.setUpdateUser(AuthUtil.getUserId());
 					transportItem.setUpdateTime(new Date());

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

@@ -231,8 +231,8 @@ public class AuditProecessController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "查看审核记录", notes = " ")
 	public R findAuditProcessList(@ApiParam(value = "申请表主键", required = true) @RequestParam Long id,
-								  @ApiParam(value = "批次号", required = false) @RequestParam Long batchNo,
-								  @ApiParam(value = "第几次提交", required = false) @RequestParam Integer times) {
+								  @ApiParam(value = "批次号", required = true) @RequestParam Long batchNo,
+								  @ApiParam(value = "第几次提交", required = true) @RequestParam Integer times) {
 		//查询最大批次号
 		LambdaQueryWrapper<AuditProecess> countMaxWrapper = new LambdaQueryWrapper<>();
 		countMaxWrapper

+ 20 - 0
blade-service/blade-client/src/main/java/org/springblade/client/RedisClient.java

@@ -7,6 +7,7 @@ import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.entity.StorageDesc;
 import org.springblade.client.entity.StorageType;
+import org.springblade.client.fees.service.IFeesDescService;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IGoodsDescClient;
 import org.springblade.client.feign.IRedisClient;
@@ -41,6 +42,8 @@ public class RedisClient implements IRedisClient {
 	private final IStockGoodsClient stockGoodsClient;//获取库存帐信息
 	private final RedisTemplate<String, Object> redisTemplate;
 
+	private final IFeesDescService feesDescService;
+
 	@Override
 	public boolean basicData(String type) {
 		if (ObjectUtils.isNull(type)){
@@ -98,6 +101,13 @@ public class RedisClient implements IRedisClient {
 			} else {
 				redisTemplate.opsForValue().getAndSet(RedisKey.STOCK_GOODS, stockGoodsClient.selectStockGoodsAll());
 			}
+			//费用名称
+			if (redisTemplate.hasKey(RedisKey.FEE_NAME)) {
+				redisTemplate.opsForValue().set(RedisKey.FEE_NAME, feesDescService.list(), 30, TimeUnit.DAYS);
+				redisTemplate.persist(type);
+			} else {
+				redisTemplate.opsForValue().getAndSet(RedisKey.FEE_NAME, feesDescService.list());
+			}
 		} else {
 			//用户
 			if (RedisKey.REDIS_USER.equals(type)) {
@@ -159,6 +169,16 @@ public class RedisClient implements IRedisClient {
 					redisTemplate.opsForValue().getAndSet(type, stockGoodsClient.selectStockGoodsAll());
 				}
 			}
+			//费用名称
+			if (RedisKey.FEE_NAME.equals(type)) {
+				//费用名称
+				if (redisTemplate.hasKey(type)) {
+					redisTemplate.opsForValue().set(type, feesDescService.list(), 30, TimeUnit.DAYS);
+					redisTemplate.persist(type);
+				} else {
+					redisTemplate.opsForValue().getAndSet(type, feesDescService.list());
+				}
+			}
 		}
 		System.out.println("商品:" + redisTemplate.opsForValue().get("goods"));
 		System.out.println("客户:" + redisTemplate.opsForValue().get("corps"));

+ 7 - 1
blade-service/blade-client/src/main/java/org/springblade/client/fees/controller/FeesDescController.java

@@ -26,6 +26,7 @@ import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.FeesDesc;
 import org.springblade.client.fees.service.IFeesDescService;
+import org.springblade.client.feign.IRedisClient;
 import org.springblade.client.vo.FeesDescVO;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
@@ -54,6 +55,8 @@ public class FeesDescController extends BladeController {
 
 	private final IFeesDescService feesDescService;
 
+	private final IRedisClient redisClient;//redis缓存处理
+
 	/**
 	 * 详情
 	 */
@@ -145,6 +148,7 @@ public class FeesDescController extends BladeController {
 		if ("NotUNIQUE".equals(feesDescService.selectFeesDescCname(feesDesc))){
 			return R.fail(500,"费用名称已存在");
 		}
+		redisClient.basicData("feeName");
 		return R.data(feesDescService.saveMessage(feesDesc));
 	}
 
@@ -156,7 +160,9 @@ public class FeesDescController extends BladeController {
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(feesDescService.removeByIds(Func.toLongList(ids)));
+		feesDescService.removeByIds(Func.toLongList(ids));
+		redisClient.basicData("feeName");
+		return R.success("操作成功");
 	}
 
 	/**

+ 5 - 1
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -2636,7 +2636,11 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 	public Settlement modifyParts(SettlementDTO dto) {
 		Settlement model = new Settlement();
 		BeanUtils.copyProperties(dto, model);
-
+		if (dto.getBillType().equals("D")){
+			model.setBillType("收费");
+		}else{
+			model.setBillType("付费");
+		}
 		List<Files> filesList = dto.getFilesList();
 		List<Acc> accList = dto.getAccList();
 		List<Items> itemsList = new ArrayList<>();