Browse Source

2023年2月17日20:30:02

纪新园 2 years ago
parent
commit
3830f37b8c
14 changed files with 1199 additions and 141 deletions
  1. 6 0
      blade-service-api/blade-deliver-goods-api/pom.xml
  2. 143 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java
  3. 24 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/feign/IDeliveryClient.java
  4. 120 2
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java
  5. 34 1
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderItems.java
  6. 0 8
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java
  7. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/fees/feign/FeesDescClient.java
  8. 23 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/ExportDeliveryController.java
  9. 135 12
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/feign/DeliveryClient.java
  10. 1 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/IDeliveryService.java
  11. 140 62
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  12. 135 40
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java
  13. 10 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java
  14. 427 15
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

+ 6 - 0
blade-service-api/blade-deliver-goods-api/pom.xml

@@ -25,6 +25,12 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-excel</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-purchase-sales-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 

+ 143 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java

@@ -481,4 +481,147 @@ public class Delivery implements Serializable {
 	 */
 	@TableField(exist = false)
 	private String arrivalEndTime;
+
+	/**
+	 * 客户详情
+	 */
+	@ApiModelProperty(value = "客户详情")
+	private String clientMessage;
+	/**
+	 * 订单日期
+	 */
+	@ApiModelProperty(value = "订单日期")
+	private Date businesDate;
+
+	@TableField(exist = false)
+	private List<String> businesDateList;
+	/**
+	 * 计划交货日期
+	 */
+	@ApiModelProperty(value = "计划交货日期")
+	private Date plannedDeliveryDate;
+	/**
+	 * 起运港
+	 */
+	@ApiModelProperty(value = "起运港")
+	private String portOfLoad;
+	/**
+	 * 目的港
+	 */
+	@ApiModelProperty(value = "目的港")
+	private String portOfDestination;
+	/**
+	 * 运输方式
+	 */
+	@ApiModelProperty(value = "运输方式")
+	private String transport;
+	/**
+	 * 日期条款
+	 */
+	@ApiModelProperty(value = "日期条款")
+	private String dateClause;
+	/**
+	 * 日期说明
+	 */
+	@ApiModelProperty(value = "日期说明")
+	private String dateDesc;
+	/**
+	 * 货物类型
+	 */
+	@ApiModelProperty(value = "货物类型")
+	private String cargoType;
+	/**
+	 * 价格条款
+	 */
+	@ApiModelProperty(value = "价格条款")
+	private String priceTerms;
+	/**
+	 * 价格条款描述
+	 */
+	@ApiModelProperty(value = "价格条款描述")
+	private String priceTermsDescription;
+	/**
+	 * 付款方式
+	 */
+	@ApiModelProperty(value = "付款方式")
+	private String paymentType;
+
+	/**
+	 * 收付款方式描述
+	 */
+	@ApiModelProperty(value = "收付款方式描述")
+	private String paymentTypeDescription;
+	/**
+	 * 币别
+	 */
+	@ApiModelProperty(value = "币别")
+	private String currency;
+	/**
+	 * 汇率
+	 */
+	@ApiModelProperty(value = "汇率")
+	private BigDecimal exchangeRate;
+	/**
+	 * 采购备注
+	 */
+	@ApiModelProperty(value = "采购备注")
+	private String purchaseRemark;
+	/**
+	 * 船务备注
+	 */
+	@ApiModelProperty(value = "船务备注")
+	private String shippingRemark;
+	/**
+	 * 预计货好状态(福达)
+	 */
+	@ApiModelProperty(value = "预计货好状态")
+	private String estimateGoodGoods;
+
+	/**
+	 * 预计货好日期(福达)
+	 */
+	@ApiModelProperty(value = "预计货好日期")
+	private Date estimateGoodGoodsDate;
+
+	/**
+	 * 跟单状态(福达)
+	 */
+	@ApiModelProperty(value = "跟单状态")
+	private String documentaryStatus;
+
+	/**
+	 * 跟单日期(福达)
+	 */
+	@ApiModelProperty(value = "跟单日期")
+	private Date documentaryDate;
+
+	/**
+	 * 报关状态(福达)
+	 */
+	@ApiModelProperty(value = "报关状态")
+	private String customsStatus;
+
+	/**
+	 * 报关日期(福达)
+	 */
+	@ApiModelProperty(value = "报关日期")
+	private Date customsDate;
+
+	/**
+	 * 出运状态(福达)
+	 */
+	@ApiModelProperty(value = "出运状态")
+	private String shippingStatus;
+
+	/**
+	 * 出运日期(福达)
+	 */
+	@ApiModelProperty(value = "出运日期")
+	private Date shippingDate;
+	/**
+	 * 跟单状态类型
+	 */
+	@TableField(exist = false)
+	private Integer documentaryStatusType;
+
 }

+ 24 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/feign/IDeliveryClient.java

@@ -6,6 +6,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.deliver.goods.entity.Delivery;
 import org.springblade.deliver.goods.entity.DeliveryFees;
 import org.springblade.deliver.goods.entity.DeliveryItems;
+import org.springblade.purchase.sales.entity.Order;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -27,6 +28,9 @@ public interface IDeliveryClient {
 	String SUBMITPAY = API_PREFIX +"/submitPay";
 	String GET_ORDER_DATA = API_PREFIX +"/getOrderData";
 	String GET_ORG_MESSAGE = API_PREFIX + "/getOrgMessage";
+	String SAVE_ADD_DELIVERY = API_PREFIX + "/saveAddDelivery";
+	String UPDATE_BY_SRC_ID = API_PREFIX + "/updateBySrcId";
+	String SELECT_COUNT = API_PREFIX + "/selectCount";
 
 	/**
 	 * 生成发货单
@@ -76,4 +80,24 @@ public interface IDeliveryClient {
 	List<Delivery> getOrgMessage(@RequestParam("orgOrderNo") String orgOrderNo,
 								   @RequestParam("tradeType") String tradeType);
 
+	/**
+	 * 销售单据
+	 * @param order
+	 * @return
+	 */
+	@PostMapping(SAVE_ADD_DELIVERY)
+	R<Delivery> saveAddDelivery(@RequestBody Order order);
+
+	/**
+	 * 根据来源id修改预计货好状态
+	 * @param srcId
+	 * @return
+	 */
+	@GetMapping(UPDATE_BY_SRC_ID)
+	R updateBySrcId(@RequestParam("srcId") String srcId,
+								@RequestParam("billType") String billType,
+								@RequestParam("tradeType") String tradeType);
+
+	@GetMapping(SELECT_COUNT)
+	int selectCount(@RequestParam("userId")Long userId);
 }

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

@@ -238,7 +238,7 @@ public class Order implements Serializable {
 	/**
 	 * 销售利润
 	 */
-	@ApiModelProperty(value="销售利润")
+	@ApiModelProperty(value = "销售利润")
 	@TableField(exist = false)
 	private BigDecimal salesProfit;
 
@@ -1211,9 +1211,127 @@ public class Order implements Serializable {
 	 */
 	@ApiModelProperty(value = "销售退单时间")
 	private Date chargebackTime;
-/**
+	/**
 	 *
 	 */
 	@TableField(exist = false)
 	private List<Long> itemList;
+
+	/**
+	 * 采购员(福达)
+	 */
+	@ApiModelProperty(value = "采购员")
+	private Long buyerId;
+
+	/**
+	 * 采购员(福达)
+	 */
+	@TableField(exist = false)
+	private String $buyerId;
+
+	/**
+	 * 采购员(福达)
+	 */
+	@ApiModelProperty(value = "采购员")
+	private String buyerName;
+
+	/**
+	 * 跟单员(福达)
+	 */
+	@ApiModelProperty(value = "跟单员")
+	private Long documenterId;
+
+	/**
+	 * 跟单员(福达)
+	 */
+	@TableField(exist = false)
+	private String $documenterId;
+
+	/**
+	 * 跟单员(福达)
+	 */
+	@ApiModelProperty(value = "跟单员")
+	private String documenterName;
+
+	/**
+	 * 采购状态(福达)
+	 */
+	@ApiModelProperty(value = "采购状态")
+	private String fudaPurchaseStatus;
+
+	/**
+	 * 采购日期(福达)
+	 */
+	@ApiModelProperty(value = "采购日期")
+	private Date fudaPurchaseDate;
+
+	/**
+	 * 排产状态(福达)
+	 */
+	@ApiModelProperty(value = "排产状态")
+	private String productionScheduling;
+
+	/**
+	 * 排产日期(福达)
+	 */
+	@ApiModelProperty(value = "排产日期")
+	private Date productionSchedulingDate;
+
+	/**
+	 * 预计货好状态(福达)
+	 */
+	@ApiModelProperty(value = "预计货好状态")
+	private String estimateGoodGoods;
+
+	/**
+	 * 预计货好日期(福达)
+	 */
+	@ApiModelProperty(value = "预计货好日期")
+	private Date estimateGoodGoodsDate;
+
+	/**
+	 * 跟单状态(福达)
+	 */
+	@ApiModelProperty(value = "跟单状态")
+	private String documentaryStatus;
+
+	/**
+	 * 跟单日期(福达)
+	 */
+	@ApiModelProperty(value = "跟单日期")
+	private Date documentaryDate;
+
+	/**
+	 * 来源ids
+	 */
+	@ApiModelProperty(value = "来源ids")
+	private String srcIds;
+
+	/**
+	 * 采购状态类型
+	 */
+	@TableField(exist = false)
+	private Integer purchaseStatusType;
+
+	/**
+	 * 单据数量统计(日期区间)
+	 */
+	@TableField(exist = false)
+	private List<String> dateList;
+
+	public String get$buyerId() {
+		return $buyerId;
+	}
+
+	public void set$buyerId(String $buyerId) {
+		this.$buyerId = $buyerId;
+	}
+
+	public String get$documenterId() {
+		return $documenterId;
+	}
+
+	public void set$documenterId(String $documenterId) {
+		this.$documenterId = $documenterId;
+	}
 }

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

@@ -151,6 +151,11 @@ public class OrderItems implements Serializable {
 	@ApiModelProperty(value = "来源id")
 	private Long srcId;
 	/**
+	 * 来源明细id
+	 */
+	@ApiModelProperty(value = "来源明细id")
+	private Long srcItemId;
+	/**
 	 * /**
 	 * 提单号
 	 */
@@ -720,6 +725,35 @@ public class OrderItems implements Serializable {
 	private BigDecimal internationalAmount;
 
 	/**
+	 * 业务类型
+	 */
+	@ApiModelProperty(value = "业务类型")
+	private String billType;
+	/**
+	 * 销售日期
+	 */
+	@ApiModelProperty(value = "销售日期")
+	private Date businesDate;
+
+	/**
+	 * 销售日期
+	 */
+	@TableField(exist = false)
+	private List<String> businesDateList;
+
+	/**
+	 * 计划交货日期
+	 */
+	@ApiModelProperty(value = "计划交货日期")
+	private Date plannedDeliveryDate;
+
+	/**
+	 * 计划交货日期
+	 */
+	@TableField(exist = false)
+	private List<String> plannedDeliveryDateList;
+
+	/**
 	 * 商品名称
 	 */
 	@TableField(exist = false)
@@ -738,5 +772,4 @@ public class OrderItems implements Serializable {
 	private String url;
 
 
-
 }

+ 0 - 8
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java

@@ -124,14 +124,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			throw new RuntimeException("缺少必要参数");
 		}
 		TradingBox details = baseMapper.selectById(tradingBox.getId());
-
-		Long feesId = null;
-
-		//获取费用id
-		R<FeesDesc> fees = feesDescClient.getFeesByName("租金");
-		if (fees.isSuccess() && fees.getData() != null) {
-			feesId = fees.getData().getId();
-		}
 		if (ObjectUtils.isNotNull(details)) {
 			//获取明细信息
 			LambdaQueryWrapper<TradingBoxItem> tradingBoxItemLambdaQueryWrapper = new LambdaQueryWrapper<>();

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/fees/feign/FeesDescClient.java

@@ -59,6 +59,6 @@ public class FeesDescClient implements IFeesDescClient {
 	public R<FeesDesc> getFeesByName(String cName)
 	{
 
-		return R.data(feesDescService.getOne(new LambdaQueryWrapper<FeesDesc>().eq(FeesDesc::getCname,cName).eq(FeesDesc::getTenantId, AuthUtil.getTenantId())));
+		return R.data(feesDescService.getOne(new LambdaQueryWrapper<FeesDesc>().eq(FeesDesc::getCname,cName).eq(FeesDesc::getTenantId, AuthUtil.getTenantId()).eq(FeesDesc::getIsDeleted,0)));
 	}
 }

+ 23 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/ExportDeliveryController.java

@@ -49,6 +49,7 @@ 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.purchase.sales.entity.Order;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
@@ -114,6 +115,12 @@ public class ExportDeliveryController 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.getPortOfLoad()),Delivery::getPortOfLoad,delivery.getPortOfLoad());//起运港
+		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getPortOfDestination()),Delivery::getPortOfDestination,delivery.getPortOfDestination());//目的港
+		if (ObjectUtils.isNotNull(delivery.getBusinesDateList()) && delivery.getBusinesDateList().size()>0){//订单日期
+			lambdaQueryWrapper.ge(Delivery::getCreateTime,delivery.getBusinesDateList().get(0));
+			lambdaQueryWrapper.le(Delivery::getCreateTime,delivery.getBusinesDateList().get(1));
+		}
 		lambdaQueryWrapper.orderByDesc(Delivery::getId);
 		IPage<Delivery> pages = deliveryService.page(Condition.getPage(query), lambdaQueryWrapper);
 		if (CollectionUtils.isNotEmpty(pages.getRecords())){
@@ -332,4 +339,20 @@ public class ExportDeliveryController extends BladeController {
 		}
 		return R.data(deliveryData);
 	}
