Browse Source

贸易代理 2024年7月22日17:30:15

纪新园 1 year ago
parent
commit
0d5024b523
17 changed files with 1064 additions and 433 deletions
  1. 13 12
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  2. 27 3
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/PreContainers.java
  3. 45 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/DispatchVehicles.java
  4. 14 3
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/InOutStorage.java
  5. 11 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/PreContainersController.java
  6. 18 379
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/TradeBillsController.java
  7. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java
  8. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IPreContainersService.java
  9. 332 13
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  10. 66 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java
  11. 35 2
      blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/DispatchVehiclesController.java
  12. 34 2
      blade-service/blade-los/src/main/java/org/springblade/los/trade/controller/InOutStorageController.java
  13. 8 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IDispatchVehiclesService.java
  14. 8 0
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IInOutStorageService.java
  15. 160 13
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java
  16. 140 3
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/DispatchVehiclesServiceImpl.java
  17. 149 3
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java

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

@@ -282,13 +282,14 @@ public class Bills implements Serializable {
 	@ApiModelProperty(value = "订舱号")
 	private String bookingNo;
 	/**
-	 * 订舱日期
+	 * 订舱日期 (预计到港)
 	 */
 	@ApiModelProperty(value = "订舱日期")
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
 	@DateTimeFormat(pattern = "yyyy-MM-dd")
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date bookingDate;
+	private List<String> bookingDateList;
 	/**
 	 * 退舱时间 yyyy-MM-dd hh:nn
 	 */
@@ -556,7 +557,7 @@ public class Bills implements Serializable {
 	@ApiModelProperty(value = "签单方式")
 	private String issueType;
 	/**
-	 * 签单日期
+	 * 签单日期(报关日期)
 	 */
 	@ApiModelProperty(value = "签单日期")
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@@ -1133,7 +1134,7 @@ public class Bills implements Serializable {
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date cyTrailerTime;
 	/**
-	 * 返场(回箱)时间 yyyy-MM-dd hh:nn
+	 * 返场(回箱)时间 yyyy-MM-dd hh:nn  (放行日期)
 	 */
 	@ApiModelProperty(value = "返场(回箱)时间 yyyy-MM-dd hh:nn")
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@@ -1461,42 +1462,42 @@ public class Bills implements Serializable {
 	private String mshipperCntyName;
 
 	/**
-	 * MB/L 收货人国家代码
+	 * MB/L 收货人国家代码(放单方式)
 	 */
 	@ApiModelProperty(value = "MB/L 收货人国家代码")
 	@TableField("m_consignee_cnty_code")
 	private String mconsigneeCntyCode;
 
 	/**
-	 * MB/L 收货人国家名称
+	 * MB/L 收货人国家名称 (贸易代理明细ids)
 	 */
 	@ApiModelProperty(value = "MB/L 收货人国家名称")
 	@TableField("m_consignee_cnty_name")
 	private String mconsigneeCntyName;
 
 	/**
-	 * MB/L 通知人国家代码
+	 * MB/L 通知人国家代码 (原产地)
 	 */
 	@ApiModelProperty(value = "MB/L 通知人国家代码")
 	@TableField("m_notify_cnty_code")
 	private String mnotifyCntyCode;
 
 	/**
-	 * MB/L 通知人国家名称
+	 * MB/L 通知人国家名称(运输方式)
 	 */
 	@ApiModelProperty(value = "MB/L 通知人国家名称")
 	@TableField("m_notify_cnty_name")
 	private String mnotifyCntyName;
 
 	/**
-	 * MB/L 第二通知人国家代码
+	 * MB/L 第二通知人国家代码(箱号)
 	 */
 	@ApiModelProperty(value = "MB/L 第二通知人国家代码")
 	@TableField("m_notify2_cnty_code")
 	private String mnotify2CntyCode;
 
 	/**
-	 * MB/L 第二通知人国家名称
+	 * MB/L 第二通知人国家名称(报关单号)
 	 */
 	@ApiModelProperty(value = "MB/L 第二通知人国家名称")
 	@TableField("m_notify2_cnty_name")
@@ -1526,13 +1527,13 @@ public class Bills implements Serializable {
 	private String bookingAgentEnName;
 
 	/**
-	 * 数据修改字符串
+	 * 数据修改字符串 (提箱码头)
 	 */
 	@ApiModelProperty(value = "数据修改字符串")
 	private String charData;
 
 	/**
-	 * 是否修改数据状态  0是  不等于0否
+	 * 是否修改数据状态  0是  不等于0否  (是否退押)
 	 */
 	@ApiModelProperty(value = "是否修改数据状态  0是  不等于0否")
 	private Integer billingStatus;
@@ -1544,7 +1545,7 @@ public class Bills implements Serializable {
 	private String forwarding;
 
 	/**
-	 * 检验检疫 NO
+	 * 检验检疫 NO  (免箱期)
 	 */
 	@ApiModelProperty(value = "检验检疫 NO")
 	private String iqNo;

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

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.business.sea.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -189,10 +190,10 @@ public class PreContainers implements Serializable {
 	private String tenantId;
 
 	/**
-	 * 品名
+	 * hscode
 	 */
-	@ApiModelProperty(value = "品名")
-	private Long goodsId;
+	@ApiModelProperty(value = "hscode")
+	private String hsCode;
 
 	/**
 	 * 品名
@@ -211,6 +212,11 @@ public class PreContainers implements Serializable {
 	 */
 	@ApiModelProperty(value = "单价")
 	private BigDecimal price;
+	/**
+	 * 查验类型
+	 */
+	@ApiModelProperty(value = "查验类型")
+	private String inspectionType;
 
 	/**
 	 * 查验时间
@@ -242,5 +248,23 @@ public class PreContainers implements Serializable {
 	@ApiModelProperty(value = "是否返场")
 	private Integer whetherReturnSite;
 
+	/**
+	 * 箱号
+	 */
+	@ApiModelProperty(value = "箱号")
+	private String boxNo;
+
+	/**
+	 * 是否已生成派车
+	 */
+	@ApiModelProperty(value = "是否已生成派车")
+	private String whetherDispatchVehicles;
+
+	/**
+	 * 1 派车  2 自提
+	 */
+	@TableField(exist = false)
+	private String type;
+
 
 }

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

@@ -199,5 +199,50 @@ public class DispatchVehicles implements Serializable {
 	@ApiModelProperty(value = "来源箱信息id")
 	private Long boxItemsId;
 
+	/**
+	 * 单价
+	 */
+	@ApiModelProperty(value = "单价")
+	private BigDecimal price;
+
+	/**
+	 * 件数
+	 */
+	@ApiModelProperty(value = "件数")
+	private BigDecimal number;
+	/**
+	 * 毛重 (KGM)
+	 */
+	@ApiModelProperty(value = "毛重 (KGM)")
+	private BigDecimal grossWeight;
+	/**
+	 * 净重 (KGM)
+	 */
+	@ApiModelProperty(value = "净重 (KGM)")
+	private BigDecimal netWeight;
+
+	/**
+	 * 是否生成入库
+	 */
+	@ApiModelProperty(value = "是否生成入库")
+	private String whetherWarehouseEntry;
+
+	/**
+	 * 是否派车
+	 */
+	@ApiModelProperty(value = "是否派车")
+	private String whetherDispatchVehicles;
+
+	/**
+	 * hscode
+	 */
+	@ApiModelProperty(value = "hscode")
+	private String hsCode;
+	/**
+	 * 品名
+	 */
+	@ApiModelProperty(value = "品名")
+	private String goodsName;
+
 
 }

+ 14 - 3
blade-service-api/blade-los-api/src/main/java/org/springblade/los/trade/entity/InOutStorage.java

@@ -114,10 +114,10 @@ public class InOutStorage implements Serializable {
 	@ApiModelProperty(value = "仓库")
 	private String warehouseName;
 	/**
-	 * 品名
+	 * hscode
 	 */
-	@ApiModelProperty(value = "品名")
-	private Long goodsId;
+	@ApiModelProperty(value = "hscode")
+	private String hsCode;
 	/**
 	 * 品名
 	 */
@@ -139,6 +139,11 @@ public class InOutStorage implements Serializable {
 	@ApiModelProperty(value = "入库时间")
 	private Date storageDate;
 	/**
+	 * 出库时间
+	 */
+	@ApiModelProperty(value = "出库时间")
+	private Date outStorageDate;
+	/**
 	 * 单价
 	 */
 	@ApiModelProperty(value = "单价")
@@ -234,5 +239,11 @@ public class InOutStorage implements Serializable {
 	@ApiModelProperty(value = "来源入库id")
 	private Long srcId;
 
+	/**
+	 * 是否已入出库
+	 */
+	@ApiModelProperty(value = "是否已入出库")
+	private String confirmDispatchVehicles;
+
 
 }

+ 11 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/PreContainersController.java

@@ -28,6 +28,7 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.los.business.sea.entity.Bills;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.business.sea.entity.PreContainers;
@@ -137,4 +138,14 @@ public class PreContainersController extends BladeController {
 	}
 
 
+	/**
+	 * 生成派车信息
+	 */
+	@PostMapping("/generateDispatchVehicles")
+	@RepeatSubmit
+	public R generateDispatchVehicles(@Valid @RequestBody PreContainers preContainers){
+		return preContainersService.generateDispatchVehicles(preContainers);
+	}
+
+
 }

+ 18 - 379
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/TradeBillsController.java

@@ -34,10 +34,8 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.IDeptUtils;
-import org.springblade.los.business.release.entity.SeaReleaseBillItems;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.service.IBillsService;
-import org.springblade.los.business.sea.vo.BillsVO;
 import org.springblade.los.excel.BillsExcel;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
@@ -64,8 +62,6 @@ public class TradeBillsController extends BladeController {
 
 	private final IDeptUtils deptUtils;
 
-	private final IDictBizClient dictBizClient;
-
 	/**
 	 * 详情
 	 */
@@ -85,7 +81,7 @@ public class TradeBillsController extends BladeController {
 	@ApiOperation(value = "分页", notes = "传入bills")
 	public R<IPage<Bills>> listTrade(Bills bills, Query query) {
 		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.select(Bills::getId, Bills::getBillNo, Bills::getBillType, Bills::getMasterBillNo,
+		/*lambdaQueryWrapper.select(Bills::getId, Bills::getBillNo, Bills::getBillType, Bills::getMasterBillNo,
 			Bills::getCorpCnName, Bills::getCorpId, Bills::getCorpEnName, Bills::getVesselCnName,
 			Bills::getVesselId, Bills::getVoyageNo, Bills::getMblno, Bills::getHblno, Bills::getEta, Bills::getEtd,
 			Bills::getPolEnName, Bills::getPolId, Bills::getPodEnName, Bills::getPodId, Bills::getLoadType, Bills::getPlaceReceiptName,
@@ -99,131 +95,39 @@ public class TradeBillsController extends BladeController {
 			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::getHconsigneeCnName, Bills::getCreateDeptName, Bills::getLineCnName);
+			Bills::getHconsigneeCnName, Bills::getCreateDeptName, Bills::getLineCnName);*/
 		lambdaQueryWrapper.eq(Bills::getIsDeleted, 0)
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
-			.and(i -> i.isNull(Bills::getMasterId).or()
-				.eq(Bills::getMasterId, 0))
 			.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.getRefno()), Bills::getRefno, bills.getRefno())
+			.like(ObjectUtils.isNotNull(bills.getMnotify2CntyCode()), Bills::getMnotify2CntyCode, bills.getMnotify2CntyCode())
+			.like(ObjectUtils.isNotNull(bills.getMnotify2CntyName()), Bills::getMnotify2CntyName, bills.getMnotify2CntyName())
 			.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()))
-			.like(ObjectUtils.isNotNull(bills.getVoyageNo()), Bills::getVoyageNo, bills.getVoyageNo())
 			.and(ObjectUtils.isNotNull(bills.getCorpCnName()), i -> i.like(Bills::getCorpCnName, bills.getCorpCnName()).or()
 				.like(Bills::getCorpEnName, bills.getCorpCnName()))
-			.and(ObjectUtils.isNotNull(bills.getCarrierCnName()), i -> i.like(Bills::getCarrierCnName, bills.getCarrierCnName()).or()
-				.like(Bills::getCarrierEnName, bills.getCarrierCnName()).or().like(Bills::getCarrierArgreementNo, bills.getCarrierCnName()))
-			.and(ObjectUtils.isNotNull(bills.getPodCnName()), i -> i.like(Bills::getPodCnName, bills.getPodCnName()).or()
-				.like(Bills::getPodEnName, bills.getPodCnName()).or().like(Bills::getPodCode, bills.getPodCnName()))
-			.and(ObjectUtils.isNotNull(bills.getLineCnName()), i -> i.like(Bills::getLineCnName, bills.getLineCnName()).or()
-				.like(Bills::getLineEnName, bills.getLineCnName()))
-			.and(ObjectUtils.isNotNull(bills.getCyCode()), i -> i.like(Bills::getCyCode, bills.getCyCode()).or()
-				.like(Bills::getCyCnName, bills.getCyCode()).or().like(Bills::getCyEnName, bills.getCyCode()))
-			.apply(ObjectUtils.isNotNull(bills.getCreateDeptName()), "find_in_set('" + bills.getCreateDeptName() + "',create_dept_name)");
-		if (ObjectUtils.isNotNull(bills.getEtdList()) && !bills.getEtdList().isEmpty()) {
-			lambdaQueryWrapper.ge(Bills::getEtd, bills.getEtdList().get(0));
-			lambdaQueryWrapper.le(Bills::getEtd, bills.getEtdList().get(1));
+			;
+		if (ObjectUtils.isNotNull(bills.getBookingDateList()) && !bills.getBookingDateList().isEmpty()) {
+			lambdaQueryWrapper.ge(Bills::getBookingDate, bills.getBookingDateList().get(0));
+			lambdaQueryWrapper.le(Bills::getBookingDate, bills.getBookingDateList().get(1));
 		}
 		if (ObjectUtils.isNotNull(bills.getEtaList()) && !bills.getEtaList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getEta, bills.getEtaList().get(0));
 			lambdaQueryWrapper.le(Bills::getEta, bills.getEtaList().get(1));
 		}
-		if (AuthUtil.getUserRole().contains("业务员")) {
-			lambdaQueryWrapper.eq(Bills::getSrcId, AuthUtil.getUserId());
-		} else {
-			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getSrcType()), Bills::getSrcType, bills.getSrcType())
-				.and(ObjectUtils.isNotNull(bills.getSrcCnName()), i -> i.like(Bills::getSrcCnName, bills.getSrcCnName()).or()
-					.like(Bills::getSrcEnName, bills.getSrcCnName()));
-		}
-		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("财务")) {
-			lambdaQueryWrapper.apply("find_in_set(team_id,'" + AuthUtil.getPostId() + "')");
-		}
-		if (!AuthUtil.getUserRole().contains("admin")) {
-			lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
-		}
-		lambdaQueryWrapper.and(ObjectUtils.isNotNull(bills.getBookingAgentCnName()), i -> i.like(Bills::getBookingAgentCnName, bills.getBookingAgentCnName()).or()
-				.like(Bills::getBookingAgentEnName, bills.getBookingAgentCnName()))
-			.eq(ObjectUtils.isNotNull(bills.getIssueType()), Bills::getIssueType, bills.getIssueType())
-			.and(ObjectUtils.isNotNull(bills.getHconsigneeCnName()), i -> i.like(Bills::getHconsigneeCnName, bills.getHconsigneeCnName()).or()
-				.like(Bills::getHconsigneeCode, bills.getHconsigneeCnName()).or().like(Bills::getHconsigneeEnName, bills.getHconsigneeCnName()))
-
-			.eq(ObjectUtils.isNotNull(bills.getBillType()), Bills::getBillType, bills.getBillType())
-			.eq(ObjectUtils.isNotNull(bills.getBusinessType()), Bills::getBusinessType, bills.getBusinessType())
-			.eq(ObjectUtils.isNotNull(bills.getSeaType()), Bills::getSeaType, bills.getSeaType())
-			.eq(ObjectUtils.isNotNull(bills.getBillStatus()), Bills::getBillStatus, bills.getBillStatus())
-			.eq(ObjectUtils.isNotNull(bills.getAccountStatus()), Bills::getAccountStatus, bills.getAccountStatus())
-			.eq(ObjectUtils.isNotNull(bills.getStatus()), Bills::getStatus, bills.getStatus());
-		if ("SE".equals(bills.getBusinessType())) {
-			lambdaQueryWrapper.orderByDesc(Bills::getEtd);
-		} else {
-			lambdaQueryWrapper.orderByDesc(Bills::getEta);
-		}
-		IPage<Bills> pages = billsService.page(Condition.getPage(query), lambdaQueryWrapper);
-		return R.data(pages);
-	}
-
-	/**
-	 * 业务-海运进List
-	 */
-	@GetMapping("/listAllTrade")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "listAll", notes = "传入bills")
-	public R<List<Bills>> lislistAllTradetTrade(Bills bills) {
-		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(Bills::getIsDeleted, 0)
-			.eq(Bills::getTenantId, AuthUtil.getTenantId())
-			.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.getBookingNo()), Bills::getBookingNo, bills.getBookingNo())
-			.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())
-			.and(ObjectUtils.isNotNull(bills.getCorpCnName()), i -> i.like(Bills::getCorpCnName, bills.getCorpCnName()).or()
-				.like(Bills::getCorpEnName, bills.getCorpCnName()))
-			.and(ObjectUtils.isNotNull(bills.getCarrierCnName()), i -> i.like(Bills::getCarrierCnName, bills.getCarrierCnName()).or()
-				.like(Bills::getCarrierEnName, bills.getCarrierCnName()).or().like(Bills::getCarrierArgreementNo, bills.getCarrierCnName()))
-			.and(ObjectUtils.isNotNull(bills.getPodCnName()), i -> i.like(Bills::getPodCnName, bills.getPodCnName()).or()
-				.like(Bills::getPodEnName, bills.getPodCnName()).or().like(Bills::getPodCode, bills.getPodCnName()))
-			.and(ObjectUtils.isNotNull(bills.getLineCnName()), i -> i.like(Bills::getLineCnName, bills.getLineCnName()).or()
-				.like(Bills::getLineEnName, bills.getLineCnName()))
-			.and(ObjectUtils.isNotNull(bills.getCyCode()), i -> i.like(Bills::getCyCode, bills.getCyCode()).or()
-				.like(Bills::getCyCnName, bills.getCyCode()).or().like(Bills::getCyEnName, bills.getCyCode()))
-			.eq(ObjectUtils.isNotNull(bills.getSrcType()), Bills::getSrcType, bills.getSrcType())
-			.and(ObjectUtils.isNotNull(bills.getSrcCnName()), i -> i.like(Bills::getSrcCnName, bills.getSrcCnName()).or()
-				.like(Bills::getSrcEnName, bills.getSrcCnName()))
-			.apply(ObjectUtils.isNotNull(bills.getCreateDeptName()), "find_in_set('" + bills.getCreateDeptName() + "',create_dept_name)");
 		if (ObjectUtils.isNotNull(bills.getEtdList()) && !bills.getEtdList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getEtd, bills.getEtdList().get(0));
 			lambdaQueryWrapper.le(Bills::getEtd, bills.getEtdList().get(1));
 		}
