纪新园 2 лет назад
Родитель
Сommit
a058d550b5
18 измененных файлов с 1060 добавлено и 157 удалено
  1. 10 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IGoodsDescClient.java
  2. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  3. 2 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FinAccBills.java
  4. 15 3
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/entity/FinStlBills.java
  5. 29 8
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/entity/FinStlBillsItems.java
  6. 4 0
      blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/feign/IStockGoodsClient.java
  7. 52 29
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java
  8. 26 13
      blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescController.java
  9. 11 0
      blade-service/blade-client/src/main/java/org/springblade/client/goods/feign/GoodsDescClient.java
  10. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  11. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java
  12. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/IAuditProecessService.java
  13. 193 0
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java
  14. 84 8
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/controller/FinStlBillsController.java
  15. 16 2
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/IFinStlBillsService.java
  16. 488 5
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java
  17. 106 88
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/PriceBankController.java
  18. 9 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/feign/StockGoodsClient.java

+ 10 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IGoodsDescClient.java

@@ -38,6 +38,7 @@ public interface IGoodsDescClient {
 	String GOODS_ITEMSID = API_PREFIX + "selectItemsIdGoods";
 	String GOODS_ALL = API_PREFIX + "selectGoodsDescAll";
 	String GOODS_SPECIFICATION_LIST = API_PREFIX + "goodsSpecificationList";
+	String GOODS_SPECIFICATION_LISTS = API_PREFIX + "goodsSpecificationLists";
 
 	String SELECT_GOODS_SPECIFICATION_ALL = API_PREFIX + "selectGoodsSpecificationAll";
 	String GET_GOODS_IDS = API_PREFIX + "/getGoodsIds";
@@ -227,6 +228,15 @@ public interface IGoodsDescClient {
 	List<GoodsSpecification> goodsSpecificationList(@RequestParam("itemIds") Long itemIds);
 
 	/**
+	 * 根据销售明细的商品id获得商品信息
+	 *
+	 * @param itemIds
+	 * @return
+	 */
+	@GetMapping(GOODS_SPECIFICATION_LISTS)
+	List<GoodsSpecification> goodsSpecificationLists(@RequestParam("itemIds") List<Long> itemIds);
+
+	/**
 	 * 根据名称或品名快捷查询获得商品信息
 	 *
 	 * @param cname

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java

@@ -1391,6 +1391,12 @@ public class Bills implements Serializable {
 	@ApiModelProperty(value = "推送备注(FORWARDING)")
 	private String forwarding;
 
+	/**
+	 * 检验检疫 NO
+	 */
+	@ApiModelProperty(value = "检验检疫 NO")
+	private String iqNo;
+
 
 	/**
 	 * 预配箱型箱量

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

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.finance.fee.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -393,6 +394,7 @@ public class FinAccBills implements Serializable {
 	 * 结算日期
 	 */
 	@ApiModelProperty(value = "结算日期")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date stlDate;
 	/**
 	 * 结算日期

+ 15 - 3
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/entity/FinStlBills.java

@@ -18,6 +18,7 @@ package org.springblade.los.finance.stl.entity;
 
 import java.math.BigDecimal;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -109,6 +110,7 @@ public class FinStlBills implements Serializable {
 	 * 对账/结算日期
 	 */
 	@ApiModelProperty(value = "对账/结算日期")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date billDate;
 	/**
 	 * 客户 id
@@ -301,9 +303,9 @@ public class FinStlBills implements Serializable {
 	@ApiModelProperty(value = "是否销账(结算),用于查询费用(0 全部, 1 是, 2 否)")
 	private Integer isCleared;
 	/**
-	 * 是否开发票,用于查询费用, 0 全部, 1 待开 2 已开 2 不开
+	 * 是否开发票,用于查询费用, 0 全部, 1 待开 2 已开 3 不开
 	 */
-	@ApiModelProperty(value = "是否开发票,用于查询费用, 0 全部, 1 待开 2 已开 2 不开")
+	@ApiModelProperty(value = "是否开发票,用于查询费用, 0 全部, 1 待开 2 已开 3 不开")
 	private Integer isInvoice;
 	/**
 	 * 是否含税价计算, 0 否, 1 是
@@ -391,7 +393,7 @@ public class FinStlBills implements Serializable {
 	@ApiModelProperty(value = "版本")
 	private String version;
 	/**
-	 * 状态(0 正常 1停用)
+	 * 状态 0 = 新建  1=审核提交  2=审核中  3= 审核通过  4=审核驳回
 	 */
 	@ApiModelProperty(value = "状态(0 正常 1停用)")
 	private Integer status;
@@ -437,5 +439,15 @@ public class FinStlBills implements Serializable {
 	@TableField(exist = false)
 	private String businessTypeCode;
 
+	//跳转对应页面的路由
+	@TableField(exist = false)
+	private String url;
+	//页面枚举
+	@TableField(exist = false)
+	private String pageStatus;
+	//页面名字
+	@TableField(exist = false)
+	private String pageLabel;
+
 
 }

+ 29 - 8
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/entity/FinStlBillsItems.java

@@ -16,20 +16,18 @@
  */
 package org.springblade.los.finance.stl.entity;
 
-import java.math.BigDecimal;
-
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
-import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
 /**
  * 业务-财务对账单和结算单明细实体类
  *
@@ -127,6 +125,7 @@ public class FinStlBillsItems implements Serializable {
 	 * 对账/结算日期
 	 */
 	@ApiModelProperty(value = "对账/结算日期")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date billDate;
 	/**
 	 * 业务财务日期
@@ -559,6 +558,22 @@ public class FinStlBillsItems implements Serializable {
 	@ApiModelProperty(value = "是否签收, 0 否, 1 是")
 	private Integer isSignfor;
 	/**
+	 * 签收人id
+	 */
+	@ApiModelProperty(value = "签收人id")
+	private Long signforId;
+	/**
+	 * 签收人
+	 */
+	@ApiModelProperty(value = "签收人")
+	private String signforName;
+	/**
+	 * 签收时间
+	 */
+	@ApiModelProperty(value = "签收时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date signforDate;
+	/**
 	 * 是否对账, 0 否, 1 是
 	 */
 	@ApiModelProperty(value = "是否对账, 0 否, 1 是")
@@ -596,5 +611,11 @@ public class FinStlBillsItems implements Serializable {
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 
+	/**
+	 * 订舱号
+	 */
+	@ApiModelProperty(value = "订舱号")
+	private String bookingNo;
+
 
 }

+ 4 - 0
blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/feign/IStockGoodsClient.java

@@ -39,6 +39,7 @@ public interface IStockGoodsClient {
 	String SELECT_STOCK_PARTS = API_PREFIX + "/selectStockParts";
 	String SELECT_STOCK_PARTS_YCP = API_PREFIX + "/selectStockPartsYCP";
 	String SELECT_LIST_BY_GOODS_ID = API_PREFIX + "/selectListByGoodsId";
+	String SELECT_LIST_BY_GOODS_IDS = API_PREFIX + "/selectListByGoodsIds";
 	String UPDATE_STOCK_LIST = API_PREFIX + "/updateStockList";
 	String SAVE_OR_UPDATE_BATCH_LIST = API_PREFIX + "/saveOrUpdateBatchList";
 	String SAVE_OR_UPDATE_BATCH_LIST_LOG = API_PREFIX + "/saveOrUpdateBatchListLog";
@@ -255,6 +256,9 @@ public interface IStockGoodsClient {
 	@GetMapping(SELECT_LIST_BY_GOODS_ID)
 	List<StockGoods> selectListByGoodsId(@RequestParam("goodId") Long id);
 
+	@GetMapping(SELECT_LIST_BY_GOODS_IDS)
+	List<StockGoods> selectListByGoodsIds(@RequestParam("goodIds") List<Long> ids);
+
 	/**
 	 * 库存总账日志
 	 *

+ 52 - 29
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java

@@ -35,8 +35,6 @@ import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
-import org.springblade.system.user.feign.IUserSearchClient;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -94,48 +92,71 @@ public class CorpsDescController extends BladeController {
 		IPage<CorpsDescVO> pages = corpsDescService.selectCorpsDescPage(Condition.getPage(query), corpsDesc);
 
 		String belongtocompany = "";//所属公司ids
+		StringBuilder adminProfilesIds = new StringBuilder();
+		List<Long> corpIds = new ArrayList<>();
 		for (CorpsDescVO descVO : pages.getRecords()) {
 			if (ObjectUtil.isNotEmpty(descVO.getBelongtocompany())) {
 				belongtocompany = belongtocompany + descVO.getBelongtocompany() + ",";
 			}
+			if (StringUtils.isNotBlank(descVO.getAdminProfiles())) {
+				adminProfilesIds.append(descVO.getAdminProfiles()).append(",");
+			}
+			corpIds.add(descVO.getId());
 		}
+		List<CorpsAddr> corpsAddrList = corpsAddrService.list(new LambdaQueryWrapper<CorpsAddr>()
+			.in(CorpsAddr::getPid, corpIds)
+			.eq(CorpsAddr::getIsDeleted, 0)
+			.eq(CorpsAddr::getStatus, 0)
+			.eq(CorpsAddr::getType, 0));
 		List<CorpsDesc> corpsDescList = corpsDescService.selectByCorpIds(belongtocompany);
-
+		List<User> updateUserList = new ArrayList<>();
+		if (adminProfilesIds.length() > 0) {
+			String ids = adminProfilesIds.substring(0, adminProfilesIds.length() - 1);
+			String lists = Arrays.stream(ids.split(",")).distinct().collect(Collectors.joining(","));
+			updateUserList = userClient.selectUserIds(lists);
+		}
+		List<CorpsTypeDesc> corpsTypeDescList = corpsTypeDescService.list(new LambdaQueryWrapper<CorpsTypeDesc>()
+			.in(CorpsTypeDesc::getCorpId, corpIds));
+		List<Long> typeIdList = corpsTypeDescList.stream().map(CorpsTypeDesc::getCorpTypeId).collect(Collectors.toList());
+		List<CorpsType> corpsTypeList = new ArrayList<>();
+		if (CollectionUtil.isNotEmpty(typeIdList)) {
+			corpsTypeList = corpsTypeService.list(new LambdaQueryWrapper<CorpsType>()
+				.in(CorpsType::getId, typeIdList)
+				.eq(CorpsType::getIsDeleted, 0)
+			);
+		}
 		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
+			List<User> finalUpdateUserList = updateUserList;
+			List<CorpsType> finalCorpsTypeList = corpsTypeList;
 			pages.getRecords().forEach(item -> {
 				if (StringUtils.isNotBlank(item.getAdminProfiles())) {
-					List<User> updateUserList = userClient.selectUserIds(item.getAdminProfiles());
-					StringBuffer stringBuffer = new StringBuffer();
-					if (CollectionUtils.isNotEmpty(updateUserList)) {
-						updateUserList.forEach(items -> {
-							if (items != null) {
-								stringBuffer.append(items.getName()).append(",");
-							}
-						});
+					StringBuilder adminProfilesName = new StringBuilder();
+					for (String e : item.getAdminProfiles().split(",")) {
+						User user = finalUpdateUserList.stream().filter(i -> i.getId().equals(Long.parseLong(e))).findFirst().orElse(null);
+						if (user != null) {
+							adminProfilesName.append(user.getName()).append(",");
+						}
 					}
-					item.setAdminProfilesName(stringBuffer.toString());
+					item.setAdminProfilesName(adminProfilesName.toString());
 				}
 				if (item.getBelongtocompany() != null) {
 					if (ObjectUtil.isNotEmpty(corpsDescList)) {
 						item.setBelongCompany(corpsDescList.stream().filter(e -> e.getId().toString().equals(item.getBelongtocompany())).findFirst().get().getCname());
 					}
 				}
-
-				List<Long> typeIdList = corpsTypeDescService.list(new LambdaQueryWrapper<CorpsTypeDesc>().eq(CorpsTypeDesc::getCorpId, item.getId()))
-					.stream().map(CorpsTypeDesc::getCorpTypeId).collect(Collectors.toList());
-
-				if (CollectionUtil.isNotEmpty(typeIdList)) {
-					String typeName = corpsTypeService.list(new LambdaQueryWrapper<CorpsType>()
-						.in(CorpsType::getId, typeIdList)
-						.eq(CorpsType::getCorpType, item.getCorpType())
-						.eq(CorpsType::getIsDeleted, 0)
-					).stream().map(CorpsType::getCname).collect(Collectors.joining(","));
-					item.setCorpsTypeName(typeName);
+				List<Long> corpsTypeDescList1 = corpsTypeDescList.stream().filter(e -> e.getCorpId().equals(item.getId()))
+					.distinct().map(CorpsTypeDesc::getCorpTypeId).collect(Collectors.toList());
+				if (finalCorpsTypeList.size() > 0 && corpsTypeDescList1.size() > 0) {
+					String corpTypeName = finalCorpsTypeList.stream().filter(e -> corpsTypeDescList1.contains(e.getId()))
+						.map(CorpsType::getCname).collect(Collectors.joining(","));
+					item.setCorpsTypeName(corpTypeName);
 				}
-				//获取客户地址
-				List<CorpsAddr> corpsAddrList = corpsAddrService.list(new QueryWrapper<CorpsAddr>().eq("pid", item.getId()).eq("is_deleted", 0).eq("status", 0).eq("type", 0));
-				if (corpsAddrList != null && corpsAddrList.size() > 0) {
-					item.setAddr(corpsAddrList.get(0).getDetailedAddress());
+				if (!"577435".equals(AuthUtil.getTenantId())) {
+					//获取客户地址
+					List<CorpsAddr> corpsAddrs = corpsAddrList.stream().filter(e -> e.getPid().equals(item.getId())).collect(Collectors.toList());
+					if (corpsAddrs.size() > 0) {
+						item.setAddr(corpsAddrs.get(0).getDetailedAddress());
+					}
 				}
 			});
 		}
@@ -143,7 +164,7 @@ public class CorpsDescController extends BladeController {
 	}
 
 	/**
-	 *  客户详情导出
+	 * 客户详情导出
 	 */
 	@GetMapping("/export")
 	@ApiOperationSupport(order = 2)
@@ -239,8 +260,9 @@ public class CorpsDescController extends BladeController {
 		}
 		return corpsDescService.importCorp(excelList);
 	}
+
 	/**
-	 *  导出分管员模板
+	 * 导出分管员模板
 	 */
 	@GetMapping("/exportAdminProfiles")
 	@ApiOperationSupport(order = 2)
@@ -1058,6 +1080,7 @@ public class CorpsDescController extends BladeController {
 
 	/**
 	 * 根据客户id查询分管员
+	 *
 	 * @param id
 	 * @return
 	 */

+ 26 - 13
blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescController.java

@@ -207,6 +207,22 @@ public class GoodsDescController extends BladeController {
 		IPage<GoodsDesc> iPage = goodsDescService.page(page, goodsDescLambdaQueryWrapper);
 		if (CollectionUtils.isNotEmpty(iPage.getRecords())) {
 			String shoppingMall = "";
+			List<GoodsType> types = new ArrayList<>();
+			StringBuilder typeId = new StringBuilder();
+			List<Long> goodsIds = new ArrayList<>();
+			for (GoodsDesc e : iPage.getRecords()) {
+				typeId.append(e.getGoodsTypeId()).append(",");
+				goodsIds.add(e.getId());
+			}
+			List<StockGoods> stockGoodsList = stockGoodsClient.selectListByGoodsIds(goodsIds);
+			if (typeId.length() > 0) {
+				String ids = typeId.substring(0, typeId.length() - 1);
+				List<String> arr = Arrays.asList(ids.split(","));
+				LambdaQueryWrapper<GoodsType> goodsTypeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				goodsTypeLambdaQueryWrapper.in(GoodsType::getId, arr);
+				types = goodsDescType.list(goodsTypeLambdaQueryWrapper);
+			}
+
 			if (AuthUtil.getUserRole().equals("客户")) {
 				CorpsAttn corpsAttn = corpsAttnService.getOne(new LambdaQueryWrapper<CorpsAttn>()
 					.eq(CorpsAttn::getUserId, AuthUtil.getUserId())
@@ -225,23 +241,20 @@ public class GoodsDescController extends BladeController {
 				}
 			}
 			String finalShoppingMall = shoppingMall;
+			List<GoodsType> finalTypes = types;
 			iPage.getRecords().forEach(e -> {
-				String typeId = e.getGoodsTypeId();
-				String[] split = typeId.split(",");
-				List<String> stringList = Arrays.asList(split);
-				LambdaQueryWrapper<GoodsType> goodsTypeLambdaQueryWrapper = new LambdaQueryWrapper<>();
-				goodsTypeLambdaQueryWrapper.in(GoodsType::getId, stringList);
-				List<GoodsType> types = goodsDescType.list(goodsTypeLambdaQueryWrapper);
-				if (CollectionUtils.isNotEmpty(types)) {
-					List<String> typeStr = types.stream().map(GoodsType::getCname).collect(Collectors.toList());
+				List<GoodsType> list = finalTypes.stream().filter(i -> e.getGoodsTypeId().contains(i.getId() + "")).collect(Collectors.toList());
+				if (CollectionUtils.isNotEmpty(list)) {
+					List<String> typeStr = list.stream().map(GoodsType::getCname).collect(Collectors.toList());
 					e.setGoodsTypeName(typeStr.toString().replace("[", "").replace("]", ""));
 				}
-				e.setPolicyName(salesPolicyClient.getPolicyName(e.getId()));
+				if ("681169".equals(AuthUtil.getTenantId()) || "941197".equals(AuthUtil.getTenantId())){
+					e.setPolicyName(salesPolicyClient.getPolicyName(e.getId()));
+				}
 				e.setShoppingMall(finalShoppingMall);
-
-				List<StockGoods> stockGoodsList = stockGoodsClient.selectListByGoodsId(e.getId());
-				if (ObjectUtils.isNotNull(stockGoodsList) && stockGoodsList.size() > 0) {
-					e.setStockGoodsNumber(stockGoodsList.stream().map(StockGoods::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				List<StockGoods> list1 = stockGoodsList.stream().filter(i -> i.getGoodsId().equals(e.getId())).collect(Collectors.toList());
+				if (ObjectUtils.isNotNull(list1) && list1.size() > 0) {
+					e.setStockGoodsNumber(list1.stream().map(StockGoods::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				}
 			});
 		}

+ 11 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/feign/GoodsDescClient.java

@@ -265,6 +265,17 @@ public class GoodsDescClient implements IGoodsDescClient {
 		return goodsSpecificationList;
 	}
 
+	@Override
+	public List<GoodsSpecification> goodsSpecificationLists(List<Long> itemIds) {
+		// 查询商品规格明细
+		List<GoodsSpecification> goodsSpecificationList = goodsSpecificationService.list(new LambdaQueryWrapper<GoodsSpecification>()
+			.in(GoodsSpecification::getPid, itemIds)
+			.eq(GoodsSpecification::getIsDeleted, 0)
+			.eq(GoodsSpecification::getTenantId, SecureUtil.getTenantId())
+		);
+		return goodsSpecificationList;
+	}
+
 	/**
 	 * 递归查询ID
 	 */

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

@@ -641,7 +641,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
 			.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
 		auditProecessDTO.setTimes(1);
-		auditProecessDTO.setProcessType("退款审批");
+		auditProecessDTO.setProcessType("海运出口审核");
 
 		// 没开启审批流直接走 通过流程
 		if (pathsActs == null || pathsActs.getIsEnable() == 2) {

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

@@ -226,6 +226,8 @@ public class AuditProecessController extends BladeController {
 		}
 		if ("HYCK-DJ".equals(proecess.getCheckType())) {
 			auditProecessService.losBillsCheck(auditProecess);
+		}else if ("HYCK-FFSQ".equals(proecess.getCheckType())) {
+			auditProecessService.losStlBillsCheck(auditProecess);
 		}
 		return R.data(auditProecess);
 	}

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

@@ -52,4 +52,10 @@ public interface IAuditProecessService extends IService<LosAuditProecess> {
 	 * @param auditProecess
 	 */
 	void losBillsCheck(LosAuditProecess auditProecess);
+
+	/**
+	 * 付费申请
+	 * @param auditProecess
+	 */
+	void losStlBillsCheck(LosAuditProecess auditProecess);
 }

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

@@ -39,6 +39,8 @@ import org.springblade.los.check.mapper.AuditPathsActsMapper;
 import org.springblade.los.check.mapper.AuditProecessMapper;
 import org.springblade.los.check.service.IAuditProecessService;
 import org.springblade.los.check.vo.LosAuditProecessVO;
+import org.springblade.los.finance.stl.entity.FinStlBills;
+import org.springblade.los.finance.stl.mapper.FinStlBillsMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -65,6 +67,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 
 	private final BillsMapper billsMapper;
 
+	private final FinStlBillsMapper finStlBillsMapper;
+
 	private final IBCorpsService bCorpsService;
 
 
@@ -418,6 +422,195 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 	}
 
 	@Override
+	public void losStlBillsCheck(LosAuditProecess auditProecess) {
+		//查看最新操作记录,防止重复提交
+		LosAuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		if (proecessTemp == null) {
+			throw new SecurityException("未查到此审批记录,禁止操作");
+		}
+		if ("A".equals(proecessTemp.getAuditStatus()) || "B".equals(proecessTemp.getAuditStatus())) {
+			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
+		}
+
+		if (auditProecess.getAuditStatus() == null || !"S".equals(auditProecess.getAuditStatus())) {
+			throw new SecurityException("审批状态非待审,禁止操作");
+		}
+		//信息
+		Message sendMessage = new Message();
+		sendMessage.setParameter(String.valueOf(auditProecess.getBillId()));
+		sendMessage.setUserName(AuthUtil.getUserName());
+		sendMessage.setUserId(AuthUtil.getUserId());
+		sendMessage.setToUserId(auditProecess.getSendUserId());
+		sendMessage.setToUserName(auditProecess.getSendName());
+		sendMessage.setMessageType(1);
+		sendMessage.setTenantId(AuthUtil.getTenantId());
+		sendMessage.setCreateUser(AuthUtil.getUserId());
+		sendMessage.setCreateTime(new Date());
+		sendMessage.setUrl(auditProecess.getUrl());
+		sendMessage.setPageLabel(auditProecess.getPageLabel());
+		sendMessage.setPageStatus(auditProecess.getPageStatus());
+
+		//用户操作 1.通过  2.驳回
+		Integer operate = auditProecess.getOperate();
+		//查看当前审批是否为最后一级
+		String iffinalItem = auditProecess.getIffinalItem();
+		//审批人
+		auditProecess.setAuditUserId(String.valueOf(AuthUtil.getUserId()));
+		//审批时间
+		auditProecess.setAuditOpTime(new Date());
+
+		FinStlBills bills = finStlBillsMapper.selectById(proecessTemp.getBillId());
+
+		//不是最后一级
+		if ("F".equals(iffinalItem)) {
+
+			//通过
+			if (operate == 1) {
+				//如果是第一级, 则修改状态为审批中
+				if (auditProecess.getLevelId() == 1) {
+					FinStlBills detail = finStlBillsMapper.selectById(auditProecess.getSrcBillId());
+					if (detail == null) {
+						throw new SecurityException("审批通过失败");
+					}
+					detail.setStatus(2);
+					int count = finStlBillsMapper.updateById(detail);
+					if (count > 0) {
+						throw new SecurityException("审批开始修改审核状态失败");
+					}
+				}
+
+				auditProecess.setAuditStatus("A");
+				//查询下一级,开启待审
+				LambdaQueryWrapper<LosAuditProecess> auditProecessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				auditProecessLambdaQueryWrapper
+					.eq(LosAuditProecess::getBatchNo, auditProecess.getBatchNo())
+					.eq(LosAuditProecess::getSrcBillId, auditProecess.getSrcBillId())
+					.eq(LosAuditProecess::getIsDelete, 0)
+					.eq(LosAuditProecess::getActId, auditProecess.getActId())
+					.eq(LosAuditProecess::getBillId, auditProecess.getBillId())
+					.eq(LosAuditProecess::getBillNo, auditProecess.getBillNo())
+					.eq(LosAuditProecess::getTenantId, AuthUtil.getTenantId())
+					.eq(LosAuditProecess::getLevelId, auditProecess.getLevelId() + 1);
+				Integer count = baseMapper.selectCount(auditProecessLambdaQueryWrapper);
+				if (count != null && count > 1) {
+					throw new SecurityException("审核失败,获取下一级信息失败");
+				}
+				LosAuditProecess proecess = baseMapper.selectOne(auditProecessLambdaQueryWrapper);
+				if (proecess == null) {
+					throw new SecurityException("审批通过=>获取下一级信息失败");
+				}
+				proecess.setAuditStatus("S");
+				baseMapper.updateById(proecess);
+
+				SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
+
+				//获得订单创建日期
+				String billsDate = null;
+				if (proecessTemp.getBillId() != null) {
+					if (bills != null) {
+						billsDate = simpleDateFormat.format(bills.getCreateTime());
+					}
+				}
+
+				Message message = new Message();
+				message.setUserName(AuthUtil.getUserName());
+				message.setUserId(AuthUtil.getUserId());
+				message.setParameter(String.valueOf(auditProecess.getBillId()));
+				message.setMessageType(1);
+				message.setTenantId(AuthUtil.getTenantId());
+				if ("海运出口审核".equals(auditProecess.getProcessType())) {
+					message.setMessageBody("您有新的海运出口审核,业务单号:" + "" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				}else if ("付费申请".equals(auditProecess.getProcessType())){
+					message.setMessageBody("您有新的付费申请,申请单号:" + "" + proecessTemp.getBillNo() + ","
+						+ "单据日期:" + billsDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
+				}
+
+				message.setCreateUser(AuthUtil.getUserId());
+				message.setUrl("/iosBasicData/SeafreightExportF/bills/approvalDetails");
+				message.setCreateTime(new Date());
+
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
+			}
+			//不通过
+			else if (operate == 2) {
+				auditProecess.setAuditStatus("B");
+				FinStlBills detail = finStlBillsMapper.selectById(auditProecess.getSrcBillId());
+				if (detail == null) {
+					throw new SecurityException("审批通过失败");
+				}
+				detail.setStatus(4);
+				int count = finStlBillsMapper.updateById(detail);
+				if (count > 0) {
+					throw new SecurityException("修改订单数据失败");
+				}
+
+				sendMessage.setMessageBody("您的审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+
+		}
+		//是最后一级
+		else if ("T".equals(iffinalItem)) {
+			//通过
+			if (operate == 1) {
+				auditProecess.setAuditStatus("A");
+				FinStlBills detail = finStlBillsMapper.selectById(auditProecess.getSrcBillId());
+				if (bills == null) {
+					throw new SecurityException("审批通过失败");
+				}
+				detail.setStatus(3);
+				int count = finStlBillsMapper.updateById(detail);
+				if (count > 0) {
+					throw new SecurityException("修改订单数据失败");
+				}
+
+				sendMessage.setMessageBody("您的审核已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+			//不通过
+			else if (operate == 2) {
+				//todo 调用feign取消
+				auditProecess.setAuditStatus("B");
+				FinStlBills detail = finStlBillsMapper.selectById(auditProecess.getSrcBillId());
+				if (detail == null) {
+					throw new SecurityException("审批通过失败");
+				}
+				detail.setStatus(4);
+				int count = finStlBillsMapper.updateById(detail);
+				if (count > 0) {
+					throw new SecurityException("修改订单数据失败");
+				}
+				sendMessage.setMessageBody("您的审核未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+		} else {
+			throw new SecurityException("审批异常,请联系管理员");
+		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
+		//保存操作记录
+		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
+		auditProecess.setAuditItem(new Date());
+		baseMapper.updateById(auditProecess);
+	}
+
+	@Override
 	public R deteleByBillId(Long billId) {
 		baseMapper.deteleByBillId(billId);
 		return R.data("操作成功");

+ 84 - 8
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/controller/FinStlBillsController.java

@@ -22,6 +22,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
@@ -112,23 +113,63 @@ public class FinStlBillsController extends BladeController {
 	}
 
 	/**
-	 * 财务对账单和结算 确认
+	 * 财务对账单 确认
 	 */
-	@PostMapping("/confirm")
+	@PostMapping("/confirmReconciliation")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "确认", notes = "传入finStlBills")
-	public R confirm(@Valid @RequestBody FinStlBills finStlBills) {
-		return finStlBillsService.confirm(finStlBills);
+	public R confirmReconciliation(@Valid @RequestBody FinStlBills finStlBills) {
+		return finStlBillsService.confirmReconciliation(finStlBills);
 	}
 
 	/**
-	 * 财务对账单和结算 撤销
+	 * 财务对账单 撤销
 	 */
-	@PostMapping("/revoke")
+	@PostMapping("/revokeReconciliation")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "撤销", notes = "传入finStlBills")
-	public R revoke(@Valid @RequestBody FinStlBills finStlBills) {
-		return finStlBillsService.revoke(finStlBills);
+	public R revokeReconciliation(@Valid @RequestBody FinStlBills finStlBills) {
+		return finStlBillsService.revokeReconciliation(finStlBills);
+	}
+
+	/**
+	 * 签收 确认
+	 */
+	@PostMapping("/confirmSignFor")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "确认", notes = "传入finStlBills")
+	public R confirmSignFor(@Valid @RequestBody FinStlBills finStlBills) {
+		return finStlBillsService.confirmSignFor(finStlBills);
+	}
+
+	/**
+	 * 签收 撤销
+	 */
+	@PostMapping("/revokeSignFor")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "撤销", notes = "传入finStlBills")
+	public R revokeSignFor(@Valid @RequestBody FinStlBills finStlBills) {
+		return finStlBillsService.revokeSignFor(finStlBills);
+	}
+
+	/**
+	 * 财务结算 确认
+	 */
+	@PostMapping("/confirmSettlement")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "确认", notes = "传入finStlBills")
+	public R confirmSettlement(@Valid @RequestBody FinStlBills finStlBills) {
+		return finStlBillsService.confirmSettlement(finStlBills);
+	}
+
+	/**
+	 * 财务结算 撤销
+	 */
+	@PostMapping("/revokeSettlement")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "撤销", notes = "传入finStlBills")
+	public R revokeSettlement(@Valid @RequestBody FinStlBills finStlBills) {
+		return finStlBillsService.revokeSettlement(finStlBills);
 	}
 
 
@@ -143,4 +184,39 @@ public class FinStlBillsController extends BladeController {
 	}
 
 
+	/**
+	 * 审核通过
+	 */
+	@PostMapping("/passCheck")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "审核通过", notes = "传入id")
+	@RepeatSubmit
+	public R passCheck(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		return finStlBillsService.passCheck(id);
+	}
+
+	/**
+	 * 审核中
+	 */
+	@PostMapping("/underReview")
+	@ApiOperationSupport(order = 15)
+	@ApiOperation(value = "审核中", notes = "传入id")
+	@RepeatSubmit
+	public R underReview(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		return finStlBillsService.underReview(id);
+	}
+
+	/**
+	 * 审核不通过
+	 */
+	@PostMapping("/passCancel")
+	@ApiOperationSupport(order = 16)
+	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
+	@RepeatSubmit
+	public R passCancel(@ApiParam(value = "财务主表id", required = true) @RequestParam Long id) {
+		finStlBillsService.passCancel(id);
+		return R.success("操作成功");
+	}
+
+
 }

+ 16 - 2
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/IFinStlBillsService.java

@@ -60,14 +60,14 @@ public interface IFinStlBillsService extends IService<FinStlBills> {
 	 * @param finStlBills
 	 * @return
 	 */
-	R confirm(FinStlBills finStlBills);
+	R confirmReconciliation(FinStlBills finStlBills);
 
 	/**
 	 * 财务对账单和结算 撤销
 	 * @param finStlBills
 	 * @return
 	 */
-	R revoke(FinStlBills finStlBills);
+	R revokeReconciliation(FinStlBills finStlBills);
 
 	/**
 	 * 删除 业务-财务对账单和结算
@@ -75,4 +75,18 @@ public interface IFinStlBillsService extends IService<FinStlBills> {
 	 * @return
 	 */
 	R deleteByIds(List<Long> toLongList);
+
+	R confirmSettlement(FinStlBills finStlBills);
+
+	R revokeSettlement(FinStlBills finStlBills);
+
+	R passCheck(Long id);
+
+	R underReview(Long id);
+
+	R passCancel(Long id);
+
+	R confirmSignFor(FinStlBills finStlBills);
+
+	R revokeSignFor(FinStlBills finStlBills);
 }

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

@@ -18,6 +18,7 @@ package org.springblade.los.finance.stl.service.impl;
 
 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.seata.spring.annotation.GlobalTransactional;
@@ -26,10 +27,17 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
+import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.mapper.BillsMapper;
+import org.springblade.los.check.dto.LosAuditProecessDTO;
+import org.springblade.los.check.entity.LosAuditPathsActs;
+import org.springblade.los.check.entity.LosAuditPathsLevels;
+import org.springblade.los.check.service.IAuditPathsActsService;
+import org.springblade.los.check.service.IAuditPathsLevelsService;
+import org.springblade.los.check.service.IAuditProecessService;
 import org.springblade.los.finance.fee.entity.FinAccBills;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.los.finance.stl.entity.FinStlBills;
@@ -45,6 +53,7 @@ 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;
@@ -75,6 +84,14 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 
 	private final IBusinessTypeService bBusinessTypeService;
 
+	private final IBCurrencyService bCurrencyService;
+
+	private final IAuditPathsActsService auditPathsActsService;
+
+	private final IAuditPathsLevelsService auditPathsLevelsService;
+
+	private final IAuditProecessService auditProecessService;
+
 	@Override
 	public IPage<FinStlBillsVO> selectFinStlBillsPage(IPage<FinStlBillsVO> page, FinStlBillsVO finStlBills) {
 		return page.setRecords(baseMapper.selectFinStlBillsPage(page, finStlBills));
@@ -171,7 +188,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
-	public R confirm(FinStlBills finStlBills) {
+	public R confirmReconciliation(FinStlBills finStlBills) {
 		if (finStlBills.getId() == null) {
 			throw new RuntimeException("缺少必要参数");
 		}
@@ -220,7 +237,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				throw new RuntimeException("未找到对应账单信息");
 			}
 		}
-		detail.setIsChecked(1);
+		detail.setStatus(3);
 		baseMapper.updateById(detail);
 		return R.data(detail);
 	}
@@ -228,7 +245,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
-	public R revoke(FinStlBills finStlBills) {
+	public R revokeReconciliation(FinStlBills finStlBills) {
 		if (finStlBills.getId() == null) {
 			throw new RuntimeException("缺少必要参数");
 		}
@@ -236,7 +253,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
 			for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
 				item.setIsChecked(0);
-				item.setBillDate(finStlBills.getBillDate());
+				item.setBillDate(null);
 				item.setUpdateUser(AuthUtil.getUserId());
 				item.setUpdateTime(new Date());
 				item.setUpdateUserName(AuthUtil.getUserName());
@@ -280,7 +297,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				throw new RuntimeException("未找到对应账单信息");
 			}
 		}
-		detail.setIsChecked(2);
+		detail.setStatus(0);
 		baseMapper.updateById(detail);
 		return R.data(detail);
 	}
@@ -307,4 +324,470 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		return R.data("操作成功");
 	}
 
+	@Override
+	public R confirmSettlement(FinStlBills finStlBills) {
+		if (finStlBills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		FinStlBills detail = baseMapper.selectById(finStlBills.getId());
+		if ("D".equals(detail.getDc())) {
+			if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
+				List<FinAccBills> finAccBillsList = new ArrayList<>();
+				for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
+					item.setIsCleared(1);
+					item.setBillDate(finStlBills.getBillDate());
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+					if (finAccBills == null) {
+						throw new RuntimeException("未找到账单明细,操作失败");
+					}
+					boolean status = Boolean.FALSE;
+					if ("CNY".equals(item.getCurCode())) {
+						finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().add(item.getCurrentStlAmount()));
+						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(finAccBills.getStlAmountDr()));
+					} else {
+						finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().add(item.getCurrentStlAmount()));
+						BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
+						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(cny));
+					}
+					if (finAccBills.getAmountDr().compareTo(finAccBills.getStlAmountDr()) == 0 &&
+						finAccBills.getAmountDrUsd().compareTo(finAccBills.getStlAmountDrUsd()) == 0) {
+						status = true;
+					}
+					if (status) {
+						finAccBills.setIsCleared(9);
+					} else {
+						finAccBills.setIsCleared(3);
+					}
+					finAccBills.setStlBillId(detail.getId());
+					finAccBills.setStlBillNo(detail.getBillNo());
+					finAccBills.setStlDate(new Date());
+					finAccBills.setUpdateUser(AuthUtil.getUserId());
+					finAccBills.setUpdateTime(new Date());
+					finAccBills.setUpdateUserName(AuthUtil.getUserName());
+					finAccBillsList.add(finAccBills);
+					if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
+						Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
+						if (bills != null) {
+							bills.setBillingStatus(bills.getBillingStatus() + 1);
+							billsMapper.updateById(bills);
+						}
+					} else {
+						Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
+						if (bills != null) {
+							bills.setBillingStatus(bills.getBillingStatus() + 1);
+							billsMapper.updateById(bills);
+						}
+					}
+				}
+				finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
+				finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+			}
+			detail.setStatus(3);
+		} else {
+			if (detail.getIsApproved() == 1) {
+				//审批数据
+				LosAuditProecessDTO auditProecessDTO = new LosAuditProecessDTO();
+				//获取审批级次
+				List<LosAuditPathsLevels> auditPathsLevels = null;
+				// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
+				LosAuditPathsActs pathsActs = null;
+				//是否开启流程
+				LambdaQueryWrapper<LosAuditPathsActs> auditPathsActsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				auditPathsActsLambdaQueryWrapper
+					.eq(LosAuditPathsActs::getIsEnable, 1)
+					.eq(LosAuditPathsActs::getFidStatus, "status")
+					.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId())
+					.eq(LosAuditPathsActs::getSalesCompanyId, AuthUtil.getDeptId())
+					.eq(LosAuditPathsActs::getActId, 1109);
+				pathsActs = auditPathsActsService.getOne(auditPathsActsLambdaQueryWrapper);
+				//获取审批信息
+				LosAuditPathsActs losAuditPathsActs = auditPathsActsService.getOne(new LambdaQueryWrapper<LosAuditPathsActs>()
+					.eq(LosAuditPathsActs::getActId, 1109)
+					.eq(LosAuditPathsActs::getFidStatus, "status")
+					.eq(LosAuditPathsActs::getSalesCompanyId, AuthUtil.getDeptId())
+					.eq(LosAuditPathsActs::getTenantId, AuthUtil.getTenantId()));
+				Long pathId = losAuditPathsActs.getPathId();
+				auditPathsLevels = auditPathsLevelsService.list(new LambdaQueryWrapper<LosAuditPathsLevels>()
+					.eq(LosAuditPathsLevels::getTenantId, AuthUtil.getTenantId()).eq(LosAuditPathsLevels::getPathId, pathId));
+				auditProecessDTO.setTimes(1);
+				auditProecessDTO.setProcessType("付费申请");
+
+				// 没开启审批流直接走 通过流程
+				if (pathsActs == null || pathsActs.getIsEnable() == 2) {
+					throw new SecurityException("当前租户未查询到审批流配置");
+				} else {
+
+					if (CollectionUtils.isEmpty(auditPathsLevels)) {
+						throw new SecurityException("开启审批失败:未查询到审批信息");
+					}
+					// 绑定审核类型
+					auditProecessDTO.setCheckType("HYCK-FFSQ");
+					// 追加跳转路由url
+					auditProecessDTO.setUrl(finStlBills.getUrl());
+					auditProecessDTO.setPageStatus(finStlBills.getPageStatus());
+					auditProecessDTO.setPageLabel(finStlBills.getPageLabel());
+					auditProecessDTO.setOrderRemark(detail.getRemarks());
+					auditProecessDTO.setPathsLevelsList(auditPathsLevels);
+					auditProecessDTO.setActId(1);
+					auditProecessDTO.setSrcBillId(detail.getId());
+					auditProecessDTO.setBillId(detail.getId());
+					auditProecessDTO.setBillNo(detail.getBillNo());
+					auditProecessDTO.setSendUserId(AuthUtil.getUserId());
+					auditProecessDTO.setSendName(AuthUtil.getUserName());
+					auditProecessDTO.setSendTime(new Date());
+					auditProecessDTO.setBillTime(detail.getCreateTime());
+					auditProecessDTO.setTenantId(AuthUtil.getTenantId());
+					auditProecessDTO.setCorpId(detail.getCorpId());
+					auditProecessDTO.setSalesCompanyId(Long.parseLong(detail.getCreateDept()));
+					auditProecessDTO.setSalesCompanyName(detail.getCreateDeptName());
+					R financeProcess = auditProecessService.createFinanceProcess(auditProecessDTO);
+					if (!financeProcess.isSuccess()) {
+						throw new SecurityException("操作失败,请联系管理员");
+					}
+				}
+				detail.setStatus(1);
+			} else {
+				if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
+					List<FinAccBills> finAccBillsList = new ArrayList<>();
+					for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
+						item.setIsCleared(1);
+						item.setBillDate(finStlBills.getBillDate());
+						item.setUpdateUser(AuthUtil.getUserId());
+						item.setUpdateTime(new Date());
+						item.setUpdateUserName(AuthUtil.getUserName());
+						FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+						if (finAccBills == null) {
+							throw new RuntimeException("未找到账单明细,操作失败");
+						}
+						boolean status = Boolean.FALSE;
+						if ("CNY".equals(item.getCurCode())) {
+							finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().add(item.getCurrentStlAmount()));
+							finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(finAccBills.getStlAmountCr()));
+						} else {
+							finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().add(item.getCurrentStlAmount()));
+							BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
+							finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(cny));
+						}
+						if (finAccBills.getAmountCr().compareTo(finAccBills.getStlAmountCr()) == 0 &&
+							finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
+							status = true;
+						}
+						if (status) {
+							finAccBills.setIsCleared(9);
+						} else {
+							finAccBills.setIsCleared(3);
+						}
+						finAccBills.setStlBillId(detail.getId());
+						finAccBills.setStlBillNo(detail.getBillNo());
+						finAccBills.setStlDate(new Date());
+						finAccBills.setUpdateUser(AuthUtil.getUserId());
+						finAccBills.setUpdateTime(new Date());
+						finAccBills.setUpdateUserName(AuthUtil.getUserName());
+						finAccBillsList.add(finAccBills);
+						if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
+							Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
+							if (bills != null) {
+								bills.setBillingStatus(bills.getBillingStatus() + 1);
+								billsMapper.updateById(bills);
+							}
+						} else {
+							Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
+							if (bills != null) {
+								bills.setBillingStatus(bills.getBillingStatus() + 1);
+								billsMapper.updateById(bills);
+							}
+						}
+					}
+					finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
+					finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+				}
+				detail.setStatus(3);
+			}
+		}
+		baseMapper.updateById(detail);
+		return R.data(detail);
+	}
+
+	@Override
+	public R revokeSettlement(FinStlBills finStlBills) {
+		if (finStlBills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		FinStlBills detail = baseMapper.selectById(finStlBills.getId());
+		if ("D".equals(detail.getDc())) {
+			if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
+				List<FinAccBills> finAccBillsList = new ArrayList<>();
+				for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
+					item.setIsCleared(0);
+					item.setBillDate(null);
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+					if (finAccBills == null) {
+						throw new RuntimeException("未找到账单明细,操作失败");
+					}
+					boolean status = Boolean.FALSE;
+					if ("CNY".equals(item.getCurCode())) {
+						finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().subtract(item.getCurrentStlAmount()));
+						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(finAccBills.getStlAmountDr()));
+					} else {
+						finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().subtract(item.getCurrentStlAmount()));
+						BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
+						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(cny));
+					}
+
+					if (finAccBills.getAmountDr().compareTo(new BigDecimal("0.00")) == 0 &&
+						finAccBills.getAmountDrUsd().compareTo(new BigDecimal("0.00")) == 0) {
+						finAccBills.setIsCleared(0);
+					} else {
+						if (finAccBills.getAmountDr().compareTo(finAccBills.getStlAmountDr()) == 0 &&
+							finAccBills.getAmountDrUsd().compareTo(finAccBills.getStlAmountDrUsd()) == 0) {
+							status = true;
+						}
+						if (status) {
+							finAccBills.setIsCleared(9);
+						} else {
+							finAccBills.setIsCleared(3);
+						}
+					}
+					finAccBills.setStlBillId(detail.getId());
+					finAccBills.setStlBillNo(detail.getBillNo());
+					finAccBills.setStlDate(new Date());
+					finAccBills.setUpdateUser(AuthUtil.getUserId());
+					finAccBills.setUpdateTime(new Date());
+					finAccBills.setUpdateUserName(AuthUtil.getUserName());
+					finAccBillsList.add(finAccBills);
+					if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
+						Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
+						if (bills != null) {
+							bills.setBillingStatus(bills.getBillingStatus() - 1);
+							billsMapper.updateById(bills);
+						}
+					} else {
+						Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
+						if (bills != null) {
+							bills.setBillingStatus(bills.getBillingStatus() - 1);
+							billsMapper.updateById(bills);
+						}
+					}
+				}
+				finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
+				finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+			}
+			detail.setIsCleared(0);
+		} else {
+			if (detail.getIsApproved() == 1) {
+				if (detail.getStatus() > 1) {
+					throw new RuntimeException("正在审核中,撤销失败");
+				}
+				R financeProcess = auditProecessService.deteleByBillId(detail.getId());
+				if (!financeProcess.isSuccess()) {
+					throw new SecurityException("操作失败,请联系管理员");
+				}
+				detail.setStatus(0);
+			} else {
+				if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
+					List<FinAccBills> finAccBillsList = new ArrayList<>();
+					for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
+						item.setIsCleared(0);
+						item.setBillDate(null);
+						item.setUpdateUser(AuthUtil.getUserId());
+						item.setUpdateTime(new Date());
+						item.setUpdateUserName(AuthUtil.getUserName());
+						FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+						if (finAccBills == null) {
+							throw new RuntimeException("未找到账单明细,操作失败");
+						}
+						boolean status = Boolean.FALSE;
+						if ("CNY".equals(item.getCurCode())) {
+							finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().subtract(item.getCurrentStlAmount()));
+							finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(finAccBills.getStlAmountCr()));
+						} else {
+							finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().subtract(item.getCurrentStlAmount()));
+							BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
+							finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(cny));
+						}
+						if (finAccBills.getAmountCr().compareTo(new BigDecimal("0.00")) == 0 &&
+							finAccBills.getAmountCrUsd().compareTo(new BigDecimal("0.00")) == 0) {
+							finAccBills.setIsCleared(0);
+						} else {
+							if (finAccBills.getAmountCr().compareTo(finAccBills.getStlAmountCr()) == 0 &&
+								finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
+								status = true;
+							}
+							if (status) {
+								finAccBills.setIsCleared(9);
+							} else {
+								finAccBills.setIsCleared(3);
+							}
+						}
+						finAccBills.setStlBillId(detail.getId());
+						finAccBills.setStlBillNo(detail.getBillNo());
+						finAccBills.setStlDate(new Date());
+						finAccBills.setUpdateUser(AuthUtil.getUserId());
+						finAccBills.setUpdateTime(new Date());
+						finAccBills.setUpdateUserName(AuthUtil.getUserName());
+						finAccBillsList.add(finAccBills);
+						if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
+							Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
+							if (bills != null) {
+								bills.setBillingStatus(bills.getBillingStatus() - 1);
+								billsMapper.updateById(bills);
+							}
+						} else {
+							Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
+							if (bills != null) {
+								bills.setBillingStatus(bills.getBillingStatus() - 1);
+								billsMapper.updateById(bills);
+							}
+						}
+					}
+					finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
+					finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+				}
+				detail.setIsCleared(0);
+			}
+		}
+		baseMapper.updateById(detail);
+		return R.data(detail);
+	}
+
+	@Override
+	public R passCheck(Long id) {
+		FinStlBills bills = baseMapper.selectById(id);
+		if (bills == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		List<FinStlBillsItems> finStlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
+			.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+			.eq(FinStlBillsItems::getIsDeleted, 0)
+			.eq(FinStlBillsItems::getPid, bills.getId()));
+		List<FinAccBills> finAccBillsList = new ArrayList<>();
+		for (FinStlBillsItems item : finStlBillsItemsList) {
+			item.setIsCleared(1);
+			item.setBillDate(bills.getBillDate());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setUpdateTime(new Date());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			FinAccBills finAccBills = finAccBillsService.getById(item.getAccBillId());
+			if (finAccBills == null) {
+				throw new RuntimeException("未找到账单明细,操作失败");
+			}
+			boolean status = Boolean.FALSE;
+			if ("CNY".equals(item.getCurCode())) {
+				finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().add(item.getCurrentStlAmount()));
+				finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(finAccBills.getStlAmountCr()));
+			} else {
+				finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().add(item.getCurrentStlAmount()));
+				BigDecimal cny = bCurrencyService.converterCny(item.getCurCode(), item.getCurrentStlAmount());
+				finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(cny));
+			}
+			if (finAccBills.getAmountCr().compareTo(finAccBills.getStlAmountCr()) == 0 &&
+				finAccBills.getAmountCrUsd().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
+				status = true;
+			}
+			if (status) {
+				finAccBills.setIsCleared(9);
+			} else {
+				finAccBills.setIsCleared(3);
+			}
+			finAccBills.setStlBillId(bills.getId());
+			finAccBills.setStlBillNo(bills.getBillNo());
+			finAccBills.setStlDate(new Date());
+			finAccBills.setUpdateUser(AuthUtil.getUserId());
+			finAccBills.setUpdateTime(new Date());
+			finAccBills.setUpdateUserName(AuthUtil.getUserName());
+			finAccBillsList.add(finAccBills);
+			if (ObjectUtils.isNotNull(finAccBills.getBusinessBillDivideId()) && finAccBills.getBusinessBillDivideId() != 0) {
+				Bills detail = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
+				if (detail != null) {
+					detail.setBillingStatus(detail.getBillingStatus() + 1);
+					billsMapper.updateById(detail);
+				}
+			} else {
+				Bills detail = billsMapper.selectById(finAccBills.getBusinessBillId());
+				if (detail != null) {
+					detail.setBillingStatus(detail.getBillingStatus() + 1);
+					billsMapper.updateById(detail);
+				}
+			}
+		}
+		finStlBillsItemsService.saveOrUpdateBatch(finStlBillsItemsList);
+		finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+		bills.setIsCleared(1);
+		bills.setStatus(3);
+		baseMapper.updateById(bills);
+		return R.success("操作成功");
+	}
+
+	@Override
+	public R underReview(Long id) {
+		FinStlBills bills = baseMapper.selectById(id);
+		if (bills == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		bills.setStatus(2);
+		baseMapper.updateById(bills);
+
+		return R.success("操作成功");
+	}
+
+	@Override
+	public R passCancel(Long id) {
+		FinStlBills bills = baseMapper.selectById(id);
+		if (bills == null) {
+			throw new SecurityException("审批通过失败");
+		}
+
+		bills.setStatus(4);
+		baseMapper.updateById(bills);
+		return R.success("操作成功");
+	}
+
+	@Override
+	public R confirmSignFor(FinStlBills finStlBills) {
+		if (finStlBills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		FinStlBills detail = baseMapper.selectById(finStlBills.getId());
+		if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
+			for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
+				item.setIsSignfor(1);
+				item.setSignforDate(new Date());
+				item.setSignforId(AuthUtil.getUserId());
+				item.setSignforName(AuthUtil.getUserName());
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateTime(new Date());
+				item.setUpdateUserName(AuthUtil.getUserName());
+			}
+			finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
+		}
+		return R.data(detail);
+	}
+
+	@Override
+	public R revokeSignFor(FinStlBills finStlBills) {
+		if (finStlBills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		FinStlBills detail = baseMapper.selectById(finStlBills.getId());
+		if (ObjectUtils.isNotNull(finStlBills.getFinStlBillsItemsList())) {
+			for (FinStlBillsItems item : finStlBills.getFinStlBillsItemsList()) {
+				item.setIsSignfor(0);
+				item.setSignforDate(null);
+				item.setSignforId(0L);
+				item.setSignforName("");
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateTime(new Date());
+				item.setUpdateUserName(AuthUtil.getUserName());
+			}
+			finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
+		}
+		return R.data(detail);
+	}
+
 }