+
+	/**
+	 * 跟单状态修改
+	 *
+	 * @param delivery
+	 * @return
+	 */
+	@PostMapping("/documentaryStatusUpdate")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "跟单状态修改", notes = "传入主订单id,明细ids")
+	public R documentaryStatusUpdate(@Valid @RequestBody Delivery delivery) {
+		if (delivery.getId() == null) {
+			return R.fail(500, "参数缺失");
+		}
+		return deliveryService.documentaryStatusUpdate(delivery);
+	}
 }

+ 135 - 12
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/feign/DeliveryClient.java

@@ -2,8 +2,10 @@ package org.springblade.deliver.goods.feign;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import io.swagger.annotations.ApiParam;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import lombok.AllArgsConstructor;
+import org.springblade.client.feign.ISerialClient;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
@@ -13,22 +15,34 @@ import org.springblade.deliver.goods.entity.DeliveryItems;
 import org.springblade.deliver.goods.service.IDeliveryFeesService;
 import org.springblade.deliver.goods.service.IDeliveryItemsService;
 import org.springblade.deliver.goods.service.IDeliveryService;
-import org.springframework.web.bind.annotation.*;
+import org.springblade.purchase.sales.entity.Order;
+import org.springblade.purchase.sales.entity.OrderItems;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 @NonDS
 @ApiIgnore()
 @RestController
 @AllArgsConstructor
