Browse Source

2022年10月14日20:30:48

纪新园 3 years ago
parent
commit
d4c1b239a9
25 changed files with 933 additions and 322 deletions
  1. 11 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IGoodsDescClient.java
  2. 154 0
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/GoodsSpecificationDto.java
  3. 189 188
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/PriceBank.java
  4. 0 5
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderCost.java
  5. 1 13
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderCostItem.java
  6. 150 3
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderItems.java
  7. 1 1
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/dto/ScanningCodeAddPcDto.java
  8. 6 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/Order.java
  9. 12 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderItems.java
  10. 12 0
      blade-service/blade-client/src/main/java/org/springblade/client/goods/feign/GoodsDescClient.java
  11. 1 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java
  12. 17 1
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/PriceBankController.java
  13. 6 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/IPriceBankService.java
  14. 75 43
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/PriceBankServiceImpl.java
  15. 4 4
      blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectServiceImpl.java
  16. 8 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderCostController.java
  17. 2 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportEnquiryController.java
  18. 8 5
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderCostServiceImpl.java
  19. 91 21
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  20. 61 2
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/controller/WoodHarvestingCloudController.java
  21. 7 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/mapper/OrderItemsMapper.java
  22. 19 2
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/mapper/OrderItemsMapper.xml
  23. 8 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/IOrderItemsService.java
  24. 57 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderItemsServiceImpl.java
  25. 33 32
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

+ 11 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IGoodsDescClient.java

@@ -1,6 +1,7 @@
 package org.springblade.client.feign;
 
 import org.springblade.client.entity.GoodsDesc;
+import org.springblade.client.entity.GoodsSpecification;
 import org.springblade.client.entity.GoodsType;
 import org.springblade.client.vo.GoodsDescVO;
 import org.springblade.common.constant.LauncherConstant;
@@ -34,6 +35,7 @@ public interface IGoodsDescClient {
 	String GET_GOODS_DESC_BY_CNAME = API_PREFIX+ "getGoodsDescByCname";
 	String GOODS_ITEMSID = API_PREFIX+ "selectItemsIdGoods";
 	String GOODS_ALL = API_PREFIX+ "selectGoodsDescAll";
+	String GOODS_SPECIFICATION_LIST = API_PREFIX+ "goodsSpecificationList";
 
 	/**
 	 * 根据销售明细的商品id获得商品信息
@@ -177,4 +179,13 @@ public interface IGoodsDescClient {
 	 */
 	@GetMapping(GOODS_ALL)
 	List<GoodsDesc> selectGoodsDescAll();
+
+	/**
+	 * 根据销售明细的商品id获得商品信息
+	 *
+	 * @param itemIds
+	 * @return
+	 */
+	@GetMapping(GOODS_SPECIFICATION_LIST)
+	List<GoodsSpecification> goodsSpecificationList(@RequestParam("itemIds") Long itemIds);
 }

+ 154 - 0
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/GoodsSpecificationDto.java

@@ -0,0 +1,154 @@
+/*
+ *      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.mocha.entity;
+
+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.util.Date;
+
+/**
+ * 商品规格明细表实体类
+ *
+ * @author BladeX
+ * @since 2021-11-09
+ */
+@Data
+@TableName("basic_goods_specification")
+@ApiModel(value = "GoodsSpecification对象", description = "商品规格明细表")
+public class GoodsSpecificationDto implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	* 主键
+	*/
+		@ApiModelProperty(value = "主键")
+		private Long id;
+	/**
+	 * 主表id
+	 */
+		@ApiModelProperty(value = "主表id")
+		private Long pid;
+	/**
+	* 名称
+	*/
+		@ApiModelProperty(value = "名称")
+		private String cname;
+	/**
+	* 材质
+	*/
+		@ApiModelProperty(value = "材质")
+		private String texture;
+	/**
+	* 颜色
+	*/
+		@ApiModelProperty(value = "颜色")
+		private String colour;
+	/**
+	* 描述
+	*/
+		@ApiModelProperty(value = "描述")
+		private String description;
+	/**
+	* 备注
+	*/
+		@ApiModelProperty(value = "备注")
+		private String remarks;
+	/**
+	* 版本
+	*/
+		@ApiModelProperty(value = "版本")
+		private String version;
+	/**
+	 * 租户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 status;
+	/**
+	* 是否已删除(0 否 1是)
+	*/
+		@TableLogic
+		@ApiModelProperty(value = "是否已删除(0 否 1是)")
+		private Integer isDeleted;
+
+	/**
+	 * 属性编号
+	 */
+	@ApiModelProperty(value = "属性编号")
+	private String attributeNo;
+
+	/**
+	 * 属性名称
+	 */
+	@ApiModelProperty(value = "属性名称")
+	private String attributeName;
+
+	/**
+	 * 属性值
+	 */
+	@ApiModelProperty(value = "属性值")
+	private String attributeData;
+
+	/**
+	 * 排序
+	 */
+	@ApiModelProperty(value = "排序")
+	private Integer sort;
+
+	/**
+	 * 类型  0:属性  1:配件
+	 */
+	@ApiModelProperty(value = "类型  0:属性  1:配件")
+	private String type;
+
+
+}

+ 189 - 188
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/PriceBank.java

@@ -16,18 +16,17 @@
  */
 package org.springblade.mocha.entity;
 
-import java.math.BigDecimal;
-
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-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;
+import java.util.List;
 
 /**
  * 出口价格库实体类
@@ -43,234 +42,236 @@ public class PriceBank implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	/**
-	* 主键
-	*/
-		@ApiModelProperty(value = "主键")
-		private Long id;
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
 	/**
-	* 货物id
-	*/
-		@ApiModelProperty(value = "货物id")
-		private Long itemId;
+	 * 货物id
+	 */
+	@ApiModelProperty(value = "货物id")
+	private Long itemId;
 	/**
-	* 商品编码
-	*/
-		@ApiModelProperty(value = "商品编码")
-		private String code;
+	 * 商品编码
+	 */
+	@ApiModelProperty(value = "商品编码")
+	private String code;
 	/**
-	* 商品名称
-	*/
-		@ApiModelProperty(value = "商品名称")
-		private String cname;
+	 * 商品名称
+	 */
+	@ApiModelProperty(value = "商品名称")
+	private String cname;
 	/**
 	 * 商品名称
 	 */
-		@ApiModelProperty(value = "商品名称")
-		private String ename;
+	@ApiModelProperty(value = "商品名称")
+	private String ename;
 	/**
-	* 规格
-	*/
-		@ApiModelProperty(value = "规格")
-		private String specs;
+	 * 规格
+	 */
+	@ApiModelProperty(value = "规格")
+	private String specs;
 	/**
 	 * 产品属性
 	 */