+ 106 - 88
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/PriceBankController.java

@@ -17,25 +17,22 @@
 package org.springblade.mocha.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 com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-
 import org.springblade.client.entity.CorpsDesc;
-import org.springblade.client.entity.FeesDesc;
 import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.entity.GoodsSpecification;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IGoodsDescClient;
 import org.springblade.client.feign.IRedisClient;
 import org.springblade.client.vo.GoodsDescVO;
+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;
@@ -45,17 +42,18 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.mocha.entity.GoodsSpecificationDto;
+import org.springblade.mocha.entity.PriceBank;
 import org.springblade.mocha.excel.PriceBankExcel;
+import org.springblade.mocha.service.IPriceBankService;
+import org.springblade.mocha.vo.PriceBankVO;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.mocha.entity.PriceBank;
-import org.springblade.mocha.vo.PriceBankVO;
-import org.springblade.mocha.service.IPriceBankService;
-import org.springblade.core.boot.ctrl.BladeController;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -97,22 +95,22 @@ public class PriceBankController extends BladeController {
 	@ApiOperation(value = "分页", notes = "传入priceBank")
 	public R<IPage<PriceBank>> list(PriceBankVO priceBank, Query query) {
 		LambdaQueryWrapper<PriceBank> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(PriceBank::getIsDeleted,0);
-		lambdaQueryWrapper.eq(PriceBank::getStatus,0);
+		lambdaQueryWrapper.eq(PriceBank::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(PriceBank::getStatus, 0);
 		lambdaQueryWrapper.eq(PriceBank::getTenantId, SecureUtil.getTenantId());
-		lambdaQueryWrapper.eq(PriceBank::getTradeType,"CK");
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()),PriceBank::getCname,priceBank.getCname());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()),PriceBank::getCode,priceBank.getCode());
-		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()),PriceBank::getCorpId,priceBank.getCorpId());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()),PriceBank::getSpecs,priceBank.getSpecs());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()),PriceBank::getEname,priceBank.getEname());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
-		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()),PriceBank::getBillType,priceBank.getBillType());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()),PriceBank::getEndTime,priceBank.getDateValidityStart());
-		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()),PriceBank::getEndTime,priceBank.getDateValidityEnd());
+		lambdaQueryWrapper.eq(PriceBank::getTradeType, "CK");
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()), PriceBank::getCname, priceBank.getCname());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()), PriceBank::getCode, priceBank.getCode());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()), PriceBank::getCorpId, priceBank.getCorpId());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()), PriceBank::getSpecs, priceBank.getSpecs());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()), PriceBank::getEname, priceBank.getEname());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()), PriceBank::getEndTime, priceBank.getStatusTime());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()), PriceBank::getBillType, priceBank.getBillType());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()), PriceBank::getEndTime, priceBank.getDateValidityStart());
+		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()), PriceBank::getEndTime, priceBank.getDateValidityEnd());
 		lambdaQueryWrapper.orderByDesc(PriceBank::getId);
 		IPage<PriceBank> pages = priceBankService.page(Condition.getPage(query), lambdaQueryWrapper);
