Browse Source

2024年12月12日17:26:59

纪新园 1 year ago
parent
commit
ea4c7dbf48
20 changed files with 547 additions and 47 deletions
  1. 6 1
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/CorpsDescImportExcel.java
  2. 1 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/MagicValues.java
  3. 46 5
      blade-service/blade-los/src/main/java/org/springblade/los/app/controller/IndexController.java
  4. 22 0
      blade-service/blade-los/src/main/java/org/springblade/los/app/dto/ProfitCustomersSort.java
  5. 10 0
      blade-service/blade-los/src/main/java/org/springblade/los/app/service/IndexService.java
  6. 368 13
      blade-service/blade-los/src/main/java/org/springblade/los/app/service/impl/IndexServiceImpl.java
  7. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/cntr/service/impl/BCntrTypesServiceImpl.java
  8. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/service/impl/BCorpsServiceImpl.java
  9. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/lines/service/impl/BLinesServiceImpl.java
  10. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/packages/service/impl/BPackagesServiceImpl.java
  11. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/ports/service/impl/BPortsServiceImpl.java
  12. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  13. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/terms/service/impl/BServiceTermsServiceImpl.java
  14. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/vessels/service/impl/BVesselsServiceImpl.java
  15. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/excel/BCorpsExcel.java
  16. 13 14
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/service/impl/CorpsDescServiceImpl.java
  17. 6 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java
  18. 16 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/service/impl/ProductLaunchServiceImpl.java
  19. 4 4
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java
  20. 32 4
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/controller/StockDescController.java

+ 6 - 1
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/CorpsDescImportExcel.java