-		if (ObjectUtils.isNotNull(bills.getEtaList()) && !bills.getEtaList().isEmpty()) {
-			lambdaQueryWrapper.ge(Bills::getEta, bills.getEtaList().get(0));
-			lambdaQueryWrapper.le(Bills::getEta, bills.getEtaList().get(1));
-		}
-		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("财务")) {
-			lambdaQueryWrapper.apply("find_in_set(team_id,'" + AuthUtil.getPostId() + "')");
-		}
-		if (!AuthUtil.getUserRole().contains("admin")) {
 			lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
-		}
-		lambdaQueryWrapper.and(ObjectUtils.isNotNull(bills.getBookingAgentCnName()), i -> i.like(Bills::getBookingAgentCnName, bills.getBookingAgentCnName()).or()
-				.like(Bills::getBookingAgentEnName, bills.getBookingAgentCnName()))
-			.eq(ObjectUtils.isNotNull(bills.getIssueType()), Bills::getIssueType, bills.getIssueType())
-			.and(ObjectUtils.isNotNull(bills.getHconsigneeCnName()), i -> i.like(Bills::getHconsigneeCnName, bills.getHconsigneeCnName()).or()
-				.like(Bills::getHconsigneeCode, bills.getHconsigneeCnName()).or().like(Bills::getHconsigneeEnName, bills.getHconsigneeCnName()))
-
-			.eq(ObjectUtils.isNotNull(bills.getBillType()), Bills::getBillType, bills.getBillType())
-			.eq(ObjectUtils.isNotNull(bills.getBusinessType()), Bills::getBusinessType, bills.getBusinessType())
-			.eq(ObjectUtils.isNotNull(bills.getSeaType()), Bills::getSeaType, bills.getSeaType())
-
-			.eq(ObjectUtils.isNotNull(bills.getMasterBillNo()), Bills::getMasterBillNo, bills.getMasterBillNo())
-			.eq(ObjectUtils.isNotNull(bills.getMasterId()), Bills::getMasterId, bills.getMasterId())
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getBillType()), Bills::getBillType, bills.getBillType())
+			.eq(Bills::getBusinessType, "SI")
+			.eq(Bills::getSeaType, "I")
 			.eq(ObjectUtils.isNotNull(bills.getBillStatus()), Bills::getBillStatus, bills.getBillStatus())
