Browse Source

2023年2月8日18:04:08

纪新园 3 years ago
parent
commit
2edd138651
29 changed files with 1471 additions and 449 deletions
  1. 253 2
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/dto/ShippingBillDTO.java
  2. 23 1
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/entity/ShippingBill.java
  3. 1 1
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/entity/ShippingBillDetails.java
  4. 1 1
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/entity/ShippingBoxType.java
  5. 1 1
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/entity/ShippingFees.java
  6. 1 1
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/entity/ShippingMatchBox.java
  7. 154 96
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/entity/ShippingVessel.java
  8. 212 118
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/entity/ShippingVoyage.java
  9. 52 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/fegin/IOceanShippingBillClient.java
  10. 1 1
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpsDesc.java
  11. 2 1
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/GoodsDesc.java
  12. 6 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/CorpListVo.java
  13. 5 1
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java
  14. 68 13
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/controller/ShippingBillController.java
  15. 66 13
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/controller/ShippingVesselController.java
  16. 54 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/feign/OceanShippingBillClient.java
  17. 2 1
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/mapper/ShippingBillMapper.java
  18. 18 35
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/mapper/ShippingBillMapper.xml
  19. 12 2
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/service/IShippingBillService.java
  20. 3 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/service/IShippingVesselService.java
  21. 276 39
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/service/impl/ShippingBillServiceImpl.java
  22. 72 3
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/service/impl/ShippingVesselServiceImpl.java
  23. 8 6
      blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java
  24. 2 0
      blade-service/blade-check/src/main/java/org/springblade/check/service/IAuditProecessService.java
  25. 8 0
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  26. 41 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java
  27. 6 0
      blade-service/blade-purchase-sales/pom.xml
  28. 2 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java
  29. 121 113
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

+ 253 - 2
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/dto/ShippingBillDTO.java

@@ -16,10 +16,16 @@
  */
 package org.springblade.box.tube.ocean.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
 import org.springblade.box.tube.ocean.entity.ShippingBill;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 海运进、出口单据信息数据传输对象实体类
  *
@@ -27,8 +33,253 @@ import lombok.EqualsAndHashCode;
  * @since 2023-02-03
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
 public class ShippingBillDTO extends ShippingBill {
-	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主提单号
+	 */
+	@ApiModelProperty(value = "主提单号")
+	private String mainBillNo;
+	/**
+	 * 主单条款
+	 */
+	@ApiModelProperty(value = "主单条款")
+	private String mainClause;
+	/**
+	 * 主单付费地点
+	 */
+	@ApiModelProperty(value = "主单付费地点")
+	private Long mainPayPlaceId;
+	/**
+	 * 主单付费地点
+	 */
+	@TableField(exist = false)
+	private String $mainPayPlaceId;
+
+	/**
+	 * 主单付费地点
+	 */
+	@ApiModelProperty(value = "主单付费地点")
+	private String mainPayPlaceName;
+
+	/**
+	 * 分提单号
+	 */
+	@ApiModelProperty(value = "分提单号")
+	private String branchBillNo;
+	/**
+	 * 分单条款
+	 */
+	@ApiModelProperty(value = "分单条款")
+	private String branchClause;
+	/**
+	 * 分单付费地点
+	 */
+	@ApiModelProperty(value = "分单付费地点")
+	private Long branchPayPlaceId;
+	/**
+	 * 分单付费地点
+	 */
+	@TableField(exist = false)
+	private String $branchPayPlaceId;
+
+	/**
+	 * 分单付费地点
+	 */
+	@ApiModelProperty(value = "分单付费地点")
+	private String branchPayPlaceName;
+	/**
+	 * 装运方式
+	 */
+	@ApiModelProperty(value = "装运方式")
+	private String shipmentMode;
+	/**
+	 * 签单方式
+	 */
+	@ApiModelProperty(value = "签单方式")
+	private String signingMethod;
+	/**
+	 * 提单份数
+	 */
+	@ApiModelProperty(value = "提单份数")
+	private String billCopies;
+	/**
+	 * 操作员
+	 */
+	@ApiModelProperty(value = "操作员")
+	private Long operatorId;
+	/**
+	 * 操作员
+	 */
+	@TableField(exist = false)
+	private String $operatorId;
+
+	/**
+	 * 操作员
+	 */
+	@ApiModelProperty(value = "操作员")
+	private String operatorName;
+	/**
+	 * 核算部门
+	 */
+	@ApiModelProperty(value = "核算部门")
+	private Long accountingDeptId;
+	/**
+	 * 核算部门
+	 */
+	@TableField(exist = false)
+	private String $accountingDeptId;
+	/**
+	 * 核算部门
+	 */
+	@ApiModelProperty(value = "核算部门")
+	private String accountingDeptName;
+	/**
+	 * 合同号
+	 */
+	@ApiModelProperty(value = "合同号")
+	private String contractNo;
+	/**
+	 * 提单状态
+	 */
+	@ApiModelProperty(value = "提单状态")
+	private String billStatus;
+	/**
+	 * 船名
+	 */
+	@ApiModelProperty(value = "船名")
+	private Long shipId;
+	/**
+	 * 船名
+	 */
+	@TableField(exist = false)
+	private String $shipId;
+	/**
+	 * 船名
+	 */
+	@ApiModelProperty(value = "船名")
+	private String shipName;
+	/**
+	 * 航次
+	 */
+	@ApiModelProperty(value = "航次")
+	private String voyageNumberId;
+	/**
+	 * 航次
+	 */
+	@TableField(exist = false)
+	private String $voyageNumberId;
+	/**
+	 * 航次
+	 */
+	@ApiModelProperty(value = "航次")
+	private String voyageNumber;
+	/**
+	 * 开船日期
+	 */
+	@ApiModelProperty(value = "开船日期")
+	private Date sailDate;
+	/**
+	 * 开船日期
+	 */
+	@TableField(exist = false)
+	private List<String> sailDateList;
+	/**
+	 * 实际开船
+	 */
+	@ApiModelProperty(value = "实际开船")
+	private Date actualSailDate;
+	/**
+	 * 实际开船
+	 */
+	@TableField(exist = false)
+	private List<String> actualSailDateList;
+	/**
+	 * 截单日期
+	 */
+	@ApiModelProperty(value = "截单日期")
+	private Date deadline;
+	/**
+	 * 截港日期
+	 */
+	@ApiModelProperty(value = "截港日期")
+	private Date closingDate;
+	/**
+	 * 订舱日期
+	 */
+	@ApiModelProperty(value = "订舱日期")
+	private Date bookingDate;
+	/**
+	 * 账期截止
+	 */
+	@ApiModelProperty(value = "账期截止")
+	private Date accountingPeriodEndDate;
+	/**
+	 * 服务条款
+	 */
+	@ApiModelProperty(value = "服务条款")
+	private String serviceClause;
+	/**
+	 * 贸易条款
+	 */
+	@ApiModelProperty(value = "贸易条款")
+	private String tradeTerms;
+	/**
+	 * 件数
+	 */
+	@ApiModelProperty(value = "件数")
+	private Integer number;
+	/**
+	 * 包装
+	 */
+	@ApiModelProperty(value = "包装 ")
+	private String packing;
+	/**
+	 * 包装描述
+	 */
+	@ApiModelProperty(value = "包装描述")
+	private String packingDescribe;
+	/**
+	 * 重量
+	 */
+	@ApiModelProperty(value = "重量")
+	private BigDecimal weight;
+	/**
+	 * 尺码
+	 */
+	@ApiModelProperty(value = "尺码")
+	private String size;
+	/**
+	 * 货物类型
+	 */
+	@ApiModelProperty(value = "货物类型")
+	private String goodsType;
+	/**
+	 * 货物
+	 */
+	@ApiModelProperty(value = "货物")
+	private Long goodsId;
+	/**
+	 * 货物
+	 */
+	@TableField(exist = false)
+	private String $goodsId;
+	/**
+	 * 货物
+	 */
+	@ApiModelProperty(value = "货物")
+	private String goodsName;
+	/**
+	 * hs代码
+	 */
+	@ApiModelProperty(value = "hs代码")
+	@TableField("HSCODE")
+	private String hscode;
+	/**
+	 * 货物详情
+	 */
+	@ApiModelProperty(value = "货物详情")
+	private String goodsDetails;
+
 
 }

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

