Browse Source

2023年6月29日18:45:04

纪新园 2 years ago
parent
commit
db34f2bb36
34 changed files with 1478 additions and 323 deletions
  1. 2 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/constant/LandConst.java
  2. 34 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/dto/OrderEstimateDTO.java
  3. 24 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/LandOrder.java
  4. 110 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderEstimate.java
  5. 36 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/vo/OrderEstimateVO.java
  6. 99 95
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjAccountManagement.java
  7. 136 115
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjSettlement.java
  8. 85 80
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjSettlementItems.java
  9. 15 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/enums/OrderTypeEnum.java
  10. 99 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/PjSettlementExcel.java
  11. 85 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/vo/OrderStatistics.java
  12. 1 1
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/extra/entity/ClaimItem.java
  13. 28 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/AllotController.java
  14. 1 1
      blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderController.java
  15. 126 0
      blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderEstimateController.java
  16. 1 1
      blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderIndexController.java
  17. 42 0
      blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderEstimateMapper.java
  18. 26 0
      blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderEstimateMapper.xml
  19. 2 1
      blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderMapper.xml
  20. 41 0
      blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderEstimateService.java
  21. 41 0
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderEstimateServiceImpl.java
  22. 1 1
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderItemServiceImpl.java
  23. 81 11
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java
  24. 1 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/accountManagement/service/impl/AccountManagementServiceImpl.java
  25. 1 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.xml
  26. 16 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java
  27. 9 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderMapper.java
  28. 8 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderMapper.xml
  29. 10 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderService.java
  30. 12 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  31. 1 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java
  32. 100 9
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/controller/SettlementController.java
  33. 6 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/service/ISettlementService.java
  34. 198 3
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/service/impl/SettlementServiceImpl.java

+ 2 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/constant/LandConst.java

