Browse Source

2023年11月6日17:28:13

纪新园 2 years ago
parent
commit
c05e512722
24 changed files with 1093 additions and 534 deletions
  1. 15 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/corps/entity/BCorps.java
  2. 12 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/reports/entity/Reports.java
  3. 8 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/billno/entity/BusinessBillNo.java
  4. 33 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  5. 1 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/dto/FinAccBillsDTO.java
  6. 59 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java
  7. 470 436
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FinAccBills.java
  8. 2 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/vo/FinAccBillsVO.java
  9. 3 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsController.java
  10. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/mapper/CorpsMapper.xml
  11. 4 4
      blade-service/blade-los/src/main/java/org/springblade/los/billno/controller/BusinessBillNoController.java
  12. 14 0
      blade-service/blade-los/src/main/java/org/springblade/los/billno/service/IBusinessBillNoService.java
  13. 36 0
      blade-service/blade-los/src/main/java/org/springblade/los/billno/service/impl/BusinessBillNoServiceImpl.java
  14. 1 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/files/service/impl/FilesCenterServiceImpl.java
  15. 12 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  16. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml
  17. 7 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java
  18. 50 27
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  19. 35 40
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/ContainersServiceImpl.java
  20. 23 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterController.java
  21. 31 11
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java
  22. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/mapper/FinAccBillsMapper.java
  23. 22 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFinAccBillsService.java
  24. 245 4
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FinAccBillsServiceImpl.java

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