-		if (CollectionUtils.isNotEmpty(pages.getRecords())){
+		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
 			for (PriceBank item : pages.getRecords()) {
 				R<GoodsDescVO> goodsDesc = goodsDescClient.selectGoodsMessage(item.getItemId());
 				if (goodsDesc != null && goodsDesc.getData() != null) {
@@ -120,7 +118,7 @@ public class PriceBankController extends BladeController {
 				}
 				if (item.getCorpId() != null) {
 					R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());
-					if (corpMessage.isSuccess() && corpMessage.getData() != null){
+					if (corpMessage.isSuccess() && corpMessage.getData() != null) {
 						item.setCorpCode(corpMessage.getData().getCode());
 					}
 
@@ -140,24 +138,24 @@ public class PriceBankController extends BladeController {
 		LambdaQueryWrapper<PriceBank> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		if (priceBank.getGoodTypeId() != null) {
 			List<Long> goodTypeMessage = corpsDescClient.getGoodTypeMessage(priceBank.getGoodTypeId());
-			if (CollectionUtils.isNotEmpty(goodTypeMessage)){
+			if (CollectionUtils.isNotEmpty(goodTypeMessage)) {
 				lambdaQueryWrapper.in(PriceBank::getGoodTypeId, goodTypeMessage);
 			}
 		}
-		lambdaQueryWrapper.eq(PriceBank::getIsDeleted,0);
-		lambdaQueryWrapper.eq(PriceBank::getStatus,0);
+		lambdaQueryWrapper.eq(PriceBank::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(PriceBank::getStatus, 0);
 		lambdaQueryWrapper.eq(PriceBank::getTenantId, SecureUtil.getTenantId());
-		lambdaQueryWrapper.eq(PriceBank::getTradeType,"CK");
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()),PriceBank::getCname,priceBank.getCname());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()),PriceBank::getCode,priceBank.getCode());
-		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()),PriceBank::getCorpId,priceBank.getCorpId());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()),PriceBank::getSpecs,priceBank.getSpecs());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getGoodsTypeName()),PriceBank::getGoodsTypeName,priceBank.getGoodsTypeName());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()),PriceBank::getEname,priceBank.getEname());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()),PriceBank::getEndTime,priceBank.getDateValidityStart());
-		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()),PriceBank::getEndTime,priceBank.getDateValidityEnd());
-		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()),PriceBank::getBillType,priceBank.getBillType());
+		lambdaQueryWrapper.eq(PriceBank::getTradeType, "CK");
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()), PriceBank::getCname, priceBank.getCname());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()), PriceBank::getCode, priceBank.getCode());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()), PriceBank::getCorpId, priceBank.getCorpId());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()), PriceBank::getSpecs, priceBank.getSpecs());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getGoodsTypeName()), PriceBank::getGoodsTypeName, priceBank.getGoodsTypeName());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()), PriceBank::getEndTime, priceBank.getStatusTime());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()), PriceBank::getEname, priceBank.getEname());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()), PriceBank::getEndTime, priceBank.getDateValidityStart());
+		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()), PriceBank::getEndTime, priceBank.getDateValidityEnd());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()), PriceBank::getBillType, priceBank.getBillType());
 		lambdaQueryWrapper.orderByDesc(PriceBank::getId);
 
 		if (!"admin".equals(AuthUtil.getUserName())) {
@@ -167,24 +165,41 @@ public class PriceBankController extends BladeController {
 		}
 
 		IPage<PriceBank> pages = priceBankService.page(Condition.getPage(query), lambdaQueryWrapper);
-		if (CollectionUtils.isNotEmpty(pages.getRecords())){
-			pages.getRecords().stream().forEach(item ->{
-				R<GoodsDescVO> goodsDesc = goodsDescClient.selectGoodsMessage(item.getItemId());
-				if (goodsDesc != null && goodsDesc.getData() != null){
-					item.setCnameDescription(goodsDesc.getData().getCnameDescription());
+		StringBuilder goodsIds = new StringBuilder();
+		StringBuilder corpIds = new StringBuilder();
+		List<GoodsDesc> goodsDescList = new ArrayList<>();
+		List<CorpsDesc> corpDescList = new ArrayList<>();
+		List<Long> goodsIdsList = new ArrayList<>();
+		List<GoodsSpecification> goodsSpecificationList = new ArrayList<>();
+		for (PriceBank item : pages.getRecords()) {
+			goodsIds.append(item.getItemId()).append(",");
+			corpIds.append(item.getCorpId()).append(",");
+			goodsIdsList.add(item.getItemId());
+		}
+		if (goodsIds.length() > 0) {
+			String ids = goodsIds.substring(0, goodsIds.length() - 1);
+			goodsDescList = goodsDescClient.selectItemsIdGoods(ids);
+			goodsSpecificationList = goodsDescClient.goodsSpecificationLists(goodsIdsList);
+		}
+		if (corpIds.length() > 0) {
+			String ids = corpIds.substring(0, corpIds.length() - 1);
+			corpDescList = corpsDescClient.selectByCorpIds(ids);
+		}
+		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
+			for (PriceBank item : pages.getRecords()) {
+				GoodsDesc goodsDesc = goodsDescList.stream().filter(e -> e.getId().equals(item.getItemId())).findFirst().orElse(null);
+				if (goodsDesc != null) {
+					item.setCnameDescription(goodsDesc.getCnameDescription());
 				}
-				if (item.getCorpId() != null) {
-					R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());
-					if (corpMessage.isSuccess() && corpMessage.getData() != null){
-						item.setCorpCode(corpMessage.getData().getCode());
-					}
-
+				CorpsDesc corpsDesc = corpDescList.stream().filter(e -> e.getId().equals(item.getCorpId())).findFirst().orElse(null);
+				if (corpsDesc != null) {
+					item.setCorpCode(corpsDesc.getCode());
 				}
-				List<GoodsSpecification> goodsSpecificationList = goodsDescClient.goodsSpecificationList(item.getItemId());
-				List<GoodsSpecificationDto> goodsSpecificationDtoList = BeanUtil.copy(goodsSpecificationList, GoodsSpecificationDto.class);
+				List<GoodsSpecification> list = goodsSpecificationList.stream().filter(e -> e.getPid().equals(item.getItemId())).collect(Collectors.toList());
+				List<GoodsSpecificationDto> goodsSpecificationDtoList = BeanUtil.copy(list, GoodsSpecificationDto.class);
 				item.setGoodsSpecificationList(goodsSpecificationDtoList);
 
-			});
+			}
 		}
 		return R.data(pages);
 	}
@@ -199,24 +214,24 @@ public class PriceBankController extends BladeController {
 		LambdaQueryWrapper<PriceBank> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		if (priceBank.getGoodTypeId() != null) {
 			List<Long> goodTypeMessage = corpsDescClient.getGoodTypeMessage(priceBank.getGoodTypeId());
-			if (CollectionUtils.isNotEmpty(goodTypeMessage)){
+			if (CollectionUtils.isNotEmpty(goodTypeMessage)) {
 				lambdaQueryWrapper.in(PriceBank::getGoodTypeId, goodTypeMessage);
 			}
 		}
-		lambdaQueryWrapper.eq(PriceBank::getIsDeleted,0);
-		lambdaQueryWrapper.eq(PriceBank::getStatus,0);
+		lambdaQueryWrapper.eq(PriceBank::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(PriceBank::getStatus, 0);
 		lambdaQueryWrapper.eq(PriceBank::getTenantId, SecureUtil.getTenantId());
-		lambdaQueryWrapper.eq(PriceBank::getTradeType,"CK");
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()),PriceBank::getCname,priceBank.getCname());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()),PriceBank::getCode,priceBank.getCode());
-		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()),PriceBank::getCorpId,priceBank.getCorpId());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()),PriceBank::getSpecs,priceBank.getSpecs());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getGoodsTypeName()),PriceBank::getGoodsTypeName,priceBank.getGoodsTypeName());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()),PriceBank::getEname,priceBank.getEname());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()),PriceBank::getEndTime,priceBank.getDateValidityStart());
-		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()),PriceBank::getEndTime,priceBank.getDateValidityEnd());
-		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()),PriceBank::getBillType,priceBank.getBillType());
+		lambdaQueryWrapper.eq(PriceBank::getTradeType, "CK");
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()), PriceBank::getCname, priceBank.getCname());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()), PriceBank::getCode, priceBank.getCode());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()), PriceBank::getCorpId, priceBank.getCorpId());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()), PriceBank::getSpecs, priceBank.getSpecs());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getGoodsTypeName()), PriceBank::getGoodsTypeName, priceBank.getGoodsTypeName());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()), PriceBank::getEndTime, priceBank.getStatusTime());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()), PriceBank::getEname, priceBank.getEname());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()), PriceBank::getEndTime, priceBank.getDateValidityStart());
+		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()), PriceBank::getEndTime, priceBank.getDateValidityEnd());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()), PriceBank::getBillType, priceBank.getBillType());
 		lambdaQueryWrapper.orderByDesc(PriceBank::getId);
 		//客户
 		List<CorpsDesc> corpsDescList = new ArrayList<>();