@@ -45,6 +45,8 @@ public interface LandConst {
 
 	String MOLD_TZ = "特种运输";
 
+	String DA_JIAN = "大件";
+
 	String MOLD_MANAGER = "散货经理";
 
 	String ROLE_DUZX = "调度中心";

+ 34 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/dto/OrderEstimateDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.land.dto;
+
+import org.springblade.land.entity.OrderEstimate;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 陆运预估明细表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class OrderEstimateDTO extends OrderEstimate {
+	private static final long serialVersionUID = 1L;
+
+}

+ 24 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/LandOrder.java

@@ -307,6 +307,24 @@ public class LandOrder implements Serializable {
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date reachTime;
 
+	/**
+	 * 风险等级
+	 */
+	@ApiModelProperty(value = "风险等级")
+	private String riskLevel;
+
+	/**
+	 * 难度等级
+	 */
+	@ApiModelProperty(value = "难度等级")
+	private String difficultyLevel;
+
+	/**
+	 * 货物
+	 */
+	@ApiModelProperty(value = "货物")
+	private String goods;
+
 
 	@TableField(exist = false)
 	private List<OrderItem> itemList;
@@ -318,6 +336,12 @@ public class LandOrder implements Serializable {
 	private List<OrderAddress> orderAddressList;
 
 	/**
+	 * 大件预估明细
+	 */
+	@TableField(exist = false)
+	private List<OrderEstimate> orderEstimateList;
+
+	/**
 	 * 装货地址
 	 */
 	@TableField(exist = false)

+ 110 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderEstimate.java

@@ -0,0 +1,110 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.land.entity;
+
+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;
+
+/**
+ * 陆运预估明细表实体类
+ *
+ * @author BladeX
+ * @since 2023-06-28
+ */
+@Data
+@TableName("land_order_estimate")
+@ApiModel(value = "OrderEstimate对象", description = "陆运预估明细表")
+public class OrderEstimate implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 父id
+	 */
+	@ApiModelProperty(value = "父id")
+	private Long pid;
+	/**
+	 * 车队ID
+	 */
+	@ApiModelProperty(value = "车队ID")
+	private Long fleetId;
+
+	/**
+	 * 车队ID
+	 */
+	@ApiModelProperty(value = "车队")
+	private String fleetName;
+	/**
+	 * 预估运费
+	 */
+	@ApiModelProperty(value = "预估运费")
+	private BigDecimal freightAmount;
+	/**
+	 * 杂费
+	 */
+	@ApiModelProperty(value = "杂费")
+	private BigDecimal miscellaneousAmount;
+	/**
+	 * 利润
+	 */
+	@ApiModelProperty(value = "利润")
+	private BigDecimal profitAmount;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 是否已删除(0-否、1-是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0-否、1-是)")
+	private Integer isDeleted;
+	/**
+	 * 状态
+	 */
+	@ApiModelProperty(value = "状态")
+	private String status;
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+
+
+}

+ 36 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/vo/OrderEstimateVO.java

@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.land.vo;
+
+import org.springblade.land.entity.OrderEstimate;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 陆运预估明细表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "OrderEstimateVO对象", description = "陆运预估明细表")
+public class OrderEstimateVO extends OrderEstimate {
+	private static final long serialVersionUID = 1L;
+
+}

+ 99 - 95
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjAccountManagement.java

@@ -16,16 +16,14 @@
  */
 package org.springblade.salesPart.entity;
 
-import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.time.LocalDateTime;
-import java.io.Serializable;
-import java.util.Date;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
 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;
 
 /**
  * 配件批发账户管理表实体类
@@ -41,100 +39,106 @@ public class PjAccountManagement implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	/**
-	* 主键
-	*/
-		@ApiModelProperty(value = "主键")
-		private Long id;
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
 	/**
 	 * 租户id
 	 */
 	@ApiModelProperty(value = "租户id")
 	private String tenantId;
 	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private Long createDept;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private Date createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private Date updateTime;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
-	/**
-	* 备注
-	*/
-		@ApiModelProperty(value = "备注")
-		private String remarks;
-	/**
-	* 订单状态
-	*/
-		@ApiModelProperty(value = "订单状态")
-		private String status;
-	/**
-	* 是否启用(0启用,1停用)
-	*/
-		@ApiModelProperty(value = "是否启用(0启用,1停用)")
-		private Integer enableOrNot;
-	/**
-	* 账户名称
-	*/
-		@ApiModelProperty(value = "账户名称")
-		private String cname;
-	/**
-	* 账户类型
-	*/
-		@ApiModelProperty(value = "账户类型")
-		private String accountType;
-	/**
-	* 开户银行
-	*/
-		@ApiModelProperty(value = "开户银行")
-		private String bankDeposit;
-	/**
-	* 银行账号
-	*/
-		@ApiModelProperty(value = "银行账号")
-		private String bankAccount;
-	/**
-	* 开户人
-	*/
-		@ApiModelProperty(value = "开户人")
-		private String accountHolder;
-	/**
-	* 公司名称
-	*/
-		@ApiModelProperty(value = "公司名称")
-		private String corporateName;
-	/**
-	* 币别
-	*/
-		@ApiModelProperty(value = "币别")
-		private String currency;
-	/**
-	* 账户余额
-	*/
-		@ApiModelProperty(value = "账户余额")
-		private BigDecimal accountBalance;
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 订单状态
+	 */
+	@ApiModelProperty(value = "订单状态")
+	private String status;
+	/**
+	 * 是否启用(0启用,1停用)
+	 */
+	@ApiModelProperty(value = "是否启用(0启用,1停用)")
+	private Integer enableOrNot;
+	/**
+	 * 账户名称
+	 */
+	@ApiModelProperty(value = "账户名称")
+	private String cname;
+	/**
+	 * 账户类型
+	 */
+	@ApiModelProperty(value = "账户类型")
+	private String accountType;
+	/**
+	 * 开户银行
+	 */
+	@ApiModelProperty(value = "开户银行")
+	private String bankDeposit;
+	/**
+	 * 银行账号
+	 */
+	@ApiModelProperty(value = "银行账号")
+	private String bankAccount;
+	/**
+	 * 开户人
+	 */
+	@ApiModelProperty(value = "开户人")
+	private String accountHolder;
+	/**
+	 * 公司名称
+	 */
+	@ApiModelProperty(value = "公司名称")
+	private String corporateName;
+	/**
+	 * 币别
+	 */
+	@ApiModelProperty(value = "币别")
+	private String currency;
+	/**
+	 * 账户余额
+	 */
+	@ApiModelProperty(value = "账户余额")
+	private BigDecimal accountBalance;
+
+	/**
+	 * 期初金额
+	 */
+	@ApiModelProperty(value = "期初金额")
+	private BigDecimal openingAmount;
 	/**
 	 * 所属公司id
 	 */

+ 136 - 115
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjSettlement.java

@@ -16,14 +16,16 @@
  */
 package org.springblade.salesPart.entity;
 
-import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.time.LocalDateTime;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
 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;
 
 /**
  * 配件批发收付款结算表实体类
@@ -38,115 +40,116 @@ public class PjSettlement implements Serializable {
 
 	private static final long serialVersionUID = 1L;
 
-	/**R	* 主键
-	*/
-		@ApiModelProperty(value = "主键")
-		private Long id;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private Long createDept;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
-	/**
-	* 备注
-	*/
-		@ApiModelProperty(value = "备注")
-		private String remarks;
-	/**
-	* 订单状态
-	*/
-		@ApiModelProperty(value = "订单状态")
-		private String status;
-	/**
-	* 客户id
-	*/
-		@ApiModelProperty(value = "客户id")
-		private Long corpId;
-	/**
-	* 客户名称
-	*/
-		@ApiModelProperty(value = "客户名称")
-		private String corpName;
-	/**
-	* 所属公司id
-	*/
-		@ApiModelProperty(value = "所属公司id")
-		private Long salesCompanyId;
-	/**
-	* 所属公司名称
-	*/
-		@ApiModelProperty(value = "所属公司名称")
-		private String salesCompanyName;
-	/**
-	* D收 C付
-	*/
-		@ApiModelProperty(value = "D收 C付")
-		private String dc;
-	/**
-	* 收付款状态 待结算 结算完成
-	*/
-		@ApiModelProperty(value = "收付款状态 待结算 结算完成")
-		private String financeStatus;
-	/**
-	* 收款账户
-	*/
-		@ApiModelProperty(value = "收款账户")
-		private String accountName;
-	/**
-	* 收款账户id
-	*/
-		@ApiModelProperty(value = "收款账户id")
-		private Long accountId;
-	/**
-	* 人民币金额
-	*/
-		@ApiModelProperty(value = "人民币金额")
-		private BigDecimal amount;
-	/**
-	* 经办人id
-	*/
-		@ApiModelProperty(value = "经办人id")
-		private Long handledById;
-	/**
-	* 经办人名称
-	*/
-		@ApiModelProperty(value = "经办人名称")
-		private String handledByName;
-	/**
-	* 结算日期
-	*/
-		@ApiModelProperty(value = "结算日期")
-		private LocalDateTime settlementDate;
-	/**
-	* 系统编号
-	*/
-		@ApiModelProperty(value = "系统编号")
-		private String sysNo;
+	/**
+	 * R	* 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 订单状态
+	 */
+	@ApiModelProperty(value = "订单状态")
+	private String status;
+	/**
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	private Long corpId;
+	/**
+	 * 客户名称
+	 */
+	@ApiModelProperty(value = "客户名称")
+	private String corpName;
+	/**
+	 * 所属公司id
+	 */
+	@ApiModelProperty(value = "所属公司id")
+	private Long salesCompanyId;
+	/**
+	 * 所属公司名称
+	 */
+	@ApiModelProperty(value = "所属公司名称")
+	private String salesCompanyName;
+	/**
+	 * D收 C付
+	 */
+	@ApiModelProperty(value = "D收 C付")
+	private String dc;
+	/**
+	 * 收付款状态 待结算 结算完成
+	 */
+	@ApiModelProperty(value = "收付款状态 待结算 结算完成")
+	private String financeStatus;
+	/**
+	 * 收款账户
+	 */
+	@ApiModelProperty(value = "收款账户")
+	private String accountName;
+	/**
+	 * 收款账户id
+	 */
+	@ApiModelProperty(value = "收款账户id")
+	private Long accountId;
+	/**
+	 * 人民币金额
+	 */
+	@ApiModelProperty(value = "人民币金额")
+	private BigDecimal amount;
+	/**
+	 * 经办人id
+	 */
+	@ApiModelProperty(value = "经办人id")
+	private Long handledById;
+	/**
+	 * 经办人名称
+	 */
+	@ApiModelProperty(value = "经办人名称")
+	private String handledByName;
+	/**
+	 * 结算日期
+	 */
+	@ApiModelProperty(value = "结算日期")
+	private Date settlementDate;
+	/**
+	 * 系统编号
+	 */
+	@ApiModelProperty(value = "系统编号")
+	private String sysNo;
 	/**
 	 * 应结日期
 	 */
@@ -155,6 +158,24 @@ public class PjSettlement implements Serializable {
 	/**
 	 * 合同号
 	 */
-	@ApiModelProperty(value = "合同号")
+	@ApiModelProperty(value = "订单号")
 	private String contractNumber;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
+	/**
+	 * 类型
+	 */
+	@ApiModelProperty(value = "类型")
+	private String billType;
+
+	/**
+	 * 明细
+	 */
+	@TableField(exist = false)
+	private List<PjSettlementItems> settlementItemsList;
 }

+ 85 - 80
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjSettlementItems.java

@@ -16,15 +16,14 @@
  */
 package org.springblade.salesPart.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 io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 配件批发收付款结算明细实体类
@@ -40,80 +39,80 @@ public class PjSettlementItems implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	/**
-	* 主键
-	*/
-		@ApiModelProperty(value = "主键")
-		private Long id;
-	/**
-	* 主表主键
-	*/
-		@ApiModelProperty(value = "主表主键")
-		private Long pid;
-	/**
-	* 排序
-	*/
-		@ApiModelProperty(value = "排序")
-		private Integer sort;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private Long createDept;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
-	/**
-	* 备注
-	*/
-		@ApiModelProperty(value = "备注")
-		private String remarks;
-	/**
-	* 合同号
-	*/
-		@ApiModelProperty(value = "合同号")
-		private String contractNumber;
-	/**
-	* 应收付金额
-	*/
-		@ApiModelProperty(value = "应收付金额")
-		private BigDecimal accountsAmount;
-	/**
-	* 结算金额
-	*/
-		@ApiModelProperty(value = "结算金额")
-		private BigDecimal settlmentAmount;
-	/**
-	* 本次金额
-	*/
-		@ApiModelProperty(value = "本次金额")
-		private BigDecimal thisAmount;
-	/**
-	* 来源主表(业务模块 主表 id)
-	*/
-		@ApiModelProperty(value = "来源主表(业务模块 主表 id)")
-		private Long srcParentId;
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
+	/**
+	 * 主表主键
+	 */
+	@ApiModelProperty(value = "主表主键")
+	private Long pid;
+	/**
+	 * 排序
+	 */
+	@ApiModelProperty(value = "排序")
+	private Integer sort;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 合同号
+	 */
+	@ApiModelProperty(value = "合同号")
+	private String contractNumber;
+	/**
+	 * 应收付金额
+	 */
+	@ApiModelProperty(value = "应收付金额")
+	private BigDecimal accountsAmount;
+	/**
+	 * 结算金额
+	 */
+	@ApiModelProperty(value = "结算金额")
+	private BigDecimal settlmentAmount;
+	/**
+	 * 本次金额
+	 */
+	@ApiModelProperty(value = "本次金额")
+	private BigDecimal thisAmount;
+	/**
+	 * 来源主表(业务模块 主表 id)
+	 */
+	@ApiModelProperty(value = "来源主表(业务模块 主表 id)")
+	private Long srcParentId;
 	/**
 	 * 来源单据编号
 	 */
@@ -132,4 +131,10 @@ public class PjSettlementItems implements Serializable {
 	@ApiModelProperty(value = "所属公司名称")
 	private String salesCompanyName;
 
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
 }

+ 15 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/enums/OrderTypeEnum.java

@@ -156,6 +156,21 @@ public enum OrderTypeEnum {
 	 * 待付款
 	 */
 	WAITPAYMENT("待付款"),
+
+	/**
+	 * 已付款
+	 */
+	PAID("已付款"),
+
+	/**
+	 * 收款
+	 */
+	COLLECTION("SK"),
+
+	/**
+	 * 收款
+	 */
+	PAYMENT("FK"),
 	;
 
 	private final String type;

+ 99 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/PjSettlementExcel.java

@@ -0,0 +1,99 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.salesPart.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 配件批发收付款结算表实体类
+ *
+ * @author BladeX
+ * @since 2023-04-21
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class PjSettlementExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 客户名称
+	 */
+	@ExcelProperty(value = "客户名称")
+	private String corpName;
+
+	/**
+	 * 所属公司名称
+	 */
+	@ExcelProperty(value = "所属公司名称")
+	private String salesCompanyName;
+
+	/**
+	 * 收付款状态
+	 */
+	@ExcelProperty(value = "状态")
+	private String financeStatus;
+	/**
+	 * 收款账户
+	 */
+	@ExcelProperty(value = "收款账户")
+	private String accountName;
+
+	/**
+	 * 人民币金额
+	 */
+	@ExcelProperty(value = "人民币金额")
+	private BigDecimal amount;
+
+	/**
+	 * 经办人名称
+	 */
+	@ExcelProperty(value = "经办人")
+	private String handledByName;
+	/**
+	 * 结算日期
+	 */
+	@ExcelProperty(value = "结算日期")
+	private Date settlementDate;
+	/**
+	 * 系统编号
+	 */
+	@ExcelProperty(value = "系统编号")
+	private String sysNo;
+	/**
+	 * 应结日期
+	 */
+	@ExcelProperty(value = "应结日期")
+	private String dueDate;
+	/**
+	 * 合同号
+	 */
+	@ExcelProperty(value = "订单号")
+	private String contractNumber;
+
+}

+ 85 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/vo/OrderStatistics.java

@@ -0,0 +1,85 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.salesPart.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 配件销售采购表实体类
+ *
+ * @author BladeX
+ * @since 2023-04-21
+ */
+@Data
+public class OrderStatistics implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	private Long customerId;
+	/**
+	 * 客户名称
+	 */
+	@ApiModelProperty(value = "客户名称")
+	private String customerName;
+	/**
+	 * 区域
+	 */
+	@ApiModelProperty(value = "区域")
+	private String region;
+	/**
+	 * 业务员名称
+	 */
+	@ApiModelProperty(value = "业务员名称")
+	private String salerName;
+	/**
+	 * 期初金额
+	 */
+	@ApiModelProperty(value = "期初金额")
+	private BigDecimal opening;
+
+	/**
+	 * 新增金额
+	 */
+	@ApiModelProperty(value = "新增金额")
+	private BigDecimal addAmount;
+	/**
+	 * 实收
+	 */
+	@ApiModelProperty(value = "实收金额")
+	private BigDecimal chargeAmount;
+	/**
+	 * 未收
+	 */
+	@ApiModelProperty(value = "未收金额")
+	private BigDecimal unpaidAmount;
+	/**
+	 * 期末
+	 */
+	@ApiModelProperty(value = "期末金额")
+	private BigDecimal closingAmount;
+
+
+}