-			.orderByDesc(Bills::getCreateTime);
-		List<Bills> pages = billsService.list(lambdaQueryWrapper);
+			.eq(ObjectUtils.isNotNull(bills.getAccountStatus()), Bills::getAccountStatus, bills.getAccountStatus())
+			.eq(ObjectUtils.isNotNull(bills.getStatus()), Bills::getStatus, bills.getStatus());
+		lambdaQueryWrapper.orderByDesc(Bills::getEta);
+		IPage<Bills> pages = billsService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -235,46 +139,11 @@ public class TradeBillsController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入bills")
 	@RepeatSubmit
-	public R submitTrade(@Valid @RequestBody Bills bills) throws Exception {
-		return billsService.submit(bills);
+	public R submitTrade(@Valid @RequestBody Bills bills){
+		return billsService.submitTrade(bills);
 	}
 
 	/**
-	 * 新增或修改 业务-海运进出口(单表)
-	 */
-	@PostMapping("/addTrade")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "新增或修改", notes = "传入bills")
-	@RepeatSubmit
-	public R add(@Valid @RequestBody Bills bills) throws Exception {
-		return billsService.add(bills);
-	}
-
-
-	/**
-	 * 退舱
-	 */
-	@PostMapping("/disembarkingTrade")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "退舱", notes = "传入ids")
-	@RepeatSubmit
-	public R disembarkingTrade(@RequestParam String ids) {
-		return billsService.disembarking(ids);
-	}
-
-	/**
-	 * 取消退舱
-	 */
-	@PostMapping("/revokeDisembarkingTrade")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "取消退舱", notes = "传入ids")
-	@RepeatSubmit
-	public R revokeDisembarkingTrade(@RequestParam String ids) {
-		return billsService.revokeDisembarking(ids);
-	}
-
-
-	/**
 	 * 删除 业务-海运进出口
 	 */
 	@PostMapping("/removeTrade")
@@ -286,236 +155,6 @@ public class TradeBillsController extends BladeController {
 		return R.data("操作成功");
 	}
 
-	/**
-	 * 申请mblNo
-	 */
-	@PostMapping("/getBillNoTrade")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "新增或修改", notes = "传入bills")
-	@RepeatSubmit
-	public R getBillNoTrade(@Valid @RequestBody Bills bills) {
-		return billsService.getBillNo(bills);
-	}
 
-	/**
-	 * 单据请核
-	 */
-	@PostMapping("/checkBillsTrade")
-	@ApiOperationSupport(order = 13)
-	@ApiOperation(value = "请核", notes = "传入bills")
-	@RepeatSubmit
-	public R checkOrderTrade(@RequestBody Bills bills) {
-		Bills declare = billsService.checkBills(bills);
-		return R.data(declare);
-	}
-
-	/**
-	 * 撤销单据请核
-	 */
-	@PostMapping("/revokeCheckBillsTrade")
-	@ApiOperationSupport(order = 13)
-	@ApiOperation(value = "撤销请核", notes = "传入bills")
-	@RepeatSubmit
-	public R revokeCheckBillsTrade(@RequestBody Bills bills) {
-		Bills declare = billsService.revokeCheckOrder(bills);
-		return R.data(declare);
-	}
-
-	/**
-	 * 审核通过
-	 */
-	@PostMapping("/passCheckTrade")
-	@ApiOperationSupport(order = 14)
-	@ApiOperation(value = "审核通过", notes = "传入id")
-	@RepeatSubmit
-	public R passCheckTrade(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
-		return billsService.passCheck(id);
-	}
-
-	/**
-	 * 审核中
-	 */
-	@PostMapping("/underReviewTrade")
-	@ApiOperationSupport(order = 15)
-	@ApiOperation(value = "审核中", notes = "传入id")
-	@RepeatSubmit
-	public R underReviewTrade(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
-		return billsService.underReview(id);
-	}
-
-	/**
-	 * 审核不通过
-	 */
-	@PostMapping("/passCancelTrade")
-	@ApiOperationSupport(order = 16)
-	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
-	@RepeatSubmit
-	public R passCancelTrade(@ApiParam(value = "财务主表id", required = true) @RequestParam Long id) {
-		billsService.passCancel(id);
-		return R.success("操作成功");
-	}
-
-	/**
-	 * 复制单据
-	 */
-	@PostMapping("/copyBillsTrade")
-	@ApiOperationSupport(order = 13)
-	@ApiOperation(value = "复制单据", notes = "传入bills")
-	@RepeatSubmit
-	public R copyBillsTrade(@RequestBody Bills bills) {
-		Bills declare = billsService.copyBills(bills);
-		return R.data(declare);
-	}
-
-	/**
-	 * 详情
-	 */
-	@GetMapping("/getDetailTrade")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "详情", notes = "传入bills")
-	public R<List<Bills>> getDetailTrade(Bills bills) {
-		List<Bills> detail = billsService.getDetail(bills);
-		return R.data(detail);
-	}
-
-
-	/**
-	 * 是否同步汇率
-	 */
-	@GetMapping("/synchronizationExchangeRateTrade")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "新增或修改", notes = "传入bills")
-	@RepeatSubmit
-	public R synchronizationExchangeRateTrade(@RequestParam("date") String date, @RequestParam("type") String type
-		, @RequestParam("billId") Long billId) {
-		return billsService.synchronizationExchangeRate(date, type, billId);
-	}
-
-	/**
-	 * 导出
-	 */
-	@GetMapping("/exportBillsTrade")
-	public void exportBUnitsTrade(Bills bills, HttpServletResponse response) {
-		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.select(Bills::getId, Bills::getBillNo, Bills::getBillType, Bills::getMasterBillNo,
-			Bills::getCorpCnName, Bills::getCorpId, Bills::getCorpEnName, Bills::getVesselCnName,
-			Bills::getVesselId, Bills::getVoyageNo, Bills::getMblno, Bills::getHblno, Bills::getEta, Bills::getEtd,
-			Bills::getPolEnName, Bills::getPolId, Bills::getPodEnName, Bills::getPodId, Bills::getLoadType, Bills::getPlaceReceiptName,
-			Bills::getCargoType, Bills::getMarks, Bills::getQuantity, Bills::getGrossWeight, Bills::getNetWeight,
-			Bills::getMeasurement, Bills::getQuantityV20, Bills::getQuantityV40, Bills::getQuantityV40hc, Bills::getQuantityV45,
-			Bills::getQuantityV48, Bills::getIsNeedLand, Bills::getIsNeedDeclare, Bills::getIsNeedIq, Bills::getAmountDr,
-			Bills::getAmountCr, Bills::getAmountProfit, Bills::getAmountDrUsd, Bills::getAmountCrUsd, Bills::getAmountProfitUsd,
-			Bills::getAmountDrLoc, Bills::getAmountCrLoc, Bills::getAmountProfitLoc, Bills::getCheckCrStatusDescr, Bills::getCheckDrStatusDescr,
-			Bills::getStlCrStatusDescr, Bills::getStlDrStatusDescr, Bills::getInvoiceCrStatusDescr, Bills::getInvoiceDrStatusDescr, Bills::getCreateUserName,
-			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::getHconsigneeCnName, Bills::getCreateDeptName, Bills::getLineCnName);
-		lambdaQueryWrapper.eq(Bills::getIsDeleted, 0)
-			.eq(Bills::getTenantId, AuthUtil.getTenantId())
-			.and(i -> i.isNull(Bills::getMasterId).or()
-				.eq(Bills::getMasterId, 0))
-			.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.getBookingNo()), Bills::getBookingNo, bills.getBookingNo())
-			.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())
-			.and(ObjectUtils.isNotNull(bills.getCorpCnName()), i -> i.like(Bills::getCorpCnName, bills.getCorpCnName()).or()
-				.like(Bills::getCorpEnName, bills.getCorpCnName()))
-			.and(ObjectUtils.isNotNull(bills.getCarrierCnName()), i -> i.like(Bills::getCarrierCnName, bills.getCarrierCnName()).or()
-				.like(Bills::getCarrierEnName, bills.getCarrierCnName()).or().like(Bills::getCarrierArgreementNo, bills.getCarrierCnName()))
-			.and(ObjectUtils.isNotNull(bills.getPodCnName()), i -> i.like(Bills::getPodCnName, bills.getPodCnName()).or()
-				.like(Bills::getPodEnName, bills.getPodCnName()).or().like(Bills::getPodCode, bills.getPodCnName()))
-			.and(ObjectUtils.isNotNull(bills.getLineCnName()), i -> i.like(Bills::getLineCnName, bills.getLineCnName()).or()
-				.like(Bills::getLineEnName, bills.getLineCnName()))
-			.and(ObjectUtils.isNotNull(bills.getCyCode()), i -> i.like(Bills::getCyCode, bills.getCyCode()).or()
-				.like(Bills::getCyCnName, bills.getCyCode()).or().like(Bills::getCyEnName, bills.getCyCode()))
-			.apply(ObjectUtils.isNotNull(bills.getCreateDeptName()), "find_in_set('" + bills.getCreateDeptName() + "',create_dept_name)");
-		if (ObjectUtils.isNotNull(bills.getEtdList()) && !bills.getEtdList().isEmpty()) {
-			lambdaQueryWrapper.ge(Bills::getEtd, bills.getEtdList().get(0));
-			lambdaQueryWrapper.le(Bills::getEtd, bills.getEtdList().get(1));
-		}
-		if (ObjectUtils.isNotNull(bills.getEtaList()) && !bills.getEtaList().isEmpty()) {
-			lambdaQueryWrapper.ge(Bills::getEta, bills.getEtaList().get(0));
-			lambdaQueryWrapper.le(Bills::getEta, bills.getEtaList().get(1));
-		}
-		if (AuthUtil.getUserRole().contains("业务员")) {
-			lambdaQueryWrapper.eq(Bills::getSrcId, AuthUtil.getUserId());
-		} else {
-			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getSrcType()), Bills::getSrcType, bills.getSrcType())
-				.and(ObjectUtils.isNotNull(bills.getSrcCnName()), i -> i.like(Bills::getSrcCnName, bills.getSrcCnName()).or()
-					.like(Bills::getSrcEnName, bills.getSrcCnName()));
-		}
-		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("财务")) {
-			lambdaQueryWrapper.apply("find_in_set(team_id,'" + AuthUtil.getPostId() + "')");
-		}
-		if (!AuthUtil.getUserRole().contains("admin")) {
-			lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
-		}
-		lambdaQueryWrapper.and(ObjectUtils.isNotNull(bills.getBookingAgentCnName()), i -> i.like(Bills::getBookingAgentCnName, bills.getBookingAgentCnName()).or()
-				.like(Bills::getBookingAgentEnName, bills.getBookingAgentCnName()))
-			.eq(ObjectUtils.isNotNull(bills.getIssueType()), Bills::getIssueType, bills.getIssueType())
-			.and(ObjectUtils.isNotNull(bills.getHconsigneeCnName()), i -> i.like(Bills::getHconsigneeCnName, bills.getHconsigneeCnName()).or()
-				.like(Bills::getHconsigneeCode, bills.getHconsigneeCnName()).or().like(Bills::getHconsigneeEnName, bills.getHconsigneeCnName()))
-
-			.eq(ObjectUtils.isNotNull(bills.getBillType()), Bills::getBillType, bills.getBillType())
-			.eq(ObjectUtils.isNotNull(bills.getBusinessType()), Bills::getBusinessType, bills.getBusinessType())
-			.eq(ObjectUtils.isNotNull(bills.getSeaType()), Bills::getSeaType, bills.getSeaType())
-			.eq(ObjectUtils.isNotNull(bills.getBillStatus()), Bills::getBillStatus, bills.getBillStatus())
-			.eq(ObjectUtils.isNotNull(bills.getStatus()), Bills::getStatus, bills.getStatus())
-			.orderByDesc(Bills::getCreateTime);
-		List<Bills> list = billsService.list(lambdaQueryWrapper);
-		List<BillsExcel> billsExcelList = new ArrayList<>();
-		R<List<DictBiz>> res1 = dictBizClient.getList("account_status");
-		R<List<DictBiz>> res2 = dictBizClient.getList("audit_status_los");
-		R<List<DictBiz>> res3 = dictBizClient.getList("bill_status");
-		for (Bills item : list) {
-			BillsExcel billsExcel = new BillsExcel();
-			BeanUtil.copyProperties(item, billsExcel);
-			if (1 == item.getIsNeedLand()) {
-				billsExcel.setIsNeedLand("是");
-			} else {
-				billsExcel.setIsNeedLand("否");
-			}
-			if (1 == item.getIsNeedDeclare()) {
-				billsExcel.setIsNeedDeclare("是");
-			} else {
-				billsExcel.setIsNeedDeclare("否");
-			}
-			if (1 == item.getIsNeedIq()) {
-				billsExcel.setIsNeedIq("是");
-			} else {
-				billsExcel.setIsNeedIq("否");
-			}
-			if (res1.isSuccess() && !res1.getData().isEmpty()) {
-				DictBiz dictBiz = res1.getData().stream().filter(e -> e.getDictKey().equals(item.getAccountStatus() + "")).findFirst().orElse(null);
-				if (dictBiz != null) {
-					billsExcel.setAccountStatus(dictBiz.getDictValue());
-				}
-			}
-			if (res2.isSuccess() && !res2.getData().isEmpty()) {
-				DictBiz dictBiz = res2.getData().stream().filter(e -> e.getDictKey().equals(item.getStatus() + "")).findFirst().orElse(null);
-				if (dictBiz != null) {
-					billsExcel.setStatus(dictBiz.getDictValue());
-				}
-			}
-			if (res3.isSuccess() && !res3.getData().isEmpty()) {
-				DictBiz dictBiz = res3.getData().stream().filter(e -> e.getDictKey().equals(item.getBillStatus() + "")).findFirst().orElse(null);
-				if (dictBiz != null) {
-					billsExcel.setBillStatus(dictBiz.getDictValue());
-				}
-			}
-			billsExcelList.add(billsExcel);
-		}
-		if ("SE".equals(bills.getBusinessType())) {
-			ExcelUtil.export(response, "海运出口", "海运出口", billsExcelList, BillsExcel.class);
-		} else {
-			ExcelUtil.export(response, "海运进口", "海运进口", billsExcelList, BillsExcel.class);
-		}
-
-	}
 }
 

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java