-		@ApiModelProperty(value = "产品属性")
-		private String goodNature;
+	@ApiModelProperty(value = "产品属性")
+	private String goodNature;
 
 	/**
-	* 供应商
-	*/
-		@ApiModelProperty(value = "供应商")
-		private Long corpId;
-	/**
-	* 供应商名称
-	*/
-		@ApiModelProperty(value = "供应商名称")
-		private String corpName;
-	/**
-	* 币别
-	*/
-		@ApiModelProperty(value = "币别")
-		private String currency;
-	/**
-	* FOB系数
-	*/
-		@ApiModelProperty(value = "FOB系数")
-		private BigDecimal coefficient;
-	/**
-	* 价格类型 销售价格 XS 采购价格 CG
-	*/
-		@ApiModelProperty(value = "价格类型 销售价格 XS 采购价格 CG")
-		private String billType;
-	/**
-	* 价格类型(枚举:国内、进口、出口)
-	*/
-		@ApiModelProperty(value = "价格类型(枚举:国内、进口、出口)")
-		private String tradeType;
-	/**
-	* 有效期开始
-	*/
-		@ApiModelProperty(value = "有效期开始")
-		private Date startTime;
-	/**
-	* 有效期结束
-	*/
-		@ApiModelProperty(value = "有效期结束")
-		private Date endTime;
-	/**
-	* 采购人或销售人
-	*/
-		@ApiModelProperty(value = "采购人或销售人")
-		private String person;
-	/**
-	* 最新采购价或最新销售价
-	*/
-		@ApiModelProperty(value = "最新采购价或最新销售价")
-		private BigDecimal price;
-	/**
-	* 最新价格日期
-	*/
-		@ApiModelProperty(value = "最新价格日期")
-		private Date priceTime;
-	/**
-	* 历史价格1
-	*/
-		@ApiModelProperty(value = "历史价格1")
-		private BigDecimal priceOne;
-	/**
-	* 历史价格日期
-	*/
-		@ApiModelProperty(value = "历史价格日期")
-		private Date priceOneTime;
-	/**
-	* 历史价格2
-	*/
-		@ApiModelProperty(value = "历史价格2")
-		private BigDecimal priceTwo;
-	/**
-	* 历史价格日期
-	*/
-		@ApiModelProperty(value = "历史价格日期")
-		private Date priceTwoTime;
-	/**
-	* 历史价格3
-	*/
-		@ApiModelProperty(value = "历史价格3")
-		private BigDecimal priceThree;
-	/**
-	* 历史价格日期
-	*/
-		@ApiModelProperty(value = "历史价格日期")
-		private Date priceThreeTime;
-	/**
-	* 采购备注或销售备注
-	*/
-		@ApiModelProperty(value = "采购备注或销售备注")
-		private String remarks;
-	/**
-	* 版本
-	*/
-		@ApiModelProperty(value = "版本")
-		private String version;
+	 * 供应商
+	 */
+	@ApiModelProperty(value = "供应商")
+	private Long corpId;
+	/**
+	 * 供应商名称
+	 */
+	@ApiModelProperty(value = "供应商名称")
+	private String corpName;
+	/**
+	 * 币别
+	 */
+	@ApiModelProperty(value = "币别")
+	private String currency;
+	/**
+	 * FOB系数
+	 */
+	@ApiModelProperty(value = "FOB系数")
+	private BigDecimal coefficient;
+	/**
+	 * 价格类型 销售价格 XS 采购价格 CG
+	 */
+	@ApiModelProperty(value = "价格类型 销售价格 XS 采购价格 CG")
+	private String billType;
+	/**
+	 * 价格类型(枚举:国内、进口、出口)
+	 */
+	@ApiModelProperty(value = "价格类型(枚举:国内、进口、出口)")
+	private String tradeType;
+	/**
+	 * 有效期开始
+	 */
+	@ApiModelProperty(value = "有效期开始")
+	private Date startTime;
+	/**
+	 * 有效期结束
+	 */
+	@ApiModelProperty(value = "有效期结束")
+	private Date endTime;
+	/**
+	 * 采购人或销售人
+	 */
+	@ApiModelProperty(value = "采购人或销售人")
+	private String person;
+	/**
+	 * 最新采购价或最新销售价
+	 */
+	@ApiModelProperty(value = "最新采购价或最新销售价")
+	private BigDecimal price;
+	/**
+	 * 最新价格日期
+	 */
+	@ApiModelProperty(value = "最新价格日期")
+	private Date priceTime;
+	/**
+	 * 历史价格1
+	 */
+	@ApiModelProperty(value = "历史价格1")
+	private BigDecimal priceOne;
+	/**
+	 * 历史价格日期
+	 */
+	@ApiModelProperty(value = "历史价格日期")
+	private Date priceOneTime;
+	/**
+	 * 历史价格2
+	 */
+	@ApiModelProperty(value = "历史价格2")
+	private BigDecimal priceTwo;
+	/**
+	 * 历史价格日期
+	 */
+	@ApiModelProperty(value = "历史价格日期")
+	private Date priceTwoTime;
+	/**
+	 * 历史价格3
+	 */
+	@ApiModelProperty(value = "历史价格3")
+	private BigDecimal priceThree;
+	/**
+	 * 历史价格日期
+	 */
+	@ApiModelProperty(value = "历史价格日期")
+	private Date priceThreeTime;
+	/**
+	 * 采购备注或销售备注
+	 */
+	@ApiModelProperty(value = "采购备注或销售备注")
+	private String remarks;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
 	/**
 	 * 租户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 status;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		@TableLogic
-		private Integer isDeleted;
+	@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 status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	@TableLogic
+	private Integer isDeleted;
 	/**
 	 * 汇率
 	 */
-		@ApiModelProperty(value = "汇率")
-		private BigDecimal exchangeRate;
+	@ApiModelProperty(value = "汇率")
+	private BigDecimal exchangeRate;
 	/**
 	 * 美元价格
 	 */
-		@ApiModelProperty(value = "美元价格")
-		private BigDecimal greenback;
+	@ApiModelProperty(value = "美元价格")
+	private BigDecimal greenback;
 	/**
 	 * 美金成本
 	 */
-		@ApiModelProperty(value = "美元成本")
-		private BigDecimal usdCost;
+	@ApiModelProperty(value = "美元成本")
+	private BigDecimal usdCost;
 	/**
 	 * 税率
 	 */
-		@ApiModelProperty(value = "税率")
-		private BigDecimal taxRate;
+	@ApiModelProperty(value = "税率")
+	private BigDecimal taxRate;
 	/**
 	 * 商品类别中文名
-	*/
-		@ApiModelProperty(value = "商品类别中文名")
-		private String goodsTypeName;
+	 */
+	@ApiModelProperty(value = "商品类别中文名")
+	private String goodsTypeName;
 	/**
 	 * 商品类型id
 	 */
-		@ApiModelProperty(value = "商品类型id")
-		private Long goodTypeId;
+	@ApiModelProperty(value = "商品类型id")
+	private Long goodTypeId;
 	/**
 	 * 采购金额
 	 */
-		@ApiModelProperty(value = "采购金额")
-		private BigDecimal purchaseAmount;
+	@ApiModelProperty(value = "采购金额")
+	private BigDecimal purchaseAmount;
 	/**
 	 * 是否重点推荐 0 否 1 是
 	 */
-		@ApiModelProperty(value = "是否重点推荐 0 否 1 是")
-		private Integer priorityReferrer;
+	@ApiModelProperty(value = "是否重点推荐 0 否 1 是")
+	private Integer priorityReferrer;
 	/**
 	 * 推荐理由
 	 */
-		@ApiModelProperty(value = "推荐理由")
-		private String referrerReason;
+	@ApiModelProperty(value = "推荐理由")
+	private String referrerReason;
 	/**
 	 * 英文描述
 	 */
-		@ApiModelProperty(value = "英文描述")
-		@TableField(exist = false)
-		private String cnameDescription;
+	@ApiModelProperty(value = "英文描述")
+	@TableField(exist = false)
+	private String cnameDescription;
 	/**
 	 * 供应商编码
 	 */
-		@ApiModelProperty(value = "供应商编码")
-		@TableField(exist = false)
-		private String corpCode;
+	@ApiModelProperty(value = "供应商编码")
+	@TableField(exist = false)
+	private String corpCode;
 
+	@TableField(exist = false)
+	private List<GoodsSpecificationDto> goodsSpecificationList;
 
 }

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