-public class DeliveryClient implements IDeliveryClient{
+public class DeliveryClient implements IDeliveryClient {
 	private IDeliveryService deliveryService;//发货 收货信息
 	private IDeliveryItemsService deliveryItemsService;
 	private IDeliveryFeesService feesService;
+	/**
+	 * 生成系统编号
+	 */
+	private final ISerialClient serialClient;
 
 	/**
 	 * 生成发货信息
+	 *
 	 * @param delivery
 	 * @return
 	 */
@@ -41,8 +55,8 @@ public class DeliveryClient implements IDeliveryClient{
 	@Override
 	@GetMapping(LIST_BY_ITEM_ID)
 	public R<List<DeliveryItems>> listByItemId(Long itemId) {
-		LambdaQueryWrapper<DeliveryItems> orderItemsLambdaQueryWrapper=new LambdaQueryWrapper<>();
-		orderItemsLambdaQueryWrapper.eq(DeliveryItems::getItemId,itemId).eq(DeliveryItems::getIsDeleted,0);
+		LambdaQueryWrapper<DeliveryItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		orderItemsLambdaQueryWrapper.eq(DeliveryItems::getItemId, itemId).eq(DeliveryItems::getIsDeleted, 0);
 		List<DeliveryItems> list = deliveryItemsService.list(orderItemsLambdaQueryWrapper);
 		return R.data(list);
 	}
@@ -56,16 +70,15 @@ public class DeliveryClient implements IDeliveryClient{
 
 	@Override
 	@PostMapping(SUBMIT_FEES)
-	public R submitFees(@RequestBody DeliveryFees deliveryFees)
-	{
+	public R submitFees(@RequestBody DeliveryFees deliveryFees) {
 		feesService.updateById(deliveryFees);
 		return R.success("操作成功");
 	}
 
 	@Override
 	@GetMapping(GET_ORDER_MESSAGE)
-	public List<Delivery> getOrderMessage(String srcOrderNo,String tradeType) {
-		return deliveryService.list(new QueryWrapper<Delivery>().eq("src_order_no",srcOrderNo).eq("is_deleted",0).eq("tenant_id", SecureUtil.getTenantId()).eq("trade_type",tradeType));
+	public List<Delivery> getOrderMessage(String srcOrderNo, String tradeType) {
+		return deliveryService.list(new QueryWrapper<Delivery>().eq("src_order_no", srcOrderNo).eq("is_deleted", 0).eq("tenant_id", SecureUtil.getTenantId()).eq("trade_type", tradeType));
 	}
 
 	@Override
@@ -75,18 +88,128 @@ public class DeliveryClient implements IDeliveryClient{
 
 	/**
 	 * 根据采购订单号获取是否生成发货单
+	 *
 	 * @param orderNo
 	 * @return
 	 */
 	@Override
 	public List<Delivery> getOrderData(String orderNo, String billType, String tradeType) {
-		return deliveryService.list(new QueryWrapper<Delivery>().like("bill_no",orderNo).eq("is_deleted",0).eq("tenant_id", SecureUtil.getTenantId()).eq("trade_type",tradeType).eq("bill_type",billType));
+		return deliveryService.list(new QueryWrapper<Delivery>().like("bill_no", orderNo).eq("is_deleted", 0).eq("tenant_id", SecureUtil.getTenantId()).eq("trade_type", tradeType).eq("bill_type", billType));
 
 	}
 
 	@Override
 	@GetMapping(GET_ORG_MESSAGE)
-	public List<Delivery> getOrgMessage(String orgOrderNo,String tradeType) {
-		return deliveryService.list(new QueryWrapper<Delivery>().eq("org_order_no",orgOrderNo).eq("is_deleted",0).eq("tenant_id", SecureUtil.getTenantId()).eq("trade_type",tradeType));
+	public List<Delivery> getOrgMessage(String orgOrderNo, String tradeType) {
+		return deliveryService.list(new QueryWrapper<Delivery>().eq("org_order_no", orgOrderNo).eq("is_deleted", 0).eq("tenant_id", SecureUtil.getTenantId()).eq("trade_type", tradeType));
+	}
+
+	@Override
+	public R<Delivery> saveAddDelivery(Order order) {
+		Delivery delivery = new Delivery();
+		R billNo = serialClient.getBillNo("FH", "JK", "FH");
+		if (billNo.isSuccess() && billNo.getData() != null) {
+			delivery.setSysNo((String) billNo.getData());
+		} else {
+			return R.fail(500, "系统编号生成失败");
+		}
+		delivery.setSrcOrderNo(order.getOrderNo());
+		delivery.setSrcId(order.getId());
+		delivery.setOrgOrderNo(order.getSysNo());
+		delivery.setOrgId(order.getId());
+		delivery.setBillType("FH");
+		delivery.setTradeType("CK");
+		delivery.setCorpId(order.getCorpId());
+		delivery.setCorpName(order.getCorpName());
+		delivery.setClientMessage(order.getClientMessage());
+		delivery.setBusinesDate(order.getBusinesDate());
+		delivery.setPlannedDeliveryDate(order.getPlannedDeliveryDate());
+		delivery.setPortOfLoad(order.getPortOfLoad());
+		delivery.setPortOfDestination(order.getPortOfDestination());
+		delivery.setTransport(order.getTransport());
+		delivery.setDateClause(order.getDateClause());
+		delivery.setDateDesc(order.getDateDesc());
+		delivery.setCargoType(order.getCargoType());
+		delivery.setPriceTerms(order.getPriceTerms());
+		delivery.setPriceTermsDescription(order.getPriceTermsDescription());
+		delivery.setPaymentType(order.getPaymentType());
+		delivery.setPaymentTypeDescription(order.getPaymentTypeDescription());
+		delivery.setCurrency(order.getCurrency());
+		delivery.setExchangeRate(order.getExchangeRate());
+		delivery.setPurchaseRemark(order.getPurchaseRemark());
+		delivery.setShippingRemark(order.getShippingRemark());
+		delivery.setDocumentaryStatus(order.getDocumentaryStatus());
+		delivery.setDocumentaryDate(order.getDocumentaryDate());
+		delivery.setCreateUser(order.getDocumenterId());
+		delivery.setCreateTime(new Date());
+		delivery.setTenantId(SecureUtil.getTenantId());
+		delivery.setDeliveryStatus("录入");
+		deliveryService.save(delivery);
+
+		if (ObjectUtils.isNotNull(order.getOrderItemsList()) && order.getOrderItemsList().size() > 0) {
+			List<DeliveryItems> deliveryItemsList = new ArrayList<>();
+			for (OrderItems orderItems : order.getOrderItemsList()) {
+				DeliveryItems deliveryItems = new DeliveryItems();
+				deliveryItems.setPid(delivery.getId());
+				deliveryItems.setSort(1);
+				deliveryItems.setSrcOrderNo(order.getOrderNo());//来源订单号
+				deliveryItems.setOrgOrderNo(order.getSysNo());//原始订单号
+				deliveryItems.setSrcId(orderItems.getId());//来源id
+				deliveryItems.setItemId(orderItems.getItemId());//货物
+				deliveryItems.setPriceCategory(orderItems.getPriceCategory());//商品类别
+				deliveryItems.setProductDesc(orderItems.getItemDescription());//产品描述
+				deliveryItems.setSpecificationAndModel(orderItems.getItemType());//产品型号
+				deliveryItems.setPriceCategoryNames(orderItems.getPriceCategory());//商品类别名称
+				deliveryItems.setItemProp(orderItems.getItemProp());//产品属性
+				deliveryItems.setPackageRemarks(orderItems.getPartsColourName());//包装要求
+				deliveryItems.setActualQuantity(orderItems.getOrderQuantity());//数量
+				deliveryItems.setPrice(orderItems.getPrice());//单价
+				deliveryItems.setPurchaseAmount(orderItems.getAmount());//采购金额
+				deliveryItems.setPurchaseTotalAmount(orderItems.getAmount());//采购总价
+				deliveryItems.setPurchaseQuantity(orderItems.getOrderQuantity());//采购数量
+				deliveryItems.setUnit(orderItems.getUnit());//计量单位
+				deliveryItems.setTaxRate(orderItems.getTaxRate());//税率
+				deliveryItems.setCurrency(order.getCurrency());//币别
+				deliveryItems.setExRate(order.getExchangeRate());//汇率
+				deliveryItems.setGoodType(0);//默认0为商品信息 1为赠品信息
+				deliveryItems.setCreateUser(order.getDocumenterId());
+				deliveryItems.setCreateTime(new Date());
+				deliveryItems.setTenantId(SecureUtil.getTenantId());
+				deliveryItemsService.save(deliveryItems);
+				deliveryItemsList.add(deliveryItems);
+				delivery.setDeliveryItemsList(deliveryItemsList);
+			}
+		}
+		return R.data(delivery);
+	}
+
+	@Override
+	public R updateBySrcId(String srcId, String billType, String tradeType) {
+		if (ObjectUtils.isNull(srcId)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		LambdaQueryWrapper<Delivery> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Delivery::getIsDeleted, 0)
+			.eq(Delivery::getTenantId, AuthUtil.getTenantId())
+			.eq(Delivery::getBillType, billType)
+			.eq(Delivery::getTradeType, tradeType)
+			.eq(Delivery::getSrcId, srcId);
+		Delivery delivery = deliveryService.getOne(lambdaQueryWrapper);
+		if (ObjectUtils.isNull(delivery)) {
+			throw new RuntimeException("未找到单据信息");
+		}
+		delivery.setEstimateGoodGoodsDate(new Date());
+		delivery.setEstimateGoodGoods("预计货好");
+		return R.data(deliveryService.updateById(delivery));
+	}
+
+	@Override
+	public int selectCount(Long userId) {
+		return deliveryService.count(new LambdaQueryWrapper<Delivery>()
+			.eq(Delivery::getIsDeleted, 0)
+			.eq(Delivery::getTenantId, AuthUtil.getTenantId())
+			.eq(Delivery::getCreateUser,userId)
+			.eq(Delivery::getTradeType,"CK")
+			.eq(Delivery::getBillType,"FH"));
 	}
 }

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

@@ -92,4 +92,5 @@ public interface IDeliveryService extends IService<Delivery> {
 	 */
 	R repealAllot(Delivery delivery);
 
+    R documentaryStatusUpdate(Delivery delivery);
 }

+ 140 - 62
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -22,6 +22,7 @@ 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.service.impl.ServiceImpl;
 import com.trade.purchase.order.enums.OrderTypeEnum;
@@ -30,6 +31,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import org.springblade.client.entity.BasicCorpsProfitChange;
 import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.Message;
 import org.springblade.client.entity.StorageDesc;
 import org.springblade.client.feign.*;
 import org.springblade.client.vo.GoodsDescVO;
@@ -51,6 +53,7 @@ import org.springblade.mocha.entity.BusinessOverpaymentItem;
 import org.springblade.mocha.entity.Overpayment;
 import org.springblade.mocha.feign.IBusinessOverpaymentClient;
 import org.springblade.purchase.sales.entity.Order;
+import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springblade.purchase.sales.feign.IOrderItemsClient;
 import org.springblade.stock.entity.StockGoods;
@@ -129,6 +132,8 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	private IGoodsDescClient goodsDescClient;//获取商品信息
 	private final RedisTemplate<String, Object> redisTemplate;
 
+	private final IMessageClient messageClient;//消息
+
 	//private final GoodsDescServiceImpl goodsDescService;
 
 	@Override
@@ -147,8 +152,8 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	@Transactional(rollbackFor = Exception.class)
 	public R submitDelivery(Delivery delivery) {
 		String status = null;//订单状态
-		if ("681169".equals(AuthUtil.getTenantId())){
-			if(ObjectUtil.isEmpty(delivery.getSalesCompany())){
+		if ("681169".equals(AuthUtil.getTenantId())) {
+			if (ObjectUtil.isEmpty(delivery.getSalesCompany())) {
 				throw new SecurityException("单据所属公司不能为空");
 			}
 		}
@@ -238,14 +243,14 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			delivery.setDeliveryFilesList(deliveryFilesList);
 		}
 		//国内需要保存总重量总体积
-		if (delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())){
+		if (delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())) {
 			LambdaQueryWrapper<DeliveryItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-			lambdaQueryWrapper.eq(DeliveryItems::getIsDeleted,0);
-			lambdaQueryWrapper.eq(DeliveryItems::getTenantId,SecureUtil.getTenantId());
-			lambdaQueryWrapper.eq(DeliveryItems::getPid,delivery.getId());
-			lambdaQueryWrapper.eq(DeliveryItems::getGoodType,0);
+			lambdaQueryWrapper.eq(DeliveryItems::getIsDeleted, 0);
+			lambdaQueryWrapper.eq(DeliveryItems::getTenantId, SecureUtil.getTenantId());
+			lambdaQueryWrapper.eq(DeliveryItems::getPid, delivery.getId());
+			lambdaQueryWrapper.eq(DeliveryItems::getGoodType, 0);
 			List<DeliveryItems> list = deliveryItemsService.list(lambdaQueryWrapper);
-			if (CollectionUtils.isNotEmpty(list)){
+			if (CollectionUtils.isNotEmpty(list)) {
 				delivery.setTotalWeight(list.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getActualWeight().multiply(y.getActualQuantity())), BigDecimal::add));//重量
 				delivery.setTotalVolumn(list.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getContainerVolume().multiply(y.getActualQuantity())), BigDecimal::add));//体积
 				baseMapper.updateById(delivery);
@@ -356,13 +361,13 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		baseMapper.updateById(select);
 
 		String billStatus = null;//订单状态
-		if("681169".equals(AuthUtil.getTenantId())){
+		if ("681169".equals(AuthUtil.getTenantId())) {
 			if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
 				billStatus = DeliveryStatusEnum.DELIVER.getType();
 			} else if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
 				billStatus = DeliveryStatusEnum.REPEAL.getType();
 			}
-		}else{
+		} else {
 			if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
 				billStatus = DeliveryStatusEnum.REVOCATION.getType();
 			} else if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
@@ -383,7 +388,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			baseMapper.insert(delivery);
 		} else {
 			Delivery deliverys = baseMapper.selectById(delivery.getId());//查询原始单据
-			if("681169".equals(AuthUtil.getTenantId())){
+			if ("681169".equals(AuthUtil.getTenantId())) {
 				if (delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType()) && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())) {
 					//发货
 					throw new RuntimeException("已收货请勿重复收货");
@@ -391,7 +396,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 					//撤销发货
 					throw new RuntimeException("已撤销收货请勿重复撤销收货");
 				}
-			}else{
+			} else {
 				if (delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType()) && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.REVOCATION.getType())) {
 					//发货
 					throw new RuntimeException("已收货请勿重复收货");
@@ -412,17 +417,17 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				delivery.setFreightQuantity(delivery.getTotalQuantity());
 				delivery.setFreightTime(date);
 				delivery.setFreightUser(AuthUtil.getUserName());
-				if("681169".equals(AuthUtil.getTenantId())){
+				if ("681169".equals(AuthUtil.getTenantId())) {
 					orderTemp.setReceivingStatus("已收货");
-				}else{
+				} else {
 					orderTemp.setOrderStatus("已完成");
 				}
 				orderTemp.setDeliverQuantity(delivery.getTotalQuantity());
 				orderTemp.setDeliverTime(date);
 			} else {
-				if("681169".equals(AuthUtil.getTenantId())){
+				if ("681169".equals(AuthUtil.getTenantId())) {
 					orderTemp.setReceivingStatus("已收货");
-				}else{
+				} else {
 					orderTemp.setOrderStatus("待发货");
 				}
 				orderTemp.setDeliverQuantity(BigDecimal.ZERO);
@@ -492,7 +497,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			{
 				throw new RuntimeException("已撤销收货请勿重复撤销收货");
 			}
-			if (select.getDeliveryStatus() != null && select.getDeliveryStatus().equals(DeliveryStatusEnum.HAVWARRIVED.getType()) && "681169".equals(AuthUtil.getTenantId())){
+			if (select.getDeliveryStatus() != null && select.getDeliveryStatus().equals(DeliveryStatusEnum.HAVWARRIVED.getType()) && "681169".equals(AuthUtil.getTenantId())) {
 				throw new SecurityException("此单据已生成凭证,禁止撤销");
 			}
 			delivery.setDeliveryStatus(billStatus);
@@ -505,7 +510,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			if (DeliveryEnum.TAKE.getType().equals(delivery.getDeliveryType())) {
 				Order order = new Order();
 				order.setId(delivery.getOrgId());
-				if (ObjectUtil.isNotEmpty(orderTemp.getPurchaseStatus()) && "已发货".equals(orderTemp.getPurchaseStatus())){
+				if (ObjectUtil.isNotEmpty(orderTemp.getPurchaseStatus()) && "已发货".equals(orderTemp.getPurchaseStatus())) {
 					order.setOrderStatus("已完成");
 				}
 				order.setArrivalTime(delivery.getArrivalTime());
@@ -587,10 +592,10 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			//=============生成凭证所需信息==============
 			String accountName = select.getBelongCompany();
 			if (!"青岛通用沃德轮胎有限公司".equals(accountName)) {
-				accountName="青岛达沃特轮胎有限公司";
+				accountName = "青岛达沃特轮胎有限公司";
 			}
 			JdTenant jdTenant = getJdTenant(accountName);
-			if(jdTenant != null) {
+			if (jdTenant != null) {
 				try {
 					//测试账套-收货生成凭证
 					this.testDeliverGoodsSaveVoucher(brand, select, accountName, corpName, corpNumber, wareHouse, purchaseTotalAmount, deliveryAmount, saleOrderNo, purchaseOrderNo);
@@ -612,23 +617,23 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		if (select == null) {
 			throw new SecurityException("未查到相关数据,操作失败");
 		}
-		if ("681169".equals(AuthUtil.getTenantId())){
-			if (ObjectUtil.isEmpty(select.getCorpId())){
+		if ("681169".equals(AuthUtil.getTenantId())) {
+			if (ObjectUtil.isEmpty(select.getCorpId())) {
 				throw new SecurityException("供应商必填");
 			}
-			if (ObjectUtil.isEmpty(select.getPurchaseMode())){
+			if (ObjectUtil.isEmpty(select.getPurchaseMode())) {
 				throw new SecurityException("采购方式必填");
 			}
-			if (ObjectUtil.isEmpty(select.getSalesCompany())){
+			if (ObjectUtil.isEmpty(select.getSalesCompany())) {
 				throw new SecurityException("所属公司必填");
 			}
-			if (ObjectUtil.isEmpty(select.getWarehouseType())){
+			if (ObjectUtil.isEmpty(select.getWarehouseType())) {
 				throw new SecurityException("仓库类型必填");
 			}
-			if (ObjectUtil.isEmpty(select.getStorageId())){
+			if (ObjectUtil.isEmpty(select.getStorageId())) {
 				throw new SecurityException("仓库名称必填");
 			}
-			if (ObjectUtil.isEmpty(select.getCreateTime())){
+			if (ObjectUtil.isEmpty(select.getCreateTime())) {
 				throw new SecurityException("入库时间必填");
 			}
 		}
@@ -741,7 +746,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				if (!"GN".equals(select.getTradeType())) {
 					//新增库存单
 					if (stock == null) {
-						StockGoods stockGoods = iDeliveryItemsService.saveStock(select.getTradeType(), select.getCorpId(), select.getStorageId(), e,select.getOrderType());
+						StockGoods stockGoods = iDeliveryItemsService.saveStock(select.getTradeType(), select.getCorpId(), select.getStorageId(), e, select.getOrderType());
 						//更新收货单明细库存
 						e.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
 						e.setInWeight(stockGoods.getInWeight());
@@ -800,7 +805,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 		Date date = new Date();
 		Order orderStatus = orderDescClient.getById(select.getSrcId());
-		if("681169".equals(AuthUtil.getTenantId())){
+		if ("681169".equals(AuthUtil.getTenantId())) {
 			delivery.setDeliveryStatus("已发货");
 			delivery.setFreightQuantity(select.getTotalQuantity());
 			delivery.setFreightTime(date);
@@ -809,7 +814,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 			Order temp = new Order();
 			temp.setId(select.getSrcId());//销售主表id
-			if (ObjectUtil.isNotEmpty(orderStatus.getReceivingStatus()) && "已收货".equals(orderStatus.getReceivingStatus())){
+			if (ObjectUtil.isNotEmpty(orderStatus.getReceivingStatus()) && "已收货".equals(orderStatus.getReceivingStatus())) {
 				temp.setOrderStatus("已完成");
 			}
 			temp.setPurchaseStatus("已发货");
@@ -817,9 +822,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			temp.setCreateDeliverUser(AuthUtil.getUserId().toString());
 			temp.setCreateDeliverTime(date);
 			temp.setActualDeliveryDate(select.getBusinessDate());
-			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0){
+			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
 				temp.setDeliverQuantity(select.getTotalQuantity());
-			}else {
+			} else {
 				temp.setDeliverQuantity(BigDecimal.ZERO);
 			}
 			temp.setDeliverTime(date);
@@ -829,15 +834,15 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			orderTemp.setId(select.getOrgId());//采购主表id
 			orderTemp.setOrderStatus("待收货");
 			orderTemp.setActualDeliveryDate(select.getBusinessDate());
-			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0){
+			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
 				orderTemp.setDeliverQuantity(select.getTotalQuantity());
-			}else {
+			} else {
 				orderTemp.setDeliverQuantity(BigDecimal.ZERO);
 			}
 			orderTemp.setDeliverTime(date);
 			orderDescClient.updateOrder(orderTemp);
 
-		}else{
+		} else {
 			delivery.setDeliveryStatus("已收货");
 			delivery.setFreightQuantity(select.getTotalQuantity());
 			delivery.setFreightTime(date);
@@ -848,9 +853,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			temp.setId(select.getOrgId());//采购主表id
 			temp.setOrderStatus("待发货");
 			temp.setActualDeliveryDate(select.getBusinessDate());
-			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0){
+			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
 				temp.setDeliverQuantity(select.getTotalQuantity());
-			}else {
+			} else {
 				temp.setDeliverQuantity(BigDecimal.ZERO);
 			}
 			temp.setDeliverTime(date);
@@ -860,9 +865,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			orderTemp.setId(select.getSrcId());//销售主表id
 			orderTemp.setOrderStatus("已发货");
 			orderTemp.setActualDeliveryDate(select.getBusinessDate());
-			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0){
+			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
 				orderTemp.setDeliverQuantity(select.getTotalQuantity());
-			}else {
+			} else {
 				orderTemp.setDeliverQuantity(BigDecimal.ZERO);
 			}
 			orderTemp.setDeliverTime(date);
@@ -873,10 +878,10 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		if ("681169".equals(select.getTenantId())) {
 			String accountName = select.getBelongCompany();
 			if (!"青岛通用沃德轮胎有限公司".equals(accountName)) {
-				accountName="青岛达沃特轮胎有限公司";
+				accountName = "青岛达沃特轮胎有限公司";
 			}
 			JdTenant jdTenant = getJdTenant(accountName);
-			if(jdTenant != null) {
+			if (jdTenant != null) {
 				//todo
 				try {
 					//测试账套-工厂发货生成凭证
@@ -899,17 +904,17 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		if (select == null) {
 			throw new SecurityException("未查到相关数据,操作失败");
 		}
-		if("681169".equals(AuthUtil.getTenantId())){
+		if ("681169".equals(AuthUtil.getTenantId())) {
 			if (select.getDeliveryStatus() == null || !DeliveryStatusEnum.REVOCATION.getType().equals(select.getDeliveryStatus())) {
 				throw new SecurityException("此单据已撤回或者不存在,禁止重复操作");
 			}
-		}else{
+		} else {
 			if (select.getDeliveryStatus() == null || !DeliveryStatusEnum.DELIVER.getType().equals(select.getDeliveryStatus())) {
 				throw new SecurityException("此单据已撤回或者不存在,禁止重复操作");
 			}
 		}
 
-		if (select.getDeliveryStatus() != null && DeliveryStatusEnum.REVOCATION.getType().equals(select.getDeliveryStatus()) && "681169".equals(AuthUtil.getTenantId())){
+		if (select.getDeliveryStatus() != null && DeliveryStatusEnum.REVOCATION.getType().equals(select.getDeliveryStatus()) && "681169".equals(AuthUtil.getTenantId())) {
 			throw new SecurityException("此单据已生成凭证,禁止撤销");
 		}
 
@@ -1034,21 +1039,21 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	@GlobalTransactional(timeoutMills = 12000000)
 	public R affirmAllot(Delivery delivery) {
 		Delivery select = baseMapper.selectById(delivery.getId());
-		if (select == null){
+		if (select == null) {
 			throw new SecurityException("未找到调拨单数据");
 		}
-		if (select.getDeliveryStatus().equals(DeliveryStatusEnum.ALLOT.getType())){
+		if (select.getDeliveryStatus().equals(DeliveryStatusEnum.ALLOT.getType())) {
 			throw new SecurityException("调拨单已确认调拨,请勿重复调拨");
 		}
 		//获取调拨明细数据
 		LambdaQueryWrapper<DeliveryItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(DeliveryItems::getIsDeleted,0);
-		lambdaQueryWrapper.eq(DeliveryItems::getGoodType,0);
-		lambdaQueryWrapper.eq(DeliveryItems::getTenantId,SecureUtil.getTenantId());
-		lambdaQueryWrapper.eq(DeliveryItems::getPid,delivery.getId());
+		lambdaQueryWrapper.eq(DeliveryItems::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(DeliveryItems::getGoodType, 0);
+		lambdaQueryWrapper.eq(DeliveryItems::getTenantId, SecureUtil.getTenantId());
+		lambdaQueryWrapper.eq(DeliveryItems::getPid, delivery.getId());
 		List<DeliveryItems> deliveryItemsList = deliveryItemsService.list(lambdaQueryWrapper);
-		if (CollectionUtils.isNotEmpty(deliveryItemsList)){
-			deliveryItemsService.affirmAllot(delivery.getStorageId(),delivery.getAllotStorageId(),deliveryItemsList,1,select.getTradeType());
+		if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
+			deliveryItemsService.affirmAllot(delivery.getStorageId(), delivery.getAllotStorageId(), deliveryItemsList, 1, select.getTradeType());
 		}
 		//修改原单的状态
 		select.setDeliveryStatus(DeliveryStatusEnum.ALLOT.getType());
@@ -1061,21 +1066,21 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	@GlobalTransactional(timeoutMills = 12000000)
 	public R repealAllot(Delivery delivery) {
 		Delivery select = baseMapper.selectById(delivery.getId());
-		if (select == null){
+		if (select == null) {
 			throw new SecurityException("未找到调拨单数据");
 		}
-		if (!select.getDeliveryStatus().equals(DeliveryStatusEnum.ALLOT.getType())){
+		if (!select.getDeliveryStatus().equals(DeliveryStatusEnum.ALLOT.getType())) {
 			throw new SecurityException("调拨单未确认调拨,撤销失败");
 		}
 		//获取调拨明细数据
 		LambdaQueryWrapper<DeliveryItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(DeliveryItems::getIsDeleted,0);
-		lambdaQueryWrapper.eq(DeliveryItems::getGoodType,0);
-		lambdaQueryWrapper.eq(DeliveryItems::getTenantId,SecureUtil.getTenantId());
-		lambdaQueryWrapper.eq(DeliveryItems::getPid,delivery.getId());
+		lambdaQueryWrapper.eq(DeliveryItems::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(DeliveryItems::getGoodType, 0);
+		lambdaQueryWrapper.eq(DeliveryItems::getTenantId, SecureUtil.getTenantId());
+		lambdaQueryWrapper.eq(DeliveryItems::getPid, delivery.getId());
 		List<DeliveryItems> deliveryItemsList = deliveryItemsService.list(lambdaQueryWrapper);
-		if (CollectionUtils.isNotEmpty(deliveryItemsList)){
-			deliveryItemsService.affirmAllot(delivery.getStorageId(),delivery.getAllotStorageId(),deliveryItemsList,2,select.getTradeType());
+		if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
+			deliveryItemsService.affirmAllot(delivery.getStorageId(), delivery.getAllotStorageId(), deliveryItemsList, 2, select.getTradeType());
 		}
 		//修改原单的状态
 		select.setDeliveryStatus(DeliveryStatusEnum.REPEAL.getType());
@@ -1083,6 +1088,79 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		return R.success("操作成功");
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R documentaryStatusUpdate(Delivery delivery) {
+		if (null == delivery.getId()) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Delivery detail = baseMapper.selectById(delivery.getId());
+		if (ObjectUtils.isNull(detail)) {
+			throw new RuntimeException("未找到单据信息");
+		}
+		if (1 == delivery.getDocumentaryStatusType()) {
+			detail.setCustomsStatus("已报关");
+			detail.setCustomsDate(delivery.getCustomsDate());
+
+			detail.setShippingDate(null);
+			detail.setDocumentaryDate(null);
+		} else if (2 == delivery.getDocumentaryStatusType()) {
+			detail.setShippingStatus("已出运");
+			detail.setShippingDate(delivery.getShippingDate());
+			detail.setCustomsDate(null);
+			detail.setDocumentaryDate(null);
+		} else if (3 == delivery.getDocumentaryStatusType()) {
+			detail.setDocumentaryStatus("已完成");
+			detail.setDocumentaryDate(delivery.getDocumentaryDate());
+			detail.setShippingDate(null);
+			detail.setCustomsDate(null);
+		}
+		Order selectOrder = orderDescClient.getById(detail.getSrcId());
+		if (ObjectUtils.isNotNull(selectOrder)) {
+			selectOrder.setUpdateTime(new Date());
+			selectOrder.setUpdateUser(AuthUtil.getUserId());
+			selectOrder.setUpdateUserName(AuthUtil.getUserName());
+
+			if (3 == delivery.getDocumentaryStatusType()) {
+				LambdaQueryWrapper<DeliveryItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+				lambdaQueryWrapper.eq(DeliveryItems::getIsDeleted, 0).eq(DeliveryItems::getTenantId, AuthUtil.getTenantId()).eq(DeliveryItems::getPid, detail.getId());
+				List<DeliveryItems> deliveryItemsList = deliveryItemsMapper.selectList(lambdaQueryWrapper);
+				selectOrder.setReceiveQuantity(deliveryItemsList.stream().map(DeliveryItems::getActualQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+			}
+			//发送消息
+			Message sendMessage = new Message();
+			sendMessage.setParameter(String.valueOf(selectOrder.getId()));
+			sendMessage.setUserName(AuthUtil.getUserName());
+			sendMessage.setUserId(AuthUtil.getUserId());
+			sendMessage.setMessageType(1);
+			sendMessage.setTenantId(AuthUtil.getTenantId());
+			sendMessage.setCreateUser(AuthUtil.getUserId());
+			sendMessage.setCreateTime(new Date());
+			sendMessage.setUrl("/exportTrade/invoice/index");
+			sendMessage.setPageLabel(selectOrder.getPageLabel());
+			sendMessage.setPageStatus(selectOrder.getPageStatus());
+			sendMessage.setToUserId(selectOrder.getCreateUser());
+			sendMessage.setToUserName(selectOrder.getCreateUserName());
+			if (1 == delivery.getDocumentaryStatusType()){
+				sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已报关,请查看");
+			} else if (2 == delivery.getDocumentaryStatusType()) {
+				sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已出运,请查看");
+			} else if (3 == delivery.getDocumentaryStatusType()) {
+				sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已完成,请查看");
+				selectOrder.setDocumentaryStatus("已完成");
+				selectOrder.setDocumentaryDate(delivery.getDocumentaryDate());
+				orderDescClient.updateOrder(selectOrder);
+			}
+			R save = messageClient.save(sendMessage);
+			if (!save.isSuccess()) {
+				throw new SecurityException("发送消息失败");
+			}
+		}
+		baseMapper.updateById(detail);
+		return R.data(detail);
+	}
+
 
 	public void createProfit(Order order, BigDecimal createProfit) {
 		//检查是否使用返利,如果使用返利
@@ -1187,7 +1265,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	}
 
 	//收货生成凭证
-	public void testTakeGoodsSaveVoucher(String brand, Delivery delivery, String accountName, String copsName,String corpNumber, String warehouse, String acoount, String orderNo) throws Exception {
+	public void testTakeGoodsSaveVoucher(String brand, Delivery delivery, String accountName, String copsName, String corpNumber, String warehouse, String acoount, String orderNo) throws Exception {
 		// TODO 临时屏蔽
 //		if (!"test".equals(AuthUtil.getTenantId())) {
 //			return;
@@ -1702,7 +1780,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 	}
 
-	private JdTenant getJdTenant(String accountName){
+	private JdTenant getJdTenant(String accountName) {
 		LambdaQueryWrapper<JdTenant> jdTenantLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		jdTenantLambdaQueryWrapper
 			.eq(JdTenant::getIsEnable, 1)

+ 135 - 40
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java

@@ -28,7 +28,6 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.deliver.goods.entity.Delivery;
 import org.springblade.deliver.goods.feign.IDeliveryClient;
-import org.springblade.finance.excel.PayExcel;
 import org.springblade.finance.feign.IFinanceClient;
 import org.springblade.finance.vojo.Acc;
 import org.springblade.purchase.sales.entity.Order;
@@ -163,7 +162,7 @@ public class ExportOrderController extends BladeController {
 				if (item.getCorpId() != null) {
 					if (ObjectUtil.isNotEmpty(corpList)) {
 						CorpsDesc corpsDesc = corpList.stream().filter(d -> d.getId().equals(item.getCorpId())).findFirst().orElse(null);
-						if (ObjectUtils.isNotNull(corpsDesc)){
+						if (ObjectUtils.isNotNull(corpsDesc)) {
 							item.setCorpsName(corpsDesc.getCname());
 						}
 					}
@@ -171,7 +170,7 @@ public class ExportOrderController extends BladeController {
 				if (item.getBelongToCorpId() != null) {
 					if (ObjectUtil.isNotEmpty(belongToCorpList)) {
 						CorpsDesc corpsDesc = belongToCorpList.stream().filter(d -> d.getId().equals(item.getBelongToCorpId())).findFirst().orElse(null);
-						if (ObjectUtils.isNotNull(corpsDesc)){
+						if (ObjectUtils.isNotNull(corpsDesc)) {
 							item.setBelongToCorpName(corpsDesc.getCname());
 						}
 					}
@@ -180,7 +179,7 @@ public class ExportOrderController extends BladeController {
 				if (item.getCreateUser() != null) {
 					if (ObjectUtil.isNotEmpty(createUserList)) {
 						User user = createUserList.stream().filter(d -> d.getId().equals(item.getCreateUser())).findFirst().orElse(null);
-						if (ObjectUtils.isNotNull(user)){
+						if (ObjectUtils.isNotNull(user)) {
 							item.setCreateUserName(user.getRealName());
 						}
 					}
@@ -385,7 +384,7 @@ public class ExportOrderController extends BladeController {
 				if (item.getCorpId() != null) {
 					if (ObjectUtil.isNotEmpty(corpsDescList)) {
 						CorpsDesc corpsDesc = corpsDescList.stream().filter(e -> e.getId().equals(item.getCorpId())).findFirst().orElse(null);
-						if (ObjectUtils.isNotNull(corpsDesc)){
+						if (ObjectUtils.isNotNull(corpsDesc)) {
 							item.setCorpsName(corpsDesc.getCname());
 
 						}
@@ -398,7 +397,7 @@ public class ExportOrderController extends BladeController {
 						return x.add(y.getAmount().multiply(y.getExchangeRate()));
 					}, BigDecimal::add));//金额求和
 					//修改  2022年11月10日09:20:46
-					 item.setOutFactoryPrice(list.stream().filter(e -> e.getAmount() != null).reduce(BigDecimal.ZERO, (x, y) -> {
+					item.setOutFactoryPrice(list.stream().filter(e -> e.getAmount() != null).reduce(BigDecimal.ZERO, (x, y) -> {
 						return x.add(y.getOutFactoryPrice().multiply(y.getOrderQuantity()).multiply(y.getExchangeRate()));
 					}, BigDecimal::add));//出厂金额求和
 					item.setProcurementCost(list.stream().filter(e -> e.getPurchaseCost() != null).reduce(BigDecimal.ZERO, (x, y) -> {
@@ -994,7 +993,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/corpStatistics")
 	@ApiOperation(value = "发货客户统计", notes = "发货客户统计")
-	public R corpStatistics(OrderStatisticsVo statisticsVo, Query query){
+	public R corpStatistics(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.corpStatistics(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1004,8 +1003,8 @@ public class ExportOrderController extends BladeController {
 	 * 发货客户明细统计
 	 */
 	@GetMapping("/corpStatisticsItem")
-	@ApiOperation(value = "发货客户明细统计" , notes = "发货客户明细统计")
-	public R corpStatisticsItem(OrderStatisticsVo statisticsVo, Query query){
+	@ApiOperation(value = "发货客户明细统计", notes = "发货客户明细统计")
+	public R corpStatisticsItem(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.corpStatisticsItem(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1016,7 +1015,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/corpStatisticsExport")
 	@ApiOperation(value = "发货客户统计导出", notes = "发货客户统计导出")
-	public void corpStatisticsExport(OrderStatisticsVo statisticsVo, HttpServletResponse response){
+	public void corpStatisticsExport(OrderStatisticsVo statisticsVo, HttpServletResponse response) {
 		statisticsVo.setTenantId(SecureUtil.getTenantId());
 		List<CorpStatisticsExcel> list = orderService.corpStatisticsExport(statisticsVo);
 		ExcelUtil.export(response, "发货客户统计", "发货客户统计", list, CorpStatisticsExcel.class);
@@ -1027,7 +1026,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/salesmanStatistics")
 	@ApiOperation(value = "发货业务员统计", notes = "发货业务员统计")
-	public R salesmanStatistics(OrderStatisticsVo statisticsVo, Query query){
+	public R salesmanStatistics(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.salesmanStatistics(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1038,7 +1037,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/salesmanStatisticsItem")
 	@ApiOperation(value = "发货业务员明细统计", notes = "发货业务员明细统计")
-	public R salesmanStatisticsItem(OrderStatisticsVo statisticsVo, Query query){
+	public R salesmanStatisticsItem(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.salesmanStatisticsItem(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1049,7 +1048,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/salesmanStatisticsExport")
 	@ApiOperation(value = "发货业务员统计导出", notes = "发货业务员统计导出")
-	public void salesmanStatisticsExport(OrderStatisticsVo statisticsVo, HttpServletResponse response){
+	public void salesmanStatisticsExport(OrderStatisticsVo statisticsVo, HttpServletResponse response) {
 		statisticsVo.setTenantId(SecureUtil.getTenantId());
 		List<SalesmanStatisticsExcel> list = orderService.salesmanStatisticsExport(statisticsVo);
 		ExcelUtil.export(response, "发货业务员统计", "发货业务员统计", list, SalesmanStatisticsExcel.class);
@@ -1060,7 +1059,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/salesmanProfit")
 	@ApiOperation(value = "业务员利润统计", notes = "业务员利润统计")
-	public R salesmanProfit(OrderStatisticsVo statisticsVo, Query query){
+	public R salesmanProfit(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.salesmanProfit(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1071,7 +1070,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/salesmanProfitItem")
 	@ApiOperation(value = "业务员利润明细统计", notes = "业务员利润明细统计")
-	public R salesmanProfitItem(OrderStatisticsVo statisticsVo, Query query){
+	public R salesmanProfitItem(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.salesmanProfitItem(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1082,7 +1081,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/salesmanProfitExport")
 	@ApiOperation(value = "业务员利润导出", notes = "业务员利润导出")
-	public void salesmanProfitExport(OrderStatisticsVo statisticsVo, HttpServletResponse response){
+	public void salesmanProfitExport(OrderStatisticsVo statisticsVo, HttpServletResponse response) {
 		statisticsVo.setTenantId(SecureUtil.getTenantId());
 		List<SalesmanProfitExcel> list = orderService.salesmanProfitExport(statisticsVo);
 		ExcelUtil.export(response, "业务员利润统计", "业务员利润统计", list, SalesmanProfitExcel.class);
@@ -1093,7 +1092,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/customerProfit")
 	@ApiOperation(value = "客户利润统计", notes = "客户利润统计")
-	public R customerProfit(OrderStatisticsVo statisticsVo, Query query){
+	public R customerProfit(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.customerProfit(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1104,7 +1103,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/customerProfitItem")
 	@ApiOperation(value = "客户利润明细统计", notes = "客户利润明细统计")
-	public R customerProfitItem(OrderStatisticsVo statisticsVo, Query query){
+	public R customerProfitItem(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.customerProfitItem(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1115,7 +1114,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/customerProfitExport")
 	@ApiOperation(value = "客户利润导出", notes = "客户利润导出")
-	public void customerProfitExport(OrderStatisticsVo statisticsVo, HttpServletResponse response){
+	public void customerProfitExport(OrderStatisticsVo statisticsVo, HttpServletResponse response) {
 		statisticsVo.setTenantId(SecureUtil.getTenantId());
 		List<CustomerProfitExcel> list = orderService.customerProfitExport(statisticsVo);
 		ExcelUtil.export(response, "客户利润统计", "客户利润统计", list, CustomerProfitExcel.class);
@@ -1126,7 +1125,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/brandProfit")
 	@ApiOperation(value = "分品牌利润对比统计", notes = "分品牌利润对比统计")
-	public R brandProfit(OrderStatisticsVo statisticsVo, Query query){
+	public R brandProfit(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.brandProfit(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1137,7 +1136,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/brandProfitItem")
 	@ApiOperation(value = "品牌利润对比明细统计", notes = "品牌利润对比明细统计")
-	public R brandProfitItem(OrderStatisticsVo statisticsVo, Query query){
+	public R brandProfitItem(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.brandProfitItem(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1148,7 +1147,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/brandProfitExport")
 	@ApiOperation(value = "分品牌利润对比导出", notes = "分品牌利润对比导出")
-	public void brandProfitExport(OrderStatisticsVo statisticsVo, HttpServletResponse response){
+	public void brandProfitExport(OrderStatisticsVo statisticsVo, HttpServletResponse response) {
 		statisticsVo.setTenantId(SecureUtil.getTenantId());
 		List<BrandProfitExcel> list = orderService.brandProfitExport(statisticsVo);
 		ExcelUtil.export(response, "分品牌利润对比导出", "分品牌利润对比导出", list, BrandProfitExcel.class);
@@ -1159,7 +1158,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/specificationsProfit")
 	@ApiOperation(value = "发货规格统计", notes = "发货规格统计")
-	public R specificationsProfit(OrderStatisticsVo statisticsVo, Query query){
+	public R specificationsProfit(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.specificationsProfit(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1170,7 +1169,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/specificationsProfitItem")
 	@ApiOperation(value = "发货规格明细统计", notes = "发货规格明细统计")
-	public R specificationsProfitItem(OrderStatisticsVo statisticsVo, Query query){
+	public R specificationsProfitItem(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.specificationsProfitItem(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1181,7 +1180,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/specificationsProfitExport")
 	@ApiOperation(value = "发货规格统计导出", notes = "发货规格统计导出")
-	public void specificationsProfitExport(OrderStatisticsVo statisticsVo, HttpServletResponse response){
+	public void specificationsProfitExport(OrderStatisticsVo statisticsVo, HttpServletResponse response) {
 		statisticsVo.setTenantId(SecureUtil.getTenantId());
 		List<SpecificationsProfitExcel> list = orderService.specificationsProfitExport(statisticsVo);
 		ExcelUtil.export(response, "发货规格统计导出", "发货规格统计导出", list, SpecificationsProfitExcel.class);
@@ -1192,7 +1191,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/totalSummary")
 	@ApiOperation(value = "数量金额汇总对比统计", notes = "数量金额汇总对比统计")
-	public R totalSummary(TotalSummaryVo totalSummaryVo, Query query){
+	public R totalSummary(TotalSummaryVo totalSummaryVo, Query query) {
 		totalSummaryVo.setTenantId(AuthUtil.getTenantId());
 		IPage<TotalSummaryVo> pages = orderService.totalSummary(Condition.getPage(query), totalSummaryVo);
 		return R.data(pages);
@@ -1204,7 +1203,7 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/totalSummaryItem")
 	@ApiOperation(value = "数量金额汇总对比明细统计", notes = "数量金额汇总对比明细统计")
-	public R totalSummaryItem(OrderStatisticsVo statisticsVo, Query query){
+	public R totalSummaryItem(OrderStatisticsVo statisticsVo, Query query) {
 		statisticsVo.setTenantId(AuthUtil.getTenantId());
 		IPage<OrderStatisticsVo> pages = orderService.totalSummaryItem(Condition.getPage(query), statisticsVo);
 		return R.data(pages);
@@ -1215,12 +1214,12 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/totalSummaryExport")
 	@ApiOperation(value = "数量金额汇总对比统计导出", notes = "数量金额汇总对比统计导出")
-	public void totalSummaryExport(TotalSummaryVo totalSummaryVo, HttpServletResponse response){
+	public void totalSummaryExport(TotalSummaryVo totalSummaryVo, HttpServletResponse response) {
 		totalSummaryVo.setTenantId(SecureUtil.getTenantId());
 		List<TotalSummaryExcel> list = orderService.totalSummaryExport(totalSummaryVo);
-		if (ObjectUtil.isNotEmpty(totalSummaryVo.getYear())){
+		if (ObjectUtil.isNotEmpty(totalSummaryVo.getYear())) {
 			ExcelUtil.export(response, totalSummaryVo.getYear() + "数量金额汇总对比统计", totalSummaryVo.getYear() + "数量金额汇总对比统计", list, TotalSummaryExcel.class);
-		}else {
+		} else {
 			ExcelUtil.export(response, "数量金额汇总对比统计", "数量金额汇总对比统计", list, TotalSummaryExcel.class);
 		}
 	}
@@ -1230,40 +1229,40 @@ public class ExportOrderController extends BladeController {
 	 */
 	@GetMapping("/timeUnifiedExport")
 	@ApiOperation(value = "统计分析明细导出统一接口", notes = "统计分析明细导出统一接口")
-	public void timeUnifiedExport(OrderStatisticsVo statisticsVo, HttpServletResponse response){
+	public void timeUnifiedExport(OrderStatisticsVo statisticsVo, HttpServletResponse response) {
 		statisticsVo.setTenantId(SecureUtil.getTenantId());
 		List<OrderStatisticsVo> list = new ArrayList<>();
 
-		if ("totalSummaryItem".equals(statisticsVo.getIdentification())){//数据金额明细导出
+		if ("totalSummaryItem".equals(statisticsVo.getIdentification())) {//数据金额明细导出
 			list = orderService.totalSummaryItemExport(statisticsVo);
 			List<OrderStatisticsOneExcel> excelList = BeanUtil.copy(list, OrderStatisticsOneExcel.class);
-			if (ObjectUtil.isNotEmpty(statisticsVo.getYear())){
+			if (ObjectUtil.isNotEmpty(statisticsVo.getYear())) {
 				ExcelUtil.export(response, statisticsVo.getYear() + "年" + statisticsVo.getMonth() + "月数量金额汇总明细统计",
 					statisticsVo.getYear() + "年" + statisticsVo.getMonth() + "月数量金额汇总明细统计", excelList, OrderStatisticsOneExcel.class);
-			}else {
+			} else {
 				ExcelUtil.export(response, "数量金额汇总明细统计", "数量金额汇总明细统计", excelList, OrderStatisticsOneExcel.class);
 			}
-		}else if ("corpStatisticsItem".equals(statisticsVo.getIdentification())){//发货客户明细导出
+		} else if ("corpStatisticsItem".equals(statisticsVo.getIdentification())) {//发货客户明细导出
 			list = orderService.corpStatisticsItemExport(statisticsVo);
 			List<OrderStatisticsOneExcel> excelList = BeanUtil.copy(list, OrderStatisticsOneExcel.class);
 			ExcelUtil.export(response, "发货客户明细统计", "发货客户明细统计", excelList, OrderStatisticsOneExcel.class);
-		}else if ("specificationsProfitItem".equals(statisticsVo.getIdentification())){//发货规格明细导出
+		} else if ("specificationsProfitItem".equals(statisticsVo.getIdentification())) {//发货规格明细导出
 			list = orderService.specificationsProfitItemExport(statisticsVo);
 			List<OrderStatisticsOneExcel> excelList = BeanUtil.copy(list, OrderStatisticsOneExcel.class);
 			ExcelUtil.export(response, "发货规格明细统计", "发货客户明细统计", excelList, OrderStatisticsOneExcel.class);
-		}else if ("salesmanStatisticsItem".equals(statisticsVo.getIdentification())){//发货业务员明细导出
+		} else if ("salesmanStatisticsItem".equals(statisticsVo.getIdentification())) {//发货业务员明细导出
 			list = orderService.salesmanStatisticsItemExport(statisticsVo);
 			List<OrderStatisticsTwoExcel> excelList = BeanUtil.copy(list, OrderStatisticsTwoExcel.class);
 			ExcelUtil.export(response, "发货业务员明细统计", "发货客户明细统计", excelList, OrderStatisticsTwoExcel.class);
-		}else if ("customerProfitItem".equals(statisticsVo.getIdentification())){//客户利润明细导出
+		} else if ("customerProfitItem".equals(statisticsVo.getIdentification())) {//客户利润明细导出
 			list = orderService.customerProfitItemExport(statisticsVo);
 			List<OrderStatisticsThreeExcel> excelList = BeanUtil.copy(list, OrderStatisticsThreeExcel.class);
 			ExcelUtil.export(response, "客户利润明细统计", "客户利润明细统计", excelList, OrderStatisticsThreeExcel.class);
-		}else if ("salesmanProfitItem".equals(statisticsVo.getIdentification())){//业务员利润明细导出
+		} else if ("salesmanProfitItem".equals(statisticsVo.getIdentification())) {//业务员利润明细导出
 			list = orderService.salesmanProfitItemExport(statisticsVo);
 			List<OrderStatisticsThreeExcel> excelList = BeanUtil.copy(list, OrderStatisticsThreeExcel.class);
 			ExcelUtil.export(response, "业务员利润明细统计", "业务员利润明细统计", excelList, OrderStatisticsThreeExcel.class);
-		}else if ("brandProfitItem".equals(statisticsVo.getIdentification())){//品牌利润明细导出
+		} else if ("brandProfitItem".equals(statisticsVo.getIdentification())) {//品牌利润明细导出
 			list = orderService.brandProfitItemExport(statisticsVo);
 			List<OrderStatisticsThreeExcel> excelList = BeanUtil.copy(list, OrderStatisticsThreeExcel.class);
 			ExcelUtil.export(response, "品牌利润明细统计", "品牌利润明细统计", excelList, OrderStatisticsThreeExcel.class);
@@ -1271,5 +1270,101 @@ public class ExportOrderController extends BladeController {
 
 	}
 
+	/**
+	 * 生成采购(发送消息)
+	 */
+	@PostMapping("/generatePurchaseNews")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入order")
+	public R generatePurchaseNews(@Valid @RequestBody Order order) {
+		order.setBillType(OrderTypeEnum.SALES.getType());
+		order.setTradeType(OrderTypeEnum.EXPORT.getType());
+		return orderService.generatePurchase(order);
+	}
+
+	/**
+	 * 销售列表
+	 */
+	@GetMapping("/listXS")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入order")
+	public R<IPage<OrderItems>> listXS(OrderItems orderItems, Query query) {
+		LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(OrderItems::getTenantId, SecureUtil.getTenantId());//租户id
+		lambdaQueryWrapper.eq(OrderItems::getIsDeleted, 0);//订单是否有效
+		lambdaQueryWrapper.eq(OrderItems::getBillType, OrderTypeEnum.SALES.getType());//订单类型
+		lambdaQueryWrapper.eq(OrderItems::getBillNo, orderItems.getBillNo());//销售单号
+		if (ObjectUtils.isNotNull(orderItems.getBusinesDateList()) && orderItems.getBusinesDateList().size()>0){
+			lambdaQueryWrapper.ge(OrderItems::getBusinesDate, orderItems.getBusinesDateList().get(0));
+			lambdaQueryWrapper.le(OrderItems::getBusinesDate, orderItems.getBusinesDateList().get(1));
+		}
+		if (ObjectUtils.isNotNull(orderItems.getPlannedDeliveryDateList()) && orderItems.getPlannedDeliveryDateList().size()>0){
+			lambdaQueryWrapper.eq(OrderItems::getPlannedDeliveryDate, orderItems.getPlannedDeliveryDateList().get(0));//销售单号
+			lambdaQueryWrapper.eq(OrderItems::getPlannedDeliveryDate, orderItems.getPlannedDeliveryDateList().get(1));//销售单号
+		}
+		lambdaQueryWrapper.eq(OrderItems::getCorpId, orderItems.getCorpId());//销售单号
+		lambdaQueryWrapper.apply("order_quantity > purchase_quantity");//销售数量大于采购数量
+		lambdaQueryWrapper.orderByDesc(OrderItems::getId);
+		IPage<OrderItems> pages = orderItemsService.page(Condition.getPage(query), lambdaQueryWrapper);
+		return R.data(pages);
+	}
+
+	/**
+	 * 生成发货单(新)
+	 *
+	 * @param order
+	 * @return
+	 */
+	@PostMapping("/generateShipment")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "出口销售单生成发货单", notes = "传入主订单id,明细ids")
+	public R generateShipment(@Valid @RequestBody Order order) {
+		if (order.getId() == null) {
+			return R.fail(500, "参数缺失");
+		}
+		order.setBillType(OrderTypeEnum.SALES.getType());
+		order.setTradeType(OrderTypeEnum.EXPORT.getType());
+		return orderService.generateShipment(order);
+	}
+
+	/**
+	 * 生成采购(单据信息)
+	 */
+	@GetMapping("/generatePurchaseBill")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入order")
+	public R generatePurchaseBill(@RequestParam(value = "ids") String ids) {
+		return orderService.generatePurchaseBill(ids);
+	}
+
+	/**
+	 * 采购状态修改
+	 *
+	 * @param order
+	 * @return
+	 */
+	@PostMapping("/purchaseStatusUpdate")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "出口销售单生成发货单", notes = "传入主订单id,明细ids")
+	public R purchaseStatusUpdate(@Valid @RequestBody Order order) {
+		if (order.getId() == null) {
+			return R.fail(500, "参数缺失");
+		}
+		return orderService.purchaseStatusUpdate(order);
+	}
+
+	/**
+	 * 单据数量统计
+	 *
+	 * @param order
+	 * @return
+	 */
+	@GetMapping("/documentQuantityStatistics")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "出口销售单生成发货单", notes = "传入主订单id,明细ids")
+	public R documentQuantityStatistics(Order order) {
+		return orderService.documentQuantityStatistics(order);
+	}
+
 
 }

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

@@ -490,4 +490,14 @@ public interface IOrderService extends IService<Order> {
 	R cancelOrder(Order order);
 
 	R payPrepay(Long orderId);
+
+    R generatePurchase(Order order);
+
+	R generateShipment(Order order);
+
+	R generatePurchaseBill(String ids);
+
+    R purchaseStatusUpdate(Order order);
+
+    R documentQuantityStatistics(Order order);
 }

+ 427 - 15
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -82,6 +82,7 @@ import java.math.RoundingMode;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static org.springblade.common.constant.TenantConstant.*;
 
@@ -255,6 +256,55 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 							order.setOrgOrderNo((String) clientBillNo.getData());
 						}
 					}
+					if ("CG".equals(order.getBillType()) && ObjectUtils.isNotNull(order.getSrcIds())) {
+						String[] arrs = order.getSrcIds().split(",");
+						for (String arr : arrs) {
+							Order selectOrder = baseMapper.selectById(Long.parseLong(arr));
+							if (ObjectUtils.isNotNull(selectOrder)) {
+								selectOrder.setFudaPurchaseDate(new Date());
+								selectOrder.setFudaPurchaseStatus("采购中");
+								selectOrder.setUpdateTime(new Date());
+								selectOrder.setUpdateUser(AuthUtil.getUserId());
+								selectOrder.setUpdateUserName(AuthUtil.getUserName());
+								baseMapper.updateById(selectOrder);
+
+								//循环发送消息
+								Message sendMessage = new Message();
+								sendMessage.setParameter(String.valueOf(selectOrder.getId()));
+								sendMessage.setUserName(AuthUtil.getUserName());
+								sendMessage.setUserId(AuthUtil.getUserId());
+								sendMessage.setMessageType(1);
+								sendMessage.setTenantId(AuthUtil.getTenantId());
+								sendMessage.setCreateUser(AuthUtil.getUserId());
+								sendMessage.setCreateTime(new Date());
+								sendMessage.setUrl(selectOrder.getUrl());
+								sendMessage.setPageLabel(selectOrder.getPageLabel());
+								sendMessage.setPageStatus(selectOrder.getPageStatus());
+								if (true) {
+									sendMessage.setToUserId(selectOrder.getCreateUser());
+									sendMessage.setToUserName(selectOrder.getCreateUserName());
+									sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "正在采购中,请查看");
+									R save = messageClient.save(sendMessage);
+									if (!save.isSuccess()) {
+										throw new SecurityException("发送消息失败");
+									}
+								}
+								if (true) {
+									sendMessage.setToUserId(selectOrder.getDocumenterId());
+									sendMessage.setToUserName(selectOrder.getDocumenterName());
+									sendMessage.setMessageBody("销售订单" + selectOrder.getSysNo() + "正在采购中,请查看");
+									R save = messageClient.save(sendMessage);
+									if (!save.isSuccess()) {
+										throw new SecurityException("发送消息失败");
+									}
+								}
+							}
+						}
+						order.setFudaPurchaseDate(new Date());
+						order.setFudaPurchaseStatus("采购中");
+						order.setBuyerName(order.get$buyerId());
+						order.setDocumenterName(order.get$documenterId());
+					}
 				} else {
 					R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(order.getCorpId());
 					if (corpMessage.isSuccess()) {
@@ -275,13 +325,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			if (StringUtils.isBlank(order.getMorderNo()) && order.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())) {
 				order.setMorderNo(order.getOrderNo());
 			}
-			if (ObjectUtils.isNotNull(order.getSrcOrderNo())) {
-				String[] arrs = order.getSrcOrderNo().split(",");
-				for (String arr : arrs) {
-					Order order1 = baseMapper.selectOne(new LambdaQueryWrapper<Order>().eq(Order::getSysNo, arr));
-					if (ObjectUtils.isNotNull(order1)) {
-						order1.setSrcOrderNo(order.getSysNo());
-						baseMapper.updateById(order1);
+			if (!"577435".equals(AuthUtil.getTenantId())) {
+				if (ObjectUtils.isNotNull(order.getSrcOrderNo())) {
+					String[] arrs = order.getSrcOrderNo().split(",");
+					for (String arr : arrs) {
+						Order order1 = baseMapper.selectOne(new LambdaQueryWrapper<Order>().eq(Order::getSysNo, arr));
+						if (ObjectUtils.isNotNull(order1)) {
+							order1.setSrcOrderNo(order.getSysNo());
+							baseMapper.updateById(order1);
+						}
 					}
 				}
 			}
@@ -352,6 +404,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			order.setTenantId(SecureUtil.getTenantId());
 			order.setUpdateTime(date);
 			order.setUpdateUser(SecureUtil.getUserId());
+			order.setBuyerName(order.get$buyerId());
+			order.setDocumenterName(order.get$documenterId());
 			baseMapper.updateById(order);
 		}
 		// 保存订单费用明细
@@ -361,8 +415,53 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		}
 		// 保存订单明细
 		if (CollectionUtils.isNotEmpty(order.getOrderItemsList())) {
-			List<OrderItems> orderItemsList = orderItemsService.saveOrderItemsMessage(order.getOrderItemsList(), date, order.getId());
-			order.setOrderItemsList(orderItemsList);
+			order.getOrderItemsList().forEach(item -> {
+				if (ObjectUtils.isNotNull(item.getCorpId())) {
+					CorpsDesc corpsDesc = corpsDescClient.getCorpId(item.getCorpId());
+					if (ObjectUtils.isNotNull(corpsDesc)) {
+						item.setCorpAddress(corpsDesc.getBelongtoarea());
+					}
+				}
+				item.setBillNo(order.getOrderNo());
+				item.setBusinesDate(order.getBusinesDate());
+				item.setPlannedDeliveryDate(order.getPlannedDeliveryDate());
+				if (item.getId() == null) {
+					item.setTenantId(SecureUtil.getTenantId());
+					item.setCreateUser(SecureUtil.getUserId());
+					item.setCreateTime(date);
+					item.setPid(order.getId());
+					item.setBillType(order.getBillType());
+					orderItemsMapper.insert(item);
+				} else {
+					item.setTenantId(SecureUtil.getTenantId());
+					item.setUpdateUser(SecureUtil.getUserId());
+					item.setUpdateTime(date);
+					item.setPid(order.getId());
+					item.setBillType(order.getBillType());
+					orderItemsMapper.updateById(item);
+				}
+				//保存配件明细信息
+				if (CollectionUtils.isNotEmpty(item.getPartsList())) {
+					item.getPartsList().forEach(parts -> {
+						if (parts.getId() == null) {
+							parts.setTenantId(SecureUtil.getTenantId());
+							parts.setCreateTime(new Date());
+							parts.setCreateUser(SecureUtil.getUserId());
+							parts.setPid(item.getId());
+							parts.setSrcPid(item.getPid());
+							orderPartsMapper.insert(parts);
+						} else {
+							parts.setUpdateTime(new Date());
+							parts.setUpdateUser(SecureUtil.getUserId());
+							parts.setPid(item.getId());
+							parts.setSrcPid(item.getPid());
+							orderPartsMapper.updateById(parts);
+						}
+					});
+				}
+			});
+//			List<OrderItems> orderItemsList = orderItemsService.saveOrderItemsMessage(order.getOrderItemsList(), date, order.getId());
+			order.setOrderItemsList(order.getOrderItemsList());
 		}
 		// 保存订单文件信息
 		if (CollectionUtils.isNotEmpty(order.getOrderFilesList())) {
@@ -445,6 +544,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				// 毛利率
 				orderMessage.setGrossProfitRate(new BigDecimal(BigInteger.ZERO));
 			}
+			orderMessage.setStorageQuantity(order.getOrderItemsList().stream().map(OrderItems::getOrderQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
 			baseMapper.updateById(orderMessage);
 			order.setGrossProfit(orderMessage.getGrossProfit());
 			order.setGrossProfitRate(orderMessage.getGrossProfitRate());
@@ -1475,7 +1575,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	/**
-	 *	申请退单审批通过
+	 * 申请退单审批通过
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -1605,7 +1705,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 		//删除账单明细
 		Acc acc = financeClient.selectByParentId(orderMessage.getId());
-		if (ObjectUtil.isNotEmpty(acc)){
+		if (ObjectUtil.isNotEmpty(acc)) {
 			financeClient.remove(acc.getId().toString());
 		}
 
@@ -2611,10 +2711,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Override
 	public R collectPayment(Order order) {
 		if ("线上".equals(order.getOrderSource())) {
-			R r = this.payPrepay(order.getId());
-			if (!r.isSuccess() || r.getCode() != 200) {
-				throw new RuntimeException("支付失败!原因:" + r.getData());
-			}
 			order.setStatus(2);
 			Order selectOrder = baseMapper.selectById(order.getId());
 			if (null == selectOrder) {
@@ -4118,6 +4214,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					if (ObjectUtils.isNull(corpsDesc)) {
 						throw new RuntimeException("未找到客户信息");
 					}
+					//通联支付下单处理
+					R r = this.payPrepay(order.getId());
+					if (!r.isSuccess() || r.getCode() != 200) {
+						throw new RuntimeException("支付失败!原因:" + r.getData());
+					}
 					if (ObjectUtils.isNotNull(corpsDesc.getAdminProfiles())) {
 						String[] arrs = corpsDesc.getAdminProfiles().split(",");
 						for (String arr : arrs) {
@@ -4882,6 +4983,317 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R generatePurchase(Order order) {
+		if (null == order.getId()) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Order selectOrder = baseMapper.selectById(order.getId());
+		if (ObjectUtils.isNotNull(selectOrder)) {
+
+			selectOrder.setFudaPurchaseStatus("待采购");
+			selectOrder.setFudaPurchaseDate(order.getFudaPurchaseDate());
+			baseMapper.updateById(selectOrder);
+			//循环发送消息
+			Message sendMessage = new Message();
+			sendMessage.setParameter(String.valueOf(selectOrder.getId()));
+			sendMessage.setUserName(AuthUtil.getUserName());
+			sendMessage.setUserId(AuthUtil.getUserId());
+			sendMessage.setToUserId(selectOrder.getBuyerId());
+			sendMessage.setToUserName(selectOrder.getBuyerName());
+			sendMessage.setMessageType(1);
+			sendMessage.setTenantId(AuthUtil.getTenantId());
+			sendMessage.setCreateUser(AuthUtil.getUserId());
+			sendMessage.setCreateTime(new Date());
+			sendMessage.setUrl("/exportTrade/salesContract/index");
+			sendMessage.setPageLabel(order.getPageLabel());
+			sendMessage.setPageStatus(order.getPageStatus());
+			sendMessage.setMessageBody("您有采购订单" + selectOrder.getSysNo() + "待处理,请查看");
+			R save = messageClient.save(sendMessage);
+			if (!save.isSuccess()) {
+				throw new SecurityException("发送消息失败");
+			}
+		}
+
+		return R.data(selectOrder);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R generateShipment(Order order) {
+		// 获取销售单主表信息
+		Order orderMessage = baseMapper.selectById(order.getId());
+		// 获取客户中文名
+		if (orderMessage.getCorpId() != null) {
+			R<List<Map<String, Object>>> corpMessage = corpsDescClient.getCorpsMessage(orderMessage.getCorpId().toString());
+			if (corpMessage.isSuccess() && corpMessage.getData() != null) {
+				orderMessage.setCorpName(corpMessage.getData());
+			}
+		}
+		LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(OrderItems::getPid, orderMessage.getId()).eq(OrderItems::getIsDeleted, 0).eq(OrderItems::getTenantId, AuthUtil.getTenantId());
+		// 获取销售单明细数据
+		List<OrderItems> orderItemsList = orderItemsService.list(lambdaQueryWrapper);
+		orderMessage.setOrderItemsList(orderItemsList);
+		orderMessage.setDeliverQuantity(orderItemsList.stream().map(OrderItems::getOrderQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+		orderMessage.setDocumentaryStatus("" +
+			"");
+		orderMessage.setDocumentaryDate(order.getDocumentaryDate());
+		baseMapper.updateById(orderMessage);
+
+		//发送消息
+		Message sendMessage = new Message();
+		sendMessage.setParameter(String.valueOf(orderMessage.getId()));
+		sendMessage.setUserName(AuthUtil.getUserName());
+		sendMessage.setUserId(AuthUtil.getUserId());
+		sendMessage.setToUserId(orderMessage.getDocumenterId());
+		sendMessage.setToUserName(orderMessage.getDocumenterName());
+		sendMessage.setMessageType(1);
+		sendMessage.setTenantId(AuthUtil.getTenantId());
+		sendMessage.setCreateUser(AuthUtil.getUserId());
+		sendMessage.setCreateTime(new Date());
+		sendMessage.setUrl("/exportTrade/invoice/index");
+		sendMessage.setPageLabel(order.getPageLabel());
+		sendMessage.setPageStatus(order.getPageStatus());
+		sendMessage.setMessageBody("您有销售订单" + orderMessage.getSysNo() + "待处理,请查看");
+		R save = messageClient.save(sendMessage);
+		if (!save.isSuccess()) {
+			throw new SecurityException("发送消息失败");
+		}
+		//生成跟单数据
+		return deliveryClient.saveAddDelivery(orderMessage);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R generatePurchaseBill(String ids) {
+		if (ObjectUtils.isNull(ids)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Order order_ = new Order();
+		List<OrderItems> orderItemsListAll = new ArrayList<>();
+		List<Order> orderListAll = new ArrayList<>();
+		String[] arrs = ids.split(",");
+		StringBuilder srcIds = new StringBuilder();
+		StringBuilder srcOrderNos = new StringBuilder();
+		for (String arr : arrs) {
+			OrderItems orderItems = orderItemsMapper.selectById(Long.parseLong(arr));
+			if (ObjectUtils.isNotNull(orderItems)) {
+				Order order = baseMapper.selectById(orderItems.getPid());
+				if (ObjectUtils.isNotNull(order)) {
+					OrderItems orderItems_ = new OrderItems();
+					BeanUtil.copyProperties(orderItems, orderItems_);
+					orderItems_.setSrcOrderNo(order.getOrderNo());
+					orderItems_.setSrcId(order.getId());
+					orderItems_.setOrgOrderNo(order.getSysNo());
+					orderItems_.setSrcItemId(orderItems_.getId());
+					orderItems_.setPid(null);
+					orderItems_.setId(null);
+					orderItemsListAll.add(orderItems_);
+					orderListAll.add(order);
+				}
+			}
+			/*Order order = baseMapper.selectById(Long.parseLong(arr));
+			if (ObjectUtils.isNotNull(order)) {
+				srcIds.append(order.getId()).append(",");
+				srcOrderNos.append(order.getSysNo()).append(",");
+				LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+				lambdaQueryWrapper.eq(OrderItems::getIsDeleted, 0)
+					.eq(OrderItems::getTenantId, AuthUtil.getTenantId())
+					.eq(OrderItems::getPid, order.getId());
+				List<OrderItems> orderItemsList = orderItemsMapper.selectList(lambdaQueryWrapper);
+				for (OrderItems orderItems : orderItemsList) {
+					OrderItems orderItems_ = new OrderItems();
+					BeanUtil.copyProperties(orderItems, orderItems_);
+					orderItems_.setSrcOrderNo(order.getOrderNo());
+					orderItems_.setSrcId(order.getId());
+					orderItems_.setOrgOrderNo(order.getSysNo());
+					orderItems_.setPid(null);
+					orderItems_.setId(null);
+					orderItemsListAll.add(orderItems_);
+				}
+			}*/
+		}
+		if (ObjectUtils.isNotNull(srcIds) && ObjectUtils.isNotNull(srcOrderNos)) {
+			order_.setSrcIds(orderListAll.stream().map(Order::getSysNo).distinct().collect(Collectors.joining(",")));
+			order_.setSrcOrderNo(orderListAll.stream().map(Order::getSysNo).distinct().collect(Collectors.joining(",")));
+		} else {
+			throw new RuntimeException("生成失败,未查到单据信息");
+		}
+		order_.setOrderItemsList(orderItemsListAll);
+		return R.data(order_);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R purchaseStatusUpdate(Order order) {
+		if (null == order.getId()) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Order detail = baseMapper.selectById(order.getId());
+		if (ObjectUtils.isNull(detail)) {
+			throw new RuntimeException("未找到单据信息");
+		}
+		if (1 == order.getPurchaseStatusType()) {
+			detail.setProductionScheduling("排产中");
+			detail.setProductionSchedulingDate(order.getProductionSchedulingDate());
+		} else if (2 == order.getPurchaseStatusType()) {
+			detail.setEstimateGoodGoods("预计货好");
+			detail.setEstimateGoodGoodsDate(order.getEstimateGoodGoodsDate());
+		} else if (3 == order.getPurchaseStatusType()) {
+			detail.setFudaPurchaseStatus("采购完成");
+			detail.setFudaPurchaseDate(order.getFudaPurchaseDate());
+		}
+		LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(OrderItems::getIsDeleted, 0).eq(OrderItems::getTenantId, AuthUtil.getTenantId()).eq(OrderItems::getPid, detail.getId());
+		List<OrderItems> orderItemsList = orderItemsMapper.selectList(lambdaQueryWrapper);
+		if (ObjectUtils.isNotNull(orderItemsList) && orderItemsList.size() > 0) {
+			List<Long> pids = orderItemsList.stream().map(OrderItems::getSrcId).distinct().collect(Collectors.toList());
+			for (Long pid : pids) {
+				Order order1 = baseMapper.selectById(pid);
+				BigDecimal purchaseQuantity = orderItemsList.stream().filter(e -> e.getSrcId().equals(pid)).map(OrderItems::getPurchaseQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
+				if (ObjectUtils.isNotNull(order1)) {
+					if (order1.getStorageQuantity().equals(order1.getPurchaseQuantity().add(purchaseQuantity))) {
+						if (1 == order.getPurchaseStatusType()) {
+							order1.setProductionScheduling("排产中");
+							order1.setProductionSchedulingDate(order.getProductionSchedulingDate());
+						} else if (2 == order.getPurchaseStatusType()) {
+							order1.setEstimateGoodGoods("预计货好");
+							order1.setEstimateGoodGoodsDate(order.getEstimateGoodGoodsDate());
+						} else if (3 == order.getPurchaseStatusType()) {
+							order1.setFudaPurchaseStatus("采购完成");
+							order1.setFudaPurchaseDate(order.getFudaPurchaseDate());
+						}
+						order1.setPurchaseQuantity(order1.getPurchaseQuantity().add(purchaseQuantity));
+					}
+					baseMapper.updateById(order1);
+				}
+			}
+		}
+		String[] arrs = detail.getSrcIds().split(",");
+		for (String arr : arrs) {
+			Order selectOrder = baseMapper.selectById(Long.parseLong(arr));
+			if (ObjectUtils.isNotNull(selectOrder)) {
+				selectOrder.setUpdateTime(new Date());
+				selectOrder.setUpdateUser(AuthUtil.getUserId());
+				selectOrder.setUpdateUserName(AuthUtil.getUserName());
+
+				//循环发送消息
+				Message sendMessage = new Message();
+				sendMessage.setParameter(String.valueOf(selectOrder.getId()));
+				sendMessage.setUserName(AuthUtil.getUserName());
+				sendMessage.setUserId(AuthUtil.getUserId());
+				sendMessage.setMessageType(1);
+				sendMessage.setTenantId(AuthUtil.getTenantId());
+				sendMessage.setCreateUser(AuthUtil.getUserId());
+				sendMessage.setCreateTime(new Date());
+				sendMessage.setUrl("/exportTrade/purchaseContract/index");
+				sendMessage.setPageLabel(selectOrder.getPageLabel());
+				sendMessage.setPageStatus(selectOrder.getPageStatus());
+				if (true) {
+					sendMessage.setToUserId(selectOrder.getCreateUser());
+					sendMessage.setToUserName(selectOrder.getCreateUserName());
+					if (1 == order.getPurchaseStatusType()) {
+						sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "正在排产中,请查看");
+						selectOrder.setProductionScheduling("排产中");
+						selectOrder.setProductionSchedulingDate(order.getProductionSchedulingDate());
+					} else if (2 == order.getPurchaseStatusType()) {
+						sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已预计货好,请查看");
+						selectOrder.setEstimateGoodGoods("预计货好");
+						selectOrder.setEstimateGoodGoodsDate(order.getEstimateGoodGoodsDate());
+						deliveryClient.updateBySrcId(selectOrder.getId() + "", selectOrder.getBillType(), selectOrder.getTradeType());
+					} else if (3 == order.getPurchaseStatusType()) {
+						sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已采购完成,请查看");
+						selectOrder.setFudaPurchaseStatus("采购完成");
+						selectOrder.setFudaPurchaseDate(order.getFudaPurchaseDate());
+					}
+					R save = messageClient.save(sendMessage);
+					if (!save.isSuccess()) {
+						throw new SecurityException("发送消息失败");
+					}
+				}
+				if (true) {
+					sendMessage.setToUserId(selectOrder.getDocumenterId());
+					sendMessage.setToUserName(selectOrder.getDocumenterName());
+					if (1 == order.getPurchaseStatusType()) {
+						sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "正在排产中,请查看");
+					} else if (2 == order.getPurchaseStatusType()) {
+						sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已预计货好,请查看");
+					} else if (3 == order.getPurchaseStatusType()) {
+						sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已采购完成,请查看");
+					}
+					R save = messageClient.save(sendMessage);
+					if (!save.isSuccess()) {
+						throw new SecurityException("发送消息失败");
+					}
+				}
+				baseMapper.updateById(selectOrder);
+			}
+		}
+		return R.data(detail);
+	}
+
+	@Override
+	public R documentQuantityStatistics(Order order) {
+
+		List<Map<String, Object>> mapList = new ArrayList<>();
+		List<Order> orderList = baseMapper.selectList(new LambdaQueryWrapper<Order>()
+			.eq(Order::getIsDeleted, 0)
+			.eq(Order::getTenantId, AuthUtil.getTenantId())
+			.ge(Order::getBusinesDate, order.getDateList().get(0))
+			.le(Order::getBusinesDate, order.getDateList().get(1))
+		);
+		if (ObjectUtils.isNotNull(orderList) && orderList.size() > 0) {
+			List<Long> userIdList = orderList.stream().map(Order::getCreateUser).distinct().collect(Collectors.toList());
+			for (Long userId : userIdList) {
+				Map<String, Object> map = new HashMap<>();
+				R<User> res = userClient.userInfoById(userId);
+				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+					map.put("name", res.getData().getRealName());
+					int cg = baseMapper.selectCount(new LambdaQueryWrapper<Order>().eq(Order::getIsDeleted, 0)
+						.eq(Order::getTenantId, AuthUtil.getTenantId())
+						.eq(Order::getCreateUser, userId)
+						.eq(Order::getBillType, "CG"));
+					if (cg != 0){
+						map.put("number", cg);
+						map.put("billType", "采购单");
+						mapList.add(map);
+					}
+					int xs = baseMapper.selectCount(new LambdaQueryWrapper<Order>().eq(Order::getIsDeleted, 0)
+						.eq(Order::getTenantId, AuthUtil.getTenantId())
+						.eq(Order::getCreateUser, userId)
+						.eq(Order::getBillType, "XS"));
+					if (xs != 0){
+						map.put("number", xs);
+						map.put("billType", "销售单");
+						mapList.add(map);
+					}
+					int cgxj = baseMapper.selectCount(new LambdaQueryWrapper<Order>().eq(Order::getIsDeleted, 0)
+						.eq(Order::getTenantId, AuthUtil.getTenantId())
+						.eq(Order::getCreateUser, userId)
+						.eq(Order::getBillType, "CGXJ"));
+					if (cgxj != 0){
+						map.put("number", cgxj);
+						map.put("billType", "报价单");
+						mapList.add(map);
+					}
+					int gd = deliveryClient.selectCount(userId);
+					if (gd != 0){
+						map.put("number", gd);
+						map.put("billType", "跟单");
+						mapList.add(map);
+					}
+				}
+			}
+		}
+		return R.data(mapList);
+	}
+
+	@Override
 	public MonthSales monthSales(OrderVO order) {
 		MonthSales monthSales = new MonthSales();
 		if (AuthUtil.getTenantId().equals("673511")) {