@@ -241,8 +256,8 @@ public class PriceBankController extends BladeController {
 			goodsSpecificationList = castToList(redisTemplate.opsForValue().get("specification"), GoodsSpecification.class);
 		}
 		List<PriceBank> pages = priceBankService.list(lambdaQueryWrapper);
-		if (CollectionUtils.isNotEmpty(pages)){
-			for(PriceBank item :pages){
+		if (CollectionUtils.isNotEmpty(pages)) {
+			for (PriceBank item : pages) {
 				if (ObjectUtils.isNotNull(item.getItemId())) {
 					//商品
 					GoodsDesc goodsDesc = goodsList.stream().filter(goods -> goods.getId().equals(item.getItemId())).findFirst().orElse(null);
@@ -318,6 +333,7 @@ public class PriceBankController extends BladeController {
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(priceBankService.removeByIds(Func.toLongList(ids)));
 	}
+
 	/**
 	 * 分页 出口价格库
 	 */
@@ -326,32 +342,32 @@ public class PriceBankController extends BladeController {
 	@ApiOperation(value = "所有数据", notes = "传入priceBank")
 	public R<List> messageList(PriceBankVO priceBank, Query query) {
 		LambdaQueryWrapper<PriceBank> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(PriceBank::getIsDeleted,0);
-		lambdaQueryWrapper.eq(PriceBank::getStatus,0);
+		lambdaQueryWrapper.eq(PriceBank::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(PriceBank::getStatus, 0);
 		lambdaQueryWrapper.eq(PriceBank::getTenantId, SecureUtil.getTenantId());
-		lambdaQueryWrapper.eq(PriceBank::getTradeType,"CK");
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()),PriceBank::getCname,priceBank.getCname());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()),PriceBank::getCode,priceBank.getCode());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()),PriceBank::getEname,priceBank.getEname());
-		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()),PriceBank::getCorpId,priceBank.getCorpId());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()),PriceBank::getSpecs,priceBank.getSpecs());
-		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getGoodsTypeName()),PriceBank::getGoodsTypeName,priceBank.getGoodsTypeName());
+		lambdaQueryWrapper.eq(PriceBank::getTradeType, "CK");
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()), PriceBank::getCname, priceBank.getCname());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()), PriceBank::getCode, priceBank.getCode());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()), PriceBank::getEname, priceBank.getEname());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()), PriceBank::getCorpId, priceBank.getCorpId());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()), PriceBank::getSpecs, priceBank.getSpecs());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getGoodsTypeName()), PriceBank::getGoodsTypeName, priceBank.getGoodsTypeName());
 		//lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getStartTime,priceBank.getStatusTime());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()),PriceBank::getEndTime,priceBank.getDateValidityStart());