@@ -148,4 +148,6 @@ public interface IBillsService extends IService<Bills> {
 	R synchronizationExchangeRate(String date, String type,Long billId);
 
 	Bills detailTrade(Bills bills);
+
+	R submitTrade(Bills bills);
 }

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IPreContainersService.java

@@ -60,4 +60,6 @@ public interface IPreContainersService extends IService<PreContainers> {
 	 * @return
 	 */
 	R submitList(List<PreContainers> preContainersList);
+
+    R generateDispatchVehicles(PreContainers preContainers);
 }

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

@@ -58,6 +58,8 @@ import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.los.finance.genleg.entity.FinPeriod;
 import org.springblade.los.finance.genleg.mapper.FinPeriodMapper;
+import org.springblade.los.trade.entity.AgentItems;
+import org.springblade.los.trade.mapper.AgentItemsMapper;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
@@ -124,6 +126,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final FinPeriodMapper finPeriodMapper;
 
+	private final AgentItemsMapper agentItemsMapper;
+
 	@Override
 	public IPage<BillsVO> selectBillsPage(IPage<BillsVO> page, BillsVO bills) {
 		return page.setRecords(baseMapper.selectBillsPage(page, bills));
@@ -406,18 +410,18 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			if (ObjectUtils.isNotNull(bills.getPreContainersList())) {
 				for (PreContainers item : bills.getPreContainersList()) {
 					item.setPid(bills.getId());
-					if (item.getCntrTypeCode().contains("20")){
-						V20+=item.getQuantity();
-					}else if (item.getCntrTypeCode().contains("45")){
-						V45+=item.getQuantity();
-					}else if (item.getCntrTypeCode().contains("48")){
-						V48+=item.getQuantity();
-					}else if (item.getCntrTypeCode().contains("40") && (!item.getCntrTypeCode().contains("HQ")) && !item.getCntrTypeCode().contains("HC")){
-						V40+=item.getQuantity();
-					}else if (item.getCntrTypeCode().contains("40") && (item.getCntrTypeCode().contains("HQ")) && item.getCntrTypeCode().contains("HC")){
-						V40HC+=item.getQuantity();
-					}else{
-						other+=item.getQuantity();
+					if (item.getCntrTypeCode().contains("20")) {
+						V20 += item.getQuantity();
+					} else if (item.getCntrTypeCode().contains("45")) {
+						V45 += item.getQuantity();
+					} else if (item.getCntrTypeCode().contains("48")) {
+						V48 += item.getQuantity();
+					} else if (item.getCntrTypeCode().contains("40") && (!item.getCntrTypeCode().contains("HQ")) && !item.getCntrTypeCode().contains("HC")) {
+						V40 += item.getQuantity();
+					} else if (item.getCntrTypeCode().contains("40") && (item.getCntrTypeCode().contains("HQ")) && item.getCntrTypeCode().contains("HC")) {
+						V40HC += item.getQuantity();
+					} else {
+						other += item.getQuantity();
 					}
 					boxTypeSum.append(item.getCntrTypeCode()).append("*").append(item.getQuantity()).append(",");
 					if (ObjectUtils.isNotNull(item.getQuantity()) && ObjectUtils.isNotNull(item.getTeu())) {
@@ -562,7 +566,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			bills.setAccountStatus(1);
 		} else if (0 == statusD && 1 == statusC) {
 			bills.setAccountStatus(2);
-		}else if (1 == statusD && 1 == statusC) {
+		} else if (1 == statusD && 1 == statusC) {
 			bills.setAccountStatus(3);
 		}
 
@@ -2159,4 +2163,319 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		return detail;
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R submitTrade(Bills bills) {
+		String deptId = "";
+		String deptName = "";
+		String branchId = deptUtils.getDeptPid() + "";
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
+			deptId = deptUtils.getDeptPid() + "";
+			R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid() + "");
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = String.join(",", res.getData());
+			}
+		}
+		if (ObjectUtils.isNotNull(bills.getMblno())) {
+			bills.setMblno(bills.getMblno().replaceAll(" ", ""));
+		}
+		List<Bills> count = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
+			.select(Bills::getId)
+			.eq(Bills::getCreateDept, deptUtils.getDeptPid() + "")
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.eq(Bills::getMblno, bills.getMblno()));
+		bills.setBillDate(bills.getEta());
+		if (bills.getId() == null) {
+			if (ObjectUtils.isNotNull(bills.getMblno())) {
+				if (!count.isEmpty()) {
+					throw new RuntimeException("提单号不允许重复:" + bills.getMblno());
+				}
+			}
+			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+				.select(BusinessType::getId)
+				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
+				.eq(BusinessType::getIsDeleted, 0)
+				.eq(BusinessType::getStatus, 0)
+				.eq(BusinessType::getCode, bills.getBusinessTypeCode()));
+			if (businessType == null) {
+				throw new RuntimeException("未找到可用业务类型");
+			}
+			BusinessBillNo businessBillNo = new BusinessBillNo();
+			businessBillNo.setBusinessTypeId(businessType.getId());
+			businessBillNo.setCode(bills.getBillNoFormat());
+			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+			if (!clientBillNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				return R.fail(500, "生成订单编号失败");
+			}
+			bills.setBillNo((String) clientBillNo.getData());
+			bills.setCreateTime(new Date());
+			bills.setCreateUser(AuthUtil.getUserId());
+			bills.setCreateUserName(AuthUtil.getUserName());
+			bills.setTenantId(AuthUtil.getTenantId());
+			if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
+				bills.setBranchId(branchId);
+				bills.setCreateDept(deptId);
+				bills.setCreateDeptName(deptName);
+			}
+		} else {
+			List<Long> ids = count.stream().map(Bills::getId).distinct().collect(Collectors.toList());
+			if (ObjectUtils.isNotNull(bills.getMblno())) {
+				if (!count.isEmpty() && !ids.contains(bills.getId())) {
+					throw new RuntimeException("提单号不允许重复:" + bills.getMblno());
+				}
+			}
+			bills.setUpdateUser(AuthUtil.getUserId());
+			bills.setUpdateTime(new Date());
+			bills.setUpdateUserName(AuthUtil.getUserName());
+		}
+		if (ObjectUtils.isEmpty(bills.getId())) {
+			this.save(bills);
+		}
+		/**-------------箱型箱量计算---------*/
+		Integer V20 = 0;
+		Integer V40 = 0;
+		Integer V40HC = 0;
+		Integer V45 = 0;
+		Integer V48 = 0;
+		Integer other = 0;
+		BigDecimal teu = new BigDecimal("0.00");
+		StringBuilder boxTypeSum = new StringBuilder();
+		if (ObjectUtils.isNull(bills.getCfsQuantity()) || bills.getCfsQuantity().compareTo(new BigDecimal("0.00")) == 0) {
+			if (ObjectUtils.isNotNull(bills.getPreContainersList())) {
+				for (PreContainers item : bills.getPreContainersList()) {
+					item.setPid(bills.getId());
+					if (item.getCntrTypeCode().contains("20")) {
+						V20 += item.getQuantity();
+					} else if (item.getCntrTypeCode().contains("45")) {
+						V45 += item.getQuantity();
+					} else if (item.getCntrTypeCode().contains("48")) {
+						V48 += item.getQuantity();
+					} else if (item.getCntrTypeCode().contains("40") && (!item.getCntrTypeCode().contains("HQ")) && !item.getCntrTypeCode().contains("HC")) {
+						V40 += item.getQuantity();
+					} else if (item.getCntrTypeCode().contains("40") && (item.getCntrTypeCode().contains("HQ")) && item.getCntrTypeCode().contains("HC")) {
+						V40HC += item.getQuantity();
+					} else {
+						other += item.getQuantity();
+					}
+					boxTypeSum.append(item.getCntrTypeCode()).append("*").append(item.getQuantity()).append(",");
+					if (ObjectUtils.isNotNull(item.getQuantity()) && ObjectUtils.isNotNull(item.getTeu())) {
+						teu = teu.add(new BigDecimal(item.getQuantity()).multiply(item.getTeu()));
+					}
+				}
+				R res = preContainersService.submitList(bills.getPreContainersList());
+				if (!res.isSuccess()) {
+					throw new RuntimeException("保存失败");
+				}
+				if (boxTypeSum.length() > 0) {
+					boxTypeSum = new StringBuilder(boxTypeSum.substring(0, boxTypeSum.length() - 1));
+					bills.setQuantityCntrDescr(boxTypeSum.toString());
+				}
+			}
+		}
+		bills.setQuantityV20(V20);
+		bills.setQuantityV40(V40);
+		bills.setQuantityV40hc(V40HC);
+		bills.setQuantityV45(V45);
+		bills.setQuantityV48(V48);
+		bills.setQuantityOther(other);
+		bills.setTeu(teu.intValue());
+		/**-------------箱型箱量计算---------*/
+		/**-------------费用计算---------*/
+		BigDecimal amountDr = new BigDecimal("0.00");
+		BigDecimal amountCr = new BigDecimal("0.00");
+		BigDecimal amountProfit = new BigDecimal("0.00");
+		BigDecimal amountDrUsd = new BigDecimal("0.00");
+		BigDecimal amountCrUsd = new BigDecimal("0.00");
+		BigDecimal amountProfitUsd = new BigDecimal("0.00");
+		BigDecimal amountDrLoc = new BigDecimal("0.00");
+		BigDecimal amountCrLoc = new BigDecimal("0.00");
+		BigDecimal amountProfitLoc = new BigDecimal("0.00");
+		//应付
+		int statusC = 0;
+		if (ObjectUtils.isNotNull(bills.getFeeCenterListC())) {
+			statusC += 1;
+			for (FeeCenter item : bills.getFeeCenterListC()) {
+				item.setPid(bills.getId());
+				item.setBillNo(bills.getBillNo());
+				item.setBusinessType(bills.getBusinessType());
+				item.setBillType(bills.getBillType());
+				item.setBillDate(bills.getBillDate());
+				item.setSrcType(bills.getSrcType());
+				item.setSrcId(bills.getSrcId());
+				item.setSrcCnName(bills.getSrcCnName());
+				item.setSrcEnName(bills.getSrcEnName());
+				item.setBillCorpId(bills.getCorpId());
+				item.setBillCorpCnName(bills.getCorpCnName());
+				item.setBillCorpEnName(bills.getCorpEnName());
+				item.setLineId(bills.getLineId());
+				item.setLineCnName(bills.getLineCnName());
+				item.setLineEnName(bills.getLineEnName());
+				item.setVesselId(bills.getVesselId());
+				item.setVesselEnName(bills.getVesselEnName());
+				item.setVesselCnName(bills.getVesselCnName());
+				item.setVoyageNo(bills.getVoyageNo());
+				item.setMblno(bills.getMblno());
+				item.setHblno(bills.getHblno());
+				item.setEtd(bills.getEtd());
+				item.setEta(bills.getEta());
+				item.setPolId(bills.getPolId());
+				item.setPolCode(bills.getPolCode());
+				item.setPolCnName(bills.getPolCnName());
+				item.setPolEnName(bills.getPolEnName());
+				item.setPodId(bills.getPodId());
+				item.setPodCode(bills.getPodCode());
+				item.setPodCnName(bills.getPodCnName());
+				item.setPodEnName(bills.getPodEnName());
+				item.setPaymode(bills.getMpaymode());
+				item.setPayplace(bills.getMpayplace());
+				item.setRefno(bills.getRefno());
+				item.setBookingNo(bills.getBookingNo());
+				item.setCntrNo(bills.getQuantityCntrTypesDescr());
+				if ("USD".equals(item.getCurCode())) {
+					amountCrUsd = amountCrUsd.add(item.getAmount());
+				} else if ("CNY".equals(item.getCurCode())) {
+					amountCr = amountCr.add(item.getAmount());
+				} else {
+					BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
+					amountCrUsd = amountCrUsd.add(usd);
+				}
+			}
+			feeCenterService.submitList(bills.getFeeCenterListC());
+		}
+		//应收
+		int statusD = 0;
+		if (ObjectUtils.isNotNull(bills.getFeeCenterListD())) {
+			statusD += 1;
+			for (FeeCenter item : bills.getFeeCenterListD()) {
+				item.setPid(bills.getId());
+				item.setBillNo(bills.getBillNo());
+				item.setBusinessType(bills.getBusinessType());
+				item.setBillType(bills.getBillType());
+				item.setBillDate(bills.getBillDate());
+				item.setSrcType(bills.getSrcType());
+				item.setSrcId(bills.getSrcId());
+				item.setSrcCnName(bills.getSrcCnName());
+				item.setSrcEnName(bills.getSrcEnName());
+				item.setBillCorpId(bills.getCorpId());
+				item.setBillCorpCnName(bills.getCorpCnName());
+				item.setBillCorpEnName(bills.getCorpEnName());
+				item.setLineId(bills.getLineId());
+				item.setLineCnName(bills.getLineCnName());
+				item.setLineEnName(bills.getLineEnName());
+				item.setVesselId(bills.getVesselId());
+				item.setVesselEnName(bills.getVesselEnName());
+				item.setVesselCnName(bills.getVesselCnName());
+				item.setVoyageNo(bills.getVoyageNo());
+				item.setMblno(bills.getMblno());
+				item.setHblno(bills.getHblno());
+				item.setEtd(bills.getEtd());
+				item.setEta(bills.getEta());
+				item.setPolId(bills.getPolId());
+				item.setPolCode(bills.getPolCode());
+				item.setPolCnName(bills.getPolCnName());
+				item.setPolEnName(bills.getPolEnName());
+				item.setPodId(bills.getPodId());
+				item.setPodCode(bills.getPodCode());
+				item.setPodCnName(bills.getPodCnName());
+				item.setPodEnName(bills.getPodEnName());
+				item.setPaymode(bills.getMpaymode());
+				item.setPayplace(bills.getMpayplace());
+				item.setRefno(bills.getRefno());
+				item.setBookingNo(bills.getBookingNo());
+				item.setCntrNo(bills.getQuantityCntrTypesDescr());
+				if ("USD".equals(item.getCurCode())) {
+					amountDrUsd = amountDrUsd.add(item.getAmount());
+				} else if ("CNY".equals(item.getCurCode())) {
+					amountDr = amountDr.add(item.getAmount());
+				} else {
+					BigDecimal usd = bCurrencyService.converter(item.getCurCode(), item.getAmount(), item.getDc(), "1");
+					amountDrUsd = amountDrUsd.add(usd);
+				}
+			}
+			feeCenterService.submitList(bills.getFeeCenterListD());
+		}
+		if (0 == statusD && 0 == statusC) {
+			bills.setAccountStatus(0);
+		} else if (1 == statusD && 0 == statusC) {
+			bills.setAccountStatus(1);
+		} else if (0 == statusD && 1 == statusC) {
+			bills.setAccountStatus(2);
+		} else if (1 == statusD && 1 == statusC) {
+			bills.setAccountStatus(3);
+		}
+
+		BigDecimal quantity = bills.getQuantity();
+		BigDecimal grossWeight = bills.getGrossWeight();
+		BigDecimal measurement = bills.getMeasurement();
+		//利润 = 收 - 付
+		amountProfit = amountDr.subtract(amountCr);
+		amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
+		if (amountDrUsd.compareTo(new BigDecimal("0.00")) != 0) {
+			amountDrLoc = amountDrLoc.add(bCurrencyService.converterCny("USD", amountDrUsd, "D", "1")).add(amountDr);
+		} else {
+			amountDrLoc = amountDrLoc.add(amountDr);
+		}
+		if (amountCrUsd.compareTo(new BigDecimal("0.00")) != 0) {
+			amountCrLoc = amountCrLoc.add(bCurrencyService.converterCny("USD", amountCrUsd, "C", "1")).add(amountCr);
+		} else {
+			amountCrLoc = amountCrLoc.add(amountCr);
+		}
+		amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
+		bills.setAmountDr(amountDr);
+		bills.setAmountCr(amountCr);
+		bills.setAmountProfit(amountProfit);
+		bills.setAmountDrUsd(amountDrUsd);
+		bills.setAmountCrUsd(amountCrUsd);
+		bills.setAmountProfitUsd(amountProfitUsd);
+		bills.setAmountDrLoc(amountDrLoc);
+		bills.setAmountCrLoc(amountCrLoc);
+		bills.setAmountProfitLoc(amountProfitLoc);
+		bills.setQuantity(quantity);
+		bills.setGrossWeight(grossWeight);
+		bills.setMeasurement(measurement);
+		this.updateById(bills);
+		if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
+			List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+				.apply("find_in_set(id,'" + bills.getMconsigneeCntyName() + "')")
+				.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+				.eq(AgentItems::getIsDeleted, 0));
+			for (AgentItems items : agentItemsList) {
+				items.setUpdateTime(new Date());
+				items.setUpdateUser(AuthUtil.getUserId());
+				items.setUpdateUserName(AuthUtil.getUserName());
+				if (ObjectUtils.isNotNull(bills.getMblno())){
+					items.setBillNo(bills.getMblno());
+				}
+				if (ObjectUtils.isNotNull(bills.getMconsigneeCntyCode())){
+					items.setOrderReleaseMethod(bills.getMconsigneeCntyCode());
+				}
+				if (ObjectUtils.isNotNull(bills.getEtd())) {
+					items.setWhetherSail("已开船");
+					items.setEtd(bills.getEtd());
+				}
+				if (ObjectUtils.isNotNull(bills.getBookingDate())) {
+					items.setEstimateReachHarbor(bills.getBookingDate());
+				}
+				if (ObjectUtils.isNotNull(bills.getEta())) {
+					items.setWhetherReachHarbor("已到港");
+					items.setActualReachHarbor(bills.getEta());
+				}
+				if (ObjectUtils.isNotNull(bills.getCyReturnTime())) {
+					items.setReleaseDate(bills.getCyReturnTime());
+				}
+				if (ObjectUtils.isNotNull(bills.getIssueDate())) {
+					items.setWhetherClearance("已通关");
+					items.setCustomsDeclarationNo(bills.getMnotify2CntyName());
+					items.setCustomsDeclarationDate(bills.getIssueDate());
+				}
+				agentItemsMapper.updateById(items);
+			}
+		}
+		return R.data(bills);
+	}
+
 }

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