@@ -458,7 +458,7 @@ public class ShippingBill implements Serializable {
 	 * 箱型箱量
 	 */
 	@ApiModelProperty(value = "箱型箱量")
-	private String shippingBoxTypeNumber;
+	private Integer shippingBoxTypeNumber;
 
 	/**
 	 * 费用请核状态
@@ -509,6 +509,28 @@ public class ShippingBill implements Serializable {
 	@ApiModelProperty(value = "利润合计")
 	private String profitTotal;
 
+	/**
+	 * 请核类型
+	 */
+	@TableField(exist = false)
+	private String approvalType;
+
+	//请核标识  1买箱 2卖箱
+	@TableField(exist = false)
+	private Integer checkFlag;
+	//跳转对应页面的路由
+	@TableField(exist = false)
+	private String url;
+	//页面枚举
+	@TableField(exist = false)
+	private String pageStatus;
+	//页面名字
+	@TableField(exist = false)
+	private String pageLabel;
+
+	//审批类型
+	@TableField(exist = false)
+	private String feeStatusType;
 
 	public String get$preparedBy() {
 		return $preparedBy;

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

@@ -283,7 +283,7 @@ public class ShippingBillDetails implements Serializable {
 	 */
 	@ApiModelProperty(value = "hs代码")
 	@TableField("HSCODE")
-	private String hscode;
+	private String hsCode;
 	/**
 	 * 货物详情
 	 */

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

@@ -41,7 +41,7 @@ public class ShippingBoxType implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
-	private Integer pid;
+	private Long pid;
 	/**
 	 * 箱型
 	 */

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

@@ -150,7 +150,7 @@ public class ShippingFees implements Serializable {
 	 * 1.应收 2.应付
 	 */
 	@ApiModelProperty(value = "1.应收 2.应付")
-	private Boolean feesType;
+	private Integer feesType;
 	/**
 	 * 0 未审核 1已审核
 	 */

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

@@ -41,7 +41,7 @@ public class ShippingMatchBox implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
-	private Integer pid;
+	private Long pid;
 	/**
 	 * 箱型
 	 */

+ 154 - 96
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/entity/ShippingVessel.java

@@ -16,16 +16,18 @@
  */
 package org.springblade.box.tube.ocean.entity;
 
-import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 海运船名实体类
@@ -41,96 +43,152 @@ public class ShippingVessel implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	/**
-	* 主键
-	*/
-		@ApiModelProperty(value = "主键")
-		@TableId(value = "id", type = IdType.AUTO)
-	private Integer id;
-	/**
-	* 编号
-	*/
-		@ApiModelProperty(value = "编号")
-		private String no;
-	/**
-	* 名称
-	*/
-		@ApiModelProperty(value = "名称")
-		private String name;
-	/**
-	* 英文名
-	*/
-		@ApiModelProperty(value = "英文名")
-		private String ename;
-	/**
-	* 船舶呼号
-	*/
-		@ApiModelProperty(value = "船舶呼号")
-		private String imo;
-	/**
-	* 船东
-	*/
-		@ApiModelProperty(value = "船东")
-		private String ower;
-	/**
-	* 船舶经营者
-	*/
-		@ApiModelProperty(value = "船舶经营者")
-		private String manage;
-	/**
-	* 国籍
-	*/
-		@ApiModelProperty(value = "国籍")
-		private String nationality;
-	/**
-	* 注册港
-	*/
-		@ApiModelProperty(value = "注册港")
-		private String registry;
-	/**
-	* 建成日期
-	*/
-		@ApiModelProperty(value = "建成日期")
-		private LocalDateTime dateofdelivery;
-	/**
-	* 容量
-	*/
-		@ApiModelProperty(value = "容量")
-		private BigDecimal weight;
-	/**
-	* 唛头
-	*/
-		@ApiModelProperty(value = "唛头")
-		private String remarks;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
-	/**
-	* 状态(0 正常 1审批提交 2.审批中 3审批通过)
-	*/
-		@ApiModelProperty(value = "状态(0 正常 1审批提交 2.审批中 3审批通过)")
-		private Integer status;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
+	 * 主键
+	 */
+	private Long id;
+	/**
+	 * 编号
+	 */
+	@ApiModelProperty(value = "编号")
+	private String no;
+	/**
+	 * 名称
+	 */
+	@ApiModelProperty(value = "名称")
+	private String name;
+	/**
+	 * 英文名
+	 */
+	@ApiModelProperty(value = "英文名")
+	private String ename;
+	/**
+	 * 船舶呼号
+	 */
+	@ApiModelProperty(value = "船舶呼号")
+	private String imo;
+	/**
+	 * 船东
+	 */
+	@ApiModelProperty(value = "船东")
+	private String ower;
+	/**
+	 * 船舶经营者
+	 */
+	@ApiModelProperty(value = "船舶经营者")
+	private Long manage;
+	/**
+	 * 船舶经营者
+	 */
+	@ApiModelProperty(value = "船舶经营者")
+	private String manageName;
+	/**
+	 * 船舶经营者
+	 */
+	@TableField(exist = false)
+	private String $manage;
+	/**
+	 * 国籍
+	 */
+	@ApiModelProperty(value = "国籍")
+	private String nationality;
+	/**
+	 * 注册港
+	 */
+	@ApiModelProperty(value = "注册港")
+	private Long registry;
+	/**
+	 * 注册港
+	 */
+	@ApiModelProperty(value = "注册港")
+	private String registryName;
+	/**
+	 * 注册港
+	 */
+	@TableField(exist = false)
+	private String $registry;
+	/**
+	 * 建成日期
+	 */
+	@ApiModelProperty(value = "建成日期")
+	private Date dateofdelivery;
+	/**
+	 * 容量
+	 */
+	@ApiModelProperty(value = "容量")
+	private BigDecimal weight;
+	/**
+	 * 唛头
+	 */
+	@ApiModelProperty(value = "唛头")
+	private String remarks;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private String createUserName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1审批提交 2.审批中 3审批通过)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1审批提交 2.审批中 3审批通过)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	/**
+	 * 航次明细
+	 */
+	@TableField(exist = false)
+	private List<ShippingVoyage> shippingVoyageList;
+
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+
+
+	public String get$manage() {
+		return $manage;
+	}
+
+	public void set$manage(String $manage) {
+		this.$manage = $manage;
+	}
 
+	public String get$registry() {
+		return $registry;
+	}
 
+	public void set$registry(String $registry) {
+		this.$registry = $registry;
+	}
 }

+ 212 - 118
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/entity/ShippingVoyage.java

@@ -16,11 +16,14 @@
  */
 package org.springblade.box.tube.ocean.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
+
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
@@ -40,127 +43,218 @@ public class ShippingVoyage implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	/**
-	* 主键
-	*/
-		@ApiModelProperty(value = "主键")
-		@TableId(value = "id", type = IdType.AUTO)
+	 * 主键
+	 */
 	private Long id;
 	/**
-	* 船名id(t_vessel  f_id)
-	*/
-		@ApiModelProperty(value = "船名id(t_vessel  f_id)")
-		private Long pid;
-	/**
-	* 航次
-	*/
-		@ApiModelProperty(value = "航次")
-		private String no;
-	/**
-	* 装货港
-	*/
-		@ApiModelProperty(value = "装货港")
-		private Long portofLoadId;
-	/**
-	* 卸货港
-	*/
-		@ApiModelProperty(value = "卸货港")
-		private Long portofDischargeId;
-	/**
-	* 目的港
-	*/
-		@ApiModelProperty(value = "目的港")
-		private Long distinationId;
-	/**
-	* 中转港
-	*/
-		@ApiModelProperty(value = "中转港")
-		private Long portofTransshipmentId;
-	/**
-	* 预计开船日期
-	*/
-		@ApiModelProperty(value = "预计开船日期")
-		private LocalDateTime estimateSailDate;
-	/**
-	* 开船日期
-	*/
-		@ApiModelProperty(value = "开船日期")
-		private LocalDateTime sailDate;
-	/**
-	* 预计到达日期
-	*/
-		@ApiModelProperty(value = "预计到达日期")
-		private LocalDateTime estimateArriveDate;
-	/**
-	* 到港日
-	*/
-		@ApiModelProperty(value = "到港日")
-		private LocalDateTime arrivalDate;
-	/**
-	* 航期
-	*/
-		@ApiModelProperty(value = "航期")
-		private Integer days;
-	/**
-	* 截单日期
-	*/
-		@ApiModelProperty(value = "截单日期")
-		private LocalDateTime ducomentrayoffDate;
-	/**
-	* 截港日期
-	*/
-		@ApiModelProperty(value = "截港日期")
-		private LocalDateTime cutoffDate;
+	 * 船名id(t_vessel  f_id)
+	 */
+	private Long pid;
+	/**
+	 * 航次
+	 */
+	@ApiModelProperty(value = "航次")
+	private String no;
+	/**
+	 * 装货港
+	 */
+	@ApiModelProperty(value = "装货港")
+	private Long portofLoadId;
+	/**
+	 * 装货港
+	 */
+	@ApiModelProperty(value = "装货港")
+	private String portofLoadName;
+	/**
+	 * 装货港
+	 */
+	@TableField(exist = false)
+	private String $portofLoadId;
+	/**
+	 * 卸货港
+	 */
+	@ApiModelProperty(value = "卸货港")
+	private Long portofDischargeId;
+	/**
+	 * 卸货港
+	 */
+	@ApiModelProperty(value = "卸货港")
+	private String portofDischargeName;
+	/**
+	 * 卸货港
+	 */
+	@TableField(exist = false)
+	private String $portofDischargeId;
+	/**
+	 * 目的港
+	 */
+	@ApiModelProperty(value = "目的港")
+	private Long distinationId;
+	/**
+	 * 目的港
+	 */
+	@ApiModelProperty(value = "目的港")
+	private String distinationName;
+	/**
+	 * 目的港
+	 */
+	@TableField(exist = false)
+	private String $distinationId;
+	/**
+	 * 中转港
+	 */
+	@ApiModelProperty(value = "中转港")
+	private Long portofTransshipmentId;
+	/**
+	 * 中转港
+	 */
+	@ApiModelProperty(value = "中转港")
+	private String portofTransshipmentName;
+	/**
+	 * 中转港
+	 */
+	@TableField(exist = false)
+	private String $portofTransshipmentId;
+	/**
+	 * 预计开船日期
+	 */
+	@ApiModelProperty(value = "预计开船日期")
+	private Date estimateSailDate;
+	/**
+	 * 开船日期
+	 */
+	@ApiModelProperty(value = "开船日期")
+	private Date sailDate;
+	/**
+	 * 预计到达日期
+	 */
+	@ApiModelProperty(value = "预计到达日期")
+	private Date estimateArriveDate;
+	/**
+	 * 到港日
+	 */
+	@ApiModelProperty(value = "到港日")
+	private Date arrivalDate;
+	/**
+	 * 航期
+	 */
+	@ApiModelProperty(value = "航期")
+	private Integer days;
+	/**
+	 * 截单日期
+	 */
+	@ApiModelProperty(value = "截单日期")
+	private Date ducomentrayoffDate;
+	/**
+	 * 截港日期
+	 */
+	@ApiModelProperty(value = "截港日期")
+	private Date cutoffDate;
 	private String teu;
 	/**
-	* 管船人
-	*/
-		@ApiModelProperty(value = "管船人")
-		private Long manageId;
-	/**
-	* 电话
-	*/
-		@ApiModelProperty(value = "电话")
-		private String tel;
-	/**
-	* 航线
-	*/
-		@ApiModelProperty(value = "航线")
-		private byte[] lane;
-	/**
-	* 唛头
-	*/
-		@ApiModelProperty(value = "唛头")
-		private String remarks;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
-	/**
-	* 状态(0 正常 1审批提交 2.审批中 3审批通过)
-	*/
-		@ApiModelProperty(value = "状态(0 正常 1审批提交 2.审批中 3审批通过)")
-		private Integer status;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
+	 * 管船人
+	 */
+	@ApiModelProperty(value = "管船人")
+	private Long manageId;
+	/**
+	 * 管船人
+	 */
+	@ApiModelProperty(value = "管船人")
+	private String manageName;
+	/**
+	 * 管船人
+	 */
+	@TableField(exist = false)
+	private String $manageId;
+	/**
+	 * 电话
+	 */
+	@ApiModelProperty(value = "电话")
+	private String tel;
+	/**
+	 * 航线
+	 */
+	@ApiModelProperty(value = "航线")
+	private String lane;
+	/**
+	 * 唛头
+	 */
+	@ApiModelProperty(value = "唛头")
+	private String remarks;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1审批提交 2.审批中 3审批通过)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1审批提交 2.审批中 3审批通过)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+
+	public String get$portofLoadId() {
+		return $portofLoadId;
+	}
+
+	public void set$portofLoadId(String $portofLoadId) {
+		this.$portofLoadId = $portofLoadId;
+	}
+
+	public String get$portofDischargeId() {
+		return $portofDischargeId;
+	}
+
+	public void set$portofDischargeId(String $portofDischargeId) {
+		this.$portofDischargeId = $portofDischargeId;
+	}
+
+	public String get$distinationId() {
+		return $distinationId;
+	}
+
+	public void set$distinationId(String $distinationId) {
+		this.$distinationId = $distinationId;
+	}
+
+	public String get$portofTransshipmentId() {
+		return $portofTransshipmentId;
+	}
+
+	public void set$portofTransshipmentId(String $portofTransshipmentId) {
+		this.$portofTransshipmentId = $portofTransshipmentId;
+	}
 
+	public String get$manageId() {
+		return $manageId;
+	}
 
+	public void set$manageId(String $manageId) {
+		this.$manageId = $manageId;
+	}
 }

+ 52 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/ocean/fegin/IOceanShippingBillClient.java