-		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()),PriceBank::getEndTime,priceBank.getDateValidityEnd());
-		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()),PriceBank::getBillType,priceBank.getBillType());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()), PriceBank::getEndTime, priceBank.getStatusTime());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()), PriceBank::getEndTime, priceBank.getDateValidityStart());
+		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()), PriceBank::getEndTime, priceBank.getDateValidityEnd());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()), PriceBank::getBillType, priceBank.getBillType());
 		lambdaQueryWrapper.orderByDesc(PriceBank::getId);
 		List<PriceBank> list = priceBankService.list(lambdaQueryWrapper);
-		if (CollectionUtils.isNotEmpty(list)){
-			list.stream().forEach(item ->{
+		if (CollectionUtils.isNotEmpty(list)) {
+			list.stream().forEach(item -> {
 				R<GoodsDescVO> goodsDesc = goodsDescClient.selectGoodsMessage(item.getItemId());
-				if (goodsDesc != null && goodsDesc.getData() != null){
+				if (goodsDesc != null && goodsDesc.getData() != null) {
 					item.setCnameDescription(goodsDesc.getData().getCnameDescription());
 				}
 				if (item.getCorpId() != null) {
 					R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());
-					if (corpMessage.isSuccess() && corpMessage.getData() != null){
+					if (corpMessage.isSuccess() && corpMessage.getData() != null) {
 						item.setCorpCode(corpMessage.getData().getCode());
 					}
 
@@ -360,6 +376,7 @@ public class PriceBankController extends BladeController {
 		}
 		return R.data(priceBankService.list(lambdaQueryWrapper));
 	}
+
 	/**
 	 * 导出模板
 	 */
@@ -370,6 +387,7 @@ public class PriceBankController extends BladeController {
 		List<PriceBankExcel> list = new ArrayList<>();
 		ExcelUtil.export(response, "价格库", "价格管理数据表", list, PriceBankExcel.class);
 	}
+
 	/**
 	 * 导入价格
 	 */
@@ -378,10 +396,10 @@ public class PriceBankController extends BladeController {
 	@ApiOperation(value = "导入价格", notes = "传入excel")
 	public R importUser(MultipartFile file) {
 		List<PriceBankExcel> excelList = ExcelUtil.read(file, PriceBankExcel.class);
-		if (CollectionUtils.isEmpty(excelList)){
+		if (CollectionUtils.isEmpty(excelList)) {
 			throw new SecurityException("数据不能为空");
 		}
-		return priceBankService.importUser(excelList,false);
+		return priceBankService.importUser(excelList, false);
 	}
 
 	/**

+ 9 - 0
blade-service/blade-stock/src/main/java/org/springblade/stock/feign/StockGoodsClient.java

@@ -445,6 +445,15 @@ public class StockGoodsClient implements IStockGoodsClient {
 	}
 
 	@Override
+	public List<StockGoods> selectListByGoodsIds(List<Long> ids) {
+		LambdaQueryWrapper<StockGoods> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(StockGoods::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(StockGoods::getTenantId, AuthUtil.getTenantId());
+		lambdaQueryWrapper.in(StockGoods::getGoodsId, ids);
+		return stockGoodsService.list(lambdaQueryWrapper);
+	}
+
+	@Override
 	public boolean saveOrUpdateBatchListLog(List<StockGoodsLog> stockGoodsLogList) {
 		return stockGoodsLogService.saveOrUpdateBatch(stockGoodsLogList);
 	}