@@ -38,6 +38,11 @@ import org.springblade.los.business.sea.service.IContainersBillsService;
 import org.springblade.los.business.sea.service.IContainersService;
 import org.springblade.los.business.sea.service.IPreContainersService;
 import org.springblade.los.business.sea.vo.PreContainersVO;
+import org.springblade.los.trade.entity.AgentItems;
+import org.springblade.los.trade.entity.DispatchVehicles;
+import org.springblade.los.trade.mapper.AgentItemsMapper;
+import org.springblade.los.trade.service.IDispatchVehiclesService;
+import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -70,6 +75,10 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 
 	private final IBCntrTypesService bCntrTypesService;
 
+	private final IDispatchVehiclesService dispatchVehiclesService;
+
+	private final AgentItemsMapper agentItemsMapper;
+
 	@Override
 	public IPage<PreContainersVO> selectPreContainersPage(IPage<PreContainersVO> page, PreContainersVO preContainers) {
 		return page.setRecords(baseMapper.selectPreContainersPage(page, preContainers));
@@ -373,4 +382,61 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 		return R.data(containersList);
 	}
 
+	@Override
+	public R generateDispatchVehicles(PreContainers preContainers) {
+		Long deptId = 0L;
+		String deptName = "";
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid())) {
+			deptId = deptUtils.getDeptPid();
+			R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = res.getData().getDeptName();
+			}
+		}
+		DispatchVehicles dispatchVehicles = new DispatchVehicles();
+		dispatchVehicles.setPid(preContainers.getPid());
+		dispatchVehicles.setBoxItemsId(preContainers.getId());
+		dispatchVehicles.setBoxNo(preContainers.getBoxNo());
+		dispatchVehicles.setPrice(preContainers.getPrice());
+		dispatchVehicles.setNumber(preContainers.getNumber());
+		dispatchVehicles.setGrossWeight(preContainers.getGrossWeight());
+		dispatchVehicles.setNetWeight(preContainers.getNetWeight());
+		dispatchVehicles.setHsCode(preContainers.getHsCode());
+		dispatchVehicles.setGoodsName(preContainers.getGoodsName());
+		if ("1".equals(preContainers.getType())){
+			dispatchVehicles.setWhetherWarehousing(preContainers.getWhetherWarehousing());
+		}else{
+			dispatchVehicles.setWhetherWarehousing(0);
+		}
+		dispatchVehicles.setCreateTime(new Date());
+		dispatchVehicles.setCreateUser(AuthUtil.getUserId());
+		dispatchVehicles.setCreateUserName(AuthUtil.getUserName());
+		if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+			dispatchVehicles.setCreateDept(deptId);
+			dispatchVehicles.setCreateDeptName(deptName);
+		}
+		dispatchVehiclesService.save(dispatchVehicles);
+		Bills bills = billsMapper.selectById(preContainers.getPid());
+		if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
+			List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+				.apply("find_in_set(id,'" + bills.getMconsigneeCntyName() + "')")
+				.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+				.eq(AgentItems::getIsDeleted, 0));
+			for (AgentItems items : agentItemsList) {
+				items.setUpdateTime(new Date());
+				items.setUpdateUser(AuthUtil.getUserId());
+				items.setUpdateUserName(AuthUtil.getUserName());
+				items.setWhetherDispatchCar("已派车");
+				items.setDispatchDate(new Date());
+				agentItemsMapper.updateById(items);
+			}
+		}
+		preContainers.setWhetherDispatchVehicles("1");
+		preContainers.setUpdateTime(new Date());
+		preContainers.setUpdateUser(AuthUtil.getUserId());
+		preContainers.setUpdateUserName(AuthUtil.getUserName());
+		baseMapper.updateById(preContainers);
+		return R.data(preContainers);
+	}
 }

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