@@ -194,6 +194,21 @@ public class BCorps implements Serializable {
 	@ApiModelProperty(value = "客户来源类别")
 	private String sourceType;
 	/**
+	 * 来源 id
+	 */
+	@ApiModelProperty(value = "来源 id")
+	private Long srcId;
+	/**
+	 * 来源中文
+	 */
+	@ApiModelProperty(value = "来源中文")
+	private String srcCnName;
+	/**
+	 * 来源英文
+	 */
+	@ApiModelProperty(value = "来源英文")
+	private String srcEnName;
+	/**
 	 * 部门 Id
 	 */
 	@ApiModelProperty(value = "部门 Id")

+ 12 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/reports/entity/Reports.java

@@ -129,6 +129,11 @@ public class Reports implements Serializable {
 	@ApiModelProperty(value = "授权用户")
 	private String authorizedUsers;
 	/**
+	 * 授权用户id
+	 */
+	@ApiModelProperty(value = "授权用户")
+	private String authorizedUsersId;
+	/**
 	 * 版本
 	 */
 	@ApiModelProperty(value = "版本")
@@ -147,7 +152,7 @@ public class Reports implements Serializable {
 	/**
 	 * 是否已删除(0 否 1是)
 	 */
-	@TableLogic(value = "0",delval = "1")
+	@TableLogic(value = "0", delval = "1")
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
 	private Integer isDeleted;
 
@@ -157,5 +162,11 @@ public class Reports implements Serializable {
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 
+	/**
+	 * 文件地址
+	 */
+	@ApiModelProperty(value = "文件地址")
+	private String url;
+
 
 }

+ 8 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/billno/entity/BusinessBillNo.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.billno.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -24,6 +25,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 基础资料-业务类型编号格式实体类
@@ -161,5 +163,11 @@ public class BusinessBillNo implements Serializable {
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 
+	/**
+	 * 物流-单据编号最大序列号实体类
+	 */
+	@TableField(exist = false)
+	private List<BillNoSerial> billNoSerialList;
+
 
 }

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

@@ -404,6 +404,31 @@ public class Bills implements Serializable {
 	@ApiModelProperty(value = "卸货港英文名称打印 默认等于pol_en_name 可以编辑")
 	private String podNamePrint;
 	/**
+	 * 中转港 id
+	 */
+	@ApiModelProperty(value = "中转港 id")
+	private Long potId;
+	/**
+	 * 中转港代码
+	 */
+	@ApiModelProperty(value = "中转港代码")
+	private String potCode;
+	/**
+	 * 中转港中文名称
+	 */
+	@ApiModelProperty(value = "中转港中文名称")
+	private String potCnName;
+	/**
+	 * 中转港英文名称
+	 */
+	@ApiModelProperty(value = "中转港英文名称")
+	private String potEnName;
+	/**
+	 * 中转港英文名称打印 默认等于pol_en_name 可以编辑
+	 */
+	@ApiModelProperty(value = "中转港英文名称打印 默认等于pol_en_name 可以编辑")
+	private String potNamePrint;
+	/**
 	 * 收货地 id
 	 */
 	@ApiModelProperty(value = "收货地 id")
@@ -1360,6 +1385,12 @@ public class Bills implements Serializable {
 	@ApiModelProperty(value = "是否修改数据状态  0是  不等于0否")
 	private Integer billingStatus;
 
+	/**
+	 * 推送备注(FORWARDING)
+	 */
+	@ApiModelProperty(value = "推送备注(FORWARDING)")
+	private String forwarding;
+
 
 	/**
 	 * 预配箱型箱量
@@ -1402,10 +1433,10 @@ public class Bills implements Serializable {
 	private String billNoFormat;
 
 	/**
-	 * 业务类型表 id
+	 * 业务类型表 code
 	 */
 	@TableField(exist = false)
-	private Long businessTypeId;
+	private String businessTypeCode;
 
 
 }

+ 1 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/dto/FinAccBillsDTO.java

@@ -21,7 +21,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 /**
- * 业务-财务账单,各分公司独立数据传输对象实体类
+ * 业务-财务账单数据传输对象实体类
  *
  * @author BladeX
  * @since 2023-10-31

+ 59 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java

@@ -16,6 +16,9 @@
  */
 package org.springblade.los.finance.fee.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
@@ -28,6 +31,7 @@ import javax.validation.constraints.NotEmpty;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 物流-费用中心-所有业务费用集中在该表中实体类
@@ -253,6 +257,11 @@ public class FeeCenter implements Serializable {
 	@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date etd;
 	/**
+	 * 开船日期
+	 */
+	@TableField(exist = false)
+	private List<String> etdList;
+	/**
 	 * 到港日期
 	 */
 	@ApiModelProperty(value = "到港日期")
@@ -260,6 +269,12 @@ public class FeeCenter implements Serializable {
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
 	private Date eta;
 	/**
+	 * 到港日期
+	 */
+	@TableField(exist = false)
+	private List<String> etaList;
+	/**
+	 * /**
 	 * 箱号
 	 */
 	@ApiModelProperty(value = "箱号")
@@ -438,6 +453,7 @@ public class FeeCenter implements Serializable {
 	@ApiModelProperty(value = "账单日期")
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date accDate;
 	/**
 	 * 账单金额
@@ -614,6 +630,7 @@ public class FeeCenter implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	@TableLogic(value = "0", delval = "1")
 	private Integer isDeleted;
 	/**
 	 * 版本
@@ -668,7 +685,7 @@ public class FeeCenter implements Serializable {
 	private Date invoiceDate;
 
 	/**
-	 *发票状态 0 = 未开 9=已开 2 待开 3 不开
+	 * 发票状态 0 = 未开 9=已开 2 待开 3 不开
 	 */
 	@ApiModelProperty(value = "发票状态 0 = 未开 9=已开 2 待开 3 不开")
 	private Integer invoiceStatus;
@@ -775,5 +792,46 @@ public class FeeCenter implements Serializable {
 	@ApiModelProperty(value = "审核状态 0 新建费用 1 已请核 2 审核中 3 驳回 4 通过")
 	private String auditStatus;
 
+	/**
+	 * 核算id
+	 */
+	@ApiModelProperty(value = "核算id")
+	private Long elementsId;
+
+	/**
+	 * 核算编码
+	 */
+	@ApiModelProperty(value = "核算编码")
+	private String elementsCode;
+
+	/**
+	 * 核算中文名称
+	 */
+	@ApiModelProperty(value = "核算中文名称")
+	private String elementsCnName;
+	/**
+	 * 核算英文名称
+	 */
+	@ApiModelProperty(value = "核算英文名称")
+	private String elementsEnName;
+
+	/**
+	 * 外提单号
+	 */
+	@ApiModelProperty(value = "外提单号")
+	private String refno;
+
+	/**
+	 * 订舱号
+	 */
+	@ApiModelProperty(value = "订舱号")
+	private String bookingNo;
+
+	/**
+	 * 账单关键字 业务表的id+结算单位+收付  +核算要素作为关键字
+	 */
+	@TableField(exist = false)
+	private String billKey;
+
 
 }

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

@@ -16,460 +16,494 @@
  */
 package org.springblade.los.finance.fee.entity;
 
-import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.time.LocalDateTime;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
 
 /**
- * 业务-财务账单,各分公司独立实体类
+ * 业务-财务账单实体类
  *
  * @author BladeX
  * @since 2023-10-31
  */
 @Data
 @TableName("los_fin_acc_bills")
-@ApiModel(value = "FinAccBills对象", description = "业务-财务账单,各分公司独立")
+@ApiModel(value = "FinAccBills对象", description = "业务-财务账单")
 public class FinAccBills implements Serializable {
 
 	private static final long serialVersionUID = 1L;
 
 	/**
-	* 主键
-	*/
-		@ApiModelProperty(value = "主键")
-		private Long id;
-	/**
-	* 分公司 Id
-	*/
-		@ApiModelProperty(value = "分公司 Id")
-		private String branchId;
-	/**
-	* 创建人 Id
-	*/
-		@ApiModelProperty(value = "创建人 Id")
-		private Long createUser;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private String createUserName;
-	/**
-	* 创建部门 Id
-	*/
-		@ApiModelProperty(value = "创建部门 Id")
-		private String createDept;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private String createDeptName;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
-	/**
-	* 修改人 Id
-	*/
-		@ApiModelProperty(value = "修改人 Id")
-		private Long updateUser;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private String updateUserName;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
-	/**
-	* 账单编号
-	*/
-		@ApiModelProperty(value = "账单编号")
-		private String billNo;
-	/**
-	* 账单日期
-	*/
-		@ApiModelProperty(value = "账单日期")
-		private LocalDateTime billDate;
-	/**
-	* 账单类型,LOCAL 应收,LOCAL 应付,舱单 应收,舱单 应付
-	*/
-		@ApiModelProperty(value = "账单类型,LOCAL 应收,LOCAL 应付,舱单 应收,舱单 应付")
-		private String accountType;
-	/**
-	* 账单属性,D=应收,C= 应付
-	*/
-		@ApiModelProperty(value = "账单属性,D=应收,C= 应付")
-		private String accountDc;
-	/**
-	* 财务日期
-	*/
-		@ApiModelProperty(value = "财务日期")
-		private LocalDateTime accountDate;
-	/**
-	* 账单关键字 业务表的id+结算单位+收付  +核算要素作为关键字
-	*/
-		@ApiModelProperty(value = "账单关键字 业务表的id+结算单位+收付  +核算要素作为关键字")
-		private String billKey;
-	/**
-	* 业务类型
-	*/
-		@ApiModelProperty(value = "业务类型")
-		private String businessType;
-	/**
-	* 业务 id(主单,直单)
-	*/
-		@ApiModelProperty(value = "业务 id(主单,直单)")
-		private Long businessBillId;
-	/**
-	* 业务单据编号(主单,直单)
-	*/
-		@ApiModelProperty(value = "业务单据编号(主单,直单)")
-		private String businessBillNo;
-	/**
-	* 业务单据日期(主单,直单)
-	*/
-		@ApiModelProperty(value = "业务单据日期(主单,直单)")
-		private LocalDateTime businessDate;
-	/**
-	* 业务 id(分单)
-	*/
-		@ApiModelProperty(value = "业务 id(分单)")
-		private Long businessBillDivideId;
-	/**
-	* 业务单据编号(分单)
-	*/
-		@ApiModelProperty(value = "业务单据编号(分单)")
-		private String businessBillDivideNo;
-	/**
-	* 业务单据日期(分单)
-	*/
-		@ApiModelProperty(value = "业务单据日期(分单)")
-		private LocalDateTime businessDivideDate;
-	/**
-	* 合同号
-	*/
-		@ApiModelProperty(value = "合同号")
-		private String contractNo;
-	/**
-	* 付款方式 PP=预付, CC=到付, FPA, Other
-	*/
-		@ApiModelProperty(value = "付款方式 PP=预付, CC=到付, FPA, Other")
-		private String paymode;
-	/**
-	* 核算要素 id
-	*/
-		@ApiModelProperty(value = "核算要素 id")
-		@TableField("accelementID")
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
+	/**
+	 * 分公司 Id
+	 */
+	@ApiModelProperty(value = "分公司 Id")
+	private String branchId;
+	/**
+	 * 创建人 Id
+	 */
+	@ApiModelProperty(value = "创建人 Id")
+	private Long createUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private String createUserName;
+	/**
+	 * 创建部门 Id
+	 */
+	@ApiModelProperty(value = "创建部门 Id")
+	private String createDept;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private String createDeptName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人 Id
+	 */
+	@ApiModelProperty(value = "修改人 Id")
+	private Long updateUser;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 账单编号
+	 */
+	@ApiModelProperty(value = "账单编号")
+	private String billNo;
+	/**
+	 * 账单日期
+	 */
+	@ApiModelProperty(value = "账单日期")
+	private Date billDate;
+	/**
+	 * 账单类型,LOCAL 应收,LOCAL 应付,舱单 应收,舱单 应付
+	 */
+	@ApiModelProperty(value = "账单类型,LOCAL 应收,LOCAL 应付,舱单 应收,舱单 应付")
+	private String accountType;
+	/**
+	 * 账单属性,D=应收,C= 应付
+	 */
+	@ApiModelProperty(value = "账单属性,D=应收,C= 应付")
+	private String accountDc;
+	/**
+	 * 财务日期
+	 */
+	@ApiModelProperty(value = "财务日期")
+	private Date accountDate;
+	/**
+	 * 账单关键字 业务表的id+结算单位+收付  +核算要素作为关键字
+	 */
+	@ApiModelProperty(value = "账单关键字 业务表的id+结算单位+收付  +核算要素作为关键字")
+	private String billKey;
+	/**
+	 * 业务类型
+	 */
+	@ApiModelProperty(value = "业务类型")
+	private String businessType;
+	/**
+	 * 业务 id(主单,直单)
+	 */
+	@ApiModelProperty(value = "业务 id(主单,直单)")
+	private Long businessBillId;
+	/**
+	 * 业务单据编号(主单,直单)
+	 */
+	@ApiModelProperty(value = "业务单据编号(主单,直单)")
+	private String businessBillNo;
+	/**
+	 * 业务单据日期(主单,直单)
+	 */
+	@ApiModelProperty(value = "业务单据日期(主单,直单)")
+	private Date businessDate;
+	/**
+	 * 业务 id(分单)
+	 */
+	@ApiModelProperty(value = "业务 id(分单)")
+	private Long businessBillDivideId;
+	/**
+	 * 业务单据编号(分单)
+	 */
+	@ApiModelProperty(value = "业务单据编号(分单)")
+	private String businessBillDivideNo;
+	/**
+	 * 业务单据日期(分单)
+	 */
+	@ApiModelProperty(value = "业务单据日期(分单)")
+	private Date businessDivideDate;
+	/**
+	 * 合同号
+	 */
+	@ApiModelProperty(value = "合同号")
+	private String contractNo;
+	/**
+	 * 付款方式 PP=预付, CC=到付, FPA, Other
+	 */
+	@ApiModelProperty(value = "付款方式 PP=预付, CC=到付, FPA, Other")
+	private String paymode;
+	/**
+	 * 核算要素 id
+	 */
+	@ApiModelProperty(value = "核算要素 id")
+	@TableField("accelementID")
 	private Long accelementid;
 	/**
-	* 核算要素名称
-	*/
-		@ApiModelProperty(value = "核算要素名称")
-		private String accelementname;
-	/**
-	* 客户 id
-	*/
-		@ApiModelProperty(value = "客户 id")
-		private Long corpId;
-	/**
-	* 客户中文名称
-	*/
-		@ApiModelProperty(value = "客户中文名称")
-		private String corpCnName;
-	/**
-	* 客户英文名称
-	*/
-		@ApiModelProperty(value = "客户英文名称")
-		private String corpEnName;
-	/**
-	* 客户是否已签约
-	*/
-		@ApiModelProperty(value = "客户是否已签约")
-		private Integer corpIsSigned;
-	/**
-	* 客户约号
-	*/
-		@ApiModelProperty(value = "客户约号")
-		private String corpArgreementNo;
-	/**
-	* 主表客户 id
-	*/
-		@ApiModelProperty(value = "主表客户 id")
-		private Long billCorpId;
-	/**
-	* 主表客户中文名称
-	*/
-		@ApiModelProperty(value = "主表客户中文名称")
-		private String billCorpCnName;
-	/**
-	* 主表客户英文名称
-	*/
-		@ApiModelProperty(value = "主表客户英文名称")
-		private String billCorpEnName;
-	/**
-	* 业务所在部门 Id
-	*/
-		@ApiModelProperty(value = "业务所在部门 Id")
-		private Long deptId;
-	/**
-	* 业务所在部门
-	*/
-		@ApiModelProperty(value = "业务所在部门")
-		private String deptName;
-	/**
-	* 船名 id
-	*/
-		@ApiModelProperty(value = "船名 id")
-		private Long vesselId;
-	/**
-	* 中文船名
-	*/
-		@ApiModelProperty(value = "中文船名")
-		private String vesselCnName;
-	/**
-	* 英文船名
-	*/
-		@ApiModelProperty(value = "英文船名")
-		private String vesselEnName;
-	/**
-	* 航次
-	*/
-		@ApiModelProperty(value = "航次")
-		private String voyageNo;
-	/**
-	* MB/L NO
-	*/
-		@ApiModelProperty(value = "MB/L NO")
-		private String mblno;
-	/**
-	* HB/L NO
-	*/
-		@ApiModelProperty(value = "HB/L NO")
-		private String hblno;
-	/**
-	* Reference NO
-	*/
-		@ApiModelProperty(value = "Reference NO")
-		private String refno;
-	/**
-	* 开船日期
-	*/
-		@ApiModelProperty(value = "开船日期")
-		private LocalDateTime etd;
-	/**
-	* 到港日期
-	*/
-		@ApiModelProperty(value = "到港日期")
-		private LocalDateTime eta;
-	/**
-	* 装货港 id
-	*/
-		@ApiModelProperty(value = "装货港 id")
-		private Long polId;
-	/**
-	* 装货港代码
-	*/
-		@ApiModelProperty(value = "装货港代码")
-		private String polCode;
-	/**
-	* 装货港英文名称
-	*/
-		@ApiModelProperty(value = "装货港英文名称")
-		private String polCnName;
-	/**
-	* 装货港英文名称
-	*/
-		@ApiModelProperty(value = "装货港英文名称")
-		private String polEnName;
-	/**
-	* 装货港英文名称打印 默认等于pol_en_name 可以编辑
-	*/
-		@ApiModelProperty(value = "装货港英文名称打印 默认等于pol_en_name 可以编辑")
-		private String polNamePrint;
-	/**
-	* 卸货港 id
-	*/
-		@ApiModelProperty(value = "卸货港 id")
-		private Long podId;
-	/**
-	* 卸货港代码
-	*/
-		@ApiModelProperty(value = "卸货港代码")
-		private String podCode;
-	/**
-	* 卸货港中文名称
-	*/
-		@ApiModelProperty(value = "卸货港中文名称")
-		private String podCnName;
-	/**
-	* 卸货港英文名称
-	*/
-		@ApiModelProperty(value = "卸货港英文名称")
-		private String podEnName;
-	/**
-	* 卸货港英文名称打印 默认等于pol_en_name 可以编辑
-	*/
-		@ApiModelProperty(value = "卸货港英文名称打印 默认等于pol_en_name 可以编辑")
-		private String podNamePrint;
-	/**
-	* 本位币应收(CNY)
-	*/
-		@ApiModelProperty(value = "本位币应收(CNY)")
-		private BigDecimal amountDr;
-	/**
-	* 本位币应付(CNY)
-	*/
-		@ApiModelProperty(value = "本位币应付(CNY)")
-		private BigDecimal amountCr;
-	/**
-	* 综合 USD 应收(USD) - 非 USD 外币转换为 USD
-	*/
-		@ApiModelProperty(value = "综合 USD 应收(USD) - 非 USD 外币转换为 USD")
-		private BigDecimal amountDrUsd;
-	/**
-	* 综合 USD 应付(USD) - 非 USD 外币转换为 USD
-	*/
-		@ApiModelProperty(value = "综合 USD 应付(USD) - 非 USD 外币转换为 USD")
-		private BigDecimal amountCrUsd;
-	/**
-	* 合计本位币应收(CNY )
-	*/
-		@ApiModelProperty(value = "合计本位币应收(CNY )")
-		private BigDecimal amountDrLoc;
-	/**
-	* 合计本位币应付(CNY)
-	*/
-		@ApiModelProperty(value = "合计本位币应付(CNY)")
-		private BigDecimal amountCrLoc;
-	/**
-	* 结算 Id
-	*/
-		@ApiModelProperty(value = "结算 Id")
-		private Long stlBillId;
-	/**
-	* 结算单据编号
-	*/
-		@ApiModelProperty(value = "结算单据编号")
-		private String stlBillNo;
-	/**
-	* 结算日期
-	*/
-		@ApiModelProperty(value = "结算日期")
-		private LocalDateTime stlDate;
-	/**
-	* 已结算本位币应收(CNY)
-	*/
-		@ApiModelProperty(value = "已结算本位币应收(CNY)")
-		private BigDecimal stlAmountDr;
-	/**
-	* 已结算本位币应付(CNY)
-	*/
-		@ApiModelProperty(value = "已结算本位币应付(CNY)")
-		private BigDecimal stlAmountCr;
-	/**
-	* 已结算综合 USD 应收(USD) - 非 USD 外币转换为 USD
-	*/
-		@ApiModelProperty(value = "已结算综合 USD 应收(USD) - 非 USD 外币转换为 USD")
-		private BigDecimal stlAmountDrUsd;
-	/**
-	* 已结算综合 USD 应付(USD) - 非 USD 外币转换为 USD
-	*/
-		@ApiModelProperty(value = "已结算综合 USD 应付(USD) - 非 USD 外币转换为 USD")
-		private BigDecimal stlAmountCrUsd;
-	/**
-	* 已结算合计本位币应收(CNY )
-	*/
-		@ApiModelProperty(value = "已结算合计本位币应收(CNY )")
-		private BigDecimal stlAmountDrLoc;
-	/**
-	* 已结算合计本位币应付(CNY)
-	*/
-		@ApiModelProperty(value = "已结算合计本位币应付(CNY)")
-		private BigDecimal stlAmountCrLoc;
-	/**
-	* 发票 Id
-	*/
-		@ApiModelProperty(value = "发票 Id")
-		private String invoiceBillId;
-	/**
-	* 发票单据编号
-	*/
-		@ApiModelProperty(value = "发票单据编号")
-		private String invoiceBillNo;
-	/**
-	* 发票号
-	*/
-		@ApiModelProperty(value = "发票号")
-		private String invoiceNo;
-	/**
-	* 发票日期
-	*/
-		@ApiModelProperty(value = "发票日期")
-		private LocalDateTime invoiceDate;
-	/**
-	* 凭证 Id
-	*/
-		@ApiModelProperty(value = "凭证 Id")
-		private Long voucherBillId;
-	/**
-	* 凭证单据编号
-	*/
-		@ApiModelProperty(value = "凭证单据编号")
-		private String voucherBillNo;
-	/**
-	* 凭证号
-	*/
-		@ApiModelProperty(value = "凭证号")
-		private String voucherNo;
-	/**
-	* 凭证日期
-	*/
-		@ApiModelProperty(value = "凭证日期")
-		private LocalDateTime voucherDate;
-	/**
-	* 是否对账(0 未对账 1 已对账)
-	*/
-		@ApiModelProperty(value = "是否对账(0 未对账 1 已对账)")
-		private Integer isChecked;
-	/**
-	* 是否销账(0 未销账 3 部分销账 9 销账)
-	*/
-		@ApiModelProperty(value = "是否销账(0 未销账 3 部分销账 9 销账)")
-		private Integer isCleared;
-	/**
-	* 账单状态(0 未完成 1 已完成)
-	*/
-		@ApiModelProperty(value = "账单状态(0 未完成 1 已完成)")
-		private Integer billStatus;
-	/**
-	* 版本
-	*/
-		@ApiModelProperty(value = "版本")
-		private String version;
-	/**
-	* 状态(0 正常 1停用)
-	*/
-		@ApiModelProperty(value = "状态(0 正常 1停用)")
-		private Integer status;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
-	/**
-	* 备注
-	*/
-		@ApiModelProperty(value = "备注")
-		private String remarks;
+	 * 核算要素名称
+	 */
+	@ApiModelProperty(value = "核算要素名称")
+	private String accelementname;
+	/**
+	 * 客户 id
+	 */
+	@ApiModelProperty(value = "客户 id")
+	private Long corpId;
+	/**
+	 * 客户中文名称
+	 */
+	@ApiModelProperty(value = "客户中文名称")
+	private String corpCnName;
+	/**
+	 * 客户英文名称
+	 */
+	@ApiModelProperty(value = "客户英文名称")
+	private String corpEnName;
+	/**
+	 * 客户是否已签约
+	 */
+	@ApiModelProperty(value = "客户是否已签约")
+	private Integer corpIsSigned;
+	/**
+	 * 客户约号
+	 */
+	@ApiModelProperty(value = "客户约号")
+	private String corpArgreementNo;
+	/**
+	 * 主表客户 id
+	 */
+	@ApiModelProperty(value = "主表客户 id")
+	private Long billCorpId;
+	/**
+	 * 主表客户中文名称
+	 */
+	@ApiModelProperty(value = "主表客户中文名称")
+	private String billCorpCnName;
+	/**
+	 * 主表客户英文名称
+	 */
+	@ApiModelProperty(value = "主表客户英文名称")
+	private String billCorpEnName;
+	/**
+	 * 业务所在部门 Id
+	 */
+	@ApiModelProperty(value = "业务所在部门 Id")
+	private Long deptId;
+	/**
+	 * 业务所在部门
+	 */
+	@ApiModelProperty(value = "业务所在部门")
+	private String deptName;
+	/**
+	 * 船名 id
+	 */
+	@ApiModelProperty(value = "船名 id")
+	private Long vesselId;
+	/**
+	 * 中文船名
+	 */
+	@ApiModelProperty(value = "中文船名")
+	private String vesselCnName;
+	/**
+	 * 英文船名
+	 */
+	@ApiModelProperty(value = "英文船名")
+	private String vesselEnName;
+	/**
+	 * 航次
+	 */
+	@ApiModelProperty(value = "航次")
+	private String voyageNo;
+	/**
+	 * MB/L NO
+	 */
+	@ApiModelProperty(value = "MB/L NO")
+	private String mblno;
+	/**
+	 * HB/L NO
+	 */
+	@ApiModelProperty(value = "HB/L NO")
+	private String hblno;
+	/**
+	 * Reference NO
+	 */
+	@ApiModelProperty(value = "Reference NO")
+	private String refno;
+	/**
+	 * 开船日期
+	 */
+	@ApiModelProperty(value = "开船日期")
+	private Date etd;
+	/**
+	 * 到港日期
+	 */
+	@ApiModelProperty(value = "到港日期")
+	private Date eta;
+	/**
+	 * 装货港 id
+	 */
+	@ApiModelProperty(value = "装货港 id")
+	private Long polId;
+	/**
+	 * 装货港代码
+	 */
+	@ApiModelProperty(value = "装货港代码")
+	private String polCode;
+	/**
+	 * 装货港英文名称
+	 */
+	@ApiModelProperty(value = "装货港英文名称")
+	private String polCnName;
+	/**
+	 * 装货港英文名称
+	 */
+	@ApiModelProperty(value = "装货港英文名称")
+	private String polEnName;
+	/**
+	 * 装货港英文名称打印 默认等于pol_en_name 可以编辑
+	 */
+	@ApiModelProperty(value = "装货港英文名称打印 默认等于pol_en_name 可以编辑")
+	private String polNamePrint;
+	/**
+	 * 卸货港 id
+	 */
+	@ApiModelProperty(value = "卸货港 id")
+	private Long podId;
+	/**
+	 * 卸货港代码
+	 */
+	@ApiModelProperty(value = "卸货港代码")
+	private String podCode;
+	/**
+	 * 卸货港中文名称
+	 */
+	@ApiModelProperty(value = "卸货港中文名称")
+	private String podCnName;
+	/**
+	 * 卸货港英文名称
+	 */
+	@ApiModelProperty(value = "卸货港英文名称")
+	private String podEnName;
+	/**
+	 * 卸货港英文名称打印 默认等于pol_en_name 可以编辑
+	 */
+	@ApiModelProperty(value = "卸货港英文名称打印 默认等于pol_en_name 可以编辑")
+	private String podNamePrint;
+	/**
+	 * 本位币应收(CNY)
+	 */
+	@ApiModelProperty(value = "本位币应收(CNY)")
+	private BigDecimal amountDr;
+	/**
+	 * 本位币应付(CNY)
+	 */
+	@ApiModelProperty(value = "本位币应付(CNY)")
+	private BigDecimal amountCr;
+	/**
+	 * 综合 USD 应收(USD) - 非 USD 外币转换为 USD
+	 */
+	@ApiModelProperty(value = "综合 USD 应收(USD) - 非 USD 外币转换为 USD")
+	private BigDecimal amountDrUsd;
+	/**
+	 * 综合 USD 应付(USD) - 非 USD 外币转换为 USD
+	 */
+	@ApiModelProperty(value = "综合 USD 应付(USD) - 非 USD 外币转换为 USD")
+	private BigDecimal amountCrUsd;
+	/**
+	 * 合计本位币应收(CNY )
+	 */
+	@ApiModelProperty(value = "合计本位币应收(CNY )")
+	private BigDecimal amountDrLoc;
+	/**
+	 * 合计本位币应付(CNY)
+	 */
+	@ApiModelProperty(value = "合计本位币应付(CNY)")
+	private BigDecimal amountCrLoc;
+	/**
+	 * 结算 Id
+	 */
+	@ApiModelProperty(value = "结算 Id")
+	private Long stlBillId;
+	/**
+	 * 结算单据编号
+	 */
+	@ApiModelProperty(value = "结算单据编号")
+	private String stlBillNo;
+	/**
+	 * 结算日期
+	 */
+	@ApiModelProperty(value = "结算日期")
+	private Date stlDate;
+	/**
+	 * 已结算本位币应收(CNY)
+	 */
+	@ApiModelProperty(value = "已结算本位币应收(CNY)")
+	private BigDecimal stlAmountDr;
+	/**
+	 * 已结算本位币应付(CNY)
+	 */
+	@ApiModelProperty(value = "已结算本位币应付(CNY)")
+	private BigDecimal stlAmountCr;
+	/**
+	 * 已结算综合 USD 应收(USD) - 非 USD 外币转换为 USD
+	 */
+	@ApiModelProperty(value = "已结算综合 USD 应收(USD) - 非 USD 外币转换为 USD")
+	private BigDecimal stlAmountDrUsd;
+	/**
+	 * 已结算综合 USD 应付(USD) - 非 USD 外币转换为 USD
+	 */
+	@ApiModelProperty(value = "已结算综合 USD 应付(USD) - 非 USD 外币转换为 USD")
+	private BigDecimal stlAmountCrUsd;
+	/**
+	 * 已结算合计本位币应收(CNY )
+	 */
+	@ApiModelProperty(value = "已结算合计本位币应收(CNY )")
+	private BigDecimal stlAmountDrLoc;
+	/**
+	 * 已结算合计本位币应付(CNY)
+	 */
+	@ApiModelProperty(value = "已结算合计本位币应付(CNY)")
+	private BigDecimal stlAmountCrLoc;
+	/**
+	 * 发票 Id
+	 */
+	@ApiModelProperty(value = "发票 Id")
+	private String invoiceBillId;
+	/**
+	 * 发票单据编号
+	 */
+	@ApiModelProperty(value = "发票单据编号")
+	private String invoiceBillNo;
+	/**
+	 * 发票号
+	 */
+	@ApiModelProperty(value = "发票号")
+	private String invoiceNo;
+	/**
+	 * 发票日期
+	 */
+	@ApiModelProperty(value = "发票日期")
+	private Date invoiceDate;
+	/**
+	 * 凭证 Id
+	 */
+	@ApiModelProperty(value = "凭证 Id")
+	private Long voucherBillId;
+	/**
+	 * 凭证单据编号
+	 */
+	@ApiModelProperty(value = "凭证单据编号")
+	private String voucherBillNo;
+	/**
+	 * 凭证号
+	 */
+	@ApiModelProperty(value = "凭证号")
+	private String voucherNo;
+	/**
+	 * 凭证日期
+	 */
+	@ApiModelProperty(value = "凭证日期")
+	private Date voucherDate;
+	/**
+	 * 是否对账(0 未对账 1 已对账)
+	 */
+	@ApiModelProperty(value = "是否对账(0 未对账 1 已对账)")
+	private Integer isChecked;
+	/**
+	 * 是否销账(0 未销账 3 部分销账 9 销账)
+	 */
+	@ApiModelProperty(value = "是否销账(0 未销账 3 部分销账 9 销账)")
+	private Integer isCleared;
+	/**
+	 * 账单状态(0 未完成 1 已完成)
+	 */
+	@ApiModelProperty(value = "账单状态(0 未完成 1 已完成)")
+	private Integer billStatus;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	@TableLogic(value = "0", delval = "1")
+	private Integer isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+
+	/**
+	 * 订舱号
+	 */
+	@ApiModelProperty(value = "订舱号")
+	private String bookingNo;
+
+	/**
+	 * 费用中心
+	 */
+	@TableField(exist = false)
+	private List<FeeCenter> feeCenterList;
+
+	/**
+	 * 编码生成code
+	 */
+	@TableField(exist = false)
+	private String billNoFormat;
+
+	/**
+	 * 业务类型表 id
+	 */
+	@TableField(exist = false)
+	private Long businessTypeId;
 
 
 }

+ 2 - 2
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/vo/FinAccBillsVO.java

@@ -22,14 +22,14 @@ import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
 
 /**
- * 业务-财务账单,各分公司独立视图实体类
+ * 业务-财务账单视图实体类
  *
  * @author BladeX
  * @since 2023-10-31
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@ApiModel(value = "FinAccBillsVO对象", description = "业务-财务账单,各分公司独立")
+@ApiModel(value = "FinAccBillsVO对象", description = "业务-财务账单")
 public class FinAccBillsVO extends FinAccBills {
 	private static final long serialVersionUID = 1L;
 

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

@@ -41,6 +41,7 @@ import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.basic.corps.service.IBCorpsTypesService;
 import org.springblade.los.basic.corps.vo.BCorpsVO;
 import org.springblade.los.basic.utils.ExtendedData;
+import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.excel.BCorpsExcel;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -100,7 +101,8 @@ public class BCorpsController extends BladeController {
 			.eq(BCorps::getIsDeleted, 0)
 			.like(ObjectUtils.isNotNull(bCorps.getCode()), BCorps::getCode, bCorps.getCode())
 			.eq(ObjectUtils.isNotNull(bCorps.getStatus()), BCorps::getStatus, bCorps.getStatus())
-			.like(ObjectUtils.isNotNull(bCorps.getCnName()), BCorps::getCnName, bCorps.getCnName())
+			.and(ObjectUtils.isNotNull(bCorps.getCnName()), i -> i.like(BCorps::getCnName, bCorps.getCnName()).or()
+				.like(BCorps::getEnName, bCorps.getCnName()).or().like(BCorps::getCode, bCorps.getCnName()))
 			.like(ObjectUtils.isNotNull(bCorps.getEnName()), BCorps::getEnName, bCorps.getEnName())
 			.like(ObjectUtils.isNotNull(bCorps.getUscc()), BCorps::getUscc, bCorps.getUscc())
 			.like(ObjectUtils.isNotNull(bCorps.getCnAddr()), BCorps::getCnAddr, bCorps.getCnAddr())

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/mapper/CorpsMapper.xml

@@ -33,6 +33,9 @@
         <result column="attn_name" property="attnName"/>
         <result column="attn_tel" property="attnTel"/>
         <result column="source_type" property="sourceType"/>
+        <result column="src_id" property="srcId"/>
+        <result column="src_cn_name" property="srcCnName"/>
+        <result column="src_en_name" property="srcEnName"/>
         <result column="dept_id" property="deptId"/>
         <result column="dept_name" property="deptName"/>
         <result column="sales_id" property="salesId"/>

+ 4 - 4
blade-service/blade-los/src/main/java/org/springblade/los/billno/controller/BusinessBillNoController.java

@@ -55,7 +55,7 @@ public class BusinessBillNoController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入businessBillNo")
 	public R<BusinessBillNo> detail(BusinessBillNo businessBillNo) {
-		BusinessBillNo detail = businessBillNoService.getOne(Condition.getQueryWrapper(businessBillNo));
+		BusinessBillNo detail = businessBillNoService.detail(businessBillNo);
 		return R.data(detail);
 	}
 
@@ -108,10 +108,10 @@ public class BusinessBillNoController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入businessBillNo")
 	public R submit(@Valid @RequestBody BusinessBillNo businessBillNo) {
-		return R.status(businessBillNoService.saveOrUpdate(businessBillNo));
+		return businessBillNoService.submit(businessBillNo);
 	}
 
-	
+
 	/**
 	 * 删除 基础资料-业务类型编号格式
 	 */
@@ -122,5 +122,5 @@ public class BusinessBillNoController extends BladeController {
 		return R.status(businessBillNoService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }

+ 14 - 0
blade-service/blade-los/src/main/java/org/springblade/los/billno/service/IBusinessBillNoService.java

@@ -50,4 +50,18 @@ public interface IBusinessBillNoService extends IService<BusinessBillNo> {
 	R<String> getBillNoLos(BusinessBillNo businessBillNo);
 
 	void deteleBillNo(Bills item);
+
+	/**
+	 * 新增或修改 基础资料-业务类型编号格式
+	 * @param businessBillNo
+	 * @return
+	 */
+    R submit(BusinessBillNo businessBillNo);
+
+	/**
+	 * 详情
+	 * @param businessBillNo
+	 * @return
+	 */
+	BusinessBillNo detail(BusinessBillNo businessBillNo);
 }

+ 36 - 0
blade-service/blade-los/src/main/java/org/springblade/los/billno/service/impl/BusinessBillNoServiceImpl.java

@@ -35,6 +35,7 @@ import org.springblade.los.billno.service.IBusinessBillNoService;
 import org.springblade.los.billno.vo.BillNoSerialVO;
 import org.springblade.los.billno.vo.BusinessBillNoVO;
 import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -55,6 +56,8 @@ public class BusinessBillNoServiceImpl extends ServiceImpl<BusinessBillNoMapper,
 
 	private final IBillNoCenterService billNoCenterService;
 
+	private final ISysClient sysClient;
+
 	@Override
 	public IPage<BusinessBillNoVO> selectBusinessBillNoPage(IPage<BusinessBillNoVO> page, BusinessBillNoVO businessBillNo) {
 		return page.setRecords(baseMapper.selectBusinessBillNoPage(page, businessBillNo));
@@ -264,4 +267,37 @@ public class BusinessBillNoServiceImpl extends ServiceImpl<BusinessBillNoMapper,
 		}
 	}
 
+	@Override
+	public R submit(BusinessBillNo businessBillNo) {
+		if (businessBillNo.getId() == null) {
+			businessBillNo.setCreateTime(new Date());
+			businessBillNo.setCreateUser(AuthUtil.getUserId());
+			businessBillNo.setCreateUserName(AuthUtil.getUserName());
+			//获取部门ids对应中文名
+			if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+				businessBillNo.setCreateDept(AuthUtil.getDeptId());
+				R<List<String>> res = sysClient.getDeptNames(AuthUtil.getDeptId());
+				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+					businessBillNo.setCreateDeptName(String.join(",", res.getData()));
+				}
+			}
+		} else {
+			businessBillNo.setUpdateUser(AuthUtil.getUserId());
+			businessBillNo.setUpdateTime(new Date());
+			businessBillNo.setUpdateUserName(AuthUtil.getUserName());
+		}
+		this.saveOrUpdate(businessBillNo);
+		return R.data(businessBillNo);
+	}
+
+	@Override
+	public BusinessBillNo detail(BusinessBillNo businessBillNo) {
+		BusinessBillNo detail = baseMapper.selectById(businessBillNo.getId());
+		detail.setBillNoSerialList(billNoSerialService.list(new LambdaQueryWrapper<BillNoSerial>()
+			.eq(BillNoSerial::getTenantId, AuthUtil.getTenantId())
+			.eq(BillNoSerial::getIsDeleted, 0)
+			.like(BillNoSerial::getPid, detail.getId())));
+		return detail;
+	}
+
 }

+ 1 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/files/service/impl/FilesCenterServiceImpl.java

@@ -62,6 +62,7 @@ public class FilesCenterServiceImpl extends ServiceImpl<FilesCenterMapper, Files
 		}
 		if (filesCenter.getId() == null) {
 			filesCenter.setCreateTime(new Date());
+			filesCenter.setReceivedData(new Date());
 			filesCenter.setCreateUser(AuthUtil.getUserId());
 			filesCenter.setCreateUserName(AuthUtil.getUserName());
 			if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {

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

@@ -230,7 +230,7 @@ public class BillsController extends BladeController {
 	 */
 	@PostMapping("/increaseReinsurancePolicy")
 	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "分单添加到主单", notes = "传入bills")
+	@ApiOperation(value = "分单添加到主单", notes = "传入ids")
 	public R increaseReinsurancePolicy(@RequestParam String ids, @RequestParam String id) {
 		return billsService.increaseReinsurancePolicy(ids, id);
 	}
@@ -240,11 +240,21 @@ public class BillsController extends BladeController {
 	 */
 	@PostMapping("/revokeReinsurancePolicy")
 	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "撤销分单添加到主单", notes = "传入bills")
+	@ApiOperation(value = "撤销分单添加到主单", notes = "传入ids")
 	public R revokeReinsurancePolicy(@RequestParam String ids, @RequestParam String id) {
 		return billsService.revokeReinsurancePolicy(ids, id);
 	}
 
+	/**
+	 * 退舱
+	 */
+	@PostMapping("/disembarking")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "退舱", notes = "传入ids")
+	public R disembarking(@RequestParam String ids) {
+		return billsService.disembarking(ids);
+	}
+
 
 	/**
 	 * 删除 业务-海运进出口

+ 6 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml

@@ -69,6 +69,11 @@
         <result column="pod_cn_name" property="podCnName"/>
         <result column="pod_en_name" property="podEnName"/>
         <result column="pod_name_print" property="podNamePrint"/>
+        <result column="pot_id" property="potId"/>
+        <result column="pot_code" property="potCode"/>
+        <result column="pot_cn_name" property="potCnName"/>
+        <result column="pot_en_name" property="potEnName"/>
+        <result column="pot_name_print" property="potNamePrint"/>
         <result column="place_receipt_id" property="placeReceiptId"/>
         <result column="place_receipt_code" property="placeReceiptCode"/>
         <result column="place_receipt_name" property="placeReceiptName"/>
@@ -251,6 +256,7 @@
         <result column="booking_agent_cn_name" property="bookingAgentCnName"/>
         <result column="booking_agent_en_name" property="bookingAgentEnName"/>
         <result column="char_data" property="charData"/>
+        <result column="forwarding" property="forwarding"/>
     </resultMap>
 
 

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

@@ -89,4 +89,11 @@ public interface IBillsService extends IService<Bills> {
 	 * @return
 	 */
     R getBillNo(Bills bills);
+
+	/**
+	 * 退舱
+	 * @param ids
+	 * @return
+	 */
+	R disembarking(String ids);
 }

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

@@ -26,6 +26,8 @@ import org.springblade.core.secure.utils.AuthUtil;
 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.basic.business.entity.BusinessType;
+import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.basic.cur.service.IBCurrencyService;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
@@ -78,6 +80,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final IBCurrencyService bCurrencyService;
 
+	private final IBusinessTypeService bBusinessTypeService;
+
 
 	@Override
 	public IPage<BillsVO> selectBillsPage(IPage<BillsVO> page, BillsVO bills) {
@@ -98,6 +102,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				deptName = String.join(",", res.getData());
 			}
 		}
+		if (ObjectUtils.isNotNull(bills.getMblno())) {
+			bills.setMblno(bills.getMblno().replaceAll(" ", ""));
+		}
 		List<Bills> count = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
 			.eq(Bills::getCreateDept, AuthUtil.getDeptId())
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
@@ -107,8 +114,16 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			if (count.size() > 0) {
 				throw new RuntimeException("提单号不允许重复");
 			}
+			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+				.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(bills.getBusinessTypeId());
+			businessBillNo.setBusinessTypeId(businessType.getId());
 			businessBillNo.setCode(bills.getBillNoFormat());
 			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
 			if (!clientBillNo.isSuccess()) {
@@ -305,15 +320,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		}
 		detail.setContainersList(containersList);
 		List<WaitingBox> waitingBoxList = new ArrayList<>();
-		if ("DD".equals(detail.getBillType())) {
-			WaitingBox waitingBox = new WaitingBox();
-			BeanUtil.copyProperties(detail, waitingBox);
-			waitingBox.setQuantity(detail.getCfsQuantity());
-			waitingBox.setGrossWeight(detail.getCfsGrossWeight());
-			waitingBox.setNetWeight(detail.getNetWeight());
-			waitingBox.setMeasurement(detail.getCfsMeasurement());
-			waitingBoxList.add(waitingBox);
-		} else if ("MM".equals(detail.getBillType())) {
+//		if ("DD".equals(detail.getBillType())) {
+		WaitingBox waitingBox = new WaitingBox();
+		BeanUtil.copyProperties(detail, waitingBox);
+		waitingBox.setQuantity(detail.getQuantity().subtract(detail.getCfsQuantity()));
+		waitingBox.setGrossWeight(detail.getGrossWeight().subtract(detail.getCfsGrossWeight()));
+		waitingBox.setMeasurement(detail.getMeasurement().subtract(detail.getCfsMeasurement()));
+		waitingBoxList.add(waitingBox);
+		/*} else if ("MM".equals(detail.getBillType())) {
 			List<Bills> billsList = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
 				.eq(Bills::getTenantId, AuthUtil.getTenantId())
 				.eq(Bills::getIsDeleted, 0)
@@ -328,7 +342,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				waitingBox.setMeasurement(detail.getCfsMeasurement());
 				waitingBoxList.add(waitingBox);
 			}
-		}
+		}*/
 		detail.setWaitingBoxList(waitingBoxList);
 		detail.setFeeCenterListC(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getIsDeleted, 0)
@@ -423,11 +437,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setUpdateUserName(AuthUtil.getUserName());
 			}
 			this.updateBatchById(billsList);
-
-			bills.setQuantity(billsList.stream().map(Bills::getQuantity).filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-			bills.setGrossWeight(billsList.stream().map(Bills::getGrossWeight).filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-			bills.setNetWeight(billsList.stream().map(Bills::getNetWeight).filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-			bills.setMeasurement(billsList.stream().map(Bills::getMeasurement).filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 			baseMapper.updateById(bills);
 		}
 		return R.data("操作成功");
@@ -455,18 +464,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setUpdateUserName(AuthUtil.getUserName());
 			}
 			this.updateBatchById(billsList);
-			if ((ObjectUtils.isNull(bills.getQuantity()) || new BigDecimal("0.00").compareTo(bills.getQuantity()) == 0)
-				|| (ObjectUtils.isNull(bills.getGrossWeight()) || new BigDecimal("0.00").compareTo(bills.getGrossWeight()) == 0)
-				|| (ObjectUtils.isNull(bills.getNetWeight()) || new BigDecimal("0.00").compareTo(bills.getNetWeight()) == 0)
-				|| (ObjectUtils.isNull(bills.getMeasurement()) || new BigDecimal("0.00").compareTo(bills.getMeasurement()) == 0)) {
-				throw new RuntimeException("件重尺为空或为零撤销失败");
-			}
 			bills.setMasterBillNo("");
 			bills.setMasterId(0L);
-			bills.setQuantity(bills.getQuantity().subtract(billsList.stream().map(Bills::getQuantity).filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
-			bills.setGrossWeight(bills.getGrossWeight().subtract(billsList.stream().map(Bills::getGrossWeight).filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
-			bills.setNetWeight(bills.getNetWeight().subtract(billsList.stream().map(Bills::getNetWeight).filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
-			bills.setMeasurement(bills.getMeasurement().subtract(billsList.stream().map(Bills::getMeasurement).filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
 			baseMapper.updateById(bills);
 		}
 		return R.data("操作成功");
@@ -490,8 +489,16 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R getBillNo(Bills bills) {
+		BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+			.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(bills.getBusinessTypeId());
+		businessBillNo.setBusinessTypeId(businessType.getId());
 		businessBillNo.setCode(bills.getBillNoFormat());
 		R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
 		if (!clientBillNo.isSuccess()) {
@@ -501,4 +508,20 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		return R.data(clientBillNo.getData());
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R disembarking(String ids) {
+		List<Bills> billsList = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.in(Bills::getId, ids));
+		for (Bills item : billsList) {
+			item.setBillingStatus(3);
+			item.setBookingWithdrawTime(new Date());
+		}
+		this.updateBatchById(billsList);
+		return R.data("操作成功");
+	}
+
 }

+ 35 - 40
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/ContainersServiceImpl.java

@@ -43,10 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -239,6 +236,8 @@ public class ContainersServiceImpl extends ServiceImpl<ContainersMapper, Contain
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R equalDistribution(Containers containers) {
 		List<Containers> containersList = baseMapper.selectList(new LambdaQueryWrapper<Containers>()
 			.eq(Containers::getIsDeleted, 0)
@@ -252,14 +251,35 @@ public class ContainersServiceImpl extends ServiceImpl<ContainersMapper, Contain
 		if (containersList.size() == 0) {
 			throw new RuntimeException("待分配箱量为零,操作失败");
 		}
-		BigDecimal teu = containersList.stream().map(Containers::getTeu).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal teu = new BigDecimal(containersList.size());
 		if (new BigDecimal("0").compareTo(teu) == 0) {
-			throw new RuntimeException("待分配箱teu不能为零");
+			throw new RuntimeException("待分配箱数量不能为零");
 		}
-		BigDecimal average = containers.getWaitingBox().getQuantity().divide(teu, MathContext.DECIMAL32).setScale(3, RoundingMode.DOWN);
+		BigDecimal average = containers.getWaitingBox().getQuantity().divide(teu, MathContext.DECIMAL32).setScale(0, RoundingMode.DOWN);
+		BigDecimal averages = containers.getWaitingBox().getQuantity().divide(teu, MathContext.DECIMAL32).setScale(1, RoundingMode.DOWN);
+		BigDecimal sub = averages.subtract(average);
 		BigDecimal averageGrossWeight = containers.getWaitingBox().getGrossWeight().divide(teu, MathContext.DECIMAL32).setScale(3, RoundingMode.DOWN);
 		BigDecimal averageNetWeight = containers.getWaitingBox().getNetWeight().divide(teu, MathContext.DECIMAL32).setScale(3, RoundingMode.DOWN);
 		BigDecimal averageMeasurement = containers.getWaitingBox().getMeasurement().divide(teu, MathContext.DECIMAL32).setScale(3, RoundingMode.DOWN);
+		if (new BigDecimal("0.00").compareTo(sub) != 0) {
+			Map<String, Map<String, Object>> map = new HashMap<>();
+			Map<String, Object> map1 = new HashMap<>();
+			map1.put("quantity", containers.getWaitingBox().getQuantity());
+			map1.put("grossWeight", containers.getWaitingBox().getGrossWeight());
+			map1.put("measurement", containers.getWaitingBox().getMeasurement());
+			Map<String, Object> map2 = new HashMap<>();
+			map2.put("quantity", average.multiply(new BigDecimal(containersList.size())));
+			map2.put("grossWeight", averageGrossWeight.multiply(new BigDecimal(containersList.size())));
+			map2.put("measurement", averageMeasurement.multiply(new BigDecimal(containersList.size())));
+			Map<String, Object> map3 = new HashMap<>();
+			map3.put("quantity", containers.getWaitingBox().getQuantity().subtract(average.multiply(new BigDecimal(containersList.size()))));
+			map3.put("grossWeight", containers.getWaitingBox().getGrossWeight().subtract(averageGrossWeight.multiply(new BigDecimal(containersList.size()))));
+			map3.put("measurement", containers.getWaitingBox().getMeasurement().subtract(averageMeasurement.multiply(new BigDecimal(containersList.size()))));
+			map.put("total", map1);
+			map.put("average", map2);
+			map.put("subtract", map3);
+			return R.data(map);
+		}
 		List<ContainersBills> containersBillsList = new ArrayList<>();
 		WaitingBox waitingBox = containers.getWaitingBox();
 		ContainersBills containersBills = new ContainersBills();
@@ -271,41 +291,16 @@ public class ContainersServiceImpl extends ServiceImpl<ContainersMapper, Contain
 		containersBills.setCreateUserName(AuthUtil.getUserName());
 		containersBills.setTenantId(AuthUtil.getTenantId());
 
-		BigDecimal quantitySum = new BigDecimal("0");
-		BigDecimal grossWeightSum = new BigDecimal("0.00");
-		BigDecimal netWeightSum = new BigDecimal("0.00");
-		BigDecimal measurementSum = new BigDecimal("0.00");
 		for (int i = 0; i < containersList.size(); i++) {
 			containersBills.setPid(containersList.get(i).getId());
-			BigDecimal quantity = new BigDecimal("0");
-			BigDecimal grossWeight = new BigDecimal("0.00");
-			BigDecimal netWeight = new BigDecimal("0.00");
-			BigDecimal measurement = new BigDecimal("0.00");
-			if (i + 1 == containersList.size()) {
-				quantity = waitingBox.getQuantity().subtract(quantitySum);
-				grossWeight = waitingBox.getGrossWeight().subtract(grossWeightSum);
-				netWeight = waitingBox.getNetWeight().subtract(netWeightSum);
-				measurement = waitingBox.getMeasurement().subtract(measurementSum);
-			} else {
-				quantity = containersList.get(i).getTeu().multiply(average).setScale(0, RoundingMode.DOWN);
-				grossWeight = containersList.get(i).getTeu().multiply(averageGrossWeight).setScale(3, RoundingMode.DOWN);
-				netWeight = containersList.get(i).getTeu().multiply(averageNetWeight).setScale(3, RoundingMode.DOWN);
-				measurement = containersList.get(i).getTeu().multiply(averageMeasurement).setScale(3, RoundingMode.DOWN);
-
-			}
-			quantitySum = quantitySum.add(quantity);
-			grossWeightSum = grossWeightSum.add(grossWeight);
-			netWeightSum = netWeightSum.add(netWeight);
-			measurementSum = measurementSum.add(measurement);
-
-			containersList.get(i).setQuantity(quantity);
-			containersList.get(i).setGrossWeight(grossWeight);
-			containersList.get(i).setNetWeight(netWeight);
-			containersList.get(i).setMeasurement(measurement);
-			containersBills.setQuantity(quantity);
-			containersBills.setGrossWeight(grossWeight);
-			containersBills.setNetWeight(netWeight);
-			containersBills.setMeasurement(measurement);
+			containersList.get(i).setQuantity(average);
+			containersList.get(i).setGrossWeight(averageGrossWeight);
+			containersList.get(i).setNetWeight(averageNetWeight);
+			containersList.get(i).setMeasurement(averageMeasurement);
+			containersBills.setQuantity(average);
+			containersBills.setGrossWeight(averageGrossWeight);
+			containersBills.setNetWeight(averageNetWeight);
+			containersBills.setMeasurement(averageMeasurement);
 			containersBillsList.add(containersBills);
 			List<ContainersBills> itemList = new ArrayList<>();
 			itemList.add(containersBills);

+ 23 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterController.java

@@ -18,6 +18,7 @@ package org.springblade.los.finance.fee.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;
@@ -102,6 +103,28 @@ public class FeeCenterController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入feeCenter")
 	public R<IPage<FeeCenter>> list(FeeCenter feeCenter, Query query) {
+		LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(FeeCenter::getTenantId, 0)
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getDc, feeCenter.getDc())
+			.and(ObjectUtils.isNotNull(feeCenter.getCorpCnName()), i -> i.like(FeeCenter::getCorpCnName, feeCenter.getCorpCnName()).or()
+				.like(FeeCenter::getCorpEnName, feeCenter.getCorpCnName()))
+			.and(ObjectUtils.isNotNull(feeCenter.getBillCorpCnName()), i -> i.like(FeeCenter::getBillCorpCnName, feeCenter.getBillCorpCnName()).or()
+				.like(FeeCenter::getBillCorpEnName, feeCenter.getBillCorpCnName()))
+			.and(ObjectUtils.isNotNull(feeCenter.getVesselCnName()), i -> i.like(FeeCenter::getVesselCnName, feeCenter.getVesselCnName()).or()
+				.like(FeeCenter::getVesselEnName, feeCenter.getVesselCnName()))
+			.like(ObjectUtils.isNotNull(feeCenter.getVoyageNo()), FeeCenter::getVoyageNo, feeCenter.getVoyageNo())
+			.like(ObjectUtils.isNotNull(feeCenter.getMblno()), FeeCenter::getMblno, feeCenter.getMblno())
+			.like(ObjectUtils.isNotNull(feeCenter.getHblno()), FeeCenter::getHblno, feeCenter.getHblno());
+		if (ObjectUtils.isNotNull(feeCenter.getEtdList()) && feeCenter.getEtdList().size() > 0) {
+			lambdaQueryWrapper.lt(FeeCenter::getEtd, feeCenter.getEtdList().get(0));
+			lambdaQueryWrapper.gt(FeeCenter::getEtd, feeCenter.getEtdList().get(1));
+		}
+		if (ObjectUtils.isNotNull(feeCenter.getEtaList()) && feeCenter.getEtaList().size() > 0) {
+			lambdaQueryWrapper.lt(FeeCenter::getEta, feeCenter.getEtaList().get(0));
+			lambdaQueryWrapper.gt(FeeCenter::getEta, feeCenter.getEtaList().get(1));
+		}
+		lambdaQueryWrapper.orderByDesc(FeeCenter::getCreateTime);
 		IPage<FeeCenter> pages = feeCenterService.page(Condition.getPage(query), Condition.getQueryWrapper(feeCenter));
 		return R.data(pages);
 	}

+ 31 - 11
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java

@@ -35,7 +35,7 @@ import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.core.boot.ctrl.BladeController;
 
 /**
- * 业务-财务账单,各分公司独立 控制器
+ * 业务-财务账单 控制器
  *
  * @author BladeX
  * @since 2023-10-31
@@ -43,7 +43,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/finaccbills")
-@Api(value = "业务-财务账单,各分公司独立", tags = "业务-财务账单,各分公司独立接口")
+@Api(value = "业务-财务账单", tags = "业务-财务账单接口")
 public class FinAccBillsController extends BladeController {
 
 	private final IFinAccBillsService finAccBillsService;
@@ -60,7 +60,7 @@ public class FinAccBillsController extends BladeController {
 	}
 
 	/**
-	 * 分页 业务-财务账单,各分公司独立
+	 * 分页 业务-财务账单
 	 */
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
@@ -71,7 +71,7 @@ public class FinAccBillsController extends BladeController {
 	}
 
 	/**
-	 * 自定义分页 业务-财务账单,各分公司独立
+	 * 自定义分页 业务-财务账单
 	 */
 	@GetMapping("/page")
 	@ApiOperationSupport(order = 3)
@@ -82,7 +82,7 @@ public class FinAccBillsController extends BladeController {
 	}
 
 	/**
-	 * 新增 业务-财务账单,各分公司独立
+	 * 新增 业务-财务账单
 	 */
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
@@ -92,7 +92,7 @@ public class FinAccBillsController extends BladeController {
 	}
 
 	/**
-	 * 修改 业务-财务账单,各分公司独立
+	 * 修改 业务-财务账单
 	 */
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
@@ -102,18 +102,38 @@ public class FinAccBillsController extends BladeController {
 	}
 
 	/**
-	 * 新增或修改 业务-财务账单,各分公司独立
+	 * 新增或修改 业务-财务账单
 	 */
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入finAccBills")
 	public R submit(@Valid @RequestBody FinAccBills finAccBills) {
-		return R.status(finAccBillsService.saveOrUpdate(finAccBills));
+		return finAccBillsService.submit(finAccBills);
 	}
 
-	
 	/**
-	 * 删除 业务-财务账单,各分公司独立
+	 * 生成账单
+	 */
+	@PostMapping("/generateBill")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "生成账单", notes = "传入FinAccBills")
+	public R generateBill(@Valid @RequestBody FinAccBills finAccBills) {
+		return finAccBillsService.generateBill(finAccBills);
+	}
+
+	/**
+	 * 撤销账单
+	 */
+	@PostMapping("/revokeBill")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "撤销账单", notes = "传入FinAccBills")
+	public R revokeBill(@Valid @RequestBody FinAccBills finAccBills) {
+		return finAccBillsService.revokeBill(finAccBills);
+	}
+
+
+	/**
+	 * 删除 业务-财务账单
 	 */
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 8)
@@ -122,5 +142,5 @@ public class FinAccBillsController extends BladeController {
 		return R.status(finAccBillsService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/mapper/FinAccBillsMapper.java

@@ -23,7 +23,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import java.util.List;
 
 /**
- * 业务-财务账单,各分公司独立 Mapper 接口
+ * 业务-财务账单 Mapper 接口
  *
  * @author BladeX
  * @since 2023-10-31

+ 22 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFinAccBillsService.java

@@ -16,13 +16,14 @@
  */
 package org.springblade.los.finance.fee.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.los.finance.fee.entity.FinAccBills;
 import org.springblade.los.finance.fee.vo.FinAccBillsVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 /**
- * 业务-财务账单,各分公司独立 服务类
+ * 业务-财务账单 服务类
  *
  * @author BladeX
  * @since 2023-10-31
@@ -38,4 +39,24 @@ public interface IFinAccBillsService extends IService<FinAccBills> {
 	 */
 	IPage<FinAccBillsVO> selectFinAccBillsPage(IPage<FinAccBillsVO> page, FinAccBillsVO finAccBills);
 
+	/**
+	 * 新增或修改 业务-财务账单
+	 * @param finAccBills
+	 * @return
+	 */
+    R submit(FinAccBills finAccBills);
+
+	/**
+	 * 生成账单
+	 * @param finAccBills
+	 * @return
+	 */
+	R generateBill(FinAccBills finAccBills);
+
+	/**
+	 * 撤销账单
+	 * @param finAccBills
+	 * @return
+	 */
+	R revokeBill(FinAccBills finAccBills);
 }

+ 245 - 4
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FinAccBillsServiceImpl.java

@@ -16,26 +16,267 @@
  */
 package org.springblade.los.finance.fee.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.billno.entity.BusinessBillNo;
+import org.springblade.los.billno.service.IBusinessBillNoService;
+import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.los.business.sea.service.IBillsService;
+import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.entity.FinAccBills;
-import org.springblade.los.finance.fee.vo.FinAccBillsVO;
 import org.springblade.los.finance.fee.mapper.FinAccBillsMapper;
+import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.los.finance.fee.vo.FinAccBillsVO;
+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 org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 /**
- * 业务-财务账单,各分公司独立 服务实现类
+ * 业务-财务账单 服务实现类
  *
  * @author BladeX
  * @since 2023-10-31
  */
 @Service
+@AllArgsConstructor
 public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAccBills> implements IFinAccBillsService {
 
+	private final ISysClient sysClient;
+
+	private final IFeeCenterService feeCenterService;
+
+	private final IBillsService billsService;
+
+	private final IBusinessBillNoService businessBillNoService;
+
 	@Override
 	public IPage<FinAccBillsVO> selectFinAccBillsPage(IPage<FinAccBillsVO> page, FinAccBillsVO finAccBills) {
 		return page.setRecords(baseMapper.selectFinAccBillsPage(page, finAccBills));
 	}
 
+	@Override
+	public R submit(FinAccBills finAccBills) {
+		if (finAccBills.getId() == null) {
+			finAccBills.setCreateTime(new Date());
+			finAccBills.setCreateUser(AuthUtil.getUserId());
+			finAccBills.setCreateUserName(AuthUtil.getUserName());
+			//获取部门ids对应中文名
+			if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+				finAccBills.setCreateDept(AuthUtil.getDeptId());
+				R<List<String>> res = sysClient.getDeptNames(AuthUtil.getDeptId());
+				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+					finAccBills.setCreateDeptName(String.join(",", res.getData()));
+				}
+			}
+		} else {
+			finAccBills.setUpdateUser(AuthUtil.getUserId());
+			finAccBills.setUpdateTime(new Date());
+			finAccBills.setUpdateUserName(AuthUtil.getUserName());
+		}
+		this.saveOrUpdate(finAccBills);
+		return R.data(finAccBills);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R generateBill(FinAccBills finAccBills) {
+		if (ObjectUtils.isNull(finAccBills.getFeeCenterList()) || finAccBills.getFeeCenterList().size() == 0) {
+			throw new RuntimeException("请选择费用信息");
+		}
+		List<FeeCenter> feeCenterList = new ArrayList<>();
+		List<FinAccBills> finAccBillsList = new ArrayList<>();
+		String deptId = "";
+		String deptName = "";
+		//获取部门ids对应中文名
+		if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+			deptId = AuthUtil.getDeptId();
+			R<List<String>> res = sysClient.getDeptNames(AuthUtil.getDeptId());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = String.join(",", res.getData());
+			}
+		}
+		List<Bills> billsList = new ArrayList<>();
+		List<Long> ids = finAccBills.getFeeCenterList().stream().map(FeeCenter::getPid).collect(Collectors.toList());
+		if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
+			billsList = billsService.list(new LambdaQueryWrapper<Bills>()
+				.eq(Bills::getTenantId, AuthUtil.getTenantId())
+				.eq(Bills::getIsDeleted, 0)
+				.eq(Bills::getBusinessType, "SE")
+				.eq(Bills::getSeaType, "E")
+				.in(Bills::getId, ids));
+
+		}
+		for (FeeCenter item : finAccBills.getFeeCenterList()) {
+			if (ObjectUtils.isNotNull(item.getPid()) && ObjectUtils.isNotNull(item.getUnitNo()) &&
+				ObjectUtils.isNotNull(item.getDc()) && ObjectUtils.isNotNull(item.getElementsCode())) {
+				item.setBillKey(item.getPid() + "-" + item.getUnitNo() + "-" + item.getDc() + "-" + item.getElementsCode());
+			} else {
+				throw new RuntimeException("单据号、单位、费用类型、核算要素不能为空");
+			}
+		}
+		List<FeeCenter> reducelList = finAccBills.getFeeCenterList().stream().filter(distinctByKey(FeeCenter::getBillKey)).collect(Collectors.toList());
+		for (FeeCenter item : reducelList) {
+			BigDecimal amount = finAccBills.getFeeCenterList().stream()
+				.filter(e -> e.getBillKey().equals(item.getBillKey()))
+				.map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			FinAccBills data = new FinAccBills();
+			data.setCreateTime(new Date());
+			data.setCreateUser(AuthUtil.getUserId());
+			data.setCreateUserName(AuthUtil.getUserName());
+			data.setCreateDept(deptId);
+			data.setCreateDeptName(deptName);
+			data.setBranchId(deptId);
+			data.setDeptId(Long.parseLong(deptId));
+			data.setDeptName(deptName);
+
+			BusinessBillNo businessBillNo = new BusinessBillNo();
+			businessBillNo.setBusinessTypeId(finAccBills.getBusinessTypeId());
+			businessBillNo.setCode(finAccBills.getBillNoFormat());
+			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+			if (!clientBillNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				return R.fail(500, "生成订单编号失败");
+			}
+			data.setBillNo((String) clientBillNo.getData());
+			data.setBillDate(new Date());
+			data.setAccountType(finAccBills.getAccountType());
+			data.setAccountDc(item.getDc());
+			data.setAccountDate(item.getBillDate());
+			data.setBillKey(item.getBillKey());
+			data.setBusinessType(item.getBusinessType());
+			if ("MH".equals(item.getBusinessType())) {
+				//分单
+				data.setBusinessBillDivideId(item.getPid());
+				data.setBusinessBillDivideNo(item.getBillNo());
+				data.setBusinessDivideDate(item.getBillDate());
+				//主单
+				Bills bills = billsList.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(new Bills());
+				if (ObjectUtils.isNotNull(bills.getMasterId())) {
+					data.setBusinessBillId(bills.getMasterId());
+					data.setBusinessBillNo(bills.getMasterBillNo());
+					data.setBusinessDate(item.getBillDate());
+				}
+			} else {
+				data.setBusinessBillId(item.getPid());
+				data.setBusinessBillNo(item.getBillNo());
+				data.setBusinessDate(item.getBillDate());
+			}
+			data.setPaymode(item.getPaymode());
+			data.setAccelementid(item.getElementsId());
+			data.setAccelementname(item.getElementsCnName());
+			data.setCorpId(item.getCorpId());
+			data.setCorpCnName(item.getCorpCnName());
+			data.setCorpEnName(item.getCorpEnName());
+			data.setBillCorpId(item.getBillCorpId());
+			data.setBillCorpCnName(item.getBillCorpEnName());
+			data.setBillCorpEnName(item.getBillCorpEnName());
+			data.setVesselId(item.getVesselId());
+			data.setVesselCnName(item.getVesselCnName());
+			data.setVesselEnName(item.getVesselEnName());
+			data.setVoyageNo(item.getVoyageNo());
+			data.setMblno(item.getMblno());
+			data.setHblno(item.getHblno());
+			data.setRefno(finAccBills.getRefno());
+			data.setBookingNo(finAccBills.getBookingNo());
+			data.setEtd(item.getEtd());
+			data.setEta(item.getEta());
+			data.setPolId(item.getPolId());
+			data.setPolCnName(item.getPolCnName());
+			data.setPolEnName(item.getPolEnName());
+			data.setPolNamePrint(finAccBills.getPolNamePrint());
+			data.setPodId(item.getPodId());
+			data.setPodCnName(item.getPodCnName());
+			data.setPodCode(item.getPodCode());
+			data.setPodEnName(item.getPodEnName());
+			data.setPodNamePrint(finAccBills.getPodNamePrint());
+			if ("D".equals(item.getDc())) {
+				data.setAmountDr(amount);
+			} else {
+				data.setAmountCr(amount);
+			}
+			finAccBillsList.add(data);
+			List<FeeCenter> feeCenterList1 = finAccBills.getFeeCenterList().stream()
+				.filter(e -> e.getBillKey().equals(item.getBillKey())).collect(Collectors.toList());
+			for (FeeCenter feeCenterItem : feeCenterList1) {
+				feeCenterItem.setAccBillId(data.getId());
+				feeCenterItem.setAccBillNo(data.getBillNo());
+				feeCenterItem.setAccDate(data.getBillDate());
+				feeCenterItem.setAccAmount(amount);
+				feeCenterItem.setAccStatus(1);
+				feeCenterItem.setAccById(AuthUtil.getUserId());
+				feeCenterItem.setAccByName(AuthUtil.getUserName());
+				feeCenterList.add(feeCenterItem);
+			}
+		}
+		this.saveOrUpdateBatch(finAccBillsList);
+		feeCenterService.saveOrUpdateBatch(feeCenterList);
+		for (Bills item : billsList) {
+			item.setBillingStatus(item.getBillingStatus() + 1);
+		}
+		billsService.saveOrUpdateBatch(billsList);
+		return R.data("操作成功");
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R revokeBill(FinAccBills finAccBills) {
+		if (ObjectUtils.isNull(finAccBills.getFeeCenterList()) || finAccBills.getFeeCenterList().size() == 0) {
+			throw new RuntimeException("请选择费用信息");
+		}
+		List<FeeCenter> feeCenterList = new ArrayList<>();
+		List<Bills> billsList = new ArrayList<>();
+		List<Long> ids = finAccBills.getFeeCenterList().stream().map(FeeCenter::getPid).collect(Collectors.toList());
+		if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
+			billsList = billsService.list(new LambdaQueryWrapper<Bills>()
+				.eq(Bills::getTenantId, AuthUtil.getTenantId())
+				.eq(Bills::getIsDeleted, 0)
+				.eq(Bills::getBusinessType, "SE")
+				.eq(Bills::getSeaType, "E")
+				.in(Bills::getId, ids));
+		}
+		List<Long> finAccBillsIds = finAccBills.getFeeCenterList().stream().map(FeeCenter::getAccBillId).distinct().collect(Collectors.toList());
+		this.removeByIds(finAccBillsIds);
+		for (FeeCenter feeCenterItem : finAccBills.getFeeCenterList()) {
+			feeCenterItem.setAccBillId(0L);
+			feeCenterItem.setAccBillNo("");
+			feeCenterItem.setAccDate(null);
+			feeCenterItem.setAccAmount(new BigDecimal("0.00"));
+			feeCenterItem.setAccStatus(0);
+			feeCenterItem.setAccById(0L);
+			feeCenterItem.setAccByName("");
+			feeCenterList.add(feeCenterItem);
+		}
+		feeCenterService.saveOrUpdateBatch(feeCenterList);
+		for (Bills item : billsList) {
+			if (item.getBillingStatus() == 0) {
+				throw new RuntimeException("撤销账单失败");
+			}
+			item.setBillingStatus(item.getBillingStatus() - 1);
+		}
+		billsService.saveOrUpdateBatch(billsList);
+		return R.data("操作成功");
+	}
+
+	private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
+		Set<Object> seen = ConcurrentHashMap.newKeySet();
+		return t -> seen.add(keyExtractor.apply(t));
+	}
+
 }