@@ -0,0 +1,52 @@
+package org.springblade.box.tube.ocean.fegin;
+
+import org.springblade.box.tube.entity.TransportItemFees;
+import org.springblade.box.tube.ocean.entity.ShippingBill;
+import org.springblade.box.tube.ocean.entity.ShippingFees;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author caifc
+ * @date 2021-10-21 22:28
+ */
+@FeignClient(
+	value = "blade-box-tube"
+)
+public interface IOceanShippingBillClient {
+	String API_PREFIX = "/box-tube";
+	String PASS_CHECK_OCEAN_SHIPPING_BILL = API_PREFIX + "/passCheckOceanShippingBill";
+	String PASS_CANCEL_OCEAN_SHIPPING_BILL = API_PREFIX + "/passCancelOceanShippingBill";
+	String UNDER_REVIEW_OCEAN_SHIPPING_BILL = API_PREFIX + "/underReviewOceanShippingBill";
+	String UPDATE_OCEAN_SHIPPING_FEES = API_PREFIX + "/updateOceanShippingFees";
+	String GET_OCEAN_SHIPPING_FEES_BY_ID = API_PREFIX + "/getOceanShippingFeesById";
+	String GET_OCEAN_SHIPPING_BILL_BY_ID = API_PREFIX + "/getOceanShippingBillById";
+
+	//获取单据信息
+	@PostMapping(GET_OCEAN_SHIPPING_BILL_BY_ID)
+	ShippingBill getOceanShippingBillById(@RequestParam("id") Long id);
+
+	//审核通过
+	@PostMapping(PASS_CHECK_OCEAN_SHIPPING_BILL)
+	R passCheckOceanShippingBill(@RequestParam("id") Long id);
+
+	//审核不通过
+	@PostMapping(PASS_CANCEL_OCEAN_SHIPPING_BILL)
+	R passCancelOceanShippingBill(@RequestParam("id") Long id);
+
+	//审核中
+	@PostMapping(UNDER_REVIEW_OCEAN_SHIPPING_BILL)
+	R underReviewOceanShippingBill(@RequestParam("id") Long id);
+
+	//修改费用明细
+	@PostMapping(UPDATE_OCEAN_SHIPPING_FEES)
+	R updateOceanShippingFees(@RequestBody ShippingFees shippingFees);
+
+	//通过id查询费用明细
+	@PostMapping(GET_OCEAN_SHIPPING_FEES_BY_ID)
+	R<ShippingFees> getOceanShippingFeesById(@RequestParam("id") Long id);
+
+}

+ 1 - 1
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpsDesc.java

@@ -481,6 +481,6 @@ public class CorpsDesc implements Serializable {
 	 * 详情
 	 */
 	@ApiModelProperty("详情")
-	private BigDecimal details;
+	private String details;
 
 }

+ 2 - 1
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/GoodsDesc.java

@@ -332,7 +332,8 @@ public class GoodsDesc implements Serializable {
 	/**
 	 * HS代码
 	 */
-	private String HSCODE;
+	@TableField("HSCODE")
+	private String hsCode;
 
 	/**
 	 * 库存数据

+ 6 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/CorpListVo.java

@@ -79,4 +79,10 @@ public class CorpListVo {
 	 */
 	@ApiModelProperty(value = "FOB系数")
 	private BigDecimal coefficient;
+
+	/**
+	 * FOB系数
+	 */
+	@ApiModelProperty(value = "FOB系数")
+	private String details;
 }

+ 5 - 1
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java

@@ -1208,5 +1208,9 @@ public class Order implements Serializable {
 	 */
 	@ApiModelProperty(value = "销售退单时间")
 	private Date chargebackTime;
-
+/**
+	 *
+	 */
+	@TableField(exist = false)
+	private List<Long> itemList;
 }

+ 68 - 13
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/controller/ShippingBillController.java

@@ -16,25 +16,27 @@
  */
 package org.springblade.box.tube.ocean.controller;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-import javax.validation.Valid;
-
+import org.springblade.box.tube.ocean.dto.ShippingBillDTO;
+import org.springblade.box.tube.ocean.entity.ShippingBill;
+import org.springblade.box.tube.ocean.service.IShippingBillService;
+import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.box.tube.ocean.entity.ShippingBill;
-import org.springblade.box.tube.ocean.vo.ShippingBillVO;
-import org.springblade.box.tube.ocean.service.IShippingBillService;
-import org.springblade.core.boot.ctrl.BladeController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 海运进、出口单据信息 控制器
@@ -57,7 +59,7 @@ public class ShippingBillController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入shippingBill")
 	public R<ShippingBill> detail(ShippingBill shippingBill) {
-		ShippingBill detail = shippingBillService.getDetails(Condition.getQueryWrapper(shippingBill));
+		ShippingBill detail = shippingBillService.getDetails(shippingBill);
 		return R.data(detail);
 	}
 
@@ -78,12 +80,24 @@ public class ShippingBillController extends BladeController {
 	@GetMapping("/page")
 	@ApiOperationSupport(order = 3)
 	@ApiOperation(value = "分页", notes = "传入shippingBill")
-	public R<IPage<ShippingBill>> page(ShippingBill shippingBill, Query query) {
-		IPage<ShippingBill> pages = shippingBillService.selectShippingBillPage(Condition.getPage(query), shippingBill);
+	public R<IPage<ShippingBillDTO>> page(ShippingBillDTO shippingBill, Query query) {
+		IPage<ShippingBillDTO> pages = shippingBillService.selectShippingBillPage(Condition.getPage(query), shippingBill);
 		return R.data(pages);
 	}
 
 	/**
+	 * 海运进、出口单据信息
+	 */
+	@GetMapping("/export")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入shippingBill")
+	public void export(ShippingBill shippingBill, HttpServletResponse response) {
+		List<ShippingBill> shippingBillDTOList = shippingBillService.list(Condition.getQueryWrapper(shippingBill));
+
+		ExcelUtil.export(response, "海运进、出口单据信息", "导出数据表", shippingBillDTOList, ShippingBill.class);
+	}
+
+	/**
 	 * 新增 海运进、出口单据信息
 	 */
 	@PostMapping("/save")
@@ -124,5 +138,46 @@ public class ShippingBillController extends BladeController {
 		return R.status(shippingBillService.removeByIds(Func.toLongList(ids)));
 	}
 
+	/**
+	 * 请核
+	 *
+	 * @param shippingBill
+	 * @return
+	 */
+	@PostMapping("/checkTransport")
+	@RepeatSubmit
+	public R checkTradingBox(@RequestBody ShippingBill shippingBill) {
+		ShippingBill check = shippingBillService.checkShippingBill(shippingBill);
+		return R.data(check);
+	}
+
+	/**
+	 * 审核通过
+	 */
+	@PostMapping("/passCheck")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "Feign-审核通过", notes = "传入财务id")
+	public R passCheck(@ApiParam(value = "财务主表id", required = true) @RequestParam Long id) {
+		return R.data(shippingBillService.passCheck(id));
+	}
+
+	/**
+	 * 审核中
+	 */
+	@PostMapping("/underReview")
+	public R underReview(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		return R.data(shippingBillService.underReview(id));
+	}
+
+	/**
+	 * 审核不通过
+	 */
+	@PostMapping("/passCancel")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
+	public R passCancel(@ApiParam(value = "财务主表id", required = true) @RequestParam Long id) {
+
+		return R.data(shippingBillService.passCancel(id));
+	}
 
 }

+ 66 - 13
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/controller/ShippingVesselController.java

@@ -16,23 +16,30 @@
  */
 package org.springblade.box.tube.ocean.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-import javax.validation.Valid;
-
+import org.springblade.box.tube.ocean.entity.ShippingVessel;
+import org.springblade.box.tube.ocean.entity.ShippingVoyage;
+import org.springblade.box.tube.ocean.service.IShippingVesselService;
+import org.springblade.box.tube.ocean.service.IShippingVoyageService;
+import org.springblade.box.tube.ocean.vo.ShippingVesselVO;
+import org.springblade.core.boot.ctrl.BladeController;
 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.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.box.tube.ocean.entity.ShippingVessel;