@@ -23,10 +23,13 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.los.business.sea.entity.PreContainers;
+import org.springblade.los.trade.entity.InOutStorage;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.trade.entity.DispatchVehicles;
@@ -34,6 +37,8 @@ import org.springblade.los.trade.vo.DispatchVehiclesVO;
 import org.springblade.los.trade.service.IDispatchVehiclesService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 贸易代理-派车明细表 控制器
  *
@@ -111,7 +116,17 @@ public class DispatchVehiclesController extends BladeController {
 		return R.status(dispatchVehiclesService.saveOrUpdate(dispatchVehicles));
 	}
 
-	
+	/**
+	 * 新增或修改 贸易代理-派车明细表-批量
+	 */
+	@PostMapping("/submitList")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入dispatchVehicles")
+	public R submitList(@Valid @RequestBody List<DispatchVehicles> dispatchVehicles) {
+		return dispatchVehiclesService.submitList(dispatchVehicles);
+	}
+
+
 	/**
 	 * 删除 贸易代理-派车明细表
 	 */
@@ -122,5 +137,23 @@ public class DispatchVehiclesController extends BladeController {
 		return R.status(dispatchVehiclesService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+	/**
+	 * 生成入库信息
+	 */
+	@PostMapping("/generateWarehouseEntry")
+	@RepeatSubmit
+	public R generateWarehouseEntry(@Valid @RequestBody DispatchVehicles dispatchVehicles){
+		return dispatchVehiclesService.generateWarehouseEntry(dispatchVehicles);
+	}
+
+	/**
+	 * 确认派车
+	 */
+	@PostMapping("/confirmDispatchVehicles")
+	@RepeatSubmit
+	public R confirmDispatchVehicles(@Valid @RequestBody DispatchVehicles dispatchVehicles){
+		return dispatchVehiclesService.confirmDispatchVehicles(dispatchVehicles);
+	}
+
+
 }

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

@@ -23,10 +23,12 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.los.business.sea.entity.PreContainers;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.trade.entity.InOutStorage;
@@ -34,6 +36,8 @@ import org.springblade.los.trade.vo.InOutStorageVO;
 import org.springblade.los.trade.service.IInOutStorageService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 贸易代理-出入库明细表 控制器
  *
@@ -111,7 +115,17 @@ public class InOutStorageController extends BladeController {
 		return R.status(inOutStorageService.saveOrUpdate(inOutStorage));
 	}
 
-	
+	/**
+	 * 新增或修改 贸易代理-出入库明细表
+	 */
+	@PostMapping("/submitList")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入inOutStorage")
+	public R submitList(@Valid @RequestBody List<InOutStorage> inOutStorage) {
+		return inOutStorageService.submitList(inOutStorage);
+	}
+
+
 	/**
 	 * 删除 贸易代理-出入库明细表
 	 */
@@ -122,5 +136,23 @@ public class InOutStorageController extends BladeController {
 		return R.status(inOutStorageService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+	/**
+	 * 确认入库
+	 */
+	@PostMapping("/confirmWarehouseEntry")
+	@RepeatSubmit
+	public R confirmWarehouseEntry(@Valid @RequestBody InOutStorage inOutStorage){
+		return inOutStorageService.confirmWarehouseEntry(inOutStorage);
+	}
+
+	/**
+	 * 生成出库
+	 */
+	@PostMapping("/generateOutbound")
+	@RepeatSubmit
+	public R generateOutbound(@Valid @RequestBody InOutStorage inOutStorage){
+		return inOutStorageService.generateOutbound(inOutStorage);
+	}
+
+
 }

+ 8 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IDispatchVehiclesService.java

@@ -16,11 +16,14 @@
  */
 package org.springblade.los.trade.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.los.trade.entity.DispatchVehicles;
 import org.springblade.los.trade.vo.DispatchVehiclesVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 贸易代理-派车明细表 服务类
  *
@@ -38,4 +41,9 @@ public interface IDispatchVehiclesService extends IService<DispatchVehicles> {
 	 */
 	IPage<DispatchVehiclesVO> selectDispatchVehiclesPage(IPage<DispatchVehiclesVO> page, DispatchVehiclesVO dispatchVehicles);
 
+    R submitList(List<DispatchVehicles> dispatchVehicles);
+
+    R generateWarehouseEntry(DispatchVehicles dispatchVehicles);
+
+	R confirmDispatchVehicles(DispatchVehicles dispatchVehicles);
 }

+ 8 - 0
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/IInOutStorageService.java

@@ -16,11 +16,14 @@
  */
 package org.springblade.los.trade.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.los.trade.entity.InOutStorage;
 import org.springblade.los.trade.vo.InOutStorageVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 贸易代理-出入库明细表 服务类
  *
@@ -38,4 +41,9 @@ public interface IInOutStorageService extends IService<InOutStorage> {
 	 */
 	IPage<InOutStorageVO> selectInOutStoragePage(IPage<InOutStorageVO> page, InOutStorageVO inOutStorage);
 
+    R confirmWarehouseEntry(InOutStorage inOutStorage);
+
+	R generateOutbound(InOutStorage inOutStorage);
+
+	R submitList(List<InOutStorage> inOutStorage);
 }

+ 160 - 13
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -39,6 +39,10 @@ import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.business.files.entity.FilesCenter;
 import org.springblade.los.business.files.service.IFilesCenterService;
+import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.los.business.sea.entity.PreContainers;
+import org.springblade.los.business.sea.service.IBillsService;
+import org.springblade.los.business.sea.service.IPreContainersService;
 import org.springblade.los.check.dto.LosAuditProecessDTO;
 import org.springblade.los.check.entity.LosAuditPathsActs;
 import org.springblade.los.check.entity.LosAuditPathsLevels;
@@ -76,10 +80,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.ZoneId;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -134,6 +135,10 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 
 	private final IMessageClient messageClient;
 
+	private final IBillsService billsService;
+
+	private final IPreContainersService preContainersService;
+
 	@Override
 	public IPage<AgentVO> selectAgentPage(IPage<AgentVO> page, AgentVO agent) {
 		return page.setRecords(baseMapper.selectAgentPage(page, agent));
@@ -954,8 +959,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				agent.setOrderStatus("部分货款");
 				agent.setWhetherReceivedDownPayments("部分货款");
 			}
-		}
-		else if ("WK".equals(agent.getPaidApplication())) {
+		} else if ("WK".equals(agent.getPaidApplication())) {
 			BigDecimal finalPaymentReceived = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
 				.reduce(BigDecimal.ZERO, BigDecimal::add);
 			if (new BigDecimal("0").compareTo(finalPaymentReceived) != 0) {
@@ -965,7 +969,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				agent.setFinalPaymentReceived(agent.getFinalPaymentReceived().add(finalPaymentReceived));
 				agent.setFinalPaymentReceivedDate(date);
 				agent.setOrderStatus("已收货款");
-				if (agent.getFinalPaymentReceived().add(finalPaymentReceived).compareTo(agent.getFinalPaymentReceivable()) == 0){
+				if (agent.getFinalPaymentReceived().add(finalPaymentReceived).compareTo(agent.getFinalPaymentReceivable()) == 0) {
 					agent.setWhetherReceivedDownPayments("已收货款");
 				}
 			}
@@ -1264,11 +1268,11 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				.eq(FeeCenter::getDc, "D")
 				.eq(FeeCenter::getFeeType, feeType));
 			if ("FFSQ-SK".equals(agent.getPaidApplication())) {
-				declare.setFirstPaymentPayable(feeCenters.stream().filter(e-> "SFK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
-					.reduce(BigDecimal.ZERO,BigDecimal::add));
+				declare.setFirstPaymentPayable(feeCenters.stream().filter(e -> "SFK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
+					.reduce(BigDecimal.ZERO, BigDecimal::add));
 			} else if ("FFSQ-WK".equals(agent.getPaidApplication())) {
-				declare.setFinalPaymentPayable(feeCenters.stream().filter(e-> "WK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
-					.reduce(BigDecimal.ZERO,BigDecimal::add));
+				declare.setFinalPaymentPayable(feeCenters.stream().filter(e -> "WK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
+					.reduce(BigDecimal.ZERO, BigDecimal::add));
 			}
 			List<FeeCenter> feeCenterList = new ArrayList<>();
 			for (FeeCenter item : feeCenters) {
@@ -1521,7 +1525,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 				agent.setFinalPaymentInFull(agent.getFinalPaymentInFull().add(finalPaymentInFull));
 				agent.setFinalPaymentInFullDate(date);
 				agent.setOrderStatus("已付汇");
-				if (agent.getFinalPaymentInFull().add(finalPaymentInFull).compareTo(agent.getFinalPaymentPayable()) == 0){
+				if (agent.getFinalPaymentInFull().add(finalPaymentInFull).compareTo(agent.getFinalPaymentPayable()) == 0) {
 					agent.setWhetherReceivedBalancePayment("已付汇");
 				}
 			}
@@ -1789,8 +1793,151 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public Agent generateFreightForwarder(Agent agent) {
-		return null;
+		if (ObjectUtils.isNull(agent.getAgentItemsList()) || agent.getAgentItemsList().isEmpty()) {
+			throw new RuntimeException("请最少选择一条明细");
+		}
+		String deptId = "";
+		String deptName = "";
+		String branchId = deptUtils.getDeptPid() + "";
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
+			deptId = deptUtils.getDeptPid() + "";
+			R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid() + "");
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = String.join(",", res.getData());
+			}
+		}
+		BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+			.select(BusinessType::getId)
+			.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
+			.eq(BusinessType::getIsDeleted, 0)
+			.eq(BusinessType::getStatus, 0)
+			.eq(BusinessType::getCode, "HYJK"));
+		if (businessType == null) {
+			throw new RuntimeException("未找到可用业务类型");
+		}
+		List<Bills> billsList = new ArrayList<>();
+		List<PreContainers> preContainersList = new ArrayList<>();
+		List<AgentItems> agentItemsList = agent.getAgentItemsList();
+		List<AgentItems> billList = agentItemsList.stream()
+			.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+				Comparator.comparing(AgentItems::getBillNo))), ArrayList::new));
+		String billsNo = billList.stream().map(AgentItems::getBillNo).collect(Collectors.joining(","));
+		List<Bills> count = billsService.list(new LambdaQueryWrapper<Bills>()
+			.select(Bills::getId)
+			.eq(Bills::getCreateDept, deptUtils.getDeptPid() + "")
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.apply("find_in_set(mblno,'" + billsNo + "')"));
+		for (AgentItems item : billList) {
+			item.setFreightForwarder("1");
+			item.setUpdateTime(new Date());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			if (ObjectUtils.isNotNull(item.getBillNo())) {
+				if (!count.isEmpty()) {
+					throw new RuntimeException("提单号不允许重复:" + item.getBillNo());
+				}
+			}
+			Bills bills = new Bills();
+			if (ObjectUtils.isNotNull(bills.getMblno())) {
+				bills.setMblno(bills.getMblno().replaceAll(" ", ""));
+			}
+			BusinessBillNo businessBillNo = new BusinessBillNo();
+			businessBillNo.setBusinessTypeId(businessType.getId());
+			businessBillNo.setCode("HYJK");
+			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+			if (!clientBillNo.isSuccess()) {
+				throw new RuntimeException("生成订单编号失败");
+			}
+			bills.setBillType("DD");
+			bills.setBusinessType("SI");
+			bills.setSeaType("I");
+			bills.setBillNo((String) clientBillNo.getData());
+			bills.setCreateTime(new Date());
+			bills.setCreateUser(AuthUtil.getUserId());
+			bills.setCreateUserName(AuthUtil.getUserName());
+			bills.setTenantId(AuthUtil.getTenantId());
+			bills.setBranchId(branchId);
+			bills.setCreateDept(deptId);
+			bills.setCreateDeptName(deptName);
+			bills.setCorpId(agent.getCorpId());
+			bills.setCorpCnName(agent.getCorpName());
+			bills.setBookingNo(agent.getContractNo());
+			bills.setRefno(agent.getContractNo());
+			bills.setPodId(agent.getPodId());
+			bills.setPodCode(agent.getPodCode());
+			bills.setPodCnName(agent.getPodCnName());
+			bills.setPodEnName(agent.getPodEnName());
+			bills.setPolId(agent.getPolId());
+			bills.setPolCode(agent.getPolCode());
+			bills.setPolCnName(agent.getPolCnName());
+			bills.setPolEnName(agent.getPolEnName());
+			bills.setHshipperId(agent.getAbroadConsignorId());
+			bills.setHshipperCnName(agent.getAbroadConsignorCname());
+			bills.setHconsigneeId(agent.getDomesticConsigneeId());
+			bills.setHconsigneeCnName(agent.getDomesticConsigneeCname());
+			bills.setMnotifyCntyCode(agent.getCountryOfOrigin());
+			bills.setMnotifyCntyName(agent.getTypeOfShipping());
+			bills.setSrcId(agent.getSalesmanId());
+			bills.setSrcCnName(agent.getSalesmanName());
+			bills.setMblno(item.getBillNo());
+			List<AgentItems> itemsList = agentItemsList.stream().filter(e -> e.getBillNo().equals(item.getBillNo())).collect(Collectors.toList());
+			if (!itemsList.isEmpty()) {
+				bills.setQuantity(agentItemsList.stream().map(AgentItems::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+				bills.setGrossWeight(agentItemsList.stream().map(AgentItems::getGrossWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
+				bills.setNetWeight(agentItemsList.stream().map(AgentItems::getNetWeight).reduce(BigDecimal.ZERO, BigDecimal::add));
+				bills.setHscode(agentItemsList.get(0).getHsCode());
+				bills.setCommodityShName(agentItemsList.get(0).getLabelProductName());
+				bills.setCommodityCnName(agentItemsList.get(0).getLabelProductName());
+				bills.setCommodityEnName(agentItemsList.get(0).getLabelProductName());
+				bills.setMconsigneeCntyCode(agentItemsList.get(0).getOrderReleaseMethod());
+				StringBuilder ids = new StringBuilder();
+				for (AgentItems id : itemsList) {
+					ids.append(id.getId()).append(",");
+				}
+				if (ObjectUtils.isNotNull(ids)) {
+					bills.setMconsigneeCntyName(ids.substring(0, ids.length() - 1));
+				}
+			}
+			billsList.add(bills);
+		}
+		if (!billsList.isEmpty()) {
+			agentItemsService.updateBatchById(billList);
+			billsService.saveBatch(billsList);
+			for (Bills item : billsList) {
+				List<AgentItems> itemsList = agentItemsList.stream().filter(e -> e.getBillNo().equals(item.getMblno())).collect(Collectors.toList());
+				for (AgentItems items : itemsList) {
+					PreContainers preContainers = new PreContainers();
+					preContainers.setPid(item.getId());
+					preContainers.setCreateTime(new Date());
+					preContainers.setCreateUser(AuthUtil.getUserId());
+					preContainers.setCreateUserName(AuthUtil.getUserName());
+					preContainers.setTenantId(AuthUtil.getTenantId());
+					preContainers.setBranchId(branchId);
+					preContainers.setCreateDept(deptId);
+					preContainers.setCreateDeptName(deptName);
+					preContainers.setCntrTypeCode(items.getBoxType());
+					preContainers.setNumber(items.getQuantity());
+					preContainers.setQuantity(1);
+					preContainers.setGrossWeight(items.getGrossWeight());
+					preContainers.setNetWeight(items.getNetWeight());
+					preContainers.setGoodsName(items.getLabelProductName());
+					preContainers.setPrice(items.getPrice());
+					preContainers.setBoxNo(items.getBoxNo());
+					preContainers.setHsCode(items.getHsCode());
+					preContainers.setGoodsName(items.getLabelProductName());
+					preContainersList.add(preContainers);
+				}
+			}
+			if (!preContainersList.isEmpty()) {
+				preContainersService.saveBatch(preContainersList);
+			}
+		}
+		return agent;
 	}
 
 	@Override

+ 140 - 3
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/DispatchVehiclesServiceImpl.java

@@ -16,13 +16,34 @@
  */
 package org.springblade.los.trade.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.los.Util.IDeptUtils;
+import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.los.business.sea.mapper.BillsMapper;
+import org.springblade.los.trade.entity.AgentItems;
 import org.springblade.los.trade.entity.DispatchVehicles;
-import org.springblade.los.trade.vo.DispatchVehiclesVO;
+import org.springblade.los.trade.entity.InOutStorage;
+import org.springblade.los.trade.mapper.AgentItemsMapper;
 import org.springblade.los.trade.mapper.DispatchVehiclesMapper;
 import org.springblade.los.trade.service.IDispatchVehiclesService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.los.trade.service.IInOutStorageService;
+import org.springblade.los.trade.vo.DispatchVehiclesVO;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.feign.ISysClient;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 贸易代理-派车明细表 服务实现类
@@ -31,11 +52,127 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2024-07-12
  */
 @Service
+@AllArgsConstructor
 public class DispatchVehiclesServiceImpl extends ServiceImpl<DispatchVehiclesMapper, DispatchVehicles> implements IDispatchVehiclesService {
 
+
+	private final ISysClient sysClient;
+
+	private final IDeptUtils deptUtils;
+
+	private final IInOutStorageService inOutStorageService;
+
+	private final BillsMapper billsMapper;
+
+	private final AgentItemsMapper agentItemsMapper;
+
 	@Override
 	public IPage<DispatchVehiclesVO> selectDispatchVehiclesPage(IPage<DispatchVehiclesVO> page, DispatchVehiclesVO dispatchVehicles) {
 		return page.setRecords(baseMapper.selectDispatchVehiclesPage(page, dispatchVehicles));
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R submitList(List<DispatchVehicles> dispatchVehicles) {
+		Long deptId = 0L;
+		String deptName = "";
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid())) {
+			deptId = deptUtils.getDeptPid();
+			R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = res.getData().getDeptName();
+			}
+		}
+		List<DispatchVehicles> dispatchVehiclesList = new ArrayList<>();
+		for (DispatchVehicles item : dispatchVehicles) {
+			if (item.getId() == null) {
+				item.setCreateTime(new Date());
+				item.setCreateUser(AuthUtil.getUserId());
+				item.setCreateUserName(AuthUtil.getUserName());
+				if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+					item.setCreateDept(deptId);
+					item.setCreateDeptName(deptName);
+				}
+			} else {
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateTime(new Date());
+				item.setUpdateUserName(AuthUtil.getUserName());
+			}
+			dispatchVehiclesList.add(item);
+		}
+		this.saveOrUpdateBatch(dispatchVehiclesList);
+		return R.data(dispatchVehiclesList);
+	}
+
+	@Override
+	public R generateWarehouseEntry(DispatchVehicles dispatchVehicles) {
+		Long deptId = 0L;
+		String deptName = "";
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid())) {
+			deptId = deptUtils.getDeptPid();
+			R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = res.getData().getDeptName();
+			}
+		}
+		InOutStorage inOutStorage = new InOutStorage();
+		inOutStorage.setPid(dispatchVehicles.getPid());
+		inOutStorage.setDispatchVehiclesId(dispatchVehicles.getId());
+		inOutStorage.setBoxNo(dispatchVehicles.getBoxNo());
+		inOutStorage.setPrice(dispatchVehicles.getPrice());
+		inOutStorage.setQuantity(dispatchVehicles.getNumber());
+		inOutStorage.setGrossWeight(dispatchVehicles.getGrossWeight());
+		inOutStorage.setLicenseNumber(dispatchVehicles.getLicenseNumber());
+		inOutStorage.setFullName(dispatchVehicles.getFullName());
+		inOutStorage.setTel(dispatchVehicles.getContactInformation());
+		inOutStorage.setBillType("RK");
+		inOutStorage.setSurplusQuantity(dispatchVehicles.getNumber());
+		inOutStorage.setSurplusWeight(dispatchVehicles.getGrossWeight());
+		inOutStorage.setSurplusGoodsAmount(dispatchVehicles.getNumber().multiply(dispatchVehicles.getPrice()));
+		inOutStorage.setHsCode(dispatchVehicles.getHsCode());
+		inOutStorage.setGoodsName(dispatchVehicles.getGoodsName());
+		inOutStorage.setCreateTime(new Date());
+		inOutStorage.setCreateUser(AuthUtil.getUserId());
+		inOutStorage.setCreateUserName(AuthUtil.getUserName());
+		if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+			inOutStorage.setCreateDept(deptId);
+			inOutStorage.setCreateDeptName(deptName);
+		}
+		inOutStorageService.save(inOutStorage);
+		dispatchVehicles.setWhetherWarehouseEntry("1");
+		dispatchVehicles.setUpdateTime(new Date());
+		dispatchVehicles.setUpdateUser(AuthUtil.getUserId());
+		dispatchVehicles.setUpdateUserName(AuthUtil.getUserName());
+		baseMapper.updateById(dispatchVehicles);
+		return R.data(dispatchVehicles);
+	}
+
+	@Override
+	public R confirmDispatchVehicles(DispatchVehicles dispatchVehicles) {
+		Bills bills = billsMapper.selectById(dispatchVehicles.getPid());
+		if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
+			List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+				.apply("find_in_set(id,'" + bills.getMconsigneeCntyName() + "')")
+				.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+				.eq(AgentItems::getIsDeleted, 0));
+			for (AgentItems items : agentItemsList) {
+				items.setUpdateTime(new Date());
+				items.setUpdateUser(AuthUtil.getUserId());
+				items.setUpdateUserName(AuthUtil.getUserName());
+				items.setWhetherDispatchCar("已派车");
+				items.setDispatchDate(new Date());
+				agentItemsMapper.updateById(items);
+			}
+		}
+		dispatchVehicles.setWhetherDispatchVehicles("1");
+		dispatchVehicles.setUpdateTime(new Date());
+		dispatchVehicles.setUpdateUser(AuthUtil.getUserId());
+		dispatchVehicles.setUpdateUserName(AuthUtil.getUserName());
+		baseMapper.updateById(dispatchVehicles);
+		return R.data(dispatchVehicles);
+	}
+
 }