@@ -57,11 +57,6 @@ public class OrderCost implements Serializable {
 		@ApiModelProperty(value = "货物属性")
 		private String goodsAttribute;
 	/**
-	* 出运港id
-	*/
-		@ApiModelProperty(value = "出运港id")
-		private Long outHarborId;
-	/**
 	* 出运港名
 	*/
 		@ApiModelProperty(value = "出运港名")

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

@@ -67,7 +67,7 @@ public class OrderCostItem implements Serializable {
 	* 起运地id
 	*/
 		@ApiModelProperty(value = "起运地id")
-		private Long departureId;
+		private String departureId;
 	/**
 	* 起运地
 	*/
@@ -150,17 +150,5 @@ public class OrderCostItem implements Serializable {
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 
-	/**
-	 * 箱型
-	 */
-	@ApiModelProperty(value = "箱型")
-	private String boxPile;
-
-	/**
-	 * 价格
-	 */
-	@ApiModelProperty(value = "价格")
-	private BigDecimal amount;
-
 
 }

+ 150 - 3
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderItems.java

@@ -17,7 +17,6 @@
 package org.springblade.purchase.sales.entity;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -409,9 +408,9 @@ public class OrderItems implements Serializable {
 	private String productRemark;
 
 	@ApiModelProperty(value = "已收发票重量")
-	private BigDecimal  actualWeight;
+	private BigDecimal actualWeight;
 	@ApiModelProperty(value = "产品价格")
-	private BigDecimal  productPrice;
+	private BigDecimal productPrice;
 	@ApiModelProperty(value = "商品类型 默认0 为商品 1 为赠品")
 	private int goodType;
 	@ApiModelProperty(value = "单品毛利率")
@@ -544,4 +543,152 @@ public class OrderItems implements Serializable {
 	private String attributeList;
 
 
+	/**
+	 * 阀门配件名
+	 */
+	@ApiModelProperty(value = "阀门配件名")
+	private String partsValveName;
+	/**
+	 * 阀门配件成本价格
+	 */
+	@ApiModelProperty(value = "阀门配件成本价格")
+	private BigDecimal partsValveCostPrice;
+	/**
+	 * 阀门配件值
+	 */
+	@ApiModelProperty(value = "阀门配件值")
+	private String partsValveValue;
+	/**
+	 * 阀门配件销售价格
+	 */
+	@ApiModelProperty(value = "阀门配件销售价格")
+	private BigDecimal partsValveSalePrice;
+
+	/**
+	 * 瓶帽配件名
+	 */
+	@ApiModelProperty(value = "瓶帽配件名")
+	private String partsCapName;
+	/**
+	 * 瓶帽配件成本价格
+	 */
+	@ApiModelProperty(value = "瓶帽配件成本价格")
+	private BigDecimal partsCapCostPrice;
+	/**
+	 * 瓶帽配件值
+	 */
+	@ApiModelProperty(value = "瓶帽配件值")
+	private String partsCapValue;
+	/**
+	 * 瓶帽配件销售价格
+	 */
+	@ApiModelProperty(value = "瓶帽配件销售价格")
+	private BigDecimal partsCapSalePrice;
+
+	/**
+	 * 特殊处理 配件名
+	 */
+	@ApiModelProperty(value = "特殊处理 配件名")
+	private String parts_handleName;
+	/**
+	 * 特殊处理 配件成本价格
+	 */
+	@ApiModelProperty(value = "特殊处理 配件成本价格")
+	private BigDecimal parts_handleCostPrice;
+	/**
+	 * 特殊处理 配件值
+	 */
+	@ApiModelProperty(value = "特殊处理 配件值")
+	private String parts_handleValue;
+	/**
+	 * 特殊处理 配件销售价格
+	 */
+	@ApiModelProperty(value = "特殊处理 配件销售价格")
+	private BigDecimal parts_handleSalePrice;
+
+	/**
+	 * 特殊颜色 配件名
+	 */
+	@ApiModelProperty(value = "特殊颜色 配件名")
+	private String partsColourName;
+	/**
+	 * 特殊颜色 配件成本价格
+	 */
+	@ApiModelProperty(value = "特殊颜色 配件成本价格")
+	private BigDecimal partsColourCostPrice;
+	/**
+	 * 特殊颜色 配件值
+	 */
+	@ApiModelProperty(value = "特殊颜色 配件值")
+	private String partsColourValue;
+	/**
+	 * 特殊颜色 配件销售价格
+	 */
+	@ApiModelProperty(value = "特殊颜色 配件销售价格")
+	private BigDecimal partsColourSalePrice;
+
+	/**
+	 * 特殊颜色 配件名
+	 */
+	@ApiModelProperty(value = "特殊颜色 配件名")
+	private String partsModeName;
+	/**
+	 * 特殊颜色 配件成本价格
+	 */
+	@ApiModelProperty(value = "特殊颜色 配件成本价格")
+	private BigDecimal partsModeCostPrice;
+	/**
+	 * 特殊颜色 配件值
+	 */
+	@ApiModelProperty(value = "特殊颜色 配件值")
+	private String partsModeValue;
+	/**
+	 * 特殊颜色 配件销售价格
+	 */
+	@ApiModelProperty(value = "特殊颜色 配件销售价格")
+	private BigDecimal partsModeSalePrice;
+
+	/**
+	 * 认证 配件名
+	 */
+	@ApiModelProperty(value = "认证 配件名")
+	private String partsAuthenticationName;
+	/**
+	 * 认证 配件成本价格
+	 */
+	@ApiModelProperty(value = "认证 配件成本价格")
+	private BigDecimal partsAuthenticationCostPrice;
+	/**
+	 * 认证 配件值
+	 */
+	@ApiModelProperty(value = "认证 配件值")
+	private String partsAuthenticationValue;
+	/**
+	 * 认证 配件销售价格
+	 */
+	@ApiModelProperty(value = "认证 配件销售价格")
+	private BigDecimal partsAuthenticationSalePrice;
+
+	/**
+	 * 其他 配件名
+	 */
+	@ApiModelProperty(value = "其他 配件名")
+	private String partsOtherName;
+	/**
+	 * 其他 配件成本价格
+	 */
+	@ApiModelProperty(value = "其他 配件成本价格")
+	private BigDecimal partsOtherCostPrice;
+	/**
+	 * 其他 配件值
+	 */
+	@ApiModelProperty(value = "其他 配件值")
+	private String partsOtherValue;
+	/**
+	 * 其他 配件销售价格
+	 */
+	@ApiModelProperty(value = "其他 配件销售价格")
+	private BigDecimal partsOtherSalePrice;
+
+
 }

+ 1 - 1
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/dto/ScanningCodeAddPcDto.java

@@ -19,7 +19,7 @@ import java.util.List;
 @Data
 @Builder
 @AllArgsConstructor
-public class ScanningCodeAddPcDto {
+public class ScanningCodeAddPcDto extends OrderItems{
 	private static final long serialVersionUID = 1L;
 
 	private Long id;

+ 6 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/Order.java

@@ -861,4 +861,10 @@ public class Order extends OrderBase {
 	@TableField(exist = false)
 	private String pdStatus;
 
+	/**
+	 * 是否扫码
+	 */
+	@ApiModelProperty(value = "是否扫码")
+	private String isScanning;
+
 }

+ 12 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderItems.java

@@ -623,4 +623,16 @@ public class OrderItems extends OrderBase {
 	@ApiModelProperty(value = "仓库id")
 	private Long warehouseId;
 
+	/**
+	 * 打印人
+	 */
+	@ApiModelProperty(value = "打印人")
+	private String printedBy;
+
+	/**
+	 * 打印日期
+	 */
+	@ApiModelProperty(value = "打印日期")
+	private Date printedDate;
+
 }

+ 12 - 0
blade-service/blade-client/src/main/java/org/springblade/client/goods/feign/GoodsDescClient.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.client.entity.GoodsDesc;
+import org.springblade.client.entity.GoodsSpecification;
 import org.springblade.client.entity.GoodsType;
 import org.springblade.client.feign.IGoodsDescClient;
 import org.springblade.client.goods.service.IGoodsDescService;
@@ -218,6 +219,17 @@ public class GoodsDescClient implements IGoodsDescClient {
 		return goodsDescService.list(lambdaQueryWrapper);
 	}
 
+	@Override
+	public List<GoodsSpecification> goodsSpecificationList(Long itemIds) {
+		// 查询商品规格明细
+		List<GoodsSpecification> goodsSpecificationList = goodsSpecificationService.list(new LambdaQueryWrapper<GoodsSpecification>()
+			.eq(GoodsSpecification::getPid, itemIds)
+			.eq(GoodsSpecification::getIsDeleted, 0)
+			.eq(GoodsSpecification::getTenantId, SecureUtil.getTenantId())
+		);
+		return goodsSpecificationList;
+	}
+
 	/**
 	 * 递归查询ID
 	 */

+ 1 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java

@@ -112,6 +112,7 @@ public class DeliveryController extends BladeController {
 		lambdaQueryWrapper.like(Func.isNotEmpty(delivery.getDeliveryRemarks()),Delivery::getDeliveryRemarks,delivery.getDeliveryRemarks());//备注
 		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getCreateUser()),Delivery::getCreateUser,delivery.getCreateUser());//制单人
 		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getStorageId()),Delivery::getStorageId,delivery.getStorageId());//仓库
+		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getDeliveryStatus()),Delivery::getDeliveryStatus,delivery.getDeliveryStatus());//状态
 		lambdaQueryWrapper.orderByDesc(Delivery::getId);
 		IPage<Delivery> pages = deliveryService.page(Condition.getPage(query), lambdaQueryWrapper);
 		if (CollectionUtils.isNotEmpty(pages.getRecords())){

+ 17 - 1
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/PriceBankController.java

@@ -28,7 +28,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
 import org.springblade.client.entity.CorpsDesc;
-import org.springblade.client.entity.GoodsDesc;
+import org.springblade.client.entity.GoodsSpecification;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IGoodsDescClient;
 import org.springblade.client.vo.GoodsDescVO;
@@ -37,7 +37,9 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 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.Func;
+import org.springblade.mocha.entity.GoodsSpecificationDto;
 import org.springblade.mocha.excel.PriceBankExcel;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -161,6 +163,10 @@ public class PriceBankController extends BladeController {
 					}
 
 				}