+ 1 - 1
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/extra/entity/ClaimItem.java

@@ -65,7 +65,7 @@ public class ClaimItem implements Serializable {
 	@ApiModelProperty(value = "日期")
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	@TableField(updateStrategy = FieldStrategy.IGNORED)//时间为空
+//	@TableField(updateStrategy = FieldStrategy.IGNORED)//时间为空
 	private Date payDate;
 	/**
 	 * 费用类别ID

+ 28 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/AllotController.java

@@ -29,6 +29,8 @@ import org.springblade.deliver.goods.service.IDeliveryFilesService;
 import org.springblade.deliver.goods.service.IDeliveryItemsService;
 import org.springblade.deliver.goods.service.IDeliveryService;
 import org.springblade.deliver.goods.vo.DeliveryVO;
+import org.springblade.stock.entity.StockGoods;
+import org.springblade.stock.feign.IStockGoodsClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
@@ -37,6 +39,7 @@ import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 经销商调拨控制器
@@ -57,6 +60,7 @@ public class AllotController extends BladeController {
 	private final IDeliveryItemsService deliveryItemsService;
 	private final IDeliveryFeesService deliveryFeesService;
 	private final IDeliveryFilesService deliveryFilesService;
+	private final IStockGoodsClient stockGoodsClient;
 
 	/**
 	 * 经销商调拨详情
@@ -277,5 +281,29 @@ public class AllotController extends BladeController {
 		return R.data(stockInventoryList);
 	}
 
+	/**
+	 * 计算经销商库存
+	 */
+	@GetMapping("/calculateInventory")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入delivery")
+	public R calculateInventory() {
+		List<StockGoods> stockGoodsList = stockGoodsClient.selectStockGoodsAll();
+		for (StockGoods stockGoods : stockGoodsList) {
+			List<StockInventory> stockInventoryList = deliveryService.selectStockInventory(stockGoods.getStorageId() + "", stockGoods.getGoodsId() + "");
+			BigDecimal addQuantity = stockInventoryList.stream().map(StockInventory::getAddQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal subQuantity = stockInventoryList.stream().map(StockInventory::getSubQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			List<StockInventory> stockInventoryListNew = deliveryService.selectStockInventoryList(null, stockGoods.getStorageId() + "", stockGoods.getGoodsId() + "");
+			BigDecimal addDBQuantity = stockInventoryListNew.stream().map(StockInventory::getAddQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			List<StockInventory> stockInventoryListOld = deliveryService.selectStockInventoryList(stockGoods.getStorageId() + "", null, stockGoods.getGoodsId() + "");
+			BigDecimal subDBQuantity = stockInventoryListOld.stream().map(StockInventory::getSubQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal stockQuantity = addQuantity.add(addDBQuantity).subtract(subQuantity).subtract(subDBQuantity);
+			stockGoods.setBalanceQuantity(stockQuantity);
+			stockGoods.setSurplusRouteQuantity(stockQuantity);
+			stockGoodsClient.updateStock(stockGoods);
+		}
+		return R.success("操作成功");
+	}
+
 
 }

+ 1 - 1
blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderController.java

@@ -251,7 +251,7 @@ public class OrderController extends BladeController {
 
 	@GetMapping("/acct-export")
 	public void acctExport(OrderAcctVO acctVO, HttpServletResponse response) {
-		acctVO.setShippingMode("集装箱");
+		acctVO.setShippingMode(acctVO.getShippingMode());
 		List<OrderAcctVO> acct = orderService.getAcctNoPage(acctVO);
 
 		String role = AuthUtil.getUserRole();

+ 126 - 0
blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderEstimateController.java

@@ -0,0 +1,126 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.land.controller;
+
+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.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.land.entity.OrderEstimate;
+import org.springblade.land.vo.OrderEstimateVO;
+import org.springblade.land.service.IOrderEstimateService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 陆运预估明细表 控制器
+ *
+ * @author BladeX
+ * @since 2023-06-28
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/orderestimate")
+@Api(value = "陆运预估明细表", tags = "陆运预估明细表接口")
+public class OrderEstimateController extends BladeController {
+
+	private final IOrderEstimateService orderEstimateService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入orderEstimate")
+	public R<OrderEstimate> detail(OrderEstimate orderEstimate) {
+		OrderEstimate detail = orderEstimateService.getOne(Condition.getQueryWrapper(orderEstimate));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 陆运预估明细表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入orderEstimate")
+	public R<IPage<OrderEstimate>> list(OrderEstimate orderEstimate, Query query) {
+		IPage<OrderEstimate> pages = orderEstimateService.page(Condition.getPage(query), Condition.getQueryWrapper(orderEstimate));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 陆运预估明细表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入orderEstimate")
+	public R<IPage<OrderEstimateVO>> page(OrderEstimateVO orderEstimate, Query query) {
+		IPage<OrderEstimateVO> pages = orderEstimateService.selectOrderEstimatePage(Condition.getPage(query), orderEstimate);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 陆运预估明细表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入orderEstimate")
+	public R save(@Valid @RequestBody OrderEstimate orderEstimate) {
+		return R.status(orderEstimateService.save(orderEstimate));
+	}
+
+	/**
+	 * 修改 陆运预估明细表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入orderEstimate")
+	public R update(@Valid @RequestBody OrderEstimate orderEstimate) {
+		return R.status(orderEstimateService.updateById(orderEstimate));
+	}
+
+	/**
+	 * 新增或修改 陆运预估明细表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入orderEstimate")
+	public R submit(@Valid @RequestBody OrderEstimate orderEstimate) {
+		return R.status(orderEstimateService.saveOrUpdate(orderEstimate));
+	}
+
+	
+	/**
+	 * 删除 陆运预估明细表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(orderEstimateService.removeByIds(Func.toLongList(ids)));
+	}
+
+	
+}

+ 1 - 1
blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderIndexController.java

@@ -299,7 +299,7 @@ public class OrderIndexController extends BladeController {
 				acctVO.setUserRoleControl(LandConst.ROLE_SJ);
 			}
 		} else if (mold == 3) {
-			acctVO.setShippingMode(LandConst.MOLD_TZ);
+			acctVO.setShippingMode(LandConst.DA_JIAN);
 		}
 
 		return acctVO;

+ 42 - 0
blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderEstimateMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.land.mapper;
+
+import org.springblade.land.entity.OrderEstimate;
+import org.springblade.land.vo.OrderEstimateVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 陆运预估明细表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-06-28
+ */
+public interface OrderEstimateMapper extends BaseMapper<OrderEstimate> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param orderEstimate
+	 * @return
+	 */
+	List<OrderEstimateVO> selectOrderEstimatePage(IPage page, OrderEstimateVO orderEstimate);
+
+}

+ 26 - 0
blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderEstimateMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.land.mapper.OrderEstimateMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="orderEstimateResultMap" type="org.springblade.land.entity.OrderEstimate">
+        <id column="id" property="id"/>
+        <result column="pid" property="pid"/>
+        <result column="fleet_id" property="fleetId"/>
+        <result column="freight_amount" property="freightAmount"/>
+        <result column="miscellaneous_amount" property="miscellaneousAmount"/>
+        <result column="profit_amount" property="profitAmount"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="status" property="status"/>
+    </resultMap>
+
+
+    <select id="selectOrderEstimatePage" resultMap="orderEstimateResultMap">
+        select * from land_order_estimate where is_deleted = 0
+    </select>
+
+</mapper>

+ 2 - 1
blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderMapper.xml

@@ -25,7 +25,8 @@
     </select>
 
      <select id="selectAcctList" resultType="org.springblade.land.vo.OrderAcctVO">
-        select t1.id as orderId,
+        select
+            t1.id as orderId,
             t2.id as itemId,
             t1.corp_id as corpId,
             t3.cname as corpName,

+ 41 - 0
blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderEstimateService.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.land.service;
+
+import org.springblade.land.entity.OrderEstimate;
+import org.springblade.land.vo.OrderEstimateVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 陆运预估明细表 服务类
+ *
+ * @author BladeX
+ * @since 2023-06-28
+ */
+public interface IOrderEstimateService extends IService<OrderEstimate> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param orderEstimate
+	 * @return
+	 */
+	IPage<OrderEstimateVO> selectOrderEstimatePage(IPage<OrderEstimateVO> page, OrderEstimateVO orderEstimate);
+
+}

+ 41 - 0
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderEstimateServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.land.service.impl;
+
+import org.springblade.land.entity.OrderEstimate;
+import org.springblade.land.vo.OrderEstimateVO;
+import org.springblade.land.mapper.OrderEstimateMapper;
+import org.springblade.land.service.IOrderEstimateService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 陆运预估明细表 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-06-28
+ */
+@Service
+public class OrderEstimateServiceImpl extends ServiceImpl<OrderEstimateMapper, OrderEstimate> implements IOrderEstimateService {
+
+	@Override
+	public IPage<OrderEstimateVO> selectOrderEstimatePage(IPage<OrderEstimateVO> page, OrderEstimateVO orderEstimate) {
+		return page.setRecords(baseMapper.selectOrderEstimatePage(page, orderEstimate));
+	}
+
+}

+ 1 - 1
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderItemServiceImpl.java

@@ -158,7 +158,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 				.like(StringUtil.isNotBlank(orderItem.getAddressDetail()), LandOrder::getAddressDetail, orderItem.getAddressDetail())
 				.eq(LandOrder::getIsDeleted, 0)
 				.eq(LandOrder::getTenantId, AuthUtil.getTenantId())
-				.ne(LandOrder::getShippingMode, "散货");
+				.eq(LandOrder::getShippingMode, orderItem.getShippingMode());
 			if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
 				List<Long> ids = r.getData().stream().map(User::getId).collect(Collectors.toList());
 				orderLambdaQueryWrapper.apply("find_in_set(dispatcher,'" + StringUtils.join(ids, ",") + "')");

+ 81 - 11
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java

@@ -42,6 +42,7 @@ import org.springblade.finance.vojo.Items;
 import org.springblade.land.constant.LandConst;
 import org.springblade.land.entity.*;
 import org.springblade.land.mapper.*;
+import org.springblade.land.service.IOrderEstimateService;
 import org.springblade.land.service.IOrderService;
 import org.springblade.land.util.MessageUtil;
 import org.springblade.land.vo.DataAnalysisVO;
@@ -99,6 +100,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 
 	private final IFinanceClient financeClient;//财务
 
+	private final IOrderEstimateService orderEstimateService;
+
+
 	@Override
 	public IPage<OrderVO> selectOrderPage(IPage<OrderVO> page, OrderVO order) {
 		return page.setRecords(baseMapper.selectOrderPage(page, order));
@@ -208,6 +212,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 			} else {
 				detail.setFileList(Collections.emptyList());
 			}
+
+			detail.setOrderEstimateList(orderEstimateService.list(new LambdaQueryWrapper<OrderEstimate>()
+				.eq(OrderEstimate::getPid, order.getId())));
+
 		}
 		return detail;
 	}
@@ -252,7 +260,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 			.between(StringUtil.isNotBlank(order.getBeginCrateTime()) && StringUtil.isNotBlank(order.getEndCrateTime()), LandOrder::getCreateTime, order.getBeginCrateTime(), order.getEndCrateTime())
 			.eq(LandOrder::getIsDeleted, 0)
 			.eq(LandOrder::getTenantId, AuthUtil.getTenantId())
-			.ne(LandOrder::getShippingMode, "散货")
+			.eq(ObjectUtils.isNotNull(order.getShippingMode()), LandOrder::getShippingMode, order.getShippingMode())
 			.orderByDesc(LandOrder::getArrivalTime);
 
 		if (order.getKind() == 2) {
@@ -479,7 +487,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 		LambdaQueryWrapper<LandOrder> orderQueryWrapper = new LambdaQueryWrapper<>();
 		orderQueryWrapper.eq(LandOrder::getTenantId, AuthUtil.getTenantId())
 			.eq(LandOrder::getIsDeleted, 0)
-			.ne(LandOrder::getShippingMode, "散货")
+			.eq(LandOrder::getShippingMode, order.getShippingMode())
 			.between(StringUtil.isNotBlank(order.getBeginArrivalTime()) && StringUtil.isNotBlank(order.getEndArrivalTime()), LandOrder::getArrivalTime, order.getBeginArrivalTime(), order.getEndArrivalTime());
 		if (AuthUtil.getUserRole().contains(LandConst.DDZX_MANAGER)) {
 			R<List<User>> r = userSearchClient.listByRole("1572039278093946882");
@@ -692,6 +700,30 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 				orderItem.setLandAmountC(order.getFreightPay());
 				orderItemMapper.updateById(orderItem);
 			}
+		} else if (order.getShippingMode().equals("大件")) {
+			BigDecimal landAmountD = new BigDecimal("0.00");
+			if (ObjectUtils.isNotNull(itemList)) {
+				landAmountD = itemList.stream().map(OrderItem::getLandAmountD).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				List<OrderEstimate> orderEstimates = new ArrayList<>();
+				if (ObjectUtils.isNotNull(order.getOrderEstimateList())){
+					for (OrderEstimate orderEstimate : order.getOrderEstimateList()) {
+						if (ObjectUtil.isEmpty(orderEstimate.getId())) {
+							orderEstimate.setPid(order.getId());
+							orderEstimate.setTenantId(AuthUtil.getTenantId());
+							orderEstimate.setCreateUser(AuthUtil.getUserId());
+							orderEstimate.setCreateTime(new Date());
+						} else {
+							orderEstimate.setUpdateUser(AuthUtil.getUserId());
+							orderEstimate.setUpdateTime(new Date());
+						}
+						orderEstimate.setProfitAmount(landAmountD.subtract(orderEstimate.getFreightAmount()).subtract(orderEstimate.getMiscellaneousAmount()));
+						orderEstimates.add(orderEstimate);
+					}
+					if (ObjectUtils.isNotNull(orderEstimates)) {
+						orderEstimateService.saveOrUpdateBatch(orderEstimates);
+					}
+				}
+			}
 		}
 
 		StringBuilder addressDetail = new StringBuilder();
@@ -1519,7 +1551,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 			//给角色为财务的人发送消息
 			R<String> clientDeptIds = sysClient.getRoleIds(SecureUtil.getTenantId(), "财务");
 			if (clientDeptIds.isSuccess() && com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(clientDeptIds.getData())) {
-				R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()),null,null);
+				R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()), null, null);
 				if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
 					for (User datum : userList.getData()) {
 						//循环发送消息
@@ -1654,11 +1686,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 			int i = 1;
 			StringBuilder addressDetail = new StringBuilder();
 			StringBuilder unloadingPlace = new StringBuilder();
-			if (ObjectUtil.isNotEmpty(addressList)){
+			if (ObjectUtil.isNotEmpty(addressList)) {
 				//装货地址
-				for(OrderAddress orderAddress : addressList){
-					if (orderAddress.getBillType() == 1 || orderAddress.getBillType() == 0){
-						if (StringUtil.isNotBlank(orderAddress.getCorpName())){
+				for (OrderAddress orderAddress : addressList) {
+					if (orderAddress.getBillType() == 1 || orderAddress.getBillType() == 0) {
+						if (StringUtil.isNotBlank(orderAddress.getCorpName())) {
 							addressDetail.append(i).append(".").append(orderAddress.getCorpName()).append("\n");
 							i++;
 						}
@@ -1666,9 +1698,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 				}
 				i = 1;
 				//卸货地址
-				for(OrderAddress orderAddress : addressList){
-					if (orderAddress.getBillType() == 2){
-						if (StringUtil.isNotBlank(orderAddress.getCorpName())){
+				for (OrderAddress orderAddress : addressList) {
+					if (orderAddress.getBillType() == 2) {
+						if (StringUtil.isNotBlank(orderAddress.getCorpName())) {
 							unloadingPlace.append(i).append(".").append(orderAddress.getCorpName()).append("\n");
 							i++;
 						}
@@ -1757,7 +1789,45 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
 					i++;
 				}
 			}
-		} else if (order.getShippingMode().equals("散货")) {
+		} else if (order.getShippingMode().equals("大件")) {
+			for (OrderAddress address : order.getOrderAddressList()) {
+				if (ObjectUtil.isEmpty(address.getId())) {
+					address.setOrderId(order.getId());
+					address.setTenantId(AuthUtil.getTenantId());
+					address.setCreateUser(AuthUtil.getUserId());
+					address.setCreateTime(new Date());
+					orderAddressMapper.insert(address);
+				} else {
+					address.setUpdateUser(AuthUtil.getUserId());
+					address.setUpdateTime(new Date());
+					orderAddressMapper.updateById(address);
+				}
+
+				if (ObjectUtil.isNotEmpty(address.getCorpId()) || StringUtil.isNotBlank(address.getContacts())
+					|| StringUtil.isNotBlank(address.getTel()) || StringUtil.isNotBlank(address.getAddress())) {
+
+					if (ObjectUtil.isNotEmpty(address.getCorpId()) && StringUtil.isNotBlank(address.getCorpName())) {
+						addressDetail.append(i).append(".").append(address.getCorpName()).append("(");
+					} else {
+						addressDetail.append(i).append(".").append("(");
+					}
+
+					if (StringUtil.isNotBlank(address.getContacts())) {
+						addressDetail.append(address.getContacts());
+					}
+					if (StringUtil.isNotBlank(address.getTel())) {
+						addressDetail.append(" ").append(address.getTel());
+					}
+					if (StringUtil.isNotBlank(address.getAddress())) {
+						addressDetail.append(") ").append(address.getAddress()).append("\n");
+					} else {
+						addressDetail.append(") ").append("\n");
+					}
+
+					i++;
+				}
+			}
+		}else if (order.getShippingMode().equals("散货")) {
 			//装货
 			int sort = 1;
 			for (OrderAddress address : order.getLoadingAddressList()) {

+ 1 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/accountManagement/service/impl/AccountManagementServiceImpl.java

@@ -83,6 +83,7 @@ public class AccountManagementServiceImpl extends ServiceImpl<AccountManagementM
 			accountManagement.setCreateTime(new Date());
 			accountManagement.setTenantId(AuthUtil.getTenantId());
 			accountManagement.setEnableOrNot(0);
+			accountManagement.setAccountBalance(accountManagement.getOpeningAmount());
 			baseMapper.insert(accountManagement);
 		}else {
 			accountManagement.setUpdateUser(AuthUtil.getUserId());

+ 1 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.xml

@@ -86,7 +86,7 @@
         <if test="corpsDesc.status!=null and corpsDesc.status != ''">
             and status = #{corpsDesc.status}
         </if>
-        <if test="corpsDesc.enableOrNot != null and corpsDesc.enableOrNot != ''">
+        <if test="corpsDesc.enableOrNot != null">
             and enable_or_not = #{corpsDesc.enableOrNot}
         </if>
         <if test='corpsDesc.typeList !=null and corpsDesc.typeList.size>0'>

+ 16 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java

@@ -40,6 +40,7 @@ import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.OrderTypeEnum;
 import org.springblade.salesPart.order.service.IOrderItemsService;
 import org.springblade.salesPart.productLaunch.service.IProductLaunchFilesService;
+import org.springblade.salesPart.vo.OrderStatistics;
 import org.springblade.salesPart.vo.OrderVO;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
@@ -97,9 +98,11 @@ public class OrderController extends BladeController {
 			.eq(ObjectUtils.isNotEmpty(order.getStorageId()), PjOrder::getStorageId, order.getStorageId())//仓库
 			.like(ObjectUtils.isNotEmpty(order.getStorageName()), PjOrder::getStorageName, order.getStorageName())
 			.eq(ObjectUtils.isNotEmpty(order.getCustomerId()), PjOrder::getCustomerId, order.getCustomerId())//客户
+			.eq(ObjectUtils.isNotEmpty(order.getGenerateTask()), PjOrder::getGenerateTask, order.getGenerateTask())//客户
 			.like(ObjectUtils.isNotEmpty(order.getCustomerName()), PjOrder::getCustomerName, order.getCustomerName())
 			.like(ObjectUtils.isNotEmpty(order.getSrcOrdNo()), PjOrder::getSrcOrdNo, order.getSrcOrdNo())//来源单号
 			.like(ObjectUtils.isNotEmpty(order.getOrdNo()), PjOrder::getOrdNo, order.getOrdNo())//来源单号
+			.ne(ObjectUtils.isNotEmpty(order.getActualPaymentStatus()), PjOrder::getActualPaymentStatus, order.getActualPaymentStatus())//来源单号
 			.like(ObjectUtils.isNotEmpty(order.getBusinessSource()), PjOrder::getBusinessSource, order.getBusinessSource())//来源
 			.eq(ObjectUtils.isNotEmpty(order.getStatus()), PjOrder::getStatus, order.getStatus());//状态
 
@@ -143,8 +146,8 @@ public class OrderController extends BladeController {
 						item.setCreateUserName(user.getName());
 					}
 				}
-				item.setItem(orderItemsService.count(new LambdaQueryWrapper<PjOrderItems>().eq(PjOrderItems::getIsDeleted,0)
-				.eq(PjOrderItems::getPid,item.getId()))+"");
+				item.setItem(orderItemsService.count(new LambdaQueryWrapper<PjOrderItems>().eq(PjOrderItems::getIsDeleted, 0)
+					.eq(PjOrderItems::getPid, item.getId())) + "");
 			});
 		}
 
@@ -464,4 +467,15 @@ public class OrderController extends BladeController {
 	}
 
 
+	/**
+	 * 收款统计
+	 */
+	@GetMapping("/collectionStatistics")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入order")
+	public R<IPage<OrderStatistics>> collectionStatistics(OrderVO order, Query query) {
+		IPage<OrderStatistics> pages = orderService.collectionStatistics(Condition.getPage(query), order);
+		return R.data(pages);
+	}
+
 }

+ 9 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderMapper.java

@@ -19,6 +19,7 @@ package org.springblade.salesPart.order.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.salesPart.entity.PjOrder;
+import org.springblade.salesPart.vo.OrderStatistics;
 import org.springblade.salesPart.vo.OrderVO;
 
 import java.util.List;
@@ -39,5 +40,13 @@ public interface OrderMapper extends BaseMapper<PjOrder> {
 	 * @return
 	 */
 	List<OrderVO> selectOrderPage(IPage page, OrderVO order);
+/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param order
+	 * @return
+	 */
+	List<OrderStatistics> collectionStatistics(IPage page, OrderVO order);
 
 }

+ 8 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderMapper.xml

@@ -44,7 +44,14 @@
 
 
     <select id="selectOrderPage" resultMap="orderResultMap">
-        select * from pjpf_order where is_deleted = 0
+        select *
+        from pjpf_order
+        where is_deleted = 0
+    </select>
+    <select id="collectionStatistics" resultType="org.springblade.salesPart.vo.OrderStatistics">
+        select *
+        from pjpf_order
+        where is_deleted = 0
     </select>
 
 </mapper>

+ 10 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderService.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
 import org.springblade.salesPart.entity.PjOrder;
+import org.springblade.salesPart.vo.OrderStatistics;
 import org.springblade.salesPart.vo.OrderVO;
 
 /**
@@ -126,4 +127,13 @@ public interface IOrderService extends IService<PjOrder> {
 	PjOrder revokeCheckOrderCG(PjOrder order);
 
 	R revokeInboundTask(PjOrder order);
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param order
+	 * @return
+	 */
+	IPage<OrderStatistics> collectionStatistics(IPage<OrderStatistics> page, OrderVO order);
 }

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

@@ -49,6 +49,7 @@ import org.springblade.salesPart.ship.mapper.ShipItemsMapper;
 import org.springblade.salesPart.ship.mapper.ShipMapper;
 import org.springblade.salesPart.stock.mapper.StockDescMapper;
 import org.springblade.salesPart.storage.mapper.StorageDescMapper;
+import org.springblade.salesPart.vo.OrderStatistics;
 import org.springblade.salesPart.vo.OrderVO;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
@@ -140,6 +141,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	public IPage<OrderVO> selectOrderPage(IPage<OrderVO> page, OrderVO order) {
 		return page.setRecords(baseMapper.selectOrderPage(page, order));
 	}
+/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param order
+	 * @return
+	 */
+	@Override
+	public IPage<OrderStatistics> collectionStatistics(IPage<OrderStatistics> page, OrderVO order) {
+		return page.setRecords(baseMapper.collectionStatistics(page, order));
+	}
 
 	/**
 	 * 保存订单信息

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

@@ -112,7 +112,7 @@ public class ProductLaunchController extends BladeController {
 			lambdaQueryWrapper.apply(ObjectUtil.isNotEmpty(productLaunch.getSharedCompany()), "find_in_set('" + productLaunch.getSharedCompany() + "',shared_company)");//共享公司
 		}
 		IPage<PjProductLaunch> pages = productLaunchService.page(Condition.getPage(query), lambdaQueryWrapper);
-		String deptId = pages.getRecords().stream().map(PjProductLaunch::getSharedCompany).filter(ObjectUtils::isNotNull).distinct().collect(Collectors.joining());
+		String deptId = pages.getRecords().stream().map(PjProductLaunch::getSharedCompany).filter(ObjectUtils::isNotNull).distinct().collect(Collectors.joining(","));
 		R<List<Dept>> deptList = iSysClient.selectByDeptIds(deptId);
 		for (PjProductLaunch item : pages.getRecords()) {
 			if (ObjectUtils.isNotNull(deptList.getData()) && deptList.getData().size() > 0) {

+ 100 - 9
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/controller/SettlementController.java

@@ -16,23 +16,43 @@
  */
 package org.springblade.salesPart.settlement.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+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.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.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.salesPart.entity.PjCorpsType;
+import org.springblade.salesPart.entity.PjCorpsTypeDesc;
 import org.springblade.salesPart.entity.PjSettlement;
-import org.springblade.salesPart.vo.SettlementVO;
+import org.springblade.salesPart.entity.PjSettlementItems;
+import org.springblade.salesPart.excel.CorpsDescExportExcel;
+import org.springblade.salesPart.excel.PjSettlementExcel;
+import org.springblade.salesPart.settlement.service.ISettlementItemsService;
 import org.springblade.salesPart.settlement.service.ISettlementService;
-import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.salesPart.vo.CorpsDescVO;
+import org.springblade.salesPart.vo.SettlementVO;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.feign.ISysClient;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 配件批发收付款结算表 控制器
@@ -48,6 +68,10 @@ public class SettlementController extends BladeController {
 
 	private final ISettlementService settlementService;
 
+	private final ISettlementItemsService settlementItemsService;
+
+	private final ISysClient sysClient;
+
 	/**
 	 * 详情
 	 */
@@ -56,6 +80,8 @@ public class SettlementController extends BladeController {
 	@ApiOperation(value = "详情", notes = "传入settlement")
 	public R<PjSettlement> detail(PjSettlement settlement) {
 		PjSettlement detail = settlementService.getOne(Condition.getQueryWrapper(settlement));
+		detail.setSettlementItemsList(settlementItemsService.list(new LambdaQueryWrapper<PjSettlementItems>()
+		.eq(PjSettlementItems::getPid,detail.getId())));
 		return R.data(detail);
 	}
 
@@ -66,7 +92,22 @@ public class SettlementController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入settlement")
 	public R<IPage<PjSettlement>> list(PjSettlement settlement, Query query) {
-		IPage<PjSettlement> pages = settlementService.page(Condition.getPage(query), Condition.getQueryWrapper(settlement));
+		LambdaQueryWrapper<PjSettlement> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getCorpId()), PjSettlement::getCorpId, settlement.getCorpId());
+		lambdaQueryWrapper.like(ObjectUtils.isNotNull(settlement.getSysNo()), PjSettlement::getSysNo, settlement.getSysNo());
+		lambdaQueryWrapper.like(ObjectUtils.isNotNull(settlement.getContractNumber()), PjSettlement::getContractNumber, settlement.getContractNumber());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getAccountId()), PjSettlement::getAccountId, settlement.getAccountId());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getFinanceStatus()), PjSettlement::getFinanceStatus, settlement.getFinanceStatus());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getSettlementDate()), PjSettlement::getSettlementDate, settlement.getSettlementDate());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getSalesCompanyId()), PjSettlement::getSalesCompanyId, settlement.getSalesCompanyId());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getDc()), PjSettlement::getDc, settlement.getDc());
+		IPage<PjSettlement> pages = settlementService.page(Condition.getPage(query), lambdaQueryWrapper);
+		for (PjSettlement item : pages.getRecords()) {
+			R<Dept> res = sysClient.getDept(item.getSalesCompanyId());
+			if (res.isSuccess()) {
+				item.setSalesCompanyName(res.getData().getFullName());
+			}
+		}
 		return R.data(pages);
 	}
 