@@ -46,10 +46,15 @@ public class CorpsDescImportExcel implements Serializable {
 	@ExcelProperty(value = "业务员(必填)")
 	private String salesmanName;
 
-	@ExcelProperty(value = "品牌(必填,多个品牌用英文逗号‘,’拼接)")
+	@ExcelProperty(value = "品牌(多个品牌用英文逗号‘,’拼接)")
 	private String brandName;
 
 	/**
+	 * 联系人
+	 */
+	@ExcelProperty(value = "联系人")
+	private String contacts;
+	/**
 	 * 电话
 	 */
 	@ExcelProperty(value = "电话")

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

@@ -39,6 +39,7 @@ public class MagicValues {
 	public static final String BALANCE_PAYMENT = "尾款";
 	public static final String MASTER_BILLS = "MASTER 提单";
 	public static final String BILLS_DETAIL = "提单详情";
+	public static final String BILLS_DETAIL_M = "提单详情(M)";
 	public static final String HYCK = "HYCK";
 	public static final String HYJK = "HYJK";
 	public static final String KYCK = "KYCK";

+ 46 - 5
blade-service/blade-los/src/main/java/org/springblade/los/app/controller/IndexController.java

@@ -26,7 +26,7 @@ public class IndexController extends BladeController {
 	 * 利润
 	 */
 	@GetMapping("/profit")
-	public R profit(@RequestParam("branchId") String branchId, @RequestParam("startDate") String startDate,
+	public R profit(@RequestParam(value = "branchId",required = false) String branchId, @RequestParam("startDate") String startDate,
 					@RequestParam("endDate") String endDate) {
 		return indexService.profit(branchId, startDate, endDate);
 	}
@@ -35,7 +35,7 @@ public class IndexController extends BladeController {
 	 * 总货量
 	 */
 	@GetMapping("/totalCargoVolume")
-	public R totalCargoVolume(@RequestParam("branchId") String branchId, @RequestParam("startDate") String startDate,
+	public R totalCargoVolume(@RequestParam(value = "branchId",required = false) String branchId, @RequestParam("startDate") String startDate,
 					@RequestParam("endDate") String endDate) {
 		return indexService.totalCargoVolume(branchId, startDate, endDate);
 	}
@@ -44,7 +44,7 @@ public class IndexController extends BladeController {
 	 * 有效客户数量
 	 */
 	@GetMapping("/effectiveCorp")
-	public R effectiveCorp(@RequestParam("branchId") String branchId) {
+	public R effectiveCorp(@RequestParam(value = "branchId",required = false) String branchId) {
 		return indexService.effectiveCorp(branchId);
 	}
 
@@ -52,7 +52,7 @@ public class IndexController extends BladeController {
 	 * 流失客户数量
 	 */
 	@GetMapping("/lossCorp")
-	public R lossCorp(@RequestParam("branchId") String branchId) {
+	public R lossCorp(@RequestParam(value = "branchId",required = false) String branchId) {
 		return indexService.lossCorp(branchId);
 	}
 
@@ -60,8 +60,49 @@ public class IndexController extends BladeController {
 	 * 客户数量详情
 	 */
 	@GetMapping("/getCorpDetail")
-	public R getCorpDetail(@RequestParam("branchId") String branchId,@RequestParam("type") String type) {
+	public R getCorpDetail(@RequestParam(value = "branchId",required = false) String branchId,@RequestParam("type") String type) {
 		return indexService.getCorpDetail(branchId,type);
 	}
 
+	/**
+	 * 利润前五大客户
+	 */
+	@GetMapping("/profitCustomersSort")
+	public R profitCustomersSort(@RequestParam(value = "branchId",required = false) String branchId) {
+		return indexService.profitCustomersSort(branchId);
+	}
+
+	/**
+	 * 货量前五大客户
+	 */
+	@GetMapping("/CargoVolumeCustomersSort")
+	public R CargoVolumeCustomersSort(@RequestParam(value = "branchId",required = false) String branchId) {
+		return indexService.CargoVolumeCustomersSort(branchId);
+	}
+
+	/**
+	 * 客户排序详情列表
+	 */
+	@GetMapping("/customersSortDetailList")
+	public R customersSortDetailList(@RequestParam(value = "branchId",required = false) String branchId,@RequestParam("type") String type) {
+		return indexService.customersSortDetailList(branchId,type);
+	}
+
+	/**
+	 * 操作员(业务员)票数
+	 */
+	@GetMapping("/salesmanTicketNum")
+	public R salesmanTicketNum(@RequestParam(value = "branchId",required = false) String branchId, @RequestParam("startDate") String startDate,
+									 @RequestParam("endDate") String endDate) {
+		return indexService.salesmanTicketNum(branchId, startDate, endDate);
+	}
+
+	/**
+	 * 箱量走势
+	 */
+	@GetMapping("/containerVolumeTrend")
+	public R containerVolumeTrend(@RequestParam(value = "branchId",required = false) String branchId, @RequestParam("startDate") String startDate) {
+		return indexService.containerVolumeTrend(branchId, startDate);
+	}
+
 }

+ 22 - 0
blade-service/blade-los/src/main/java/org/springblade/los/app/dto/ProfitCustomersSort.java

@@ -0,0 +1,22 @@
+package org.springblade.los.app.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :jixinyuan
+ * @date : 2024/12/12
+ */
+@Data
+public class ProfitCustomersSort {
+
+	private String corpName;
+
+	private Long corpId;
+
+	private BigDecimal amount;
+
+	private Integer teu;
+
+}

+ 10 - 0
blade-service/blade-los/src/main/java/org/springblade/los/app/service/IndexService.java

@@ -16,4 +16,14 @@ public interface IndexService {
 	R lossCorp(String branchId);
 
 	R getCorpDetail(String branchId, String type);
+
+	R profitCustomersSort(String branchId);
+
+	R CargoVolumeCustomersSort(String branchId);
+
+	R customersSortDetailList(String branchId, String type);
+
+	R salesmanTicketNum(String branchId, String startDate, String endDate);
+
+	R containerVolumeTrend(String branchId, String startDate);
 }

+ 368 - 13
blade-service/blade-los/src/main/java/org/springblade/los/app/service/impl/IndexServiceImpl.java

@@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.los.Util.IDeptUtils;
+import org.springblade.los.app.dto.ProfitCustomersSort;
 import org.springblade.los.app.service.IndexService;
 import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.corps.mapper.CorpsMapper;
@@ -70,12 +71,24 @@ public class IndexServiceImpl implements IndexService {
 			}
 		}
 		List<Bills> billsList = billsMapper.selectList(lambdaQueryWrapper);
-		amountD = billsList.stream().map(Bills::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
-		amountC = billsList.stream().map(Bills::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
 		List<Long> billIds = new ArrayList<>();
 		if (!billsList.isEmpty()) {
+			amountD = billsList.stream().map(Bills::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+			amountC = billsList.stream().map(Bills::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
 			billIds = billsList.stream().map(Bills::getId).collect(Collectors.toList());
 		}
+		List<AeaBills> aeaBillsList = aeaBillsMapper.selectList(new LambdaQueryWrapper<AeaBills>()
+			.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
+			.eq(AeaBills::getIsDeleted, 0)
+			.apply("find_in_set(business_type,'AE,AI')")
+			.eq(ObjectUtils.isNotNull(branchId), AeaBills::getBranchId, branchId)
+			.ge(ObjectUtils.isNotNull(startDate), AeaBills::getBillDate, startDate)
+			.le(ObjectUtils.isNotNull(endDate), AeaBills::getBillDate, endDate));
+		if (!aeaBillsList.isEmpty()) {
+			amountD = aeaBillsList.stream().map(AeaBills::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+			amountC = aeaBillsList.stream().map(AeaBills::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+			billIds.addAll(aeaBillsList.stream().map(AeaBills::getId).collect(Collectors.toList()));
+		}
 		LambdaQueryWrapper<Amends> amendsLambdaQueryWrapper = new LambdaQueryWrapper<Amends>()
 			.eq(Amends::getTenantId, AuthUtil.getTenantId())
 			.eq(Amends::getIsDeleted, 0)
@@ -102,17 +115,6 @@ public class IndexServiceImpl implements IndexService {
 					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
 			}
 		}
-		List<AeaBills> aeaBillsList = aeaBillsMapper.selectList(new LambdaQueryWrapper<AeaBills>()
-			.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
-			.eq(AeaBills::getIsDeleted, 0)
-			.apply("find_in_set(business_type,'AE,AI')")
-			.eq(ObjectUtils.isNotNull(branchId), AeaBills::getBranchId, branchId)
-			.ge(ObjectUtils.isNotNull(startDate), AeaBills::getBillDate, startDate)
-			.le(ObjectUtils.isNotNull(endDate), AeaBills::getBillDate, endDate));
-		if (!amendsList.isEmpty()) {
-			amountD = aeaBillsList.stream().map(AeaBills::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
-			amountC = aeaBillsList.stream().map(AeaBills::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
-		}
 		return R.data(amountD.subtract(amountC));
 	}
 
@@ -291,4 +293,357 @@ public class IndexServiceImpl implements IndexService {
 		}
 		return R.data(corpsList);
 	}
+
+	@Override
+	public R profitCustomersSort(String branchId) {
+		List<Long> corpIdList = new ArrayList<>();
+		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.eq(ObjectUtils.isNotNull(branchId), Bills::getBranchId, branchId);
+		String jurisdiction = sysClient.getParamService("data.jurisdiction");
+		if ("1".equals(jurisdiction)) {
+			if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")
+				&& !AuthUtil.getUserRole().contains("副总") && !AuthUtil.getUserRole().contains("财务")
+				&& !AuthUtil.getUserRole().contains("经理")) {
+				if (AuthUtil.getUserRole().contains("操作经理")) {
+					lambdaQueryWrapper.like(Bills::getOperatorDept, AuthUtil.getDeptId());
+				} else if (AuthUtil.getUserRole().contains("操作员")) {
+					lambdaQueryWrapper.like(Bills::getOperatorId, AuthUtil.getUserId());
+				} else if (AuthUtil.getUserRole().contains("销售经理")) {
+					lambdaQueryWrapper.like(Bills::getSrcDeptId, AuthUtil.getDeptId());
+				} else if (AuthUtil.getUserRole().contains("业务员")) {
+					lambdaQueryWrapper.like(Bills::getSrcId, AuthUtil.getUserId());
+				} else {
+					lambdaQueryWrapper.eq(Bills::getCreateUser, AuthUtil.getUserId());
+				}
+				lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
+			}
+		}
+		List<Bills> billsList = billsMapper.selectList(lambdaQueryWrapper);
+		List<Long> billIds = new ArrayList<>();
+		if (!billsList.isEmpty()) {
+			billIds = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+			corpIdList = billsList.stream().map(Bills::getCorpId).distinct().collect(Collectors.toList());
+		}
+		List<AeaBills> aeaBillsList = aeaBillsMapper.selectList(new LambdaQueryWrapper<AeaBills>()
+			.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
+			.eq(AeaBills::getIsDeleted, 0)
+			.apply("find_in_set(business_type,'AE,AI')")
+			.eq(ObjectUtils.isNotNull(branchId), AeaBills::getBranchId, branchId));
+		if (!aeaBillsList.isEmpty()) {
+			billIds.addAll(aeaBillsList.stream().map(AeaBills::getId).collect(Collectors.toList()));
+			corpIdList.addAll(aeaBillsList.stream().map(AeaBills::getCorpId).distinct().collect(Collectors.toList()));
+		}
+		LambdaQueryWrapper<Amends> amendsLambdaQueryWrapper = new LambdaQueryWrapper<Amends>()
+			.eq(Amends::getTenantId, AuthUtil.getTenantId())
+			.eq(Amends::getIsDeleted, 0)
+			.in(!billIds.isEmpty(), Amends::getOrigId, billIds)
+			.apply("find_in_set(business_type,'SEA,SIA,AEA,AIA')")
+			.eq(ObjectUtils.isNotNull(branchId), Amends::getBranchId, branchId);
+		List<Amends> amendsList = amendsMapper.selectList(amendsLambdaQueryWrapper);
+		List<FeeCenter> feeCenterList = new ArrayList<>();
+		if (!amendsList.isEmpty()) {
+			List<Long> ids = amendsList.stream().map(Amends::getId).collect(Collectors.toList());
+			feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0)
+				.in(FeeCenter::getId, ids));
+		}
+		List<BCorps> corpsList = corpsMapper.selectList(new LambdaQueryWrapper<BCorps>()
+			.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+			.eq(BCorps::getIsDeleted, 0)
+			.in(BCorps::getId, corpIdList));
+		Map<String, Object> map = new HashMap<>();
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		List<ProfitCustomersSort> customersSortList = new ArrayList<>();
+		for (BCorps item : corpsList) {
+			ProfitCustomersSort detail = new ProfitCustomersSort();
+			detail.setCorpId(item.getCorpId());
+			detail.setCorpName(item.getShortName());
+			BigDecimal amount = new BigDecimal("0.00");
+			if (!billsList.isEmpty()) {
+				BigDecimal amountD = billsList.stream().filter(e -> e.getCorpId().equals(item.getId())).map(Bills::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal amountC = billsList.stream().filter(e -> e.getCorpId().equals(item.getId())).map(Bills::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal subAmount = amountD.subtract(amountC);
+				amount = amount.add(subAmount);
+			}
+			if (!aeaBillsList.isEmpty()) {
+				BigDecimal amountD = aeaBillsList.stream().filter(e -> e.getCorpId().equals(item.getId())).map(AeaBills::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal amountC = aeaBillsList.stream().filter(e -> e.getCorpId().equals(item.getId())).map(AeaBills::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				BigDecimal subAmount = amountD.subtract(amountC);
+				amount = amount.add(subAmount);
+			}
+			if (!amendsList.isEmpty()) {
+				List<Long> amends = amendsList.stream().filter(e -> e.getCorpId().equals(item.getId()))
+					.map(Amends::getId).distinct().collect(Collectors.toList());
+				if (!amends.isEmpty()) {
+					List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> amends.contains(e.getPid())).collect(Collectors.toList());
+					if (!feeCenters.isEmpty()) {
+						BigDecimal amountD = feeCenters.stream().filter(e -> "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+							.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getExrate().multiply(y.getAmount())), BigDecimal::add);
+						BigDecimal amountC = feeCenters.stream().filter(e -> "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+							.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getExrate().multiply(y.getAmount())), BigDecimal::add);
+						amountD = amountD.add(feeCenters.stream().filter(e -> "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
+							.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+						amountC = amountC.add(feeCenters.stream().filter(e -> "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
+							.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+						BigDecimal subAmount = amountD.subtract(amountC);
+						amount = amount.add(subAmount);
+					}
+				}
+			}
+			detail.setAmount(amount);
+			customersSortList.add(detail);
+		}
+		//从大到小排序
+		List<ProfitCustomersSort> sortList = customersSortList.stream()
+			.sorted(Comparator.comparing(ProfitCustomersSort::getAmount).reversed())
+			.collect(Collectors.toList());
+		BigDecimal total = new BigDecimal("0.00");
+		for (int i = 0; i < 5; i++) {
+			Map<String, Object> map1 = new HashMap<>();
+			map1.put("name", sortList.get(i).getCorpName());
+			map1.put("value", sortList.get(i).getAmount());
+			total = total.add(sortList.get(i).getAmount());
+			mapList.add(map1);
+		}
+		map.put("mapList", mapList);
+		map.put("total", total);
+		return R.data(map);
+	}
+
+	@Override
+	public R CargoVolumeCustomersSort(String branchId) {
+		List<Long> corpIdList = new ArrayList<>();
+		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.eq(ObjectUtils.isNotNull(branchId), Bills::getBranchId, branchId);
+		String jurisdiction = sysClient.getParamService("data.jurisdiction");
+		if ("1".equals(jurisdiction)) {
+			if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")
+				&& !AuthUtil.getUserRole().contains("副总") && !AuthUtil.getUserRole().contains("财务")
+				&& !AuthUtil.getUserRole().contains("经理")) {
+				if (AuthUtil.getUserRole().contains("操作经理")) {
+					lambdaQueryWrapper.like(Bills::getOperatorDept, AuthUtil.getDeptId());
+				} else if (AuthUtil.getUserRole().contains("操作员")) {
+					lambdaQueryWrapper.like(Bills::getOperatorId, AuthUtil.getUserId());
+				} else if (AuthUtil.getUserRole().contains("销售经理")) {
+					lambdaQueryWrapper.like(Bills::getSrcDeptId, AuthUtil.getDeptId());
+				} else if (AuthUtil.getUserRole().contains("业务员")) {
+					lambdaQueryWrapper.like(Bills::getSrcId, AuthUtil.getUserId());
+				} else {
+					lambdaQueryWrapper.eq(Bills::getCreateUser, AuthUtil.getUserId());
+				}
+				lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
+			}
+		}
+		List<Bills> billsList = billsMapper.selectList(lambdaQueryWrapper);
+		if (!billsList.isEmpty()) {
+			corpIdList = billsList.stream().map(Bills::getCorpId).distinct().collect(Collectors.toList());
+		}
+		List<BCorps> corpsList = corpsMapper.selectList(new LambdaQueryWrapper<BCorps>()
+			.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+			.eq(BCorps::getIsDeleted, 0)
+			.in(BCorps::getId, corpIdList));
+		Map<String, Object> map = new HashMap<>();
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		List<ProfitCustomersSort> customersSortList = new ArrayList<>();
+		for (BCorps item : corpsList) {
+			ProfitCustomersSort detail = new ProfitCustomersSort();
+			detail.setCorpId(item.getCorpId());
+			detail.setCorpName(item.getShortName());
+			if (!billsList.isEmpty()) {
+				detail.setTeu(billsList.stream().map(Bills::getTeu).filter(Objects::nonNull).mapToInt(Integer::intValue).sum());
+			} else {
+				detail.setTeu(0);
+			}
+			customersSortList.add(detail);
+		}
+		//从大到小排序
+		List<ProfitCustomersSort> sortList = customersSortList.stream()
+			.sorted(Comparator.comparing(ProfitCustomersSort::getTeu).reversed())
+			.collect(Collectors.toList());
+		int teu = 0;
+		for (int i = 0; i < 5; i++) {
+			Map<String, Object> map1 = new HashMap<>();
+			map1.put("name", sortList.get(i).getCorpName());
+			map1.put("value", sortList.get(i).getTeu());
+			teu = teu + sortList.get(i).getTeu();
+			mapList.add(map1);
+		}
+		map.put("mapList", mapList);
+		map.put("total", teu);
+		return R.data(map);
+	}
+
+	@Override
+	public R customersSortDetailList(String branchId, String type) {
+		if ("0".equals(type)){
+			List<Long> corpIdList = new ArrayList<>();
+			LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<Bills>()
+				.eq(Bills::getTenantId, AuthUtil.getTenantId())
+				.eq(Bills::getIsDeleted, 0)
+				.eq(ObjectUtils.isNotNull(branchId), Bills::getBranchId, branchId);
+			String jurisdiction = sysClient.getParamService("data.jurisdiction");
+			if ("1".equals(jurisdiction)) {
+				if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")
+					&& !AuthUtil.getUserRole().contains("副总") && !AuthUtil.getUserRole().contains("财务")
+					&& !AuthUtil.getUserRole().contains("经理")) {
+					if (AuthUtil.getUserRole().contains("操作经理")) {
+						lambdaQueryWrapper.like(Bills::getOperatorDept, AuthUtil.getDeptId());
+					} else if (AuthUtil.getUserRole().contains("操作员")) {
+						lambdaQueryWrapper.like(Bills::getOperatorId, AuthUtil.getUserId());
+					} else if (AuthUtil.getUserRole().contains("销售经理")) {
+						lambdaQueryWrapper.like(Bills::getSrcDeptId, AuthUtil.getDeptId());
+					} else if (AuthUtil.getUserRole().contains("业务员")) {
+						lambdaQueryWrapper.like(Bills::getSrcId, AuthUtil.getUserId());
+					} else {
+						lambdaQueryWrapper.eq(Bills::getCreateUser, AuthUtil.getUserId());
+					}
+					lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
+				}
+			}
+			List<Bills> billsList = billsMapper.selectList(lambdaQueryWrapper);
+			List<Long> billIds = new ArrayList<>();
+			if (!billsList.isEmpty()) {
+				billIds = billsList.stream().map(Bills::getId).collect(Collectors.toList());
+				corpIdList = billsList.stream().map(Bills::getCorpId).distinct().collect(Collectors.toList());
+			}
+			List<AeaBills> aeaBillsList = aeaBillsMapper.selectList(new LambdaQueryWrapper<AeaBills>()
+				.eq(AeaBills::getTenantId, AuthUtil.getTenantId())
+				.eq(AeaBills::getIsDeleted, 0)
+				.apply("find_in_set(business_type,'AE,AI')")
+				.eq(ObjectUtils.isNotNull(branchId), AeaBills::getBranchId, branchId));
+			if (!aeaBillsList.isEmpty()) {
+				billIds.addAll(aeaBillsList.stream().map(AeaBills::getId).collect(Collectors.toList()));
+				corpIdList.addAll(aeaBillsList.stream().map(AeaBills::getCorpId).distinct().collect(Collectors.toList()));
+			}
+			LambdaQueryWrapper<Amends> amendsLambdaQueryWrapper = new LambdaQueryWrapper<Amends>()
+				.eq(Amends::getTenantId, AuthUtil.getTenantId())
+				.eq(Amends::getIsDeleted, 0)
+				.in(!billIds.isEmpty(), Amends::getOrigId, billIds)
+				.apply("find_in_set(business_type,'SEA,SIA,AEA,AIA')")
+				.eq(ObjectUtils.isNotNull(branchId), Amends::getBranchId, branchId);
+			List<Amends> amendsList = amendsMapper.selectList(amendsLambdaQueryWrapper);
+			List<FeeCenter> feeCenterList = new ArrayList<>();
+			if (!amendsList.isEmpty()) {
+				List<Long> ids = amendsList.stream().map(Amends::getId).collect(Collectors.toList());
+				feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.in(FeeCenter::getId, ids));
+			}
+			List<BCorps> corpsList = corpsMapper.selectList(new LambdaQueryWrapper<BCorps>()
+				.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+				.eq(BCorps::getIsDeleted, 0)
+				.in(BCorps::getId, corpIdList));
+			List<ProfitCustomersSort> customersSortList = new ArrayList<>();
+			for (BCorps item : corpsList) {
+				ProfitCustomersSort detail = new ProfitCustomersSort();
+				detail.setCorpId(item.getCorpId());
+				detail.setCorpName(item.getShortName());
+				BigDecimal amount = new BigDecimal("0.00");
+				if (!billsList.isEmpty()) {
+					BigDecimal amountD = billsList.stream().filter(e -> e.getCorpId().equals(item.getId())).map(Bills::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal amountC = billsList.stream().filter(e -> e.getCorpId().equals(item.getId())).map(Bills::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal subAmount = amountD.subtract(amountC);
+					amount = amount.add(subAmount);
+				}
+				if (!aeaBillsList.isEmpty()) {
+					BigDecimal amountD = aeaBillsList.stream().filter(e -> e.getCorpId().equals(item.getId())).map(AeaBills::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal amountC = aeaBillsList.stream().filter(e -> e.getCorpId().equals(item.getId())).map(AeaBills::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal subAmount = amountD.subtract(amountC);
+					amount = amount.add(subAmount);
+				}
+				if (!amendsList.isEmpty()) {
+					List<Long> amends = amendsList.stream().filter(e -> e.getCorpId().equals(item.getId()))
+						.map(Amends::getId).distinct().collect(Collectors.toList());
+					if (!amends.isEmpty()) {
+						List<FeeCenter> feeCenters = feeCenterList.stream().filter(e -> amends.contains(e.getPid())).collect(Collectors.toList());
+						if (!feeCenters.isEmpty()) {
+							BigDecimal amountD = feeCenters.stream().filter(e -> "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getExrate().multiply(y.getAmount())), BigDecimal::add);
+							BigDecimal amountC = feeCenters.stream().filter(e -> "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getExrate().multiply(y.getAmount())), BigDecimal::add);
+							amountD = amountD.add(feeCenters.stream().filter(e -> "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+							amountC = amountC.add(feeCenters.stream().filter(e -> "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+							BigDecimal subAmount = amountD.subtract(amountC);
+							amount = amount.add(subAmount);
+						}
+					}
+				}
+				detail.setAmount(amount);
+				customersSortList.add(detail);
+			}
+			//从大到小排序
+			List<ProfitCustomersSort> sortList = customersSortList.stream()
+				.sorted(Comparator.comparing(ProfitCustomersSort::getAmount).reversed())
+				.collect(Collectors.toList());
+			return R.data(sortList);
+		}else{
+			List<Long> corpIdList = new ArrayList<>();
+			LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<Bills>()
+				.eq(Bills::getTenantId, AuthUtil.getTenantId())
+				.eq(Bills::getIsDeleted, 0)
+				.eq(ObjectUtils.isNotNull(branchId), Bills::getBranchId, branchId);
+			String jurisdiction = sysClient.getParamService("data.jurisdiction");
+			if ("1".equals(jurisdiction)) {
+				if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")
+					&& !AuthUtil.getUserRole().contains("副总") && !AuthUtil.getUserRole().contains("财务")
+					&& !AuthUtil.getUserRole().contains("经理")) {
+					if (AuthUtil.getUserRole().contains("操作经理")) {
+						lambdaQueryWrapper.like(Bills::getOperatorDept, AuthUtil.getDeptId());
+					} else if (AuthUtil.getUserRole().contains("操作员")) {
+						lambdaQueryWrapper.like(Bills::getOperatorId, AuthUtil.getUserId());
+					} else if (AuthUtil.getUserRole().contains("销售经理")) {
+						lambdaQueryWrapper.like(Bills::getSrcDeptId, AuthUtil.getDeptId());
+					} else if (AuthUtil.getUserRole().contains("业务员")) {
+						lambdaQueryWrapper.like(Bills::getSrcId, AuthUtil.getUserId());
+					} else {
+						lambdaQueryWrapper.eq(Bills::getCreateUser, AuthUtil.getUserId());
+					}
+					lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
+				}
+			}
+			List<Bills> billsList = billsMapper.selectList(lambdaQueryWrapper);
+			if (!billsList.isEmpty()) {
+				corpIdList = billsList.stream().map(Bills::getCorpId).distinct().collect(Collectors.toList());
+			}
+			List<BCorps> corpsList = corpsMapper.selectList(new LambdaQueryWrapper<BCorps>()
+				.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+				.eq(BCorps::getIsDeleted, 0)
+				.in(BCorps::getId, corpIdList));
+			List<ProfitCustomersSort> customersSortList = new ArrayList<>();
+			for (BCorps item : corpsList) {
+				ProfitCustomersSort detail = new ProfitCustomersSort();
+				detail.setCorpId(item.getCorpId());
+				detail.setCorpName(item.getShortName());
+				if (!billsList.isEmpty()) {
+					detail.setTeu(billsList.stream().map(Bills::getTeu).filter(Objects::nonNull).mapToInt(Integer::intValue).sum());
+				} else {
+					detail.setTeu(0);
+				}
+				customersSortList.add(detail);
+			}
+			//从大到小排序
+			List<ProfitCustomersSort> sortList = customersSortList.stream()
+				.sorted(Comparator.comparing(ProfitCustomersSort::getTeu).reversed())
+				.collect(Collectors.toList());
+			return R.data(sortList);
+		}
+	}
+
+	@Override
+	public R salesmanTicketNum(String branchId, String startDate, String endDate) {
+		return null;
+	}
+
+	@Override
+	public R containerVolumeTrend(String branchId, String startDate) {
+		return null;
+	}
 }

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/cntr/service/impl/BCntrTypesServiceImpl.java

@@ -93,6 +93,9 @@ public class BCntrTypesServiceImpl extends ServiceImpl<CntrTypesMapper, BCntrTyp
 			bCntrTypes.setUpdateTime(new Date());
 			bCntrTypes.setUpdateUserName(AuthUtil.getUserName());
 		}
+		if(ObjectUtils.isNull(bCntrTypes.getExtendedData())){
+			bCntrTypes.setExtendedData("[]");
+		}
 		this.saveOrUpdate(bCntrTypes);
 		return R.data(bCntrTypes);
 	}

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/service/impl/BCorpsServiceImpl.java

@@ -186,6 +186,9 @@ public class BCorpsServiceImpl extends ServiceImpl<CorpsMapper, BCorps> implemen
 			bCorps.setUpdateTime(new Date());
 			bCorps.setUpdateUserName(AuthUtil.getUserName());
 		}
+		if(ObjectUtils.isNull(bCorps.getExtendedData())){
+			bCorps.setExtendedData("[]");
+		}
 		this.saveOrUpdate(bCorps);
 		//客户类别对应
 		if (ObjectUtils.isNotNull(bCorps.getCorpType())) {

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/lines/service/impl/BLinesServiceImpl.java

@@ -87,6 +87,9 @@ public class BLinesServiceImpl extends ServiceImpl<LinesMapper, BLines> implemen
 			bLines.setUpdateTime(new Date());
 			bLines.setUpdateUserName(AuthUtil.getUserName());
 		}
+		if(ObjectUtils.isNull(bLines.getExtendedData())){
+			bLines.setExtendedData("[]");
+		}
 		this.saveOrUpdate(bLines);
 		return R.data(bLines);
 	}

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/packages/service/impl/BPackagesServiceImpl.java

@@ -82,6 +82,9 @@ public class BPackagesServiceImpl extends ServiceImpl<PackagesMapper, BPackages>
 			bPackages.setUpdateTime(new Date());
 			bPackages.setUpdateUserName(AuthUtil.getUserName());
 		}
+		if(ObjectUtils.isNull(bPackages.getExtendedData())){
+			bPackages.setExtendedData("[]");
+		}
 		this.saveOrUpdate(bPackages);
 		return R.data(bPackages);
 	}

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/ports/service/impl/BPortsServiceImpl.java

@@ -114,6 +114,9 @@ public class BPortsServiceImpl extends ServiceImpl<PortsMapper, BPorts> implemen
 			bPorts.setUpdateTime(new Date());
 			bPorts.setUpdateUserName(AuthUtil.getUserName());
 		}
+		if(ObjectUtils.isNull(bPorts.getExtendedData())){
+			bPorts.setExtendedData("[]");
+		}
 		this.saveOrUpdate(bPorts);
 		//港口条款
 		if (ObjectUtils.isNotNull(bPorts.getBPortsTermsList())) {

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java

@@ -6641,7 +6641,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			} else {
 				map.put(MagicValues.DATA, null);
 			}
-		} else if (MagicValues.DOCUMENT.equals(reportCode) && MagicValues.BILLS_DETAIL.equals(groupCode) && (MagicValues.HYCK.equals(type) || MagicValues.HYJK.equals(type))) {
+		} else if (MagicValues.DOCUMENT.equals(reportCode) && (MagicValues.BILLS_DETAIL.equals(groupCode) || MagicValues.BILLS_DETAIL_M.equals(groupCode)) && (MagicValues.HYCK.equals(type) || MagicValues.HYJK.equals(type))) {
 			Bills bills = billsService.getById(billId);
 			if (bills != null) {
 				R<String> biz = dictBizClient.getOneValue("src_type_los", bills.getSrcType(), AuthUtil.getTenantId());

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/terms/service/impl/BServiceTermsServiceImpl.java

@@ -84,6 +84,9 @@ public class BServiceTermsServiceImpl extends ServiceImpl<ServiceTermsMapper, BS
 			bServiceTerms.setUpdateTime(new Date());
 			bServiceTerms.setUpdateUserName(AuthUtil.getUserName());
 		}
+		if(ObjectUtils.isNull(bServiceTerms.getExtendedData())){
+			bServiceTerms.setExtendedData("[]");
+		}
 		this.saveOrUpdate(bServiceTerms);
 		return R.data(bServiceTerms);
 	}

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/vessels/service/impl/BVesselsServiceImpl.java

@@ -96,6 +96,9 @@ public class BVesselsServiceImpl extends ServiceImpl<VesselsMapper, BVessels> im
 			detail.setUpdateTime(new Date());
 			detail.setUpdateUserName(AuthUtil.getUserName());
 		}
+		if(ObjectUtils.isNull(detail.getExtendedData())){
+			detail.setExtendedData("[]");
+		}
 		this.saveOrUpdate(detail);
 		return R.data(detail);
 		/*if (bVessels.getId() == null) {

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/excel/BCorpsExcel.java

@@ -133,7 +133,7 @@ public class BCorpsExcel implements Serializable {
 	/**
 	 * 客户来源类别
 	 */
-	@ExcelProperty(value = "客户来源类别")
+	@ExcelProperty(value = "业务来源")
 	private String sourceType;
 	/**
 	 * 业务员姓名

+ 13 - 14
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/service/impl/CorpsDescServiceImpl.java

@@ -306,7 +306,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public R importUser(List<CorpsDescImportExcel> data) {
-		try {
+//		try {
 			if (CollectionUtils.isEmpty(data)) {
 				throw new SecurityException("导入数据不能为空");
 			}
@@ -398,7 +398,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 					corpsDesc.setCorpType("KH");
 					if (ObjectUtils.isNotNull(e.getBrandName())){
 						List<String> list = Arrays.asList(e.getBrandName().split(","));
-						if (pjBrandDescList.isEmpty()) {
+						if (!pjBrandDescList.isEmpty()) {
 							List<PjBrandDesc> pjBrandDescs = pjBrandDescList.stream().filter(item -> list.contains(item.getCname())).distinct().collect(Collectors.toList());
 							if (!pjBrandDescs.isEmpty()) {
 								corpsDesc.setBrandName(pjBrandDescList.stream().map(PjBrandDesc::getCname).distinct().collect(Collectors.joining(",")));
@@ -410,8 +410,6 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 									corpsDesc.setBrandId(brandIds.substring(0, brandIds.length() - 1));
 								}
 								corpsDesc.setBrandName(pjBrandDescList.stream().map(PjBrandDesc::getCname).distinct().collect(Collectors.joining(",")));
-							} else {
-								throw new RuntimeException("未查到" + e.getBrandName() + "品牌信息");
 							}
 						}
 					}
@@ -425,7 +423,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 						corpsDesc.setCreateTime(new Date());
 						corpsDesc.setCreateUser(AuthUtil.getUserId());
 						corpsDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
-
+						corpsDesc.setCheckStatus("通过");
 						baseMapper.insert(corpsDesc);
 						PjCorpsTypeDesc middle = new PjCorpsTypeDesc();
 						middle.setCorpId(corpsDesc.getId());
@@ -479,8 +477,8 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 								}
 								corpsAttn.setUserId(userData.getId());
 							}
-							corpsAttn.setCname(corpsDesc.getAttn());
-							corpsAttn.setTel(corpsDesc.getTel());
+							corpsAttn.setCname(e.getContacts());
+							corpsAttn.setTel(e.getTel());
 							corpsAttn.setTenantId(AuthUtil.getTenantId());
 							corpsAttn.setPid(corpsDesc.getId());
 							corpsAttn.setCreateTime(new Date());
@@ -492,10 +490,10 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 
 							//保存客户地址信息
 							PjCorpsAddr corpsAddr = new PjCorpsAddr();
-							corpsAddr.setContacts(corpsDesc.getAttn());
-							corpsAddr.setTel(corpsDesc.getTel());
-							corpsAddr.setBelongtoarea(corpsDesc.getAddr());
-							corpsAddr.setDetailedAddress(corpsDesc.getDetails());
+							corpsAddr.setContacts(e.getContacts());
+							corpsAddr.setTel(e.getTel());
+							corpsAddr.setBelongtoarea(e.getAddress());
+							corpsAddr.setDetailedAddress(e.getAddress());
 							corpsAddr.setTenantId(AuthUtil.getTenantId());
 							corpsAddr.setPid(corpsDesc.getId());
 							corpsAddr.setCreateTime(new Date());
@@ -523,9 +521,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 				throw new SecurityException("导入失败,请仔细检查导入数据");
 			}
 
-		} catch (Exception exception) {
+		/*} catch (Exception exception) {
 			throw new SecurityException("请检查导入数据" + exception.getMessage());
-		}
+		}*/
 	}
 
 	/**
@@ -585,6 +583,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 						corpsDesc.setCreateTime(new Date());
 						corpsDesc.setCreateUser(AuthUtil.getUserId());
 						corpsDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+						corpsDesc.setCheckStatus("通过");
 						baseMapper.insert(corpsDesc);
 
 						PjCorpsTypeDesc middle = new PjCorpsTypeDesc();
@@ -642,7 +641,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 							PjCorpsAddr corpsAddr = corpsAddrService.getOne(corpsAttnLambdaQueryWrapper);
 							if (ObjectUtil.isEmpty(corpsAddr)) {
 								corpsAddr.setPid(corpsDesc.getId());
-								corpsAddr.setBelongtoarea(e.getBelongtoarea());
+//								corpsAddr.setBelongtoarea(e.getBelongtoarea());
 								corpsAddr.setDetailedAddress(e.getDetailedAddress());
 								corpsAddr.setDefaultAddres("1");
 								corpsAddr.setTenantId(AuthUtil.getTenantId());

+ 6 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java

@@ -58,6 +58,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -601,6 +602,7 @@ public class ProductLaunchController extends BladeController {
 				}
 			}
 		}
+		List<PjStockDesc> stockDescList = new ArrayList<>();
 		if ("1".equals(productLaunch.getWhetherIntegral())) {
 			List<PjGoodsDesc> pjGoodsDescList = goodsDescService.list(new LambdaQueryWrapper<PjGoodsDesc>()
 				.eq(PjGoodsDesc::getWhetherIntegral, "1")
@@ -614,7 +616,7 @@ public class ProductLaunchController extends BladeController {
 			String status = iSysClient.getParamService("whether.branch.management");
 			if (ObjectUtils.isNotNull(status) && "1".equals(status)) {
 				if (ObjectUtils.isNotNull(corpsDesc.getDeliveryWarehouseId())) {
-					List<PjStockDesc> stockDescList = stockDescMapper.selectList(new LambdaQueryWrapper<PjStockDesc>()
+					stockDescList = stockDescMapper.selectList(new LambdaQueryWrapper<PjStockDesc>()
 						.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
 						.eq(PjStockDesc::getIsDeleted, 0)
 						.eq(PjStockDesc::getStorageId, corpsDesc.getDeliveryWarehouseId()));
@@ -623,7 +625,6 @@ public class ProductLaunchController extends BladeController {
 						lambdaQueryWrapper.in(PjProductLaunch::getGoodsId, goodsId);
 					}
 				}
-
 			}
 		}
 		String status = iSysClient.getParamService("whether.zero.inventory");
@@ -651,6 +652,9 @@ public class ProductLaunchController extends BladeController {
 					.in("pid", brandIds).eq("is_deleted", 0));
 			}
 			for (PjProductLaunch item : pages.getRecords()) {
+				if (!stockDescList.isEmpty()){
+					item.setInventory(stockDescList.stream().filter(e-> e.getGoodsId().equals(item.getGoodsId())).map(PjStockDesc::getBalanceQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+				}
 				if (!pjProductLaunchFilesList.isEmpty()) {
 					List<PjProductLaunchFiles> list = pjProductLaunchFilesList.stream().filter(e -> e.getPid().equals(item.getId())).collect(Collectors.toList());
 					if (!list.isEmpty()) {

+ 16 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/service/impl/ProductLaunchServiceImpl.java

@@ -23,7 +23,6 @@ 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;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -44,6 +43,7 @@ import org.springblade.salesPart.productLaunch.service.IProductLaunchFilesServic
 import org.springblade.salesPart.productLaunch.service.IProductLaunchService;
 import org.springblade.salesPart.serial.service.IPjpfSerialService;
 import org.springblade.salesPart.shoppingCart.mapper.ShoppingCartMapper;
+import org.springblade.salesPart.stock.mapper.StockDescMapper;
 import org.springblade.salesPart.stock.service.IStockDescService;
 import org.springblade.salesPart.vo.ProductLaunchVO;
 import org.springblade.system.entity.Dept;
@@ -78,6 +78,7 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 	private final IStockDescService stockDescService;
 	private final IBrandFilesService brandFilesService;
 	private final IBrandFigureService brandFigureService;
+	private final StockDescMapper stockDescMapper;
 
 	/**
 	 * 获取详情
@@ -583,7 +584,20 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 		} else {
 			throw new RuntimeException("未查到用户信息");
 		}
-
+		String status = iSysClient.getParamService("whether.branch.management");
+		if (ObjectUtils.isNotNull(status) && "1".equals(status)) {
+			if (ObjectUtils.isNotNull(corpsDesc.getDeliveryWarehouseId())) {
+				List<PjStockDesc> stockDescList = stockDescMapper.selectList(new LambdaQueryWrapper<PjStockDesc>()
+					.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+					.eq(PjStockDesc::getIsDeleted, 0)
+					.eq(PjStockDesc::getStorageId, corpsDesc.getDeliveryWarehouseId())
+					.eq(PjStockDesc::getGoodsId, detail.getGoodsId())
+				);
+				if (!stockDescList.isEmpty()) {
+					detail.setInventory(stockDescList.stream().map(PjStockDesc::getBalanceQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+				}
+			}
+		}
 		map.put("type", detail.getBillType());
 
 		if (detail.getBillType() == 0) {//本地

+ 4 - 4
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -1277,9 +1277,9 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				if (!orderItemsList.isEmpty()) {
 					List<PjOrder> orders = orderList.stream().filter(e -> e.getWhetherRedeem().equals("0")).distinct().collect(Collectors.toList());
 					if (!orders.isEmpty()) {
-						if (pjpfFunding.getBondAmount().compareTo(pjpfFunding.getPaidAlreadyBondAmount()) > 0) {
+						/*if (pjpfFunding.getBondAmount().compareTo(pjpfFunding.getPaidAlreadyBondAmount()) > 0) {
 							throw new RuntimeException("已缴保证金不足,出库失败");
-						}
+						}*/
 						if (pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()).compareTo(amountSum) < 0) {
 							throw new RuntimeException("剩余可用资金:" + pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()) + "小于本次出库金额:" + amountSum + ",出库失败");
 						}
@@ -4405,9 +4405,9 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			if (!orderItemsList.isEmpty()) {
 				List<PjOrder> orders = orderList.stream().filter(e -> e.getWhetherRedeem().equals("0")).distinct().collect(Collectors.toList());
 				if (!orders.isEmpty()) {
-					if (pjpfFunding.getBondAmount().compareTo(pjpfFunding.getPaidAlreadyBondAmount()) > 0) {
+					/*if (pjpfFunding.getBondAmount().compareTo(pjpfFunding.getPaidAlreadyBondAmount()) > 0) {
 						throw new RuntimeException("已缴保证金不足,出库失败");
-					}
+					}*/
 					BigDecimal amount = shipItemsList.stream().map(PjShipItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 					if (pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()).compareTo(amount) < 0) {
 						throw new RuntimeException("剩余可用资金:" + pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()) + "小于本次出库金额:" + amount + ",出库失败");

+ 32 - 4
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/controller/StockDescController.java

@@ -36,6 +36,8 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.salesPart.brand.service.IBrandFigureService;
 import org.springblade.salesPart.brand.service.IBrandFilesService;
+import org.springblade.salesPart.corps.service.ICorpsAttnService;
+import org.springblade.salesPart.corps.service.ICorpsDescService;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.excel.StockBrandExcel;
 import org.springblade.salesPart.excel.StockExportExcel;
@@ -43,6 +45,7 @@ import org.springblade.salesPart.goods.service.IGoodsDescService;
 import org.springblade.salesPart.goods.service.IGoodsFilesService;
 import org.springblade.salesPart.productLaunch.service.IProductLaunchService;
 import org.springblade.salesPart.stock.service.IStockDescService;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -72,6 +75,9 @@ public class StockDescController extends BladeController {
 	private final IGoodsDescService goodsDescService;
 	private final IBrandFilesService brandFilesService;
 	private final IBrandFigureService brandFigureService;
+	private final ISysClient iSysClient;
+	private final ICorpsAttnService corpsAttnService;//客户联系人
+	private final ICorpsDescService corpsDescService;//客户
 
 	/**
 	 * 详情
@@ -861,21 +867,43 @@ public class StockDescController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入stockDesc")
 	public R<IPage<PjStockDesc>> listV1(PjStockDesc stockDesc, Query query) {
+		PjCorpsDesc corpsDesc = null;
+		//根据当前登录人获得客户
+		PjCorpsAttn corpsAttn = corpsAttnService.getAttn(AuthUtil.getUserId());
+		if (ObjectUtil.isNotEmpty(corpsAttn)) {
+			corpsDesc = corpsDescService.getCorpsDesc(corpsAttn.getPid());
+			if (ObjectUtil.isEmpty(corpsDesc)) {
+				throw new RuntimeException("未查到用户信息");
+			}
+		} else {
+			throw new RuntimeException("未查到用户信息");
+		}
 		LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
 			.eq(PjStockDesc::getIsDeleted, 0)
 			.eq(PjStockDesc::getSalesCompanyId, AuthUtil.getDeptId())//公司
 			.eq(ObjectUtil.isNotEmpty(stockDesc.getCode()), PjStockDesc::getCode, stockDesc.getCode())
 			.eq(ObjectUtil.isNotEmpty(stockDesc.getTypeno()), PjStockDesc::getTypeno, stockDesc.getTypeno())
-			.eq(ObjectUtil.isNotEmpty(stockDesc.getStorageId()), PjStockDesc::getStorageId, stockDesc.getStorageId())
-			.eq(ObjectUtil.isNotEmpty(stockDesc.getStorageName()), PjStockDesc::getStorageName, stockDesc.getStorageName())
 			.eq(ObjectUtil.isNotEmpty(stockDesc.getBrandId()), PjStockDesc::getBrandId, stockDesc.getBrandId())
 			.eq(ObjectUtil.isNotEmpty(stockDesc.getBrandName()), PjStockDesc::getBrandName, stockDesc.getBrandName())
 			.eq(ObjectUtil.isNotEmpty(stockDesc.getGoodsTypeId()), PjStockDesc::getGoodsTypeId, stockDesc.getGoodsTypeId())
 			.eq(ObjectUtil.isNotEmpty(stockDesc.getDot()), PjStockDesc::getDot, stockDesc.getDot())
 			.orderByDesc(PjStockDesc::getBalanceQuantity);
-		if ("0".equals(stockDesc.getWhether())) {
-			lambdaQueryWrapper.ne(PjStockDesc::getBalanceQuantity, 0);
+		String status = iSysClient.getParamService("whether.zero.inventory");
+		if (ObjectUtils.isNull(status) || "0".equals(status)) {
+			lambdaQueryWrapper.gt(PjStockDesc::getBalanceQuantity, 0);
+		}
+		String management = iSysClient.getParamService("whether.branch.management");
+		if (ObjectUtils.isNotNull(management) && "1".equals(management)) {
+			if (ObjectUtils.isNotNull(corpsDesc.getDeliveryWarehouseId())) {
+				lambdaQueryWrapper.eq(PjStockDesc::getStorageId, corpsDesc.getDeliveryWarehouseId());
+			} else {
+				lambdaQueryWrapper.eq(ObjectUtil.isNotEmpty(stockDesc.getStorageId()), PjStockDesc::getStorageId, stockDesc.getStorageId())
+					.eq(ObjectUtil.isNotEmpty(stockDesc.getStorageName()), PjStockDesc::getStorageName, stockDesc.getStorageName());
+			}
+		} else {
+			lambdaQueryWrapper.eq(ObjectUtil.isNotEmpty(stockDesc.getStorageId()), PjStockDesc::getStorageId, stockDesc.getStorageId())
+				.eq(ObjectUtil.isNotEmpty(stockDesc.getStorageName()), PjStockDesc::getStorageName, stockDesc.getStorageName());
 		}
 		PjProductLaunch productLaunch = null;
 		if (ObjectUtil.isNotEmpty(stockDesc.getCname())) {