纪新园 1 год назад
Родитель
Сommit
f713978b6d
13 измененных файлов с 531 добавлено и 49 удалено
  1. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/corps/entity/BCorpsAttn.java
  2. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  3. 38 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/PreContainers.java
  4. 24 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/dto/FeeCenterReports.java
  5. 16 8
      blade-service/blade-los/src/main/java/org/springblade/los/app/controller/IndexController.java
  6. 6 4
      blade-service/blade-los/src/main/java/org/springblade/los/app/service/IndexService.java
  7. 179 21
      blade-service/blade-los/src/main/java/org/springblade/los/app/service/impl/IndexServiceImpl.java
  8. 15 3
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsAttnController.java
  9. 7 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/service/impl/BCorpsServiceImpl.java
  10. 132 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  11. 9 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  12. 32 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  13. 61 11
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/corps/entity/BCorpsAttn.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.basic.corps.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -164,6 +165,11 @@ public class BCorpsAttn implements Serializable {
 	 */
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
+	/**
+	 * 去重字段
+	 */
+	@TableField(exist = false)
+	private String removeDuplicateFields;
 
 
 }

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

@@ -1774,6 +1774,12 @@ public class Bills implements Serializable {
 	private String whetherReceivedBalancePayment;
 
 	/**
+	 * 客户来源
+	 */
+	@ApiModelProperty(value = "客户来源")
+	private String corpSource;
+
+	/**
 	 * 入库
 	 */
 	@TableField(exist = false)

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

@@ -290,5 +290,43 @@ public class PreContainers implements Serializable {
 	 */
 	private Long srcId;
 
+	/**
+	 * 是否冻代干
+	 */
+	@ApiModelProperty(value = "是否冻代干")
+	private Integer nor;
+
+	/**
+	 * 是否超尺寸特种箱
+	 */
+	@ApiModelProperty(value = "是否超尺寸特种箱")
+	private Integer oog;
+
+	/**
+	 * 左超 厘米
+	 */
+	@ApiModelProperty(value = "左超 厘米")
+	private BigDecimal overLeft;
+	/**
+	 * 右超 厘米
+	 */
+	@ApiModelProperty(value = "右超 厘米")
+	private BigDecimal overRight;
+	/**
+	 * 前超 厘米
+	 */
+	@ApiModelProperty(value = "前超 厘米")
+	private BigDecimal overFront;
+	/**
+	 * 后超 厘米
+	 */
+	@ApiModelProperty(value = "后超 厘米")
+	private BigDecimal overBack;
+	/**
+	 * 超高 厘米
+	 */
+	@ApiModelProperty(value = "超高 厘米")
+	private BigDecimal overHeight;
+
 
 }

+ 24 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/dto/FeeCenterReports.java

@@ -119,5 +119,29 @@ public class FeeCenterReports implements Serializable {
 	 */
 	private BigDecimal exrate;
 
+	/**
+	 * 数量
+	 */
+	private BigDecimal quantity;
+
+	/**
+	 * 单位
+	 */
+	private String unitNo;
+	/**
+	 * 单价
+	 */
+	private BigDecimal price;
+
+	/**
+	 * 费用英文名称
+	 */
+	private String feeEnName;
+
+	/**
+	 * 金额
+	 */
+	private BigDecimal money;
+
 
 }

+ 16 - 8
blade-service/blade-los/src/main/java/org/springblade/los/app/controller/IndexController.java

@@ -26,34 +26,42 @@ public class IndexController extends BladeController {
 	 * 利润
 	 */
 	@GetMapping("/profit")
-	public R profit(@RequestParam("type") String type, @RequestParam("startDate") String startDate,
+	public R profit(@RequestParam("branchId") String branchId, @RequestParam("startDate") String startDate,
 					@RequestParam("endDate") String endDate) {
-		return indexService.profit(type, startDate, endDate);
+		return indexService.profit(branchId, startDate, endDate);
 	}
 
 	/**
 	 * 总货量
 	 */
 	@GetMapping("/totalCargoVolume")
-	public R totalCargoVolume(@RequestParam("type") String type, @RequestParam("startDate") String startDate,
+	public R totalCargoVolume(@RequestParam("branchId") String branchId, @RequestParam("startDate") String startDate,
 					@RequestParam("endDate") String endDate) {
-		return indexService.totalCargoVolume(type, startDate, endDate);
+		return indexService.totalCargoVolume(branchId, startDate, endDate);
 	}
 
 	/**
 	 * 有效客户数量
 	 */
 	@GetMapping("/effectiveCorp")
-	public R effectiveCorp(@RequestParam("type") String type) {
-		return indexService.effectiveCorp(type);
+	public R effectiveCorp(@RequestParam("branchId") String branchId) {
+		return indexService.effectiveCorp(branchId);
 	}
 
 	/**
 	 * 流失客户数量
 	 */
 	@GetMapping("/lossCorp")
-	public R lossCorp(@RequestParam("type") String type) {
-		return indexService.lossCorp(type);
+	public R lossCorp(@RequestParam("branchId") String branchId) {
+		return indexService.lossCorp(branchId);
+	}
+
+	/**
+	 * 客户数量详情
+	 */
+	@GetMapping("/getCorpDetail")
+	public R getCorpDetail(@RequestParam("branchId") String branchId,@RequestParam("type") String type) {
+		return indexService.getCorpDetail(branchId,type);
 	}
 
 }

+ 6 - 4
blade-service/blade-los/src/main/java/org/springblade/los/app/service/IndexService.java

@@ -7,11 +7,13 @@ import org.springblade.core.tool.api.R;
  * @date : 2024/10/11
  */
 public interface IndexService {
-	R profit(String type, String startDate, String endDate);
+	R profit(String branchId, String startDate, String endDate);
 
-	R totalCargoVolume(String type, String startDate, String endDate);
+	R totalCargoVolume(String branchId, String startDate, String endDate);
 
-	R effectiveCorp(String type);
+	R effectiveCorp(String branchId);
 
-	R lossCorp(String type);
+	R lossCorp(String branchId);
+
+	R getCorpDetail(String branchId, String type);
 }

+ 179 - 21
blade-service/blade-los/src/main/java/org/springblade/los/app/service/impl/IndexServiceImpl.java

@@ -7,22 +7,21 @@ 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.service.IndexService;
+import org.springblade.los.basic.corps.entity.BCorps;
+import org.springblade.los.basic.corps.mapper.CorpsMapper;
 import org.springblade.los.business.aea.entity.AeaBills;
 import org.springblade.los.business.aea.mapper.AeaBillsMapper;
 import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.amends.mapper.AmendsMapper;
-import org.springblade.los.business.customsDeclaration.mapper.CustomsDeclarationMapper;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.mapper.BillsMapper;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.mapper.FeeCenterMapper;
-import org.springblade.los.finance.fee.mapper.FinAccBillsMapper;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -35,22 +34,20 @@ public class IndexServiceImpl implements IndexService {
 
 	private final BillsMapper billsMapper;
 	private final AeaBillsMapper aeaBillsMapper;
-	private final CustomsDeclarationMapper customsDeclarationMapper;
 	private final AmendsMapper amendsMapper;
-	private final FinAccBillsMapper finAccBillsMapper;
+	private final CorpsMapper corpsMapper;
 	private final FeeCenterMapper feeCenterMapper;
 	private final IDeptUtils deptUtils;
 	private final ISysClient sysClient;
 
 	@Override
-	public R profit(String type, String startDate, String endDate) {
+	public R profit(String branchId, String startDate, String endDate) {
 		BigDecimal amountD = new BigDecimal("0.00");
 		BigDecimal amountC = new BigDecimal("0.00");
 		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<Bills>()
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
 			.eq(Bills::getIsDeleted, 0)
-			.apply("find_in_set(bill_type,'DD,MM')")
-			.eq(ObjectUtils.isNotNull(type), Bills::getBranchId, type)
+			.eq(ObjectUtils.isNotNull(branchId), Bills::getBranchId, branchId)
 			.ge(ObjectUtils.isNotNull(startDate), Bills::getBillDate, startDate)
 			.le(ObjectUtils.isNotNull(endDate), Bills::getBillDate, endDate);
 		String jurisdiction = sysClient.getParamService("data.jurisdiction");
@@ -84,7 +81,7 @@ public class IndexServiceImpl implements IndexService {
 			.eq(Amends::getIsDeleted, 0)
 			.in(!billIds.isEmpty(), Amends::getOrigId, billIds)
 			.apply("find_in_set(business_type,'SEA,SIA,AEA,AIA')")
-			.eq(ObjectUtils.isNotNull(type), Amends::getBranchId, type)
+			.eq(ObjectUtils.isNotNull(branchId), Amends::getBranchId, branchId)
 			.ge(ObjectUtils.isNotNull(startDate), Amends::getBillDate, startDate)
 			.le(ObjectUtils.isNotNull(endDate), Amends::getBillDate, endDate);
 		List<Amends> amendsList = amendsMapper.selectList(amendsLambdaQueryWrapper);
@@ -99,17 +96,17 @@ public class IndexServiceImpl implements IndexService {
 					.reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getExrate().multiply(y.getAmount())), BigDecimal::add);
 				amountC = feeCenterList.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 = feeCenterList.stream().filter(e -> "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
-					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-				amountC = feeCenterList.stream().filter(e -> "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
-					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				amountD = amountD.add(feeCenterList.stream().filter(e -> "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
+					.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+				amountC = amountC.add(feeCenterList.stream().filter(e -> "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
+					.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(type), AeaBills::getBranchId, type)
+			.eq(ObjectUtils.isNotNull(branchId), AeaBills::getBranchId, branchId)
 			.ge(ObjectUtils.isNotNull(startDate), AeaBills::getBillDate, startDate)
 			.le(ObjectUtils.isNotNull(endDate), AeaBills::getBillDate, endDate));
 		if (!amendsList.isEmpty()) {
@@ -120,17 +117,178 @@ public class IndexServiceImpl implements IndexService {
 	}
 
 	@Override
-	public R totalCargoVolume(String type, String startDate, String endDate) {
-		return null;
+	public R totalCargoVolume(String branchId, String startDate, String endDate) {
+		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.eq(ObjectUtils.isNotNull(branchId), Bills::getBranchId, branchId)
+			.ge(ObjectUtils.isNotNull(startDate), Bills::getBillDate, startDate)
+			.le(ObjectUtils.isNotNull(endDate), Bills::getBillDate, endDate);
+		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()) {
+			return R.data(billsList.stream().map(Bills::getTeu).filter(Objects::nonNull).mapToInt(Integer::intValue).sum());
+		} else {
+			return R.data(new BigDecimal("0"));
+		}
+	}
+
+	@Override
+	public R effectiveCorp(String branchId) {
+		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()) {
+			return R.data(billsList.stream().map(Bills::getCorpId).distinct().count());
+		} else {
+			return R.data(new BigDecimal("0"));
+		}
 	}
 
 	@Override
-	public R effectiveCorp(String type) {
-		return null;
+	public R lossCorp(String branchId) {
+		Date date = new Date();
+		Calendar calendarDate = Calendar.getInstance();
+		calendarDate.setTime(date);
+		calendarDate.add(Calendar.DAY_OF_MONTH, -90);
+		Date dateTime = calendarDate.getTime();
+		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.gt(Bills::getBillDate, dateTime)
+			.lt(Bills::getBillDate, date)
+			.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()) {
+			List<Long> corpIds = billsList.stream().map(Bills::getCorpId).distinct().collect(Collectors.toList());
+			if (!corpIds.isEmpty()) {
+				List<BCorps> corpsList = corpsMapper.selectList(new LambdaQueryWrapper<BCorps>()
+					.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+					.eq(BCorps::getIsDeleted, 0)
+					.eq(BCorps::getBranchId, branchId)
+					.notIn(BCorps::getId, corpIds));
+				if (!corpsList.isEmpty()) {
+					return R.data(corpsList.size());
+				} else {
+					return R.data(new BigDecimal("0"));
+				}
+			} else {
+				return R.data(new BigDecimal("0"));
+			}
+		} else {
+			return R.data(new BigDecimal("0"));
+		}
 	}
 
 	@Override
-	public R lossCorp(String type) {
-		return null;
+	public R getCorpDetail(String branchId, String type) {
+		Date date = new Date();
+		Calendar calendarDate = Calendar.getInstance();
+		calendarDate.setTime(date);
+		calendarDate.add(Calendar.DAY_OF_MONTH, -90);
+		Date dateTime = calendarDate.getTime();
+		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.eq(ObjectUtils.isNotNull(branchId), Bills::getBranchId, branchId);
+		if ("1".equals(type)) {
+			lambdaQueryWrapper.gt(Bills::getBillDate, dateTime)
+				.lt(Bills::getBillDate, date);
+		}
+		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<BCorps> corpsList = new ArrayList<>();
+		if (!billsList.isEmpty()) {
+			List<Long> corpIds = billsList.stream().map(Bills::getCorpId).distinct().collect(Collectors.toList());
+			if (!corpIds.isEmpty()) {
+				LambdaQueryWrapper<BCorps> corpsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				corpsLambdaQueryWrapper.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+					.eq(BCorps::getIsDeleted, 0)
+					.eq(BCorps::getBranchId, branchId);
+				if ("1".equals(type)) {
+					corpsLambdaQueryWrapper.notIn(BCorps::getId, corpIds);
+				} else {
+					corpsLambdaQueryWrapper.in(BCorps::getId, corpIds);
+				}
+				corpsList = corpsMapper.selectList(corpsLambdaQueryWrapper);
+			}
+		}
+		return R.data(corpsList);
 	}
 }

+ 15 - 3
blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsAttnController.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.los.basic.corps.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -25,6 +27,7 @@ import javax.validation.Valid;
 
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
@@ -66,7 +69,16 @@ public class BCorpsAttnController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入bCorpsAttn")
 	public R<IPage<BCorpsAttn>> list(BCorpsAttn bCorpsAttn, Query query) {
-		IPage<BCorpsAttn> pages = bCorpsAttnService.page(Condition.getPage(query), Condition.getQueryWrapper(bCorpsAttn));
+		LambdaQueryWrapper<BCorpsAttn> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(BCorpsAttn::getTenantId, AuthUtil.getTenantId())
+			.eq(BCorpsAttn::getIsDeleted,0)
+			.like(ObjectUtils.isNotNull(bCorpsAttn.getCname()) , BCorpsAttn::getCname,bCorpsAttn.getCname())
+			.like(ObjectUtils.isNotNull(bCorpsAttn.getCode()) , BCorpsAttn::getCode,bCorpsAttn.getCode())
+			.like(ObjectUtils.isNotNull(bCorpsAttn.getEmail()) , BCorpsAttn::getEmail,bCorpsAttn.getEmail())
+			.like(ObjectUtils.isNotNull(bCorpsAttn.getTel()) , BCorpsAttn::getTel,bCorpsAttn.getTel())
+			.like(ObjectUtils.isNotNull(bCorpsAttn.getAttn()) , BCorpsAttn::getAttn,bCorpsAttn.getAttn())
+			.like(ObjectUtils.isNotNull(bCorpsAttn.getAddr()) , BCorpsAttn::getAddr,bCorpsAttn.getAddr());
+		IPage<BCorpsAttn> pages = bCorpsAttnService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -111,7 +123,7 @@ public class BCorpsAttnController extends BladeController {
 		return R.status(bCorpsAttnService.saveOrUpdate(bCorpsAttn));
 	}
 
-	
+
 	/**
 	 * 删除 客户联系人
 	 */
@@ -122,5 +134,5 @@ public class BCorpsAttnController extends BladeController {
 		return R.status(bCorpsAttnService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }

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

@@ -220,6 +220,13 @@ public class BCorpsServiceImpl extends ServiceImpl<CorpsMapper, BCorps> implemen
 		//客户联系人
 		if (ObjectUtils.isNotNull(bCorps.getCorpsAttnList())) {
 			for (BCorpsAttn item : bCorps.getCorpsAttnList()) {
+				item.setRemoveDuplicateFields(item.getCname() + "-" + item.getTel() + "-" + item.getEmail());
+			}
+			List<String> attnList = bCorps.getCorpsAttnList().stream().map(BCorpsAttn::getRemoveDuplicateFields).distinct().collect(Collectors.toList());
+			if (bCorps.getCorpsAttnList().size() != attnList.size()) {
+				throw new RuntimeException("客户联系人中:名称+电话+邮箱不允许重复!请修改数据重新保存");
+			}
+			for (BCorpsAttn item : bCorps.getCorpsAttnList()) {
 				if (item.getId() == null) {
 					item.setPid(bCorps.getId());
 					item.setCreateTime(new Date());

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

@@ -6899,6 +6899,60 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				if (biz.isSuccess()) {
 					bills.setSrcType(biz.getData());
 				}
+				SeaBillsDetail seaBillsDetail = seaBillsDetailService.getOne(new LambdaQueryWrapper<SeaBillsDetail>()
+					.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
+					.eq(SeaBillsDetail::getPid, bills.getId()));
+				if (seaBillsDetail != null) {
+					bills.setInttraToDoorCorpName(seaBillsDetail.getInttraToDoorCorpName());
+					bills.setInttraToDoorCorpAddr(seaBillsDetail.getInttraToDoorCorpAddr());
+					bills.setInttraToDoorCorpContacts(seaBillsDetail.getInttraToDoorCorpContacts());
+					bills.setInttraToDoorCorpTel(seaBillsDetail.getInttraToDoorCorpTel());
+					bills.setInttraDoorToCorpName(seaBillsDetail.getInttraDoorToCorpName());
+					bills.setInttraDoorToCorpAddr(seaBillsDetail.getInttraDoorToCorpAddr());
+					bills.setInttraDoorToCorpContacts(seaBillsDetail.getInttraDoorToCorpContacts());
+					bills.setInttraDoorToCorpTel(seaBillsDetail.getInttraDoorToCorpTel());
+					bills.setHshipperId(seaBillsDetail.getHshipperId());
+					bills.setHshipperCode(seaBillsDetail.getHshipperCode());
+					bills.setHshipperCnName(seaBillsDetail.getHshipperCnName());
+					bills.setHshipperEnName(seaBillsDetail.getHshipperEnName());
+					bills.setHshipperDetails(seaBillsDetail.getHshipperDetails());
+					bills.setHconsigneeId(seaBillsDetail.getHconsigneeId());
+					bills.setHconsigneeCode(seaBillsDetail.getHconsigneeCode());
+					bills.setHconsigneeCnName(seaBillsDetail.getHconsigneeCnName());
+					bills.setHconsigneeEnName(seaBillsDetail.getHconsigneeEnName());
+					bills.setHconsigneeDetails(seaBillsDetail.getHconsigneeDetails());
+					bills.setHnotifyId(seaBillsDetail.getHnotifyId());
+					bills.setHnotifyCode(seaBillsDetail.getHnotifyCode());
+					bills.setHnotifyCnName(seaBillsDetail.getHnotifyCnName());
+					bills.setHnotifyEnName(seaBillsDetail.getHnotifyEnName());
+					bills.setHnotifyDetails(seaBillsDetail.getHnotifyDetails());
+					bills.setHnotify2Id(seaBillsDetail.getHnotify2Id());
+					bills.setHnotify2Code(seaBillsDetail.getHnotify2Code());
+					bills.setHnotify2CnName(seaBillsDetail.getHnotify2CnName());
+					bills.setHnotify2EnName(seaBillsDetail.getHnotify2EnName());
+					bills.setHnotify2Details(seaBillsDetail.getHnotify2Details());
+					bills.setMshipperId(seaBillsDetail.getMshipperId());
+					bills.setMshipperCode(seaBillsDetail.getMshipperCode());
+					bills.setMshipperCnName(seaBillsDetail.getMshipperCnName());
+					bills.setMshipperEnName(seaBillsDetail.getMshipperEnName());
+					bills.setMshipperDetails(seaBillsDetail.getMshipperDetails());
+					bills.setMconsigneeId(seaBillsDetail.getMconsigneeId());
+					bills.setMconsigneeCode(seaBillsDetail.getMconsigneeCode());
+					bills.setMconsigneeCnName(seaBillsDetail.getMconsigneeCnName());
+					bills.setMconsigneeEnName(seaBillsDetail.getMconsigneeEnName());
+					bills.setMconsigneeDetails(seaBillsDetail.getMconsigneeDetails());
+					bills.setMnotifyId(seaBillsDetail.getMnotifyId());
+					bills.setMnotifyCode(seaBillsDetail.getMnotifyCode());
+					bills.setMnotifyCnName(seaBillsDetail.getMnotifyCnName());
+					bills.setMnotifyEnName(seaBillsDetail.getMnotifyEnName());
+					bills.setMnotifyDetails(seaBillsDetail.getMnotifyDetails());
+					bills.setMnotify2Id(seaBillsDetail.getMnotify2Id());
+					bills.setMnotify2Code(seaBillsDetail.getMnotify2Code());
+					bills.setMnotify2CnName(seaBillsDetail.getMnotify2CnName());
+					bills.setMnotify2EnName(seaBillsDetail.getMnotify2EnName());
+					bills.setMnotify2Details(seaBillsDetail.getMnotify2Details());
+					bills.setMforwarderDetails(seaBillsDetail.getMforwarderDetails());
+				}
 //				bills.setFM(MagicValues.FM);
 				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
 				List<FeeCenter> feeCenterList;
@@ -6976,6 +7030,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					feeCenterReports.setCorpCnName(item.getCorpCnName());
 					feeCenterReports.setBillCorpCnName(item.getBillCorpCnName());
 					feeCenterReports.setFeeCnName(item.getFeeCnName());
+					feeCenterReports.setFeeEnName(item.getFeeEnName());
 					if (MagicValues.CNY.equals(item.getCurCode())) {
 						feeCenterReports.setAmountD(item.getAmount());
 					} else {
@@ -6985,6 +7040,10 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					feeCenterReports.setHblno(item.getHblno());
 					feeCenterReports.setAmount(item.getQuantity() + "*" + item.getPrice());
 					feeCenterReports.setExrate(item.getExrate());
+					feeCenterReports.setQuantity(item.getQuantity());
+					feeCenterReports.setUnitNo(item.getUnitNo());
+					feeCenterReports.setPrice(item.getPrice());
+					feeCenterReports.setMoney(item.getAmount());
 					feeCenterReportsList.add(feeCenterReports);
 				}
 				if (!feeCenterList.isEmpty()){
@@ -7004,6 +7063,13 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setAmountCrUsd(amountCrUsd);
 				bills.setAmountProfitUsd(amountProfitUsd);
 				bills.setAmountDrLoc(amountDrLoc);
+				if ("USD".equals(curCode)){
+					bills.setCapitalLetters(BigDecimalUtils.convertToEnglish(amountDrUsd));
+				}else if ("CNY".equals(curCode)){
+					bills.setCapitalLetters(BigDecimalUtils.convertToEnglish(amountDr));
+				}else{
+					bills.setCapitalLetters(BigDecimalUtils.convertToEnglish(amountDrLoc));
+				}
 				bills.setAmountCrLoc(amountCrLoc);
 				bills.setAmountProfitLoc(amountProfitLoc);
 				List<BCorpsBank> bCorpsBanks = bankService.list(new LambdaQueryWrapper<BCorpsBank>()
@@ -7158,6 +7224,60 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				if (biz.isSuccess()) {
 					bills.setSrcType(biz.getData());
 				}
+				SeaBillsDetail seaBillsDetail = seaBillsDetailService.getOne(new LambdaQueryWrapper<SeaBillsDetail>()
+					.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
+					.eq(SeaBillsDetail::getPid, bills.getId()));
+				if (seaBillsDetail != null) {
+					bills.setInttraToDoorCorpName(seaBillsDetail.getInttraToDoorCorpName());
+					bills.setInttraToDoorCorpAddr(seaBillsDetail.getInttraToDoorCorpAddr());
+					bills.setInttraToDoorCorpContacts(seaBillsDetail.getInttraToDoorCorpContacts());
+					bills.setInttraToDoorCorpTel(seaBillsDetail.getInttraToDoorCorpTel());
+					bills.setInttraDoorToCorpName(seaBillsDetail.getInttraDoorToCorpName());
+					bills.setInttraDoorToCorpAddr(seaBillsDetail.getInttraDoorToCorpAddr());
+					bills.setInttraDoorToCorpContacts(seaBillsDetail.getInttraDoorToCorpContacts());
+					bills.setInttraDoorToCorpTel(seaBillsDetail.getInttraDoorToCorpTel());
+					bills.setHshipperId(seaBillsDetail.getHshipperId());
+					bills.setHshipperCode(seaBillsDetail.getHshipperCode());
+					bills.setHshipperCnName(seaBillsDetail.getHshipperCnName());
+					bills.setHshipperEnName(seaBillsDetail.getHshipperEnName());
+					bills.setHshipperDetails(seaBillsDetail.getHshipperDetails());
+					bills.setHconsigneeId(seaBillsDetail.getHconsigneeId());
+					bills.setHconsigneeCode(seaBillsDetail.getHconsigneeCode());
+					bills.setHconsigneeCnName(seaBillsDetail.getHconsigneeCnName());
+					bills.setHconsigneeEnName(seaBillsDetail.getHconsigneeEnName());
+					bills.setHconsigneeDetails(seaBillsDetail.getHconsigneeDetails());
+					bills.setHnotifyId(seaBillsDetail.getHnotifyId());
+					bills.setHnotifyCode(seaBillsDetail.getHnotifyCode());
+					bills.setHnotifyCnName(seaBillsDetail.getHnotifyCnName());
+					bills.setHnotifyEnName(seaBillsDetail.getHnotifyEnName());
+					bills.setHnotifyDetails(seaBillsDetail.getHnotifyDetails());
+					bills.setHnotify2Id(seaBillsDetail.getHnotify2Id());
+					bills.setHnotify2Code(seaBillsDetail.getHnotify2Code());
+					bills.setHnotify2CnName(seaBillsDetail.getHnotify2CnName());
+					bills.setHnotify2EnName(seaBillsDetail.getHnotify2EnName());
+					bills.setHnotify2Details(seaBillsDetail.getHnotify2Details());
+					bills.setMshipperId(seaBillsDetail.getMshipperId());
+					bills.setMshipperCode(seaBillsDetail.getMshipperCode());
+					bills.setMshipperCnName(seaBillsDetail.getMshipperCnName());
+					bills.setMshipperEnName(seaBillsDetail.getMshipperEnName());
+					bills.setMshipperDetails(seaBillsDetail.getMshipperDetails());
+					bills.setMconsigneeId(seaBillsDetail.getMconsigneeId());
+					bills.setMconsigneeCode(seaBillsDetail.getMconsigneeCode());
+					bills.setMconsigneeCnName(seaBillsDetail.getMconsigneeCnName());
+					bills.setMconsigneeEnName(seaBillsDetail.getMconsigneeEnName());
+					bills.setMconsigneeDetails(seaBillsDetail.getMconsigneeDetails());
+					bills.setMnotifyId(seaBillsDetail.getMnotifyId());
+					bills.setMnotifyCode(seaBillsDetail.getMnotifyCode());
+					bills.setMnotifyCnName(seaBillsDetail.getMnotifyCnName());
+					bills.setMnotifyEnName(seaBillsDetail.getMnotifyEnName());
+					bills.setMnotifyDetails(seaBillsDetail.getMnotifyDetails());
+					bills.setMnotify2Id(seaBillsDetail.getMnotify2Id());
+					bills.setMnotify2Code(seaBillsDetail.getMnotify2Code());
+					bills.setMnotify2CnName(seaBillsDetail.getMnotify2CnName());
+					bills.setMnotify2EnName(seaBillsDetail.getMnotify2EnName());
+					bills.setMnotify2Details(seaBillsDetail.getMnotify2Details());
+					bills.setMforwarderDetails(seaBillsDetail.getMforwarderDetails());
+				}
 //				bills.setFM(MagicValues.FM);
 				bills.setVesselCnName(bills.getVesselEnName() + "/" + bills.getVoyageNo());
 				List<FeeCenter> feeCenterList;
@@ -7235,6 +7355,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					feeCenterReports.setCorpCnName(item.getCorpCnName());
 					feeCenterReports.setBillCorpCnName(item.getBillCorpCnName());
 					feeCenterReports.setFeeCnName(item.getFeeCnName());
+					feeCenterReports.setFeeEnName(item.getFeeEnName());
 					if (MagicValues.CNY.equals(item.getCurCode())) {
 						feeCenterReports.setAmountC(item.getAmount());
 					} else {
@@ -7244,6 +7365,10 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 					feeCenterReports.setHblno(item.getHblno());
 					feeCenterReports.setAmount(item.getQuantity() + "*" + item.getPrice());
 					feeCenterReports.setExrate(item.getExrate());
+					feeCenterReports.setQuantity(item.getQuantity());
+					feeCenterReports.setUnitNo(item.getUnitNo());
+					feeCenterReports.setPrice(item.getPrice());
+					feeCenterReports.setMoney(item.getAmount());
 					feeCenterReportsList.add(feeCenterReports);
 				}
 				if (!feeCenterList.isEmpty()){
@@ -7264,6 +7389,13 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				bills.setAmountProfitUsd(amountProfitUsd);
 				bills.setAmountDrLoc(amountDrLoc);
 				bills.setAmountCrLoc(amountCrLoc);
+				if ("USD".equals(curCode)){
+					bills.setCapitalLetters(BigDecimalUtils.convertToEnglish(amountCrUsd));
+				}else if ("CNY".equals(curCode)){
+					bills.setCapitalLetters(BigDecimalUtils.convertToEnglish(amountCr));
+				}else{
+					bills.setCapitalLetters(BigDecimalUtils.convertToEnglish(amountCrLoc));
+				}
 				bills.setAmountProfitLoc(amountProfitLoc);
 				bills.setDept(dept);
 				map.put(MagicValues.DATA, bills);

+ 9 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java

@@ -108,7 +108,7 @@ public class BillsController extends BladeController {
 			Bills::getAccountStatus, Bills::getRemarks, Bills::getPackingUnit, Bills::getBillDate, Bills::getTeamName,
 			Bills::getCreateUser, Bills::getTeu, Bills::getIssueType, Bills::getBookingNo, Bills::getQuantityCntrDescr,
 			Bills::getCreateDeptName, Bills::getLineCnName, Bills::getCarrierCnName, Bills::getCyCnName, Bills::getSrcType,
-			Bills::getSrcCnName, Bills::getBookingAgentCnName, Bills::getPodCnName, Bills::getPolCnName);
+			Bills::getSrcCnName, Bills::getBookingAgentCnName, Bills::getPodCnName, Bills::getPolCnName,Bills::getCorpSource);
 		lambdaQueryWrapper.eq(Bills::getIsDeleted, 0)
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
 			.and(i -> i.isNull(Bills::getMasterId).or()
@@ -116,7 +116,9 @@ public class BillsController extends BladeController {
 			.like(ObjectUtils.isNotNull(bills.getBillNo()), Bills::getBillNo, bills.getBillNo())
 			.like(ObjectUtils.isNotNull(bills.getMblno()), Bills::getMblno, bills.getMblno())
 			.like(ObjectUtils.isNotNull(bills.getHblno()), Bills::getHblno, bills.getHblno())
+			.like(ObjectUtils.isNotNull(bills.getCorpSource()), Bills::getCorpSource, bills.getCorpSource())
 			.like(ObjectUtils.isNotNull(bills.getBookingNo()), Bills::getBookingNo, bills.getBookingNo())
+			.like(ObjectUtils.isNotNull(bills.getCreateUserName()), Bills::getCreateUserName, bills.getCreateUserName())
 			.and(ObjectUtils.isNotNull(bills.getVesselCnName()), i -> i.like(Bills::getVesselCnName, bills.getVesselCnName()).or()
 				.like(Bills::getVesselEnName, bills.getVesselCnName()))
 			.like(ObjectUtils.isNotNull(bills.getVoyageNo()), Bills::getVoyageNo, bills.getVoyageNo())
@@ -236,6 +238,8 @@ public class BillsController extends BladeController {
 			.like(ObjectUtils.isNotNull(bills.getBillNo()), Bills::getBillNo, bills.getBillNo())
 			.like(ObjectUtils.isNotNull(bills.getMblno()), Bills::getMblno, bills.getMblno())
 			.like(ObjectUtils.isNotNull(bills.getHblno()), Bills::getHblno, bills.getHblno())
+			.like(ObjectUtils.isNotNull(bills.getCorpSource()), Bills::getCorpSource, bills.getCorpSource())
+			.like(ObjectUtils.isNotNull(bills.getCreateUserName()), Bills::getCreateUserName, bills.getCreateUserName())
 			.like(ObjectUtils.isNotNull(bills.getBookingNo()), Bills::getBookingNo, bills.getBookingNo())
 			.and(ObjectUtils.isNotNull(bills.getVesselCnName()), i -> i.like(Bills::getVesselCnName, bills.getVesselCnName()).or()
 				.like(Bills::getVesselEnName, bills.getVesselCnName()))
@@ -576,7 +580,8 @@ public class BillsController extends BladeController {
 			Bills::getCreateTime, Bills::getUpdateUserName, Bills::getUpdateTime, Bills::getStatus, Bills::getBillStatus,
 			Bills::getAccountStatus, Bills::getRemarks, Bills::getPackingUnit, Bills::getBillDate, Bills::getTeamName,
 			Bills::getCreateUser, Bills::getTeu, Bills::getIssueType, Bills::getBookingNo, Bills::getQuantityCntrDescr,
-			Bills::getCyCnName, Bills::getCarrierCnName, Bills::getSrcType, Bills::getSrcCnName, Bills::getBookingAgentCnName, Bills::getCreateDeptName, Bills::getLineCnName);
+			Bills::getCyCnName, Bills::getCarrierCnName, Bills::getSrcType, Bills::getSrcCnName, Bills::getBookingAgentCnName,
+			Bills::getCreateDeptName, Bills::getLineCnName, Bills::getCorpSource);
 		lambdaQueryWrapper.eq(Bills::getIsDeleted, 0)
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
 			.and(i -> i.isNull(Bills::getMasterId).or()
@@ -584,7 +589,9 @@ public class BillsController extends BladeController {
 			.like(ObjectUtils.isNotNull(bills.getBillNo()), Bills::getBillNo, bills.getBillNo())
 			.like(ObjectUtils.isNotNull(bills.getMblno()), Bills::getMblno, bills.getMblno())
 			.like(ObjectUtils.isNotNull(bills.getHblno()), Bills::getHblno, bills.getHblno())
+			.like(ObjectUtils.isNotNull(bills.getCorpSource()), Bills::getCorpSource, bills.getCorpSource())
 			.like(ObjectUtils.isNotNull(bills.getBookingNo()), Bills::getBookingNo, bills.getBookingNo())
+			.like(ObjectUtils.isNotNull(bills.getCreateUserName()), Bills::getCreateUserName, bills.getCreateUserName())
 			.and(ObjectUtils.isNotNull(bills.getVesselCnName()), i -> i.like(Bills::getVesselCnName, bills.getVesselCnName()).or()
 				.like(Bills::getVesselEnName, bills.getVesselCnName()))
 			.like(ObjectUtils.isNotNull(bills.getVoyageNo()), Bills::getVoyageNo, bills.getVoyageNo())

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

@@ -32,6 +32,9 @@ import org.springblade.los.Util.StringTools;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.corps.entity.BCorps;
+import org.springblade.los.basic.corps.entity.BCorpsAttn;
+import org.springblade.los.basic.corps.mapper.CorpsAttnMapper;
+import org.springblade.los.basic.corps.service.IBCorpsAttnService;
 import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.cur.entity.BCurrency;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
@@ -146,6 +149,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final VesselsMapper vesselsMapper;
 
+	private final CorpsAttnMapper corpsAttnMapper;
+
 	@Override
 	public IPage<BillsVO> selectBillsPage(IPage<BillsVO> page, BillsVO bills) {
 		return page.setRecords(baseMapper.selectBillsPage(page, bills));
@@ -202,6 +207,33 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				bills.setVesselEnName(bVessels.getEnName());
 			}
 		}
+		if (ObjectUtils.isNotNull(bills.getCorpAttnName())) {
+			BCorpsAttn corpsAttn = corpsAttnMapper.selectOne(new LambdaQueryWrapper<BCorpsAttn>()
+				.eq(BCorpsAttn::getTenantId, AuthUtil.getTenantId())
+				.eq(BCorpsAttn::getIsDeleted, 0)
+				.eq(BCorpsAttn::getCname, bills.getCorpAttnName())
+				.eq(BCorpsAttn::getTel, bills.getCorpAttnTel())
+				.eq(BCorpsAttn::getEmail, bills.getCorpAttnEmail())
+			);
+			if (corpsAttn != null) {
+				bills.setCorpAttnId(corpsAttn.getId());
+				bills.setCorpAttnName(corpsAttn.getCname());
+				bills.setCorpAttnTel(corpsAttn.getTel());
+				bills.setCorpAttnEmail(corpsAttn.getEmail());
+			} else {
+				BCorpsAttn attn = new BCorpsAttn();
+				attn.setCname(bills.getCorpAttnName());
+				attn.setTel(bills.getCorpAttnTel());
+				attn.setEmail(bills.getCorpAttnEmail());
+				attn.setPid(bills.getCorpId());
+				attn.setCode(bills.getCorpAttnName());
+				corpsAttnMapper.insert(attn);
+				bills.setCorpAttnId(attn.getId());
+				bills.setCorpAttnName(attn.getCname());
+				bills.setCorpAttnTel(attn.getTel());
+				bills.setCorpAttnEmail(attn.getEmail());
+			}
+		}
 		if (ObjectUtils.isNotNull(bills.getBillDate())) {
 			LocalDate date = bills.getBillDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 			int year = date.getYear();

+ 61 - 11
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -3287,20 +3287,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 			if (storageDesc == null) {
 				throw new RuntimeException("未找到仓库信息");
 			}
-			if ("1".equals(storageDesc.getWhetherFinancing())){
+			if ("1".equals(storageDesc.getWhetherFinancing())) {
 				LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
 				itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
 					.eq(PjOrderItems::getIsDeleted, 0)
 					.eq(PjOrderItems::getPid, pjOrder.getId());
 				List<PjOrderItems> itemsList = orderItemsService.list(itemsLambdaQueryWrapper);
-				for (PjOrderItems item : itemsList) {
-					if (ObjectUtils.isNull(item.getRebatePrice())) {
-						throw new RuntimeException("获取数据失败,请先保存");
-					}
-					if (ObjectUtils.isNull(item.getCostprie())) {
-						throw new RuntimeException("获取数据失败,请先保存");
-					}
-				}
 				if (!itemsList.isEmpty()) {
 					if ("审核提交".equals(order.getTaskWhetherAdopt())) {
 						throw new RuntimeException("任务已提交审核");
@@ -3309,6 +3301,64 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					} else if ("审核通过".equals(order.getTaskWhetherAdopt())) {
 						throw new RuntimeException("任务审核已通过");
 					}
+					List<Long> goodIds = itemsList.stream().map(PjOrderItems::getGoodsId).distinct().collect(Collectors.toList());
+					List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+						.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+						.eq(PjGoodsDesc::getIsDeleted, 0)
+						.in(PjGoodsDesc::getId, goodIds));
+					//修改库存账
+					LambdaQueryWrapper<PjStockDesc> stockLambdaQueryWrapper = new LambdaQueryWrapper<>();
+					stockLambdaQueryWrapper
+						.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+						.eq(PjStockDesc::getIsDeleted, 0)
+						.eq(PjStockDesc::getStorageId, pjOrder.getStorageId())
+						.eq(PjStockDesc::getSalesCompanyId, pjOrder.getSalesCompanyId())
+						.in(PjStockDesc::getGoodsId, goodIds);
+					List<PjStockDesc> pjStockDescList = stockDescService.list(stockLambdaQueryWrapper);
+					BigDecimal amount = new BigDecimal("0.00");
+					for (PjOrderItems item : itemsList) {
+						if (ObjectUtils.isNull(item.getRebatePrice())) {
+							throw new RuntimeException("获取数据失败,请先保存");
+						}
+						if (ObjectUtils.isNull(item.getCostprie())) {
+							throw new RuntimeException("获取数据失败,请先保存");
+						}
+						PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
+						if (ObjectUtil.isEmpty(goodsDesc)) {
+							throw new RuntimeException("商品数据异常");
+						}
+						if ("1".equals(goodsDesc.getWhether()) && ObjectUtils.isNull(item.getDot())) {
+							throw new RuntimeException("商品:" + goodsDesc.getCname() + ",请选择批次号");
+						}
+						//管理批次号
+						PjStockDesc stockOne = null;
+						if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
+							stockOne = pjStockDescList.stream()
+								.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+									&& e.getDot().equals(item.getDot())).findFirst().orElse(null);
+						} else {
+							stockOne = pjStockDescList.stream()
+								.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+									&& ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
+						}
+						if (stockOne != null) {
+							if (stockOne.getBalanceQuantity().compareTo(item.getSendNum()) < 0) {
+								throw new RuntimeException("商品:" + goodsDesc.getCname() + "总库存不足");
+							} else {
+								BigDecimal sendNum = item.getGoodsNum();
+								if (stockOne.getBalanceQuantityHave().compareTo(sendNum) < 0) {
+									sendNum = sendNum.subtract(stockOne.getBalanceQuantityHave());
+									if (stockOne.getBalanceQuantityFinancing().compareTo(sendNum) < 0) {
+										throw new RuntimeException("商品:" + goodsDesc.getCname() + "融资库存不足,出库失败");
+									}
+									BigDecimal financingAmount = sendNum.multiply(item.getCostpriePrice());
+									amount = amount.add(financingAmount);
+								}
+							}
+						} else {
+							throw new RuntimeException("商品:" + goodsDesc.getCname() + "未查到库存账");
+						}
+					}
 					PjpfFunding pjpfFunding = pjpfFundingService.getOne(new LambdaQueryWrapper<PjpfFunding>()
 						.eq(PjpfFunding::getTenantId, AuthUtil.getTenantId())
 						.eq(PjpfFunding::getIsDeleted, 0));
@@ -3318,7 +3368,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					if (pjpfFunding.getBondAmount().compareTo(pjpfFunding.getPaidAlreadyBondAmount()) > 0) {
 						throw new RuntimeException("已缴保证金不足,生成任务失败");
 					}
-					BigDecimal amount = itemsList.stream().map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+//					BigDecimal amount = itemsList.stream().map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 					if (pjpfFunding.getAvailableAmount().subtract(pjpfFunding.getInterest()).compareTo(amount) < 0) {
 						throw new RuntimeException("可用资金:" + pjpfFunding.getAvailableAmount() + ";资金占用:" + pjpfFunding.getInterest() + ";   出库资金:" + amount + ";    请充值后,在生成任务");
 					}
@@ -3345,7 +3395,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				} else {
 					return R.data(true);
 				}
-			}else{
+			} else {
 				return R.data(true);
 			}
 		} else {