@@ -108,7 +149,57 @@ public class SettlementController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入settlement")
 	public R submit(@Valid @RequestBody PjSettlement settlement) {
-		return R.status(settlementService.saveOrUpdate(settlement));
+		return settlementService.add(settlement);
+	}
+
+	/**
+	 * 导出
+	 */
+	@GetMapping("/export")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "导出", notes = "传入corpsDesc")
+	public void pjCorpsExport(PjSettlement settlement, HttpServletResponse response) {
+		LambdaQueryWrapper<PjSettlement> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getCorpId()), PjSettlement::getCorpId, settlement.getCorpId());
+		lambdaQueryWrapper.like(ObjectUtils.isNotNull(settlement.getSysNo()), PjSettlement::getSysNo, settlement.getSysNo());
+		lambdaQueryWrapper.like(ObjectUtils.isNotNull(settlement.getContractNumber()), PjSettlement::getContractNumber, settlement.getContractNumber());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getAccountId()), PjSettlement::getAccountId, settlement.getAccountId());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getFinanceStatus()), PjSettlement::getFinanceStatus, settlement.getFinanceStatus());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getSettlementDate()), PjSettlement::getSettlementDate, settlement.getSettlementDate());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getSalesCompanyId()), PjSettlement::getSalesCompanyId, settlement.getSalesCompanyId());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getDc()), PjSettlement::getDc, settlement.getDc());
+		List<PjSettlement> list = settlementService.list(lambdaQueryWrapper);
+		for (PjSettlement item : list) {
+			R<Dept> res = sysClient.getDept(item.getSalesCompanyId());
+			if (res.isSuccess()) {
+				item.setSalesCompanyName(res.getData().getFullName());
+			}
+		}
+		if ("d".equals(settlement.getDc())){
+			ExcelUtil.export(response, "收款信息", "收款信息", BeanUtil.copy(list, PjSettlementExcel.class), PjSettlementExcel.class);
+		}else{
+			ExcelUtil.export(response, "付款信息", "付款信息", BeanUtil.copy(list, PjSettlementExcel.class), PjSettlementExcel.class);
+		}
+	}
+
+	/**
+	 * 收付费
+	 */
+	@PostMapping("/collectionAndPayment")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入settlement")
+	public R collectionAndPayment(@Valid @RequestBody PjSettlement settlement) {
+		return settlementService.collectionAndPayment(settlement);
+	}
+
+	/**
+	 * 收付费(撤销)
+	 */
+	@PostMapping("/revokeCollectionAndPayment")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入settlement")
+	public R revokeCollectionAndPayment(@Valid @RequestBody PjSettlement settlement) {
+		return settlementService.revokeCollectionAndPayment(settlement);
 	}
 
 