+ 149 - 3
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java

@@ -16,13 +16,34 @@
  */
 package org.springblade.los.trade.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.los.Util.IDeptUtils;
+import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.los.business.sea.mapper.BillsMapper;
+import org.springblade.los.trade.entity.AgentItems;
+import org.springblade.los.trade.entity.DispatchVehicles;
 import org.springblade.los.trade.entity.InOutStorage;
-import org.springblade.los.trade.vo.InOutStorageVO;
+import org.springblade.los.trade.mapper.AgentItemsMapper;
 import org.springblade.los.trade.mapper.InOutStorageMapper;
 import org.springblade.los.trade.service.IInOutStorageService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.los.trade.vo.InOutStorageVO;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 贸易代理-出入库明细表 服务实现类
@@ -31,11 +52,136 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2024-07-12
  */
 @Service
+@AllArgsConstructor
 public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InOutStorage> implements IInOutStorageService {
 
+	private final ISysClient sysClient;
+
+	private final IDeptUtils deptUtils;
+
+	private final BillsMapper billsMapper;
+
+	private final AgentItemsMapper agentItemsMapper;
+
 	@Override
 	public IPage<InOutStorageVO> selectInOutStoragePage(IPage<InOutStorageVO> page, InOutStorageVO inOutStorage) {
 		return page.setRecords(baseMapper.selectInOutStoragePage(page, inOutStorage));
 	}
 
+	@Override
+	public R confirmWarehouseEntry(InOutStorage inOutStorage) {
+		inOutStorage.setConfirmDispatchVehicles("1");
+		inOutStorage.setUpdateTime(new Date());
+		inOutStorage.setUpdateUser(AuthUtil.getUserId());
+		inOutStorage.setUpdateUserName(AuthUtil.getUserName());
+		if ("RK".equals(inOutStorage.getBillType())) {
+			Bills bills = billsMapper.selectById(inOutStorage.getPid());
+			if (ObjectUtils.isNotNull(bills.getMconsigneeCntyName())) {
+				List<AgentItems> agentItemsList = agentItemsMapper.selectList(new LambdaQueryWrapper<AgentItems>()
+					.apply("find_in_set(id,'" + bills.getMconsigneeCntyName() + "')")
+					.eq(AgentItems::getTenantId, AuthUtil.getTenantId())
+					.eq(AgentItems::getIsDeleted, 0));
+				for (AgentItems items : agentItemsList) {
+					items.setUpdateTime(new Date());
+					items.setUpdateUser(AuthUtil.getUserId());
+					items.setUpdateUserName(AuthUtil.getUserName());
+					items.setWhetherComplete("已入库");
+					items.setDispatchDate(new Date());
+					agentItemsMapper.updateById(items);
+				}
+			}
+		} else {
+			InOutStorage inStorage = baseMapper.selectById(inOutStorage.getSrcId());
+			BigDecimal quantity = inStorage.getSurplusQuantity();
+			if (quantity.compareTo(inOutStorage.getOutQuantity()) < 0) {
+				throw new RuntimeException("剩余数量:" + quantity + "小于出库数量:" + inOutStorage.getOutQuantity());
+			}
+			BigDecimal grossWeight = inStorage.getSurplusWeight();
+			if (grossWeight.compareTo(inOutStorage.getOutWeight()) < 0) {
+				throw new RuntimeException("剩余重量:" + grossWeight + "小于出库重量:" + inOutStorage.getOutWeight());
+			}
+			inStorage.setSurplusQuantity(quantity.subtract(inOutStorage.getOutQuantity()));
+			inStorage.setSurplusWeight(grossWeight.subtract(inOutStorage.getOutWeight()));
+			inStorage.setSurplusGoodsAmount(inStorage.getSurplusQuantity().multiply(inOutStorage.getPrice()));
+			inStorage.setUpdateTime(new Date());
+			inStorage.setUpdateUser(AuthUtil.getUserId());
+			inStorage.setUpdateUserName(AuthUtil.getUserName());
+			baseMapper.updateById(inStorage);
+		}
+		baseMapper.updateById(inOutStorage);
+		return R.data(inOutStorage);
+	}
+
+	@Override
+	public R generateOutbound(InOutStorage inOutStorage) {
+		Long deptId = 0L;
+		String deptName = "";
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid())) {
+			deptId = deptUtils.getDeptPid();
+			R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = res.getData().getDeptName();
+			}
+		}
+		InOutStorage outStorage = new InOutStorage();
+		BeanUtil.copyProperties(inOutStorage, outStorage);
+		outStorage.setSrcId(inOutStorage.getId());
+		outStorage.setId(null);
+		outStorage.setCreateTime(new Date());
+		outStorage.setCreateUser(AuthUtil.getUserId());
+		outStorage.setCreateUserName(AuthUtil.getUserName());
+		if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+			outStorage.setCreateDept(deptId);
+			outStorage.setCreateDeptName(deptName);
+		}
+		outStorage.setUpdateTime(null);
+		outStorage.setUpdateUser(null);
+		outStorage.setUpdateUserName(null);
+		outStorage.setBillType("CK");
+		outStorage.setOutQuantity(inOutStorage.getQuantity().subtract(inOutStorage.getOutQuantity()));
+		outStorage.setOutWeight(inOutStorage.getGrossWeight().subtract(inOutStorage.getOutWeight()));
+		outStorage.setOutWeight(inOutStorage.getGrossWeight().subtract(inOutStorage.getOutWeight()));
+		outStorage.setSurplusQuantity(inOutStorage.getOutQuantity());
+		outStorage.setSurplusWeight(inOutStorage.getOutWeight());
+		outStorage.setSurplusGoodsAmount(inOutStorage.getOutQuantity().multiply(inOutStorage.getPrice()));
+		baseMapper.insert(outStorage);
+		return R.data(inOutStorage);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R submitList(List<InOutStorage> inOutStorage) {
+		Long deptId = 0L;
+		String deptName = "";
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid())) {
+			deptId = deptUtils.getDeptPid();
+			R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = res.getData().getDeptName();
+			}
+		}
+		List<InOutStorage> inOutStorageList = new ArrayList<>();
+		for (InOutStorage item : inOutStorage) {
+			if (item.getId() == null) {
+				item.setCreateTime(new Date());
+				item.setCreateUser(AuthUtil.getUserId());
+				item.setCreateUserName(AuthUtil.getUserName());
+				if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+					item.setCreateDept(deptId);
+					item.setCreateDeptName(deptName);
+				}
+			} else {
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateTime(new Date());
+				item.setUpdateUserName(AuthUtil.getUserName());
+			}
+			inOutStorageList.add(item);
+		}
+		this.saveOrUpdateBatch(inOutStorageList);
+		return R.data(inOutStorageList);
+	}
+
 }