+				List<GoodsSpecification> goodsSpecificationList = goodsDescClient.goodsSpecificationList(item.getItemId());
+				List<GoodsSpecificationDto> goodsSpecificationDtoList = BeanUtil.copy(goodsSpecificationList, GoodsSpecificationDto.class);
+				item.setGoodsSpecificationList(goodsSpecificationDtoList);
+
 			});
 		}
 		return R.data(pages);
@@ -272,5 +278,15 @@ public class PriceBankController extends BladeController {
 		return priceBankService.importUser(excelList,false);
 	}
 
+	/**
+	 * 更新产品价格商品类别
+	 */
+	@GetMapping("/updateParts")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "入库明细打印", notes = "ids")
+	public R updateParts(@RequestParam(value = "ids") String ids) {
+		return priceBankService.updateParts(ids);
+	}
+
 
 }

+ 6 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/IPriceBankService.java

@@ -57,4 +57,10 @@ public interface IPriceBankService extends IService<PriceBank> {
 	 */
 	R importUser(List<PriceBankExcel> data, Boolean isCovered);
 
+	/**
+	 * 更新产品价格商品类别
+	 * @param ids
+	 * @return
+	 */
+    R updateParts(String ids);
 }

+ 75 - 43
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/PriceBankServiceImpl.java

@@ -18,8 +18,11 @@ package org.springblade.mocha.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.GoodsDesc;
@@ -30,13 +33,11 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.PriceBank;
 import org.springblade.mocha.excel.PriceBankExcel;
-import org.springblade.mocha.vo.PriceBankVO;
 import org.springblade.mocha.mapper.PriceBankMapper;
 import org.springblade.mocha.service.IPriceBankService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.mocha.vo.PriceBankVO;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
@@ -56,6 +57,7 @@ public class PriceBankServiceImpl extends ServiceImpl<PriceBankMapper, PriceBank
 	private final ICorpsDescClient corpsDescClient;//获取客户信息
 	private final IGoodsDescClient goodsDescClient;//商品信息
 	private IUserClient userClient;//用户信息