+ 6 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/service/ISettlementService.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.salesPart.settlement.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.salesPart.entity.PjSettlement;
 import org.springblade.salesPart.vo.SettlementVO;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -38,4 +39,9 @@ public interface ISettlementService extends IService<PjSettlement> {
 	 */
 	IPage<SettlementVO> selectSettlementPage(IPage<SettlementVO> page, SettlementVO settlement);
 
+    R add(PjSettlement settlement);
+
+	R collectionAndPayment(PjSettlement settlement);
+
+	R revokeCollectionAndPayment(PjSettlement settlement);
 }

+ 198 - 3
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/service/impl/SettlementServiceImpl.java

@@ -16,13 +16,32 @@
  */
 package org.springblade.salesPart.settlement.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.client.feign.ISerialClient;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.accountManagement.service.IAccountManagementService;
+import org.springblade.salesPart.entity.PjAccountManagement;
+import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.entity.PjSettlement;
-import org.springblade.salesPart.vo.SettlementVO;
+import org.springblade.salesPart.entity.PjSettlementItems;
+import org.springblade.salesPart.enums.OrderTypeEnum;
+import org.springblade.salesPart.order.service.IOrderService;
 import org.springblade.salesPart.settlement.mapper.SettlementMapper;
+import org.springblade.salesPart.settlement.service.ISettlementItemsService;
 import org.springblade.salesPart.settlement.service.ISettlementService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.salesPart.vo.SettlementVO;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 配件批发收付款结算表 服务实现类