-import org.springblade.box.tube.ocean.vo.ShippingVesselVO;
-import org.springblade.box.tube.ocean.service.IShippingVesselService;
-import org.springblade.core.boot.ctrl.BladeController;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 海运船名 控制器
@@ -48,6 +55,8 @@ public class ShippingVesselController extends BladeController {
 
 	private final IShippingVesselService shippingVesselService;
 
+	private final IShippingVoyageService shippingVoyageService;
+
 	/**
 	 * 详情
 	 */
@@ -55,7 +64,7 @@ public class ShippingVesselController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入shippingVessel")
 	public R<ShippingVessel> detail(ShippingVessel shippingVessel) {
-		ShippingVessel detail = shippingVesselService.getOne(Condition.getQueryWrapper(shippingVessel));
+		ShippingVessel detail = shippingVesselService.getDetails(shippingVessel);
 		return R.data(detail);
 	}
 
@@ -66,7 +75,15 @@ public class ShippingVesselController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入shippingVessel")
 	public R<IPage<ShippingVessel>> list(ShippingVessel shippingVessel, Query query) {
-		IPage<ShippingVessel> pages = shippingVesselService.page(Condition.getPage(query), Condition.getQueryWrapper(shippingVessel));
+		LambdaQueryWrapper<ShippingVessel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(ShippingVessel::getIsDeleted, 0)
+			.eq(ShippingVessel::getTenantId, AuthUtil.getTenantId())
+			.eq(ObjectUtils.isNotNull(shippingVessel.getNo()), ShippingVessel::getNo, shippingVessel.getNo())
+			.like(ObjectUtils.isNotNull(shippingVessel.getName()), ShippingVessel::getName, shippingVessel.getName())
+			.eq(ObjectUtils.isNotNull(shippingVessel.getRegistry()), ShippingVessel::getRegistry, shippingVessel.getRegistry())
+			.eq(ObjectUtils.isNotNull(shippingVessel.getNationality()), ShippingVessel::getNationality, shippingVessel.getNationality())
+			.orderByDesc(ShippingVessel::getCreateTime);
+		IPage<ShippingVessel> pages = shippingVesselService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -108,10 +125,10 @@ public class ShippingVesselController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入shippingVessel")
 	public R submit(@Valid @RequestBody ShippingVessel shippingVessel) {
-		return R.status(shippingVesselService.saveOrUpdate(shippingVessel));
+		return R.data(shippingVesselService.addOrUpdate(shippingVessel));
 	}
 
-	
+
 	/**
 	 * 删除 海运船名
 	 */
@@ -122,5 +139,41 @@ public class ShippingVesselController extends BladeController {
 		return R.status(shippingVesselService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+	/**
+	 * 海运船名下拉
+	 */
+	@GetMapping("/listAll")
+	public R<List<ShippingVessel>> listAll(ShippingVessel shippingVessel) {
+		LambdaQueryWrapper<ShippingVessel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(ShippingVessel::getIsDeleted, 0)
+			.eq(ShippingVessel::getTenantId, AuthUtil.getTenantId())
+			.orderByDesc(ShippingVessel::getCreateTime);
+		List<ShippingVessel> shippingVesselList = shippingVesselService.list(lambdaQueryWrapper);
+		if (ObjectUtils.isNotNull(shippingVesselList) && shippingVesselList.size() > 0) {
+			return R.data(shippingVesselList);
+		} else {
+			return R.data(new ArrayList<>());
+		}
+	}
+
+	/**
+	 * 海运船名-航次下拉
+	 */
+	@GetMapping("/listAllByVoyage")
+	public R<List<ShippingVoyage>> listAllByVoyage(ShippingVoyage shippingVoyage) {
+		LambdaQueryWrapper<ShippingVoyage> shippingVoyageLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		shippingVoyageLambdaQueryWrapper.eq(ShippingVoyage::getIsDeleted, 0)
+			.eq(ShippingVoyage::getTenantId, AuthUtil.getTenantId())
+			.eq(ShippingVoyage::getPid, shippingVoyage.getPid())
+			.orderByDesc(ShippingVoyage::getCreateTime);
+		List<ShippingVoyage> shippingVoyageList = shippingVoyageService.list(shippingVoyageLambdaQueryWrapper);
+		if (ObjectUtils.isNotNull(shippingVoyageList) && shippingVoyageList.size() > 0) {
+			return R.data(shippingVoyageList);
+		} else {
+			return R.data(new ArrayList<>());
+		}
+
+	}
+
+
 }

+ 54 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/feign/OceanShippingBillClient.java

@@ -0,0 +1,54 @@
+package org.springblade.box.tube.ocean.feign;
+
+import lombok.AllArgsConstructor;
+import org.springblade.box.tube.ocean.entity.ShippingBill;
+import org.springblade.box.tube.ocean.entity.ShippingFees;
+import org.springblade.box.tube.ocean.fegin.IOceanShippingBillClient;
+import org.springblade.box.tube.ocean.service.IShippingBillService;
+import org.springblade.box.tube.ocean.service.IShippingFeesService;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+@NonDS
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+public class OceanShippingBillClient implements IOceanShippingBillClient {
+
+	private final IShippingBillService shippingBillService;
+
+	private final IShippingFeesService shippingFeesService;
+
+
+	@Override
+	public ShippingBill getOceanShippingBillById(Long id) {
+		return shippingBillService.getById(id);
+	}
+
+	@Override
+	public R passCheckOceanShippingBill(Long id) {
+		return shippingBillService.passCheck(id);
+	}
+
+	@Override
+	public R passCancelOceanShippingBill(Long id) {
+		return shippingBillService.passCancel(id);
+	}
+
+	@Override
+	public R underReviewOceanShippingBill(Long id) {
+		return shippingBillService.underReview(id);
+	}
+
+	@Override
+	public R updateOceanShippingFees(ShippingFees shippingFees) {
+		return R.status(shippingFeesService.updateById(shippingFees));
+	}
+
+	@Override
+	public R<ShippingFees> getOceanShippingFeesById(Long id) {
+		return R.data(shippingFeesService.getById(id));
+	}
+}

+ 2 - 1
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/mapper/ShippingBillMapper.java

@@ -17,6 +17,7 @@
 package org.springblade.box.tube.ocean.mapper;
 
 import org.apache.ibatis.annotations.Param;
+import org.springblade.box.tube.ocean.dto.ShippingBillDTO;
 import org.springblade.box.tube.ocean.entity.ShippingBill;
 import org.springblade.box.tube.ocean.vo.ShippingBillVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -38,6 +39,6 @@ public interface ShippingBillMapper extends BaseMapper<ShippingBill> {
 	 * @param shippingBill
 	 * @return
 	 */
-	List<ShippingBill> selectShippingBillPage(IPage page, @Param("shippingBill") ShippingBill shippingBill);
+	List<ShippingBillDTO> selectShippingBillPage(IPage page, @Param("shippingBill") ShippingBillDTO shippingBill);
 
 }

+ 18 - 35
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/mapper/ShippingBillMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="org.springblade.box.tube.ocean.mapper.ShippingBillMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="shippingBillResultMap" type="org.springblade.box.tube.ocean.entity.ShippingBill">
+    <resultMap id="shippingBillResultMap" type="org.springblade.box.tube.ocean.dto.ShippingBillDTO">
         <id column="id" property="id"/>
         <result column="sys_no" property="sysNo"/>
         <result column="bill_type" property="billType"/>
@@ -20,7 +20,7 @@
         <result column="business_source" property="businessSource"/>
         <result column="source_id" property="sourceId"/>
         <result column="shipping_company_id" property="shippingCompanyId"/>
-        <result column="booking_agent" property="bookingAgent"/>
+        <result column="booking_agent" property="bookingAgentId"/>
         <result column="route" property="route"/>
         <result column="station" property="station"/>
         <result column="station_contacts" property="stationContacts"/>
@@ -46,14 +46,6 @@
         <result column="discharge_cargo_harbor_id" property="dischargeCargoHarborId"/>
         <result column="destination_id" property="destinationId"/>
         <result column="delivery_address_id" property="deliveryAddressId"/>
-        <association property="shippingBillDetails" javaType="org.springblade.box.tube.ocean.entity.ShippingBillDetails"
-                     resultMap="shippingBillDetailsResultMap"/>
-    </resultMap>
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="shippingBillDetailsResultMap" type="org.springblade.box.tube.ocean.entity.ShippingBillDetails">
-        <id column="id" property="id"/>
-        <result column="pid" property="pid"/>
         <result column="main_bill_no" property="mainBillNo"/>
         <result column="main_clause" property="mainClause"/>
         <result column="main_pay_place_id" property="mainPayPlaceId"/>
@@ -86,17 +78,8 @@
         <result column="goods_id" property="goodsId"/>
         <result column="HSCODE" property="hscode"/>
         <result column="goods_details" property="goodsDetails"/>
-        <result column="remarks" property="remarks"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_dept" property="createDept"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
     </resultMap>
 
-
     <select id="selectShippingBillPage" resultMap="shippingBillResultMap">
         SELECT
         osb.*,
@@ -119,8 +102,8 @@
         <if test="shippingBill.shippingCompanyId != null">and osb.shipping_company_id
             =#{shippingBill.shippingCompanyId}
         </if>
-        <if test="shippingBill.bookingAgent != null and shippingBill.bookingAgent != ''">and
-            osb.booking_agent=#{shippingBill.bookingAgent}
+        <if test="shippingBill.bookingAgentId != null">and
+            osb.booking_agent=#{shippingBill.bookingAgentId}
         </if>
         <if test="shippingBill.station != null and shippingBill.station != ''">and osb.station
             =#{shippingBill.station}
@@ -130,26 +113,26 @@
             #{shippingBill.businessSource}
         </if>
         <if test="shippingBill.sourceId != null">and osb.source_id = #{shippingBill.sourceId}</if>
-        <if test="shippingBill.shippingBillDetails.mainBillNo != null and shippingBill.shippingBillDetails.mainBillNo != ''">
-            and osbd.main_bill_no like concat('%', #{shippingBill.shippingBillDetails.mainBillNo},'%')
+        <if test="shippingBill.mainBillNo != null and shippingBill.mainBillNo != ''">
+            and osbd.main_bill_no like concat('%', #{shippingBill.mainBillNo},'%')
         </if>
-        <if test="shippingBill.shippingBillDetails.branchBillNo != null and shippingBill.shippingBillDetails.branchBillNo != ''">
-            and osbd.branch_bill_no like concat('%', #{shippingBill.shippingBillDetails.branchBillNo},'%')
+        <if test="shippingBill.branchBillNo != null and shippingBill.branchBillNo != ''">
+            and osbd.branch_bill_no like concat('%', #{shippingBill.branchBillNo},'%')
         </if>
-        <if test="shippingBill.shippingBillDetails.signingMethod != null and shippingBill.shippingBillDetails.signingMethod != ''">
-            and osbd.signing_method = #{shippingBill.shippingBillDetails.signingMethod}
+        <if test="shippingBill.signingMethod != null and shippingBill.signingMethod != ''">
+            and osbd.signing_method = #{shippingBill.signingMethod}
         </if>
-        <if test="shippingBill.shippingBillDetails.sailDateList != null and shippingBill.shippingBillDetails.sailDateList[0] != null and shippingBill.shippingBillDetails.sailDateList[0]!= ''">
-            and osbd.sail_date &gt;= #{shippingBill.shippingBillDetails.sailDateList[0]}
+        <if test="shippingBill.sailDateList != null and shippingBill.sailDateList[0] != null and shippingBill.sailDateList[0]!= ''">
+            and osbd.sail_date &gt;= #{shippingBill.sailDateList[0]}
         </if>
-        <if test="shippingBill.shippingBillDetails.sailDateList != null and shippingBill.shippingBillDetails.sailDateList[1] != null and shippingBill.shippingBillDetails.sailDateList[1]!= ''">
-            and osbd.sail_date &lt;= #{shippingBill.shippingBillDetails.sailDateList[1]}
+        <if test="shippingBill.sailDateList != null and shippingBill.sailDateList[1] != null and shippingBill.sailDateList[1]!= ''">
+            and osbd.sail_date &lt;= #{shippingBill.sailDateList[1]}
         </if>
-        <if test="shippingBill.shippingBillDetails.actualSailDateList != null and shippingBill.shippingBillDetails.actualSailDateList[0] != null and shippingBill.shippingBillDetails.actualSailDateList[0]!= ''">
-            and osbd.actual_sail_date &gt;= #{shippingBill.shippingBillDetails.actualSailDateList[0]}
+        <if test="shippingBill.actualSailDateList != null and shippingBill.actualSailDateList[0] != null and shippingBill.actualSailDateList[0]!= ''">
+            and osbd.actual_sail_date &gt;= #{shippingBill.actualSailDateList[0]}
         </if>
-        <if test="shippingBill.shippingBillDetails.actualSailDateList != null and shippingBill.shippingBillDetails.actualSailDateList[1] != null and shippingBill.shippingBillDetails.actualSailDateList[1]!= ''">
-            and osbd.actual_sail_date &lt;= #{shippingBill.shippingBillDetails.actualSailDateList[1]}
+        <if test="shippingBill.actualSailDateList != null and shippingBill.actualSailDateList[1] != null and shippingBill.actualSailDateList[1]!= ''">
+            and osbd.actual_sail_date &lt;= #{shippingBill.actualSailDateList[1]}
         </if>
         ORDER BY osb.create_time
     </select>

+ 12 - 2
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/service/IShippingBillService.java

@@ -17,10 +17,12 @@
 package org.springblade.box.tube.ocean.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springblade.box.tube.ocean.dto.ShippingBillDTO;
 import org.springblade.box.tube.ocean.entity.ShippingBill;
 import org.springblade.box.tube.ocean.vo.ShippingBillVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.tool.api.R;
 
 /**
  * 海运进、出口单据信息 服务类
@@ -37,9 +39,17 @@ public interface IShippingBillService extends IService<ShippingBill> {
 	 * @param shippingBill
 	 * @return
 	 */
-	IPage<ShippingBill> selectShippingBillPage(IPage<ShippingBill> page, ShippingBill shippingBill);
+	IPage<ShippingBillDTO> selectShippingBillPage(IPage<ShippingBillDTO> page, ShippingBillDTO shippingBill);
 
-    ShippingBill getDetails(QueryWrapper<ShippingBill> queryWrapper);
+    ShippingBill getDetails(ShippingBill shippingBill);
 
 	ShippingBill addOrUpdate(ShippingBill shippingBill);
+
+    ShippingBill checkShippingBill(ShippingBill shippingBill);
+
+	R passCheck(Long id);
+
+	R underReview(Long id);
+
+	R passCancel(Long id);
 }

+ 3 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/service/IShippingVesselService.java

@@ -38,4 +38,7 @@ public interface IShippingVesselService extends IService<ShippingVessel> {
 	 */
 	IPage<ShippingVesselVO> selectShippingVesselPage(IPage<ShippingVesselVO> page, ShippingVesselVO shippingVessel);
 
+    ShippingVessel getDetails(ShippingVessel shippingVessel);
+
+	ShippingVessel addOrUpdate(ShippingVessel shippingVessel);
 }

+ 276 - 39
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/service/impl/ShippingBillServiceImpl.java

@@ -17,25 +17,32 @@
 package org.springblade.box.tube.ocean.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
+import org.springblade.box.tube.entity.Transport;
+import org.springblade.box.tube.ocean.dto.ShippingBillDTO;
 import org.springblade.box.tube.ocean.entity.*;
 import org.springblade.box.tube.ocean.mapper.*;
 import org.springblade.box.tube.ocean.service.IShippingBillService;
-import org.springblade.client.feign.ICorpsDescClient;
-import org.springblade.client.feign.IPortClient;
+import org.springblade.check.dto.AuditProecessDTO;
+import org.springblade.check.entity.AuditPathsActs;
+import org.springblade.check.entity.AuditPathsLevels;
+import org.springblade.check.feign.ICheckClient;
 import org.springblade.client.feign.ISerialClient;
+import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 海运进、出口单据信息 服务实现类
@@ -52,14 +59,6 @@ public class ShippingBillServiceImpl extends ServiceImpl<ShippingBillMapper, Shi
 
 	private ISerialClient serialClient;//生成系统编号
 
-	private IPortClient portClient;//地点
-
-	private ICorpsDescClient corpsDescClient;//客户
-
-	private final ShippingVesselMapper shippingVesselMapper;
-
-	private final ShippingVoyageMapper shippingVoyageMapper;
-
 	private final ShippingBillDetailsMapper shippingBillDetailsMapper;
 
 	private final ShippingBoxTypeMapper shippingBoxTypeMapper;
@@ -70,33 +69,41 @@ public class ShippingBillServiceImpl extends ServiceImpl<ShippingBillMapper, Shi
 
 	private final ShippingMatchBoxMapper shippingMatchBoxMapper;
 
+	private final ICheckClient iCheckClient;
+
 	@Override
-	public IPage<ShippingBill> selectShippingBillPage(IPage<ShippingBill> page, ShippingBill shippingBill) {
+	public IPage<ShippingBillDTO> selectShippingBillPage(IPage<ShippingBillDTO> page, ShippingBillDTO shippingBill) {
 		return page.setRecords(baseMapper.selectShippingBillPage(page, shippingBill));
 	}
 
 	@Override
-	public ShippingBill getDetails(QueryWrapper<ShippingBill> queryWrapper) {
-		ShippingBill shippingBill = baseMapper.selectOne(queryWrapper);
+	public ShippingBill getDetails(ShippingBill shippingBill) {
+		ShippingBill shippingBillDetail = baseMapper.selectOne(Condition.getQueryWrapper(shippingBill));
 		if (ObjectUtils.isNull(shippingBill)) {
 			throw new RuntimeException("未查到数据信息");
 		}
 		//明细
 		ShippingBillDetails shippingBillDetails = shippingBillDetailsMapper.selectOne(new LambdaQueryWrapper<ShippingBillDetails>().eq(ShippingBillDetails::getPid, shippingBill.getId()));
-		shippingBill.setShippingBillDetails(shippingBillDetails);
+		shippingBillDetail.setShippingBillDetails(shippingBillDetails);
 		//箱型箱量
 		List<ShippingBoxType> shippingBoxType = shippingBoxTypeMapper.selectList(new LambdaQueryWrapper<ShippingBoxType>().eq(ShippingBoxType::getPid, shippingBill.getId()));
-		shippingBill.setShippingBoxTypeList(shippingBoxType);
+		shippingBillDetail.setShippingBoxTypeList(shippingBoxType);
 		//配箱
 		List<ShippingMatchBox> shippingMatchBox = shippingMatchBoxMapper.selectList(new LambdaQueryWrapper<ShippingMatchBox>().eq(ShippingMatchBox::getPid, shippingBill.getId()));
-		shippingBill.setShippingMatchBoxList(shippingMatchBox);
-		//费用明细
-		List<ShippingFees> shippingFees = shippingFeesMapper.selectList(new LambdaQueryWrapper<ShippingFees>().eq(ShippingFees::getPid, shippingBill.getId()));
-		shippingBill.setShippingFeesList(shippingFees);
+		shippingBillDetail.setShippingMatchBoxList(shippingMatchBox);
+		if (ObjectUtils.isNotNull(shippingBill.getFeeStatusType())) {
+			//费用明细
+			List<ShippingFees> shippingFees = shippingFeesMapper.selectList(new LambdaQueryWrapper<ShippingFees>().eq(ShippingFees::getPid, shippingBill.getId()).eq(ShippingFees::getIsCheck, 2));
+			shippingBillDetail.setShippingFeesList(shippingFees);
+		} else {
+			//费用明细
+			List<ShippingFees> shippingFees = shippingFeesMapper.selectList(new LambdaQueryWrapper<ShippingFees>().eq(ShippingFees::getPid, shippingBill.getId()));
+			shippingBillDetail.setShippingFeesList(shippingFees);
+		}
 		//附件
 		List<ShippingFile> shippingFile = shippingFileMapper.selectList(new LambdaQueryWrapper<ShippingFile>().eq(ShippingFile::getPid, shippingBill.getId()));
-		shippingBill.setShippingFileList(shippingFile);
-		return shippingBill;
+		shippingBillDetail.setShippingFileList(shippingFile);
+		return shippingBillDetail;
 	}
 
 	@Override
@@ -158,29 +165,259 @@ public class ShippingBillServiceImpl extends ServiceImpl<ShippingBillMapper, Shi
 		}
 		//箱型箱量
 		if (ObjectUtils.isNotNull(shippingBill.getShippingBoxTypeList())) {
-			for (ShippingBoxType shippingBoxType:shippingBill.getShippingBoxTypeList()) {
+			int boxQuantity = 0;
+			for (ShippingBoxType shippingBoxType : shippingBill.getShippingBoxTypeList()) {
+				shippingBoxType.setBoxTypeName(shippingBoxType.get$boxTypeId());
+				if (shippingBoxType.getId() == null) {
+					shippingBoxType.setCreateUser(AuthUtil.getUserId());
+					shippingBoxType.setCreateTime(new Date());
+					shippingBoxType.setTenantId(AuthUtil.getTenantId());
+					shippingBoxType.setPid(shippingBill.getId());
+					shippingBoxTypeMapper.insert(shippingBoxType);
+				} else {
+					shippingBoxType.setUpdateUser(AuthUtil.getUserId());
+					shippingBoxType.setUpdateTime(new Date());
+					shippingBoxTypeMapper.updateById(shippingBoxType);
+				}
+				if (ObjectUtils.isNotNull(shippingBoxType.getBoxQuantity())) {
+					boxQuantity += shippingBoxType.getBoxQuantity();
+				}
+			}
+			//箱量
+			shippingBill.setShippingBoxTypeNumber(boxQuantity);
+			//TEU
+			StringBuilder boxTypeNumber = new StringBuilder();
+			List<String> boxType = shippingBill.getShippingBoxTypeList().stream().filter(e -> ObjectUtils.isNotNull(e.getBoxTypeName())).map(ShippingBoxType::getBoxTypeName).distinct().collect(Collectors.toList());
+			for (String boxType_ : boxType) {
+				if (ObjectUtils.isNotNull(boxType) && boxType.size() > 0) {
+					List<ShippingBoxType> boxTypeSize = shippingBill.getShippingBoxTypeList().stream().filter(e -> ObjectUtils.isNotNull(e.getBoxTypeName()) && e.getBoxTypeName().equals(boxType_)).collect(Collectors.toList());
+					if (ObjectUtils.isNotNull(boxTypeSize) && boxTypeSize.size() > 0) {
+						boxTypeNumber.append(boxType_).append("X").append(boxTypeSize.size()).append(",");
+					}
+				}
+			}
+			if (ObjectUtils.isNotNull(boxTypeNumber)) {
+				shippingBill.setShippingBoxTypeTEU(boxTypeNumber.substring(0, boxTypeNumber.length() - 1));
+			}
+		}
+		//配箱信息
+		if (ObjectUtils.isNotNull(shippingBill.getShippingMatchBoxList())) {
+			for (ShippingMatchBox shippingMatchBox : shippingBill.getShippingMatchBoxList()) {
+				shippingMatchBox.setBoxTypeName(shippingMatchBox.get$boxTypeId());
+				if (shippingMatchBox.getId() == null) {
+					shippingMatchBox.setCreateUser(AuthUtil.getUserId());
+					shippingMatchBox.setCreateTime(new Date());
+					shippingMatchBox.setTenantId(AuthUtil.getTenantId());
+					shippingMatchBox.setPid(shippingBill.getId());
+					shippingMatchBoxMapper.insert(shippingMatchBox);
+				} else {
+					shippingMatchBox.setUpdateUser(AuthUtil.getUserId());
+					shippingMatchBox.setUpdateTime(new Date());
+					shippingMatchBoxMapper.updateById(shippingMatchBox);
+				}
+			}
+		}
+		//费用信息
+		if (ObjectUtils.isNotNull(shippingBill.getShippingFeesList())) {
+			for (ShippingFees shippingFees : shippingBill.getShippingFeesList()) {
+				if (shippingFees.getId() == null) {
+					shippingFees.setCreateUser(AuthUtil.getUserId());
+					shippingFees.setCreateTime(new Date());
+					shippingFees.setTenantId(AuthUtil.getTenantId());
+					shippingFees.setPid(shippingBill.getId());
+					shippingFeesMapper.insert(shippingFees);
+				} else {
+					shippingFees.setUpdateUser(AuthUtil.getUserId());
+					shippingFees.setUpdateTime(new Date());
+					shippingFeesMapper.updateById(shippingFees);
+				}
+			}
+		}
+		//附件
+		if (ObjectUtils.isNotNull(shippingBill.getShippingFileList())) {
+			for (ShippingFile shippingFile : shippingBill.getShippingFileList()) {
+				if (shippingFile.getId() == null) {
+					shippingFile.setCreateUser(AuthUtil.getUserId());
+					shippingFile.setCreateTime(new Date());
+					shippingFile.setTenantId(AuthUtil.getTenantId());
+					shippingFile.setPid(shippingBill.getId());
+					shippingFileMapper.insert(shippingFile);
+				} else {
+					shippingFile.setUpdateUser(AuthUtil.getUserId());
+					shippingFile.setUpdateTime(new Date());
+					shippingFileMapper.updateById(shippingFile);
+				}
+			}
+		}
+		return shippingBill;
+	}
+
+	@Override
+	public ShippingBill checkShippingBill(ShippingBill shippingBill) {
+		ShippingBill selectShippingBill = baseMapper.selectById(shippingBill.getId());
+		//审批数据
+		AuditProecessDTO auditProecessDTO = new AuditProecessDTO();
+		//获取审批级次
+		List<AuditPathsLevels> auditPathsLevels;
+		// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
+		Integer checkFlag = shippingBill.getCheckFlag();
+		AuditPathsActs pathsActs;
+		if (checkFlag == null) {
+			throw new SecurityException("请核失败:未配置请核标识");
+		}
+
+		//海运出口审批流程
+		if ("HYCK".equals(shippingBill.getBillType()) && checkFlag == 1) {
+			if (shippingBill.getApprovalType().equals("1")) {
+				if (shippingBill.getCheckFlag() == 1 && selectShippingBill.getStatus() != 0) {
+					throw new SecurityException("订单已开启审核,请勿重复提交");
+				}
+				//是否开启流程
+				pathsActs = iCheckClient.getActsByActId(1101, "status");
+				//获取审批信息
+				auditPathsLevels = iCheckClient.listLevelsByActId(1101, "status");
+
+				auditProecessDTO.setProcessType("海运出口单据审批");
+				// 绑定审核类型
+				auditProecessDTO.setCheckType(shippingBill.getBillType() + "-DJ");
+			} else {
+				if (shippingBill.getCheckFlag() == 1 && selectShippingBill.getStatus() != 0) {
+					throw new SecurityException("订单已开启审核,请勿重复提交");
+				}
+				//是否开启流程
+				pathsActs = iCheckClient.getActsByActId(1102, "feeStatus");
+				//获取审批信息
+				auditPathsLevels = iCheckClient.listLevelsByActId(1102, "feeStatus");
 
+				auditProecessDTO.setProcessType("海运出口费用审批");
+				// 绑定审核类型
+				auditProecessDTO.setCheckType(shippingBill.getBillType() + "-FY");
 			}
-			shippingBill.getShippingBillDetails().setAccountingDeptName(shippingBill.getShippingBillDetails().get$accountingDeptId());//核算部门
-			shippingBill.getShippingBillDetails().setShipName(shippingBill.getShippingBillDetails().get$shipId());//船名
-			shippingBill.getShippingBillDetails().setBranchPayPlaceName(shippingBill.getShippingBillDetails().get$branchPayPlaceId());//分单付费地点
-			shippingBill.getShippingBillDetails().setGoodsName(shippingBill.getShippingBillDetails().get$goodsId());//货物
-			shippingBill.getShippingBillDetails().setOperatorName(shippingBill.getShippingBillDetails().get$operatorId());//操作员
-			shippingBill.getShippingBillDetails().setMainPayPlaceName(shippingBill.getShippingBillDetails().get$mainPayPlaceId());//主单付费地点
-			shippingBill.getShippingBillDetails().setVoyageNumber(shippingBill.getShippingBillDetails().get$voyageNumberId());//航次
-			if (shippingBill.getShippingBillDetails().getId() == null) {
-				shippingBill.getShippingBillDetails().setCreateUser(AuthUtil.getUserId());
-				shippingBill.getShippingBillDetails().setCreateTime(new Date());
-				shippingBill.getShippingBillDetails().setTenantId(AuthUtil.getTenantId());
-				shippingBill.getShippingBillDetails().setPid(shippingBill.getId());
-				shippingBillDetailsMapper.insert(shippingBill.getShippingBillDetails());
+
+			/* 进口返程审批流程  */
+		} else if ("HYJK".equals(shippingBill.getBillType()) && checkFlag == 2) {
+			if (shippingBill.getApprovalType().equals("1")) {
+				if (shippingBill.getCheckFlag() == 1 && selectShippingBill.getStatus() != 0) {
+					throw new SecurityException("订单已开启审核,请勿重复提交");
+				}
+				//是否开启流程
+				pathsActs = iCheckClient.getActsByActId(1103, "status");
+				//获取审批信息
+				auditPathsLevels = iCheckClient.listLevelsByActId(1103, "status");
+
+				auditProecessDTO.setProcessType("海运进口单据审批");
+				// 绑定审核类型
+				auditProecessDTO.setCheckType(shippingBill.getBillType() + "-DJ");
 			} else {
-				shippingBill.getShippingBillDetails().setUpdateUser(AuthUtil.getUserId());
-				shippingBill.getShippingBillDetails().setUpdateTime(new Date());
-				shippingBillDetailsMapper.updateById(shippingBill.getShippingBillDetails());
+				if (shippingBill.getCheckFlag() == 1 && selectShippingBill.getStatus() != 0) {
+					throw new SecurityException("订单已开启审核,请勿重复提交");
+				}
+				//是否开启流程
+				pathsActs = iCheckClient.getActsByActId(1104, "feeStatus");
+				//获取审批信息
+				auditPathsLevels = iCheckClient.listLevelsByActId(1104, "feeStatus");
+
+				auditProecessDTO.setProcessType("海运进口费用审批");
+				// 绑定审核类型
+				auditProecessDTO.setCheckType(shippingBill.getBillType() + "-FY");
+			}
+
+		} else {
+			throw new SecurityException("请核失败:请核标识设置不正确");
+		}
+
+		// 没开启审批流直接走 通过流程
+		if (pathsActs == null || pathsActs.getIsEnable() == 2) {
+			throw new SecurityException("当前租户未查询到审批流配置");
+		} else {
+
+			//修改单据状态
+			selectShippingBill.setStatus(1);
+			baseMapper.updateById(selectShippingBill);
+
+			if (CollectionUtils.isEmpty(auditPathsLevels)) {
+				throw new SecurityException("开启审批失败:未查询到审批信息");
+			}
+
+			// 追加跳转路由url
+			auditProecessDTO.setUrl(shippingBill.getUrl());
+			auditProecessDTO.setPageStatus(shippingBill.getPageStatus());
+			auditProecessDTO.setPageLabel(shippingBill.getPageLabel());
+
+			BigDecimal payAmount = new BigDecimal("0.00");
+			BigDecimal receivableAmount = new BigDecimal("0.00");
+			if (ObjectUtils.isNotNull(shippingBill.getShippingFeesList()) && shippingBill.getShippingFeesList().size() > 0) {
+				for (ShippingFees shippingFees : shippingBill.getShippingFeesList()) {
+					if (shippingFees.getIsCheck() == 0) {
+						if (shippingFees.getFeesType() == 1) {
+							receivableAmount = receivableAmount.add(shippingFees.getAmount());
+						} else if (shippingFees.getFeesType() == 2) {
+							payAmount = payAmount.add(shippingFees.getAmount());
+						}
+						shippingFees.setIsCheck(2);
+						shippingFees.setUpdateUser(AuthUtil.getUserId());
+						shippingFees.setUpdateUserName(AuthUtil.getUserName());
+						shippingFees.setUpdateTime(new Date());
+						shippingFeesMapper.updateById(shippingFees);
+					}
+				}
+			}
+			auditProecessDTO.setPayAmount(payAmount);
+			auditProecessDTO.setReceivableAmount(receivableAmount);
+			//审批数据
+			auditProecessDTO.setMorderNo(shippingBill.getShippingBillDetails().getContractNo());
+			auditProecessDTO.setOrderRemark(shippingBill.getRemarks());
+			auditProecessDTO.setCorpId(shippingBill.getCorpId());
+			auditProecessDTO.setCheckType(shippingBill.getBillType());
+			auditProecessDTO.setPathsLevelsList(auditPathsLevels);
+			auditProecessDTO.setActId(1);
+			auditProecessDTO.setSrcBillId(shippingBill.getId());
+			auditProecessDTO.setBillId(shippingBill.getId());
+			auditProecessDTO.setBillNo(shippingBill.getSysNo());
+			auditProecessDTO.setSendUserId(AuthUtil.getUserId());
+			auditProecessDTO.setSendName(AuthUtil.getUserName());
+			auditProecessDTO.setSendTime(new Date());
+			R financeProcess = iCheckClient.createFinanceProcess(auditProecessDTO);
+			if (!financeProcess.isSuccess()) {
+				throw new SecurityException("操作失败,请联系管理员");
 			}
 		}
 		return shippingBill;
 	}
 
+	@Override
+	public R passCheck(Long id) {
+		ShippingBill shippingBill = baseMapper.selectById(id);
+		if (shippingBill == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		shippingBill.setStatus(3);
+		baseMapper.updateById(shippingBill);
+		//入库生成账单
+//		this.paymentApply(shippingBill, shippingBill.getBillType(), shippingBill.getBillType());
+		return R.success("操作成功");
+	}
+
+	@Override
+	public R underReview(Long id) {
+		ShippingBill shippingBill = baseMapper.selectById(id);
+		if (shippingBill == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		shippingBill.setStatus(2);
+		baseMapper.updateById(shippingBill);
+		return R.success("操作成功");
+	}
+
+	@Override
+	public R passCancel(Long id) {
+		ShippingBill shippingBill = baseMapper.selectById(id);
+		if (shippingBill == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		shippingBill.setStatus(0);
+		baseMapper.updateById(shippingBill);
+		return R.success("操作成功");
+	}
+
 }

+ 72 - 3
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/ocean/service/impl/ShippingVesselServiceImpl.java

@@ -16,13 +16,23 @@
  */
 package org.springblade.box.tube.ocean.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 lombok.AllArgsConstructor;
 import org.springblade.box.tube.ocean.entity.ShippingVessel;
-import org.springblade.box.tube.ocean.vo.ShippingVesselVO;
+import org.springblade.box.tube.ocean.entity.ShippingVoyage;
 import org.springblade.box.tube.ocean.mapper.ShippingVesselMapper;
+import org.springblade.box.tube.ocean.mapper.ShippingVoyageMapper;
 import org.springblade.box.tube.ocean.service.IShippingVesselService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.box.tube.ocean.vo.ShippingVesselVO;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * 海运船名 服务实现类
@@ -31,11 +41,70 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2023-02-07
  */
 @Service
+@AllArgsConstructor
 public class ShippingVesselServiceImpl extends ServiceImpl<ShippingVesselMapper, ShippingVessel> implements IShippingVesselService {
 
+	private final ShippingVoyageMapper shippingVoyageMapper;
+
 	@Override
 	public IPage<ShippingVesselVO> selectShippingVesselPage(IPage<ShippingVesselVO> page, ShippingVesselVO shippingVessel) {
 		return page.setRecords(baseMapper.selectShippingVesselPage(page, shippingVessel));
 	}
 
+	@Override
+	public ShippingVessel getDetails(ShippingVessel shippingVessel) {
+		ShippingVessel details = baseMapper.selectOne(Condition.getQueryWrapper(shippingVessel));
+		if (ObjectUtils.isNotNull(details)) {
+			LambdaQueryWrapper<ShippingVoyage> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(ShippingVoyage::getIsDeleted, 0)
+				.eq(ShippingVoyage::getTenantId, AuthUtil.getTenantId())
+				.eq(ShippingVoyage::getPid, details.getId());
+			List<ShippingVoyage> shippingVoyageList = shippingVoyageMapper.selectList(lambdaQueryWrapper);
+			details.setShippingVoyageList(shippingVoyageList);
+		}
+		return details;
+	}
+
+	@Override
+	public ShippingVessel addOrUpdate(ShippingVessel shippingVessel) {
+		shippingVessel.setRegistryName(ObjectUtils.isNull(shippingVessel.getRegistryName()) ? shippingVessel.get$registry() :shippingVessel.getRegistryName());
+		shippingVessel.setManageName(ObjectUtils.isNull(shippingVessel.getManageName()) ? shippingVessel.get$manage() :shippingVessel.getManageName());
+		//船信息
+		if (shippingVessel.getId() == null) {
+			shippingVessel.setCreateUser(AuthUtil.getUserId());
+			shippingVessel.setCreateTime(new Date());
+			shippingVessel.setTenantId(AuthUtil.getTenantId());
+			shippingVessel.setCreateUserName(AuthUtil.getUserName());
+			baseMapper.insert(shippingVessel);
+		} else {
+			shippingVessel.setUpdateUser(AuthUtil.getUserId());
+			shippingVessel.setUpdateTime(new Date());
+			shippingVessel.setUpdateUserName(AuthUtil.getUserName());
+			baseMapper.updateById(shippingVessel);
+		}
+		//航次信息
+		if (ObjectUtils.isNotNull(shippingVessel.getShippingVoyageList())) {
+			for (ShippingVoyage shippingVoyage : shippingVessel.getShippingVoyageList()) {
+				shippingVoyage.setDistinationName(ObjectUtils.isNull(shippingVoyage.getDistinationName()) ? shippingVoyage.get$distinationId() :shippingVoyage.getDistinationName());
+				shippingVoyage.setManageName(ObjectUtils.isNull(shippingVoyage.getManageName()) ? shippingVoyage.get$manageId() :shippingVoyage.getManageName());
+				shippingVoyage.setPortofDischargeName(ObjectUtils.isNull(shippingVoyage.getPortofDischargeName()) ? shippingVoyage.get$portofDischargeId() :shippingVoyage.getPortofDischargeName());
+				shippingVoyage.setPortofLoadName(ObjectUtils.isNull(shippingVoyage.getPortofLoadName()) ? shippingVoyage.get$portofLoadId() :shippingVoyage.getPortofLoadName());
+				shippingVoyage.setPortofTransshipmentName(ObjectUtils.isNull(shippingVoyage.getPortofTransshipmentName()) ? shippingVoyage.get$portofTransshipmentId() :shippingVoyage.getPortofTransshipmentName());
+				if (shippingVoyage.getId() == null) {
+					shippingVoyage.setCreateUser(AuthUtil.getUserId());
+					shippingVoyage.setCreateTime(new Date());
+					shippingVoyage.setTenantId(AuthUtil.getTenantId());
+					shippingVoyage.setPid(shippingVessel.getId());
+					shippingVoyageMapper.insert(shippingVoyage);
+				} else {
+					shippingVoyage.setUpdateUser(AuthUtil.getUserId());
+					shippingVoyage.setUpdateTime(new Date());
+					shippingVoyageMapper.updateById(shippingVoyage);
+				}
+			}
+			shippingVessel.setShippingVoyageList(shippingVessel.getShippingVoyageList());
+		}
+		return shippingVessel;
+	}
+
 }

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

@@ -232,7 +232,7 @@ public class AuditProecessController extends BladeController {
 	@ApiOperation(value = "查看审核记录", notes = " ")
 	public R findAuditProcessList(@ApiParam(value = "申请表主键", required = true) @RequestParam Long id,
 								  @ApiParam(value = "批次号", required = true) @RequestParam Long batchNo,
-								  @ApiParam(value = "第几次提交", required = false) @RequestParam(value = "times",required = false) Integer times) {
+								  @ApiParam(value = "第几次提交", required = false) @RequestParam(value = "times", required = false) Integer times) {
 		//查询最大批次号
 		LambdaQueryWrapper<AuditProecess> countMaxWrapper = new LambdaQueryWrapper<>();
 		countMaxWrapper
@@ -324,11 +324,11 @@ public class AuditProecessController extends BladeController {
 			auditProecessService.bidingCheck(auditProecess);
 		}
 		//报关审批
-		else if ("BGJK".equals(proecess.getCheckType()) || "BGCK".equals(proecess.getCheckType())){
+		else if ("BGJK".equals(proecess.getCheckType()) || "BGCK".equals(proecess.getCheckType())) {
 			auditProecessService.declareCustomsCheck(auditProecess);
 		}
 		//协议管理
-		else if ("XYGL".equals(proecess.getCheckType())){
+		else if ("XYGL".equals(proecess.getCheckType())) {
 			auditProecessService.agreementCheck(auditProecess);
 		}
 		//销售政策审核
@@ -355,8 +355,10 @@ public class AuditProecessController extends BladeController {
 			auditProecessService.landOrderCheck(auditProecess);
 		} else if ("YPJ-XSTH".equals(proecess.getCheckType()) || "YPJ-CGTH".equals(proecess.getCheckType())) {
 			auditProecessService.returnGoods(auditProecess);
-		}else if ("YPJ-XSJH".equals(proecess.getCheckType())) {
+		} else if ("YPJ-XSJH".equals(proecess.getCheckType())) {
 			auditProecessService.salesPlan(auditProecess);
+		} else if ("HYCK-DJ".equals(proecess.getCheckType()) || "HYCK-FY".equals(proecess.getCheckType()) || "HYJK-DJ".equals(proecess.getCheckType()) || "HYJK-FY".equals(proecess.getCheckType())) {
+			auditProecessService.oceanShipping(auditProecess);
 		}else {
 			auditProecessService.commonCheck(auditProecess);
 		}
@@ -534,9 +536,9 @@ public class AuditProecessController extends BladeController {
 		Claim claimR = claimClient.getClaimDetail(claim);
 		if (ObjectUtils.isNotNull(claimR)) {
 			List<ClaimItem> list = claimR.getItemList();
-			if (ObjectUtil.isNotEmpty(list)){
+			if (ObjectUtil.isNotEmpty(list)) {
 				return R.data(list);
-			}else {
+			} else {
 				return R.success("暂无数据");
 			}
 		} else {

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

@@ -135,4 +135,6 @@ public interface IAuditProecessService extends IService<AuditProecess> {
     void returnGoods(AuditProecess auditProecess);
 
 	void salesPlan(AuditProecess auditProecess);
+
+    void oceanShipping(AuditProecess auditProecess);
 }

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

@@ -31,6 +31,7 @@ import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.box.tube.entity.*;
 import org.springblade.box.tube.feign.*;
+import org.springblade.box.tube.ocean.fegin.IOceanShippingBillClient;
 import org.springblade.check.dto.AuditProecessDTO;
 import org.springblade.check.entity.AuditPathsActs;
 import org.springblade.check.entity.AuditPathsLevels;
@@ -133,6 +134,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 
 	private final ITradingBoxClient tradingBoxClient;//买,卖箱(吉永)
 
+	private final IOceanShippingBillClient oceanShippingBillClient;//海运进出口
+
 	private final IDeclareCustomsClient declareCustomsClient;//报关
 
 	private final IAgreementClient agreementClient;//协议管理
@@ -4201,6 +4204,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		baseMapper.updateById(auditProecess);
 	}
 
+	@Override
+	public void oceanShipping(AuditProecess auditProecess) {
+
+	}
+
 	private void sendMsgToGroup(Message message, String group) {
 		List<String> userList = Arrays.asList(group.split(","));
 		userList.forEach(user -> {

+ 41 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java

@@ -843,4 +843,45 @@ public class CorpsDescController extends BladeController {
 		return R.data(corpsDescList);
 	}
 
+	/**
+	 * 客户信息(海运)
+	 */
+	@GetMapping("/oceanCorpsList")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "所有客户信息", notes = "获得客户信息")
+	public R<List<CorpsDesc>> oceanCorpsList(CorpsDescVO corpsDesc) {
+		if (ObjectUtils.isNotNull(corpsDesc.getCorpsTypeName())){
+			LambdaQueryWrapper<CorpsType> corpsTypeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			corpsTypeLambdaQueryWrapper.eq(CorpsType::getIsDeleted, 0);
+			corpsTypeLambdaQueryWrapper.eq(CorpsType::getTenantId, SecureUtil.getTenantId());
+			corpsTypeLambdaQueryWrapper.eq(CorpsType::getCname, corpsDesc.getCorpsTypeName());
+			CorpsType corpsType = corpsTypeService.getOne(corpsTypeLambdaQueryWrapper);
+
+			LambdaQueryWrapper<CorpsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(CorpsDesc::getIsDeleted, 0);
+			lambdaQueryWrapper.eq(CorpsDesc::getTenantId, SecureUtil.getTenantId());
+			lambdaQueryWrapper.eq(CorpsDesc::getCorpType, "KH");
+
+			if (ObjectUtils.isNotNull(corpsType)) {
+				//获取客户类别对应的id
+				LambdaQueryWrapper<CorpsTypeDesc> typeDescLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				typeDescLambdaQueryWrapper.eq(CorpsTypeDesc::getTenantId, SecureUtil.getTenantId());
+				typeDescLambdaQueryWrapper.eq(CorpsTypeDesc::getCorpTypeId, corpsType.getId());
+				List<CorpsTypeDesc> list = corpsTypeDescService.list(typeDescLambdaQueryWrapper);
+				if (CollectionUtils.isNotEmpty(list)) {
+					corpsDesc.setTypeList(list.stream().filter(e -> e.getCorpId() != null).map(CorpsTypeDesc::getCorpId).collect(Collectors.toList()));
+				}else{
+					return R.data(new ArrayList<>());
+				}
+				lambdaQueryWrapper.in(CollectionUtils.isNotEmpty(corpsDesc.getTypeList()), CorpsDesc::getId, corpsDesc.getTypeList());
+				List<CorpsDesc> corpsDescList = corpsDescService.list(lambdaQueryWrapper);
+				return R.data(corpsDescList);
+			} else {
+				return R.data(new ArrayList<>());
+			}
+		}else{
+			return R.data(new ArrayList<>());
+		}
+	}
+
 }

+ 6 - 0
blade-service/blade-purchase-sales/pom.xml

@@ -95,6 +95,12 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-payment</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 2 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -488,4 +488,6 @@ public interface IOrderService extends IService<Order> {
 	R offset(Order order);
 
 	R cancelOrder(Order order);
+
+	R payPrepay(Long orderId);
 }

+ 121 - 113
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -52,14 +52,15 @@ import org.springblade.finance.vojo.Items;
 import org.springblade.finance.vojo.Settlement;
 import org.springblade.land.entity.LandOrder;
 import org.springblade.land.feign.ILandClient;
+import org.springblade.payment.tonglianPayment.fegin.IPaymentClient;
+import org.springblade.payment.tonglianPayment.utils.AnalysisMapUtils;
+import org.springblade.payment.tonglianPayment.utils.SybPayService;
 import org.springblade.purchase.sales.entity.*;
 import org.springblade.purchase.sales.enums.OrderStatusEnum;
 import org.springblade.purchase.sales.excel.*;
 import org.springblade.purchase.sales.mapper.*;
 import org.springblade.purchase.sales.service.IOrderFilesService;
 import org.springblade.purchase.sales.service.IOrderService;
-import org.springblade.purchase.sales.tonglianPayment.utils.AnalysisMapUtils;
-import org.springblade.purchase.sales.tonglianPayment.utils.SybPayService;
 import org.springblade.purchase.sales.vo.*;
 import org.springblade.stock.entity.StockGoods;
 import org.springblade.stock.feign.IStockGoodsClient;
@@ -84,6 +85,7 @@ import java.math.RoundingMode;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static org.springblade.common.constant.TenantConstant.*;
 
@@ -2588,6 +2590,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			}
 			order.setStatus(2);
 			Order selectOrder = baseMapper.selectById(order.getId());
+			if (null == selectOrder) {
+				throw new RuntimeException("未找到订单信息,订单已取消");
+			}
+			if (selectOrder.getActualPaymentStatus() > 0) {
+				throw new RuntimeException("订单已支付,请不要重复操作");
+			}
 			if (ObjectUtils.isNotNull(selectOrder) && ObjectUtils.isNotNull(selectOrder.getDebitAmount())) {
 				List<Settlement> settlementList = new ArrayList<>();
 				Settlement settlement = new Settlement();
@@ -4271,117 +4279,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	@Override
-	public R payPrepay(Long orderId) {
-		//查询订单及物流信息
-		Order orderInfo = baseMapper.selectById(orderId);
-
-		if (null == orderInfo) {
-			throw new RuntimeException("未找到订单信息,订单已取消");
-		}
-
-		if (orderInfo.getActualPaymentStatus() > 0) {
-			throw new RuntimeException("订单已支付,请不要重复操作");
-		}
-
-		Parameters parameters = tongLianPaymentClient.getParametersOne();
-
-		if (ObjectUtils.isNull(parameters)) {
-			throw new RuntimeException("未找到支付信息");
-		}
-
-		R<User> r = userClient.userInfoById(AuthUtil.getUserId());
-		if (r.isSuccess() && ObjectUtils.isNull(r.getData())) {
-			throw new RuntimeException("未找到用户信息");
-		}
-
-
-		SybPayService service = new SybPayService();
-		//https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3
-		Map<Object, Object> resultObj = new TreeMap();
-		//"https://test.allinpaygd.com/JWeb/NotifyServlet"
-		try {
-			// body 订单标题
-			LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-			lambdaQueryWrapper.eq(OrderItems::getIsDeleted, 0).eq(OrderItems::getTenantId, AuthUtil.getTenantId()).eq(OrderItems::getPid, orderId);
-			//订单的商品nideshop_order_goods表
-			List<OrderItems> orderGoods = orderItemsMapper.selectList(lambdaQueryWrapper);
-			String body = "商品-";
-			if (null != orderGoods) {
-				for (OrderItems goodsVo : orderGoods) {
-					GoodsDesc goodsDesc = goodsDescClient.getGoodsDescDetail(goodsVo.getItemId());
-					if (ObjectUtils.isNotNull(goodsDesc)) {
-						body = body + goodsDesc.getCname() + "、";
-					}
-				}
-				if (body.length() > 0) {
-					body = body.substring(0, body.length() - 1);
-				}
-			}
-			Map<String, String> map = service.pay(orderInfo.getDebitAmount().multiply(new BigDecimal(100)).intValue(),
-				orderInfo.getSysNo(),
-				parameters.getPayType(),
-				body,
-				"",
-				r.getData().getOpenId(),
-				parameters.getValidtime(),
-				parameters.getNotifyUrl() + "/api/blade-purchase-sales/tongLianPayment/notify",
-				"",
-				"",
-				"",
-				"",
-				parameters.getSubAppid(),
-				"",
-				"",
-				"",
-				"",
-				"",
-				parameters.getCusIp(),
-				"");
-			print(map);
-
-			Map<String, String> mapType = null;
-			if (map != null) {
-				for (Object key : map.keySet()) {
-					if (key.equals("payinfo")) {
-						mapType = JSON.parseObject((String) map.get(key), Map.class);
-					}
-				}
-			}
-			// print(map);
-			if (map == null) {
-				throw new Exception("返回数据错误");
-			}
-			String return_code = AnalysisMapUtils.getString("retcode", map);
-			String return_msg = AnalysisMapUtils.getString("retmsg", map);
-			if (return_code.equalsIgnoreCase("FAIL")) {
-				throw new RuntimeException("支付失败," + return_msg);
-			} else if (return_code.equalsIgnoreCase("SUCCESS")) {
-				// 返回数据
-				String prepay_id = AnalysisMapUtils.getString("prepay_id", mapType);
-				// 先生成paySign 参考https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
-				resultObj.put("appId", AnalysisMapUtils.getString("appId", mapType));
-				resultObj.put("timeStamp", AnalysisMapUtils.getString("timeStamp", mapType));
-				resultObj.put("nonceStr", AnalysisMapUtils.getString("nonceStr", mapType));
-				resultObj.put("package", AnalysisMapUtils.getString("package", mapType));
-				resultObj.put("signType", AnalysisMapUtils.getString("signType", mapType));
-				String paySign = AnalysisMapUtils.getString("paySign", mapType);
-				resultObj.put("paySign", paySign);
-				// 业务处理
-				orderInfo.setPrepayId(prepay_id);
-				// 付款中
-				orderInfo.setActualPaymentStatus(1);
-				//更新订单表
-				baseMapper.updateById(orderInfo);
-				return R.data(resultObj);
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw new RuntimeException("下单失败,error=" + e.getMessage());
-		}
-		return R.data("下单失败");
-	}
-
-	@Override
 	public R personalInformation(String tenantId) {
 		Map<String, Object> map = new HashMap<>();
 		if (StringUtils.isBlank(tenantId)) {
@@ -4873,6 +4770,117 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		return R.data("操作成功");
 	}
 
+	@Override
+	public R payPrepay(Long orderId) {
+		//查询订单及物流信息
+		Order orderInfo = baseMapper.selectById(orderId);
+
+		if (null == orderInfo) {
+			throw new RuntimeException("未找到订单信息,订单已取消");
+		}
+
+		if (orderInfo.getActualPaymentStatus() > 0) {
+			throw new RuntimeException("订单已支付,请不要重复操作");
+		}
+
+		Parameters parameters = tongLianPaymentClient.getParametersOne();
+
+		if (ObjectUtils.isNull(parameters)) {
+			throw new RuntimeException("未找到支付信息");
+		}
+
+		R<User> r = userClient.userInfoById(AuthUtil.getUserId());
+		if (r.isSuccess() && ObjectUtils.isNull(r.getData())) {
+			throw new RuntimeException("未找到用户信息");
+		}
+
+
+		SybPayService service = new SybPayService();
+		//https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3
+		Map<Object, Object> resultObj = new TreeMap();
+		//"https://test.allinpaygd.com/JWeb/NotifyServlet"
+		try {
+			// body 订单标题
+			LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(OrderItems::getIsDeleted, 0).eq(OrderItems::getTenantId, AuthUtil.getTenantId()).eq(OrderItems::getPid, orderId);
+			//订单的商品nideshop_order_goods表
+			List<OrderItems> orderGoods = orderItemsMapper.selectList(lambdaQueryWrapper);
+			String body = "商品-";
+			if (null != orderGoods) {
+				for (OrderItems goodsVo : orderGoods) {
+					GoodsDesc goodsDesc = goodsDescClient.getGoodsDescDetail(goodsVo.getItemId());
+					if (ObjectUtils.isNotNull(goodsDesc)) {
+						body = body + goodsDesc.getCname() + "、";
+					}
+				}
+				if (body.length() > 0) {
+					body = body.substring(0, body.length() - 1);
+				}
+			}
+			Map<String, String> map = service.pay(orderInfo.getDebitAmount().multiply(new BigDecimal(100)).intValue(),
+				orderInfo.getSysNo(),
+				parameters.getPayType(),
+				body,
+				"",
+				r.getData().getOpenId(),
+				parameters.getValidtime(),
+				parameters.getNotifyUrl() + "/api/blade-purchase-sales/tongLianPayment/notify",
+				"",
+				"",
+				"",
+				"",
+				parameters.getSubAppid(),
+				"",
+				"",
+				"",
+				"",
+				"",
+				parameters.getCusIp(),
+				"");
+			print(map);
+
+			Map<String, String> mapType = null;
+			if (map != null) {
+				for (Object key : map.keySet()) {
+					if (key.equals("payinfo")) {
+						mapType = JSON.parseObject((String) map.get(key), Map.class);
+					}
+				}
+			}
+			// print(map);
+			if (map == null) {
+				throw new Exception("返回数据错误");
+			}
+			String return_code = AnalysisMapUtils.getString("retcode", map);
+			String return_msg = AnalysisMapUtils.getString("retmsg", map);
+			if (return_code.equalsIgnoreCase("FAIL")) {
+				throw new RuntimeException("支付失败," + return_msg);
+			} else if (return_code.equalsIgnoreCase("SUCCESS")) {
+				// 返回数据
+				String prepay_id = AnalysisMapUtils.getString("prepay_id", mapType);
+				// 先生成paySign 参考https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
+				resultObj.put("appId", AnalysisMapUtils.getString("appId", mapType));
+				resultObj.put("timeStamp", AnalysisMapUtils.getString("timeStamp", mapType));
+				resultObj.put("nonceStr", AnalysisMapUtils.getString("nonceStr", mapType));
+				resultObj.put("package", AnalysisMapUtils.getString("package", mapType));
+				resultObj.put("signType", AnalysisMapUtils.getString("signType", mapType));
+				String paySign = AnalysisMapUtils.getString("paySign", mapType);
+				resultObj.put("paySign", paySign);
+				// 业务处理
+				orderInfo.setPrepayId(prepay_id);
+				// 付款中
+				orderInfo.setActualPaymentStatus(1);
+				//更新订单表
+				baseMapper.updateById(orderInfo);
+				return R.data(resultObj);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw new RuntimeException("下单失败,error=" + e.getMessage());
+		}
+		return R.data("下单失败");
+	}
+
 	public static void print(Map<String, String> map) {
 		System.out.println("返回数据如下:");
 		if (map != null) {