+
 	@Override
 	public IPage<PriceBankVO> selectPriceBankPage(IPage<PriceBankVO> page, PriceBankVO priceBank) {
 		return page.setRecords(baseMapper.selectPriceBankPage(page, priceBank));
@@ -65,24 +67,24 @@ public class PriceBankServiceImpl extends ServiceImpl<PriceBankMapper, PriceBank
 	@Transactional
 	public PriceBank savePrice(PriceBank priceBank) {
 		PriceBank price = baseMapper.selectOne(new QueryWrapper<PriceBank>().eq("item_id", priceBank.getItemId()).eq("corp_id", priceBank.getCorpId())
-			.eq("specs", priceBank.getSpecs()).eq("is_deleted", 0).eq("tenant_id",SecureUtil.getTenantId())
-			.eq("bill_type",priceBank.getBillType()).eq("trade_type",priceBank.getTradeType()));
-		if (price != null && priceBank.getId() == null){
-			throw new RuntimeException("商品:"+priceBank.getCname()+"供应商:"+priceBank.getCorpName()+"规格:"+priceBank.getSpecs()+"的数据已存在");
-		}else if (price != null && priceBank.getId() != null && price.getId().longValue() != priceBank.getId().longValue()){
-			throw new RuntimeException("商品:"+priceBank.getCname()+"供应商:"+priceBank.getCorpName()+"规格:"+priceBank.getSpecs()+"的数据已存在");
+			.eq("specs", priceBank.getSpecs()).eq("is_deleted", 0).eq("tenant_id", SecureUtil.getTenantId())
+			.eq("bill_type", priceBank.getBillType()).eq("trade_type", priceBank.getTradeType()));
+		if (price != null && priceBank.getId() == null) {
+			throw new RuntimeException("商品:" + priceBank.getCname() + "供应商:" + priceBank.getCorpName() + "规格:" + priceBank.getSpecs() + "的数据已存在");
+		} else if (price != null && priceBank.getId() != null && price.getId().longValue() != priceBank.getId().longValue()) {
+			throw new RuntimeException("商品:" + priceBank.getCname() + "供应商:" + priceBank.getCorpName() + "规格:" + priceBank.getSpecs() + "的数据已存在");
 		}
-		if (priceBank.getId() == null){
+		if (priceBank.getId() == null) {
 			priceBank.setCreateTime(new Date());
 			priceBank.setCreateUser(SecureUtil.getUserId());
-			if (StringUtils.isBlank(priceBank.getPerson())){
+			if (StringUtils.isBlank(priceBank.getPerson())) {
 				priceBank.setPerson(SecureUtil.getUserName());
 			}
 			priceBank.setTenantId(SecureUtil.getTenantId());
 			priceBank.setPriceTime(new Date());
 			baseMapper.insert(priceBank);
-		}else {
-			if (priceBank.getPriceTime().compareTo(price.getPriceTime()) >0){
+		} else {
+			if (priceBank.getPriceTime().compareTo(price.getPriceTime()) > 0) {
 				baseMapper.updatePrice(price.getId());//更新历史价格
 			}
 			baseMapper.updatePrice(priceBank.getId());//更新历史价格
@@ -105,7 +107,7 @@ public class PriceBankServiceImpl extends ServiceImpl<PriceBankMapper, PriceBank
 	public R importUser(List<PriceBankExcel> data, Boolean isCovered) {
 		List<String> corpList = new ArrayList<>();//供应商不存在的集合
 		List<String> goodList = new ArrayList<>();//商品不存在的
-		data.stream().forEach(item ->{
+		data.stream().forEach(item -> {
 			//先查供应商  看供应商是否存在
 			PriceBank priceBank = new PriceBank();
 			priceBank.setPrice(item.getPrice());//单价
@@ -115,50 +117,50 @@ public class PriceBankServiceImpl extends ServiceImpl<PriceBankMapper, PriceBank
 			priceBank.setEndTime(item.getEndTime());
 			priceBank.setPriceTime(new Date());
 			priceBank.setTradeType("CK");
-			if (item.getCoefficient() == null){
+			if (item.getCoefficient() == null) {
 				priceBank.setCoefficient(BigDecimal.ZERO);//FOB系数默认0
-			}else {
+			} else {
 				priceBank.setCoefficient(item.getCoefficient());//FOB系数
 			}
-			if (StringUtils.isBlank(item.getCurrency())){
+			if (StringUtils.isBlank(item.getCurrency())) {
 				priceBank.setCurrency("CNY");//币别
-			}else {
+			} else {
 				priceBank.setCurrency(item.getCurrency());//币别
 			}
-			if (item.getTaxRate() == null){
+			if (item.getTaxRate() == null) {
 				priceBank.setTaxRate(new BigDecimal(13));//税率默认13
-			}else {
+			} else {
 				priceBank.setTaxRate(item.getTaxRate());//税率
 			}
-			if (StringUtils.isNotBlank(item.getPriorityReferrer()) && item.getPriorityReferrer().equals("是")){
+			if (StringUtils.isNotBlank(item.getPriorityReferrer()) && item.getPriorityReferrer().equals("是")) {
 				priceBank.setPriorityReferrer(1);
-			}else if (StringUtils.isNotBlank(item.getPriorityReferrer()) && item.getPriorityReferrer().equals("否")){
+			} else if (StringUtils.isNotBlank(item.getPriorityReferrer()) && item.getPriorityReferrer().equals("否")) {
 				priceBank.setPriorityReferrer(0);
 			}
 			//价格类型
-			if (StringUtils.isBlank(item.getBillType())){
+			if (StringUtils.isBlank(item.getBillType())) {
 				priceBank.setBillType("CG");
-			}else {
+			} else {
 				priceBank.setBillType(item.getBillType());
 			}
 			//采购报价=单价 / (1+税率/100) *(1+FOB系数/100)
-			priceBank.setPurchaseAmount(priceBank.getPrice().divide((new BigDecimal(1).add((priceBank.getTaxRate().divide(new BigDecimal(100))))),4).multiply(new BigDecimal(1).add((priceBank.getCoefficient().divide(new BigDecimal(100))))));
-			if (StringUtils.isNotBlank(item.getCorpName())){
+			priceBank.setPurchaseAmount(priceBank.getPrice().divide((new BigDecimal(1).add((priceBank.getTaxRate().divide(new BigDecimal(100))))), 4).multiply(new BigDecimal(1).add((priceBank.getCoefficient().divide(new BigDecimal(100))))));
+			if (StringUtils.isNotBlank(item.getCorpName())) {
 				/*CorpsDesc corpsDesc = new CorpsDesc();
 				corpsDesc.setCname(item.getCorpName());
 				corpsDesc.setCorpType("GYS");*/
-				CorpsDesc corpByName = corpsDescClient.getCorpsDesc(item.getCorpName(),"GYS");
-				if (corpByName != null){
+				CorpsDesc corpByName = corpsDescClient.getCorpsDesc(item.getCorpName(), "GYS");
+				if (corpByName != null) {
 					priceBank.setCorpName(item.getCorpName());//供应商
 					priceBank.setCorpId(corpByName.getId());//供应商id
 					//查商品id
 					GoodsType goodsType = goodsDescClient.goodTypeCname(item.getGoodsTypeName());
-					if (goodsType != null){
+					if (goodsType != null) {
 						priceBank.setGoodTypeId(goodsType.getId());
 					}
 					//查商品看商品是否存在
 					GoodsDesc goodName = goodsDescClient.getGoodName(item.getCname(), null);
-					if (goodName != null){
+					if (goodName != null) {
 						priceBank.setCname(item.getCname());//商品名
 						priceBank.setEname(goodName.getEname());
 						priceBank.setItemId(goodName.getId());//商品id
@@ -167,19 +169,19 @@ public class PriceBankServiceImpl extends ServiceImpl<PriceBankMapper, PriceBank
 						priceBank.setCnameDescription(goodName.getCnameDescription());//英文描述
 						//查询是否存在
 						LambdaQueryWrapper<PriceBank> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-						lambdaQueryWrapper.eq(PriceBank::getCorpId,priceBank.getCorpId());
-						lambdaQueryWrapper.eq(PriceBank::getItemId,priceBank.getItemId());
-						lambdaQueryWrapper.eq(PriceBank::getBillType,priceBank.getBillType());
-						lambdaQueryWrapper.eq(PriceBank::getIsDeleted,0);
-						lambdaQueryWrapper.eq(PriceBank::getTenantId,SecureUtil.getTenantId());
+						lambdaQueryWrapper.eq(PriceBank::getCorpId, priceBank.getCorpId());
+						lambdaQueryWrapper.eq(PriceBank::getItemId, priceBank.getItemId());
+						lambdaQueryWrapper.eq(PriceBank::getBillType, priceBank.getBillType());
+						lambdaQueryWrapper.eq(PriceBank::getIsDeleted, 0);
+						lambdaQueryWrapper.eq(PriceBank::getTenantId, SecureUtil.getTenantId());
 						PriceBank bank = baseMapper.selectOne(lambdaQueryWrapper);
-						if (bank == null){
+						if (bank == null) {
 							priceBank.setTenantId(SecureUtil.getTenantId());
 							priceBank.setCreateUser(SecureUtil.getUserId());
 							priceBank.setCreateTime(new Date());
 							baseMapper.insert(priceBank);
-						}else {
-							if (priceBank.getPriceTime().compareTo(bank.getPriceTime()) >0){
+						} else {
+							if (priceBank.getPriceTime().compareTo(bank.getPriceTime()) > 0) {
 								baseMapper.updatePrice(bank.getId());//更新历史价格
 							}
 							priceBank.setId(bank.getId());
@@ -188,22 +190,22 @@ public class PriceBankServiceImpl extends ServiceImpl<PriceBankMapper, PriceBank
 							baseMapper.updateById(priceBank);
 						}
 
-					}else {
+					} else {
 						goodList.add(item.getCname());
 					}
-				}else {
+				} else {
 					corpList.add(item.getCorpName());
 				}
 			}
 		});
-		if (CollectionUtils.isNotEmpty(corpList) || CollectionUtils.isNotEmpty(goodList)){
+		if (CollectionUtils.isNotEmpty(corpList) || CollectionUtils.isNotEmpty(goodList)) {
 			String message = new String();
-			if (CollectionUtils.isNotEmpty(corpList)){
+			if (CollectionUtils.isNotEmpty(corpList)) {
 				StringBuffer stringBuffer = new StringBuffer("未找到供应商的有:");
 				stringBuffer.append(org.apache.commons.lang.StringUtils.join(corpList.toArray(), ","));
 				message = message + stringBuffer.toString();
 			}
-			if (CollectionUtils.isNotEmpty(goodList)){
+			if (CollectionUtils.isNotEmpty(goodList)) {
 				StringBuffer stringBuffer = new StringBuffer("根据供应商和商品名未找到商品的有:");
 				stringBuffer.append(org.apache.commons.lang.StringUtils.join(goodList.toArray(), ","));
 				message = message + stringBuffer.toString();
@@ -213,4 +215,34 @@ public class PriceBankServiceImpl extends ServiceImpl<PriceBankMapper, PriceBank
 		return R.data("导入成功");
 	}
 
+	/**
+	 * 更新产品价格商品类别
+	 * @param ids
+	 * @return
+	 */
+	@Override
+	public R updateParts(String ids) {
+		if (ObjectUtils.isNotNull(ids)) {
+			String[] arrs = ids.split(",");
+			for (String arr : arrs) {
+				PriceBank priceBank = baseMapper.selectById(Long.parseLong(arr));
+				if (ObjectUtils.isNotNull(priceBank)) {
+					GoodsType goodsType = goodsDescClient.goodTypeId(priceBank.getItemId());
+					if (ObjectUtils.isNotNull(goodsType)) {
+						priceBank.setGoodTypeId(goodsType.getId());
+						priceBank.setGoodsTypeName(goodsType.getCname());
+						baseMapper.updateById(priceBank);
+					} else {
+						return R.fail("未找到商品类别");
+					}
+				} else {
+					return R.fail("未找到价格数据");
+				}
+			}
+			return R.success("更新成功");
+		} else {
+			return R.fail("缺少参数");
+		}
+	}
+
 }

+ 4 - 4
blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectServiceImpl.java

@@ -305,10 +305,10 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
 			serviceProjectItem.setActualDate(new Date());
 
 			ServiceProject targetServiceProject = serviceProjectMapper.selectById(serviceProjectItem.getPId());
-			//主表已收款项增加
+			/*//主表已收款项增加
 			targetServiceProject.setSettlmentAmount(targetServiceProject.getSettlmentAmount().add(serviceProjectItem.getAmount()));
 			//主表未收款项减少
-			targetServiceProject.setBalanceAmount(targetServiceProject.getBalanceAmount().subtract(serviceProjectItem.getAmount()));
+			targetServiceProject.setBalanceAmount(targetServiceProject.getBalanceAmount().subtract(serviceProjectItem.getAmount()));*/
 			targetServiceProject.setUpdateUser(SecureUtil.getUserId());
 			targetServiceProject.setUpdateTime(new Date());
 			targetServiceProject.setUpdateUserName(SecureUtil.getUser().getUserName());
@@ -350,10 +350,10 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
 			ServiceProject targetServiceProject = serviceProjectMapper.selectById(serviceProjectItem.getPId());
 			//status=6代表撤回, item状态回到4
 			serviceProjectItem.setStatus(4);
-			//撤回时候,主表已收款项减少
+		/*	//撤回时候,主表已收款项减少
 			targetServiceProject.setSettlmentAmount(targetServiceProject.getSettlmentAmount().subtract(serviceProjectItem.getAmount()));
 			//撤回时候,主表未收款项增加
-			targetServiceProject.setBalanceAmount(targetServiceProject.getBalanceAmount().add(serviceProjectItem.getAmount()));
+			targetServiceProject.setBalanceAmount(targetServiceProject.getBalanceAmount().add(serviceProjectItem.getAmount()));*/
 			targetServiceProject.setUpdateUser(SecureUtil.getUserId());
 			targetServiceProject.setUpdateTime(new Date());
 			targetServiceProject.setUpdateUserName(SecureUtil.getUser().getUserName());

+ 8 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderCostController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.purchase.sales.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -27,6 +28,8 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.purchase.sales.entity.OrderCostItem;
+import org.springblade.purchase.sales.service.IOrderCostItemService;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.purchase.sales.entity.OrderCost;
@@ -48,6 +51,8 @@ public class OrderCostController extends BladeController {
 
 	private final IOrderCostService orderCostService;
 
+	private final IOrderCostItemService orderCostItemService;
+
 	/**
 	 * 详情
 	 */
@@ -56,6 +61,9 @@ public class OrderCostController extends BladeController {
 	@ApiOperation(value = "详情", notes = "传入orderCost")
 	public R<OrderCost> detail(OrderCost orderCost) {
 		OrderCost detail = orderCostService.getOne(Condition.getQueryWrapper(orderCost));
+		LambdaQueryWrapper<OrderCostItem> orderCostItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		orderCostItemLambdaQueryWrapper.eq(OrderCostItem::getPId,detail.getId()).eq(OrderCostItem::getIsDeleted,0);
+		detail.setOrderCostItemList(orderCostItemService.list(orderCostItemLambdaQueryWrapper));
 		return R.data(detail);
 	}
 

+ 2 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportEnquiryController.java

@@ -365,10 +365,10 @@ public class ExportEnquiryController extends BladeController {
 	/**
 	 * 计算国内费用
 	 */
-	@GetMapping("/calculationDomesticFees")
+	@PostMapping("/calculationDomesticFees")
 	@ApiOperationSupport(order = 14)
 	@ApiOperation(value = "计算国内费用", notes = "计算国内费用")
-	public R calculationDomesticFees(Order order) {
+	public R calculationDomesticFees(@Valid @RequestBody Order order) {
 		return R.data(orderService.calculationDomesticFees(order));
 	}
 }

+ 8 - 5
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderCostServiceImpl.java

@@ -29,7 +29,9 @@ import org.springblade.purchase.sales.vo.OrderCostVO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 陆运以及港杂费 服务实现类
@@ -51,24 +53,25 @@ public class OrderCostServiceImpl extends ServiceImpl<OrderCostMapper, OrderCost
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public OrderCost savesubmit(OrderCost orderCost) {
-		if (orderCost.getId() == null){
+		if (orderCost.getId() == null) {
 			orderCost.setTenantId(AuthUtil.getTenantId());
 			orderCost.setCreateTime(new Date());
 			orderCost.setCreateUser(AuthUtil.getUserId());
 			baseMapper.insert(orderCost);
-		}else{
+		} else {
 			orderCost.setUpdateTime(new Date());
 			orderCost.setUpdateUser(AuthUtil.getUserId());
 			baseMapper.updateById(orderCost);
 		}
-		for (OrderCostItem orderCostItem : orderCost.getOrderCostItemList()) {
-			if (orderCostItem.getId() == null){
+		List<OrderCostItem> orderCostItemList = (orderCost.getOrderCostItemList() == null ? new ArrayList<>() : orderCost.getOrderCostItemList());
+		for (OrderCostItem orderCostItem : orderCostItemList) {
+			if (orderCostItem.getId() == null) {
 				orderCostItem.setPId(orderCost.getId());
 				orderCostItem.setTenantId(AuthUtil.getTenantId());
 				orderCostItem.setCreateTime(new Date());
 				orderCostItem.setCreateUser(AuthUtil.getUserId());
 				orderCostItemMapper.insert(orderCostItem);
-			}else{
+			} else {
 				orderCostItem.setUpdateTime(new Date());
 				orderCostItem.setUpdateUser(AuthUtil.getUserId());
 				orderCostItemMapper.updateById(orderCostItem);

+ 91 - 21
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -16,12 +16,12 @@
  */
 package org.springblade.purchase.sales.service.impl;
 
-import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -44,7 +44,6 @@ 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.ObjectUtil;
-import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.finance.dto.ApplyDTO;
 import org.springblade.finance.feign.IFinanceClient;
 import org.springblade.finance.vojo.Items;
@@ -62,18 +61,15 @@ import org.springblade.system.feign.ISysClient;
 import org.springblade.system.feign.ITenantClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.ArrayList;
 import java.math.RoundingMode;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * 销售或采购订单表 服务实现类
@@ -132,6 +128,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 	private final OrderCostMapper orderCostMapper;
 
+	private final RedisTemplate<String, Object> redisTemplate;
+
 	@Override
 	public IPage<OrderVO> selectOrderPage(IPage<OrderVO> page, OrderVO order) {
 		List<OrderVO> orderVOList = baseMapper.selectOrderPage(page, order);
@@ -1496,6 +1494,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Override
 	public BigDecimal calculationDomesticFees(Order order) {
 
+		//客户
+		List<CorpsDesc> corpsDescList = castToList(redisTemplate.opsForValue().get("corps"), CorpsDesc.class);
+
 		LambdaQueryWrapper<OrderCost> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(OrderCost::getGoodsAttribute, order.getCargoType())
 			.eq(OrderCost::getOutHarborName, order.getPortOfLoad())
@@ -1505,21 +1506,69 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 		OrderCost orderCost = orderCostMapper.selectOne(lambdaQueryWrapper);
 
-		LambdaQueryWrapper<OrderCostItem> itemLambdaQueryWrapper = new LambdaQueryWrapper<>();
-		itemLambdaQueryWrapper.eq(OrderCostItem::getPId, orderCost.getId())
-			.eq(OrderCostItem::getDepartureId, order.getPortOfLoad())
-			.eq(OrderCostItem::getBoxPile, order.getBoxPile())
-			.eq(OrderCostItem::getStatus, 0)
-			.eq(OrderCostItem::getTenantId, AuthUtil.getTenantId())
-			.eq(OrderCostItem::getIsDeleted, 0);
-		OrderCostItem orderCostItem = orderCostItemMapper.selectOne(itemLambdaQueryWrapper);
-		if ("USD".equals(orderCostItem.getCurrency())) {
-			return orderCostItem.getAmount().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber());
-		} else if ("CNY".equals(orderCostItem.getCurrency())){
-			return orderCostItem.getAmount().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber());
-		}else{
-			return orderCostItem.getAmount().divide(order.getExchangeRate()).divide(order.getSumNumber());
+		List<OrderItems> orderItemsList = order.getOrderItemsList();
+		BigDecimal amount = new BigDecimal(0);
+		if (ObjectUtils.isNotNull(orderCost)){
+			LambdaQueryWrapper<OrderCostItem> itemLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			itemLambdaQueryWrapper.eq(OrderCostItem::getPId, orderCost.getId());
+			if (ObjectUtils.isNotNull(orderItemsList)){
+				Long corpId =  orderItemsList.get(0).getCorpId();
+				//货权人
+				CorpsDesc corpsDesc = corpsDescList.stream().filter(corps -> corps.getId().equals(corpId)).findFirst().orElse(null);
+				if (ObjectUtils.isNotNull(corpsDesc)) {
+					itemLambdaQueryWrapper.eq(OrderCostItem::getDepartureId, corpsDesc.getBelongtoarea());//明细供应商所在地址
+				}
+			}
+			itemLambdaQueryWrapper.eq(OrderCostItem::getStatus, 0)
+				.eq(OrderCostItem::getTenantId, AuthUtil.getTenantId())
+				.eq(OrderCostItem::getIsDeleted, 0);
+			if ("20GP".equals(order.getBoxPile())) {
+				itemLambdaQueryWrapper.ge(OrderCostItem::getTwentyGp, new BigDecimal(0));
+			} else if ("40GP".equals(order.getBoxPile())) {
+				itemLambdaQueryWrapper.ge(OrderCostItem::getFortyGp, new BigDecimal(0));
+			} else if ("40HC".equals(order.getBoxPile())) {
+				itemLambdaQueryWrapper.ge(OrderCostItem::getFortyHc, new BigDecimal(0));
+			} else if ("45GP".equals(order.getBoxPile())) {
+				itemLambdaQueryWrapper.ge(OrderCostItem::getFortyFiveGp, new BigDecimal(0));
+			} else if ("PALLET".equals(order.getBoxPile())) {
+				itemLambdaQueryWrapper.ge(OrderCostItem::getPallet, new BigDecimal(0));
+			} else {
+				itemLambdaQueryWrapper.ge(OrderCostItem::getTicket, new BigDecimal(0));
+			}
+			List<OrderCostItem> orderCostItemList = orderCostItemMapper.selectList(itemLambdaQueryWrapper);
+			for (OrderCostItem orderCostItem : orderCostItemList) {
+				if ("USD".equals(order.getCurrency())) {
+					if ("20GP".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getTwentyGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else if ("40GP".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getFortyGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else if ("40HC".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getFortyHc().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else if ("45GP".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getFortyFiveGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else if ("PALLET".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getPallet().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else {
+						amount.add(orderCostItem.getTicket().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					}
+				} else {
+					if ("20GP".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getTwentyGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else if ("40GP".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getFortyGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else if ("40HC".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getFortyHc().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else if ("45GP".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getFortyFiveGp().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else if ("PALLET".equals(order.getBoxPile())) {
+						amount.add(orderCostItem.getPallet().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					} else {
+						amount.add(orderCostItem.getTicket().multiply(order.getBoxNumber()).divide(order.getExchangeRate()).divide(order.getSumNumber()));
+					}
+				}
+			}
 		}
+		return amount;
 	}
 
 	@Override
@@ -1993,4 +2042,25 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			orderFeesService.submitPay(order.getId());
 		}
 	}
+
+	/**
+	 * 将Object转换成List类型
+	 *
+	 * @param obj   Object对象
+	 * @param clazz 数据类型
+	 * @param <T>   泛型类型
+	 * @return List类型
+	 */
+	public static <T> List<T> castToList(Object obj, Class<T> clazz) {
+		List<T> resList = new ArrayList<>();
+		// 如果不是List<?>对象,是没有办法转换的
+		if (obj instanceof List<?>) {
+			for (Object o : (List<?>) obj) {
+				// 将对应的元素进行类型转换
+				resList.add(clazz.cast(o));
+			}
+			return resList;
+		}
+		return resList;
+	}
 }

+ 61 - 2
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/controller/WoodHarvestingCloudController.java

@@ -16,15 +16,17 @@ import com.trade.purchase.order.enums.OrderTypeEnum;
 import com.trade.purchase.order.service.IOrderFilesService;
 import com.trade.purchase.order.service.IOrderItemsService;
 import com.trade.purchase.order.service.IOrderService;
-import com.trade.purchase.order.vo.OrderPartsVO;
 import com.trade.purchase.order.vo.OrderTotalDTO;
 import com.trade.purchase.order.vo.OrderVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.StorageType;
+import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IGoodsDescClient;
-import org.springblade.client.feign.IRedisClient;
+import org.springblade.client.feign.IStorageClient;
 import org.springblade.client.vo.GoodsDescVO;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -60,6 +62,10 @@ public class WoodHarvestingCloudController {
 
 	private IGoodsDescClient goodsDescClient;//获取商品信息
 
+	private final IStorageClient iStorageClient;
+
+	private ICorpsDescClient corpsDescClient;//获取客户信息
+
 	/**
 	 * 导出采木云入库模板
 	 */
@@ -456,4 +462,57 @@ public class WoodHarvestingCloudController {
 		return R.data(newMapList);
 	}
 
+	/**
+	 * 入库明细打印
+	 */
+	@GetMapping("/receiptItemPrint")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "入库明细打印", notes = "ids")
+	public R receiptItemPrint(@RequestParam(value = "ids") String ids) {
+		return R.data(orderItemsService.receiptItemPrint(ids));
+	}
+
+
+	/**
+	 * 入库明细打印
+	 */
+	@GetMapping("/selectAppByItemId")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "入库明细打印", notes = "itemId")
+	public R selectAppByItemId(@RequestParam("itemId") String itemId) {
+		OrderItems orderItems = orderItemsService.getById(itemId);
+		Map<String, Object> map = new HashMap<>();
+
+		if (ObjectUtils.isNotNull(orderItems)) {
+			Order order = orderService.getById(orderItems.getPid());
+			//仓库
+			StorageType storageType = iStorageClient.getStorageType(order.getStorageId());
+			if (ObjectUtils.isNotNull(storageType)) {
+				order.setStorageName(storageType.getCname());
+			}
+			//货权人
+			R<CorpsDesc> corpsDesc = corpsDescClient.getCorpMessage(order.getPurchaserId());
+			if (corpsDesc.isSuccess()) {
+				order.setPurchaser(corpsDesc.getData().getCname());
+			}
+			//获取品名
+			R<GoodsDescVO> goodsMessage = goodsDescClient.selectGoodsMessage(orderItems.getItemId());
+			map.put("purchaser", order.getPurchaser());
+			map.put("billNo", orderItems.getBillNo());
+			map.put("stockTime", order.getStockTime());
+			map.put("storageName", order.getStorageName());
+			if (goodsMessage.isSuccess() && goodsMessage.getData() != null) {
+				map.put("goodsName", goodsMessage.getData().getCname());
+			}
+			map.put("balanceNumber", orderItems.getBalanceNumber());
+			map.put("length", orderItems.getLength());
+			map.put("thickness", orderItems.getThickness());
+			map.put("itemId", orderItems.getId());
+			map.put("orderId", orderItems.getPid());
+			map.put("containerNo", orderItems.getContainerNo());
+			map.put("businessNo", order.getBillNo());
+		}
+		return R.data(map);
+	}
+
 }

+ 7 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/mapper/OrderItemsMapper.java

@@ -65,4 +65,11 @@ public interface OrderItemsMapper extends BaseMapper<OrderItems> {
 	BigDecimal appIndexStatistics(@Param("type") String type, @Param("billType") String billType);
 
     List<ScanningCodeAddPcDto> selectScanningCodeAddPc(IPage<ScanningCodeAddPcDto> page, ScanningCodeAddPcDto scanningCodeAddPcDto);
+
+	/**
+	 * 入库明细打印
+	 * @param ids
+	 * @return
+	 */
+	List<OrderItems> receiptItemPrint(@Param("ids")String ids);
 }

+ 19 - 2
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/mapper/OrderItemsMapper.xml

@@ -202,14 +202,31 @@
             and boi.item_type=#{scanningCodeAddPcDto.itemType}
         </if>
         <if test="scanningCodeAddPcDto.stockTimeStart!=null and scanningCodeAddPcDto.stockTimeStart != ''">
-            and DATE_FORMAT(boi.stock_time,'%Y-%m-%d') >= DATE_FORMAT(#{scanningCodeAddPcDto.stockTimeStart},'%Y-%m-%d')
+            and DATE_FORMAT(boi.stock_time,'%Y-%m-%d') &gt;= DATE_FORMAT(#{scanningCodeAddPcDto.stockTimeStart},'%Y-%m-%d')
         </if>
         <if test="scanningCodeAddPcDto.stockTimeEnd!=null and scanningCodeAddPcDto.stockTimeEnd != ''">
-            and DATE_FORMAT(boi.stock_time,'%Y-%m-%d') >= DATE_FORMAT(#{scanningCodeAddPcDto.stockTimeEnd},'%Y-%m-%d')
+            and DATE_FORMAT(boi.stock_time,'%Y-%m-%d') &lt;= DATE_FORMAT(#{scanningCodeAddPcDto.stockTimeEnd},'%Y-%m-%d')
         </if>
         order by bo.busines_date
 
     </select>
+    <select id="receiptItemPrint" resultMap="orderItemsResultMap">
+        SELECT
+            id,
+            grade,
+            thickness,
+            length,
+            remarks,
+            one_code,
+            qr_code,
+            bill_no,
+            item_id
+        FROM
+            business_order_items boi
+        WHERE
+            boi.is_deleted = 0
+          AND find_in_set(id,#{ids})
+    </select>
 
 
 </mapper>

+ 8 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/IOrderItemsService.java

@@ -7,6 +7,7 @@ import com.trade.purchase.order.entity.OrderItems;
 import com.trade.purchase.order.vo.OrderItemsVO;
 
 import java.math.BigDecimal;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -52,4 +53,11 @@ public interface IOrderItemsService extends IService<OrderItems> {
 	 * @return
 	 */
 	IPage<ScanningCodeAddPcDto> selectScanningCodeAddPc(IPage<ScanningCodeAddPcDto> page, ScanningCodeAddPcDto scanningCodeAddPcDto);
+
+	/**
+	 * 入库明细打印
+	 * @param ids
+	 * @return
+	 */
+    List<OrderItems> receiptItemPrint(String ids);
 }

+ 57 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderItemsServiceImpl.java

@@ -2,6 +2,7 @@ package com.trade.purchase.order.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.trade.purchase.order.dto.ScanningCodeAddPcDto;
 import com.trade.purchase.order.entity.OrderItems;
@@ -11,11 +12,17 @@ import com.trade.purchase.order.mapper.OrderMapper;
 import com.trade.purchase.order.service.IOrderItemsService;
 import com.trade.purchase.order.vo.OrderItemsVO;
 import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.GoodsDesc;
+import org.springblade.client.entity.StorageDesc;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -31,6 +38,8 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, OrderIt
 
 	private OrderMapper orderMapper;
 
+	private final RedisTemplate<String, Object> redisTemplate;
+
 	@Override
 	public IPage<OrderItemsVO> selectOrderItemsPage(IPage<OrderItemsVO> page, OrderItemsVO orderItems) {
 		return page.setRecords(baseMapper.selectOrderItemsPage(page, orderItems));
@@ -81,6 +90,33 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, OrderIt
 	}
 
 	/**
+	 * 入库明细打印
+	 * @param ids
+	 * @return
+	 */
+	@Override
+	public List<OrderItems> receiptItemPrint(String ids) {
+
+		List<OrderItems> orderItemsList = baseMapper.receiptItemPrint(ids);
+
+		//库区
+		List<GoodsDesc> goodsDescList = castToList(redisTemplate.opsForValue().get("goods"), GoodsDesc.class);
+		for (OrderItems orderItems : orderItemsList) {
+			if (ObjectUtils.isNotNull(orderItems.getItemId())) {
+				//货权人
+				GoodsDesc goodsDesc = goodsDescList.stream().filter(goods -> goods.getId().equals(orderItems.getItemId())).findFirst().orElse(null);
+				if (ObjectUtils.isNotNull(goodsDesc)) {
+					orderItems.setCname(goodsDesc.getCname());
+				}
+			}
+			orderItems.setPrintedBy(AuthUtil.getUserName());
+			orderItems.setPrintedDate(new Date());
+			baseMapper.updateById(orderItems);
+		}
+		return orderItemsList;
+	}
+
+	/**
 	 * 保存订单明细信息
 	 *
 	 * @param list 订单明细
@@ -109,4 +145,25 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, OrderIt
 		return R.data(list);
 	}
 
+	/**
+	 * 将Object转换成List类型
+	 *
+	 * @param obj   Object对象
+	 * @param clazz 数据类型
+	 * @param <T>   泛型类型
+	 * @return List类型
+	 */
+	public static <T> List<T> castToList(Object obj, Class<T> clazz) {
+		List<T> resList = new ArrayList<>();
+		// 如果不是List<?>对象,是没有办法转换的
+		if (obj instanceof List<?>) {
+			for (Object o : (List<?>) obj) {
+				// 将对应的元素进行类型转换
+				resList.add(clazz.cast(o));
+			}
+			return resList;
+		}
+		return resList;
+	}
+
 }

+ 33 - 32
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

@@ -1103,7 +1103,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				orderItemsMapper.insert(orderItems);
 				balanceNumber = balanceNumber.add(orderItems.getBalanceNumber());
 				balanceMoney = balanceMoney.add(orderItems.getBalanceMoney());
-				goodsName.add(orderItems.getCname());
+				if (ObjectUtils.isNotNull(orderItems.getCname())){
+					goodsName.add(orderItems.getCname());
+				}else{
+					goodsName.add(orderItems.getGoodsName());
+				}
 			}
 		}
 		//明细品名去重
@@ -1197,7 +1201,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				}
 				balanceNumber = balanceNumber.add(orderItems.getBalanceNumber());
 				balanceMoney = balanceMoney.add(orderItems.getBalanceMoney());
-				goodsName.add(orderItems.getCname());
+				if (ObjectUtils.isNotNull(orderItems.getCname())){
+					goodsName.add(orderItems.getCname());
+				}else{
+					goodsName.add(orderItems.getGoodsName());
+				}
 			}
 		}
 		//明细品名去重
@@ -1320,8 +1328,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				} else {
 					balanceNumber = balanceNumber.add(new BigDecimal(0));
 				}
-
-				goodsName.add(orderItems.getCname());
+				if (ObjectUtils.isNotNull(orderItems.getCname())){
+					goodsName.add(orderItems.getCname());
+				}else{
+					goodsName.add(orderItems.getGoodsName());
+				}
 			}
 		}
 		//明细品名去重
@@ -1549,7 +1560,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				throw new SecurityException("订单已审批通过请勿重复审批");
 			}
 			//修改明细状态
-			orderItemsMapper.updateByPId(id, "3");
+//			orderItemsMapper.updateByPId(id, "3");
 			order.setStatus(5);
 			order.setConfirmStatus("1");
 			order.setOrderStatus("审批通过");
@@ -1567,7 +1578,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				OrderItems RKOrderItems = new OrderItems();
 				RKOrderItems.setId(orderItems.getSrcItemId());
 				//判断该捆包号是否已出库
-				if (orderItems.getIsIssue().equals("7")) {
+				/*if (orderItems.getIsIssue().equals("7")) {
 					throw new SecurityException("捆包号:" + RKOrderItems.getBillNo() + "已出库");
 				} else {
 					//判断第几次出库审核
@@ -1582,7 +1593,16 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					orderItemsMapper.updateById(RKOrderItems);
 					//修改出库明细
 					orderItemsMapper.updateById(orderItems);
+				}*/
+				//判断第几次出库审核
+				if (0 == times) {//第一次审批
+					RKOrderItems.setIsIssue("5");
+					orderItems.setIsIssue("5");
 				}
+				//修改入库明细
+				orderItemsMapper.updateById(RKOrderItems);
+				//修改出库明细
+				orderItemsMapper.updateById(orderItems);
 			}
 			//判断第几次出库审核
 			if (0 == times) {//第一次审批
@@ -1637,7 +1657,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				RKOrderItems.setBalanceNumber(orderItems.getInventory());
 				RKOrderItems.setBalanceMoney(orderItems.getBalanceMoney());
 				RKOrderItems.setSurplusLoss(orderItems.getSurplusLoss());
-				if (orderItems.getIsIssue().equals("6")) {
+				if (orderItems.getIsIssue().equals("7")) {
 					throw new SecurityException("捆包号:" + orderItems.getBillNo() + "已出库");
 				}
 				orderItemsMapper.updateById(RKOrderItems);
@@ -1693,7 +1713,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				throw new SecurityException("订单已驳回或未提交审批,请勿重复操作");
 			}
 			//修改明细状态
-			orderItemsMapper.updateByPId(id, "0");
+//			orderItemsMapper.updateByPId(id, "0");
 			order.setStatus(2);
 			order.setOrderStatus("已确认");
 			//出库审批驳回
@@ -1721,7 +1741,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				}
 				order.setStatus(2);
 				order.setOrderStatus("已确认");
-				isIssue = 6;
+				isIssue = 7;
 			}
 			for (OrderItems orderItems : CKOrderItemsList) {
 				OrderItems RKOrderItems = new OrderItems();
@@ -1921,7 +1941,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					throw new SecurityException("捆包号:" + orderItems.getBillNo() + "已生成出库单,撤回失败");
 				}
 				//撤回入库状态
-				orderItems.setIsIssue("0");
+				orderItems.setIsIssue("3");
 				//置空条形码,二维码 并删除服务器文件
 				try {
 					File oneFile = new File(orderItems.getOneCode());
@@ -1938,9 +1958,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				}
 				orderItemsMapper.updateById(orderItems);
 			}
-			order.setStatus(0);
+			order.setStatus(2);
 			order.setOrderStatus("录入");
-			order.setConfirmStatus("0");
 			//出库审批撤销
 		} else if (OrderTypeEnum.OUT_WAREHOUSING.getType().equals(order.getBillType())) {
 			int isIssue = 4;
@@ -1958,7 +1977,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				}
 				order.setStatus(2);
 				order.setOrderStatus("已确认");
-				isIssue = 6;
+				isIssue = 7;
 			}
 			for (OrderItems orderItems : orderItemsVOList) {
 				OrderItems RKOrderItems = new OrderItems();
@@ -2058,26 +2077,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						//替换地址
 						oneCode = oneCode.replace("/home/minio", "http://121.37.83.47");
 						item.setOneCode(oneCode);
-						//获取品名
-						R<GoodsDescVO> goodsMessage = goodsDescClient.selectGoodsMessage(item.getItemId());
-						//二维码数据
-						Map<String, Object> map = new HashMap<>();
-						map.put("purchaser", order.getPurchaser());
-						map.put("billNo", item.getBillNo());
-						map.put("stockTime", order.getStockTime());
-						map.put("storageName", order.getStorageName());
-						if (goodsMessage.isSuccess() && goodsMessage.getData() != null) {
-							map.put("goodsName", goodsMessage.getData().getCname());
-						}
-						map.put("balanceNumber", item.getBalanceNumber());
-						map.put("length", item.getLength());
-						map.put("thickness", item.getThickness());
-						map.put("itemId", item.getId());
-						map.put("orderId", item.getPid());
-						map.put("containerNo", item.getContainerNo());
-						map.put("businessNo", order.getBillNo());
 						//生成二维码
-						String qRCode = QRCodeTest.generateQRCode(qRCodeFile, JSONObject.toJSONString(map));
+						String qRCode = QRCodeTest.generateQRCode(qRCodeFile, item.getId()+"");
 						//替换地址
 						qRCode = qRCode.replace("/home/minio", "http://121.37.83.47");
 						item.setQrCode(qRCode);