@@ -31,11 +50,187 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2023-04-21
  */
 @Service
+@AllArgsConstructor
 public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, PjSettlement> implements ISettlementService {
 
+
+	private final ISettlementItemsService settlementItemsService;
+
+	private final IOrderService orderService;
+
+	private final IAccountManagementService accountManagementService;
+
+	/**
+	 * 生成系统编号
+	 */
+	private ISerialClient serialClient;
+
 	@Override
 	public IPage<SettlementVO> selectSettlementPage(IPage<SettlementVO> page, SettlementVO settlement) {
 		return page.setRecords(baseMapper.selectSettlementPage(page, settlement));
 	}
 
+	@Override
+	public R add(PjSettlement settlement) {
+		if (settlement.getId() == null) {
+			// 获取系统编号
+			R billNo = serialClient.getBillNo(settlement.getBillType(), settlement.getBillType(), settlement.getBillType());
+			if (billNo.getCode() != 200) {
+				return R.fail(500, "生成系统编号失败");
+			}
+			settlement.setSysNo((String) billNo.getData());
+			settlement.setCreateTime(new Date());
+			settlement.setCreateUser(AuthUtil.getUserId());
+			settlement.setTenantId(AuthUtil.getTenantId());
+			settlement.setSalesCompanyId(Long.parseLong(AuthUtil.getDeptId()));
+			settlement.setFinanceStatus(OrderTypeEnum.WAITPAYMENT.getType());
+		} else {
+			settlement.setUpdateTime(new Date());
+			settlement.setUpdateUser(AuthUtil.getUserId());
+		}
+		this.saveOrUpdate(settlement);
+		StringBuilder stringBuilder = new StringBuilder();
+		if (ObjectUtils.isNotNull(settlement.getSettlementItemsList())) {
+			for (PjSettlementItems item : settlement.getSettlementItemsList()) {
+				stringBuilder.append(item.getSrcBillNo()).append(",");
+				if (item.getId() == null) {
+					item.setCreateTime(new Date());
+					item.setPid(settlement.getId());
+					item.setCreateUser(AuthUtil.getUserId());
+					item.setTenantId(AuthUtil.getTenantId());
+				} else {
+					item.setUpdateTime(new Date());
+					item.setUpdateUser(AuthUtil.getUserId());
+				}
+			}
+			settlementItemsService.saveOrUpdateBatch(settlement.getSettlementItemsList());
+		}
+		settlement.setContractNumber(stringBuilder.toString());
+		this.saveOrUpdate(settlement);
+		return R.data(settlement);
+	}
+
+
+	@Override
+	public R collectionAndPayment(PjSettlement settlement) {
+		if (ObjectUtils.isNotNull(settlement.getSettlementItemsList())) {
+			List<Long> ids = settlement.getSettlementItemsList().stream().map(PjSettlementItems::getSrcParentId).collect(Collectors.toList());
+			if (ObjectUtils.isNull(ids) || ids.size() == 0) {
+				throw new RuntimeException("未找到订单");
+			}
+			List<PjOrder> pjOrderList = orderService.list(new LambdaQueryWrapper<PjOrder>().in(PjOrder::getId, ids));
+			if (ObjectUtils.isNull(pjOrderList) || pjOrderList.size() == 0) {
+				throw new RuntimeException("未找到订单信息");
+			}
+			List<PjOrder> orderArrayList = new ArrayList<>();
+			BigDecimal thisAmount = new BigDecimal("0.00");
+			for (PjSettlementItems item : settlement.getSettlementItemsList()) {
+				item.setUpdateTime(new Date());
+				item.setUpdateUser(AuthUtil.getUserId());
+				PjOrder pjOrder = pjOrderList.stream().findFirst().orElse(null);
+				if (pjOrder == null) {
+					continue;
+				}
+				if (ObjectUtils.isNotNull(pjOrder.getPaymentAmountTl())) {
+					pjOrder.setPaymentAmountTl(pjOrder.getPaymentAmountTl().add(item.getThisAmount()));
+				} else {
+					pjOrder.setPaymentAmountTl(item.getThisAmount());
+				}
+				if (pjOrder.getPaymentAmountTl().equals(pjOrder.getTotalMoney())) {
+					pjOrder.setActualPaymentStatus(2);
+				} else {
+					pjOrder.setActualPaymentStatus(3);
+				}
+				pjOrder.setUpdateTime(new Date());
+				pjOrder.setUpdateUser(AuthUtil.getUserId());
+				orderArrayList.add(pjOrder);
+				thisAmount = thisAmount.add(item.getThisAmount());
+			}
+			settlementItemsService.saveOrUpdateBatch(settlement.getSettlementItemsList());
+			orderService.updateBatchById(orderArrayList);
+			PjAccountManagement pjAccountManagement = accountManagementService.getById(settlement.getAccountId());
+			if (ObjectUtils.isNotNull(pjAccountManagement)) {
+				pjAccountManagement.setId(settlement.getAccountId());
+				pjAccountManagement.setUpdateTime(new Date());
+				pjAccountManagement.setUpdateUser(AuthUtil.getUserId());
+				if ("D".equals(settlement.getDc())) {
+					if (ObjectUtils.isNotNull(pjAccountManagement.getAccountBalance())) {
+						pjAccountManagement.setAccountBalance(pjAccountManagement.getAccountBalance().add(thisAmount));
+					} else {
+						pjAccountManagement.setAccountBalance(thisAmount);
+					}
+				} else {
+					if (ObjectUtils.isNull(pjAccountManagement.getAccountBalance()) || pjAccountManagement.getAccountBalance().compareTo(thisAmount) < 0) {
+						throw new RuntimeException("账户:" + pjAccountManagement.getCname() + "余额不足,支付失败");
+					} else {
+						pjAccountManagement.setAccountBalance(pjAccountManagement.getAccountBalance().subtract(thisAmount));
+					}
+				}
+				accountManagementService.updateById(pjAccountManagement);
+			}
+		}
+		settlement.setFinanceStatus(OrderTypeEnum.PAID.getType());
+		baseMapper.updateById(settlement);
+		return R.data(settlement);
+	}
+
+	@Override
+	public R revokeCollectionAndPayment(PjSettlement settlement) {
+		if (ObjectUtils.isNotNull(settlement.getSettlementItemsList())) {
+			List<Long> ids = settlement.getSettlementItemsList().stream().map(PjSettlementItems::getSrcParentId).collect(Collectors.toList());
+			if (ObjectUtils.isNull(ids) || ids.size() == 0) {
+				throw new RuntimeException("未找到订单");
+			}
+			List<PjOrder> pjOrderList = orderService.list(new LambdaQueryWrapper<PjOrder>().in(PjOrder::getId, ids));
+			if (ObjectUtils.isNull(pjOrderList) || pjOrderList.size() == 0) {
+				throw new RuntimeException("未找到订单信息");
+			}
+			List<PjOrder> orderArrayList = new ArrayList<>();
+			BigDecimal thisAmount = new BigDecimal("0.00");
+			for (PjSettlementItems item : settlement.getSettlementItemsList()) {
+				item.setUpdateTime(new Date());
+				item.setUpdateUser(AuthUtil.getUserId());
+				PjOrder pjOrder = pjOrderList.stream().findFirst().orElse(null);
+				if (pjOrder == null) {
+					continue;
+				}
+				if (ObjectUtils.isNotNull(pjOrder.getPaymentAmountTl())) {
+					pjOrder.setPaymentAmountTl(pjOrder.getPaymentAmountTl().subtract(item.getThisAmount()));
+				} else {
+					pjOrder.setPaymentAmountTl(new BigDecimal("0.00"));
+				}
+				if (pjOrder.getPaymentAmountTl().equals(new BigDecimal("0.00"))) {
+					pjOrder.setActualPaymentStatus(1);
+				} else {
+					pjOrder.setActualPaymentStatus(3);
+				}
+				pjOrder.setUpdateTime(new Date());
+				pjOrder.setUpdateUser(AuthUtil.getUserId());
+				orderArrayList.add(pjOrder);
+				thisAmount = thisAmount.add(item.getThisAmount());
+			}
+			settlementItemsService.saveOrUpdateBatch(settlement.getSettlementItemsList());
+			orderService.updateBatchById(orderArrayList);
+			PjAccountManagement pjAccountManagement = accountManagementService.getById(settlement.getAccountId());
+			if (ObjectUtils.isNotNull(pjAccountManagement)) {
+				pjAccountManagement.setId(settlement.getAccountId());
+				pjAccountManagement.setUpdateTime(new Date());
+				pjAccountManagement.setUpdateUser(AuthUtil.getUserId());
+				if ("D".equals(settlement.getDc())) {
+					if (ObjectUtils.isNotNull(pjAccountManagement.getAccountBalance())) {
+						pjAccountManagement.setAccountBalance(pjAccountManagement.getAccountBalance().subtract(thisAmount));
+					} else {
+						pjAccountManagement.setAccountBalance(new BigDecimal("0.00"));
+					}
+				} else {
+					pjAccountManagement.setAccountBalance(pjAccountManagement.getAccountBalance().add(thisAmount));
+				}
+				accountManagementService.updateById(pjAccountManagement);
+			}
+		}
+		settlement.setFinanceStatus(OrderTypeEnum.WAITPAYMENT.getType());
+		baseMapper.updateById(settlement);
+		return R.data(settlement);
+	}
+
 }