Browse Source

Merge remote-tracking branch 'origin/dev' into dev

lazhaoqian 3 years ago
parent
commit
bf3e29df55
35 changed files with 1130 additions and 1026 deletions
  1. 1 1
      blade-ops/blade-report/pom.xml
  2. 0 597
      blade-ops/blade-report/src/main/java/org/springblade/report/entity/Order.java
  3. 0 120
      blade-ops/blade-report/src/main/java/org/springblade/report/mapper/OrderMapper.xml
  4. 48 0
      blade-ops/blade-report/src/main/java/org/springblade/report/ureport/LandBean.java
  5. 0 5
      blade-ops/blade-report/src/main/java/org/springblade/report/ureport/ProjectBean.java
  6. 0 68
      blade-ops/blade-report/src/main/java/org/springblade/report/ureport/TestBean.java
  7. 25 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java
  8. 1 1
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/enums/DeliveryStatusEnum.java
  9. 10 6
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/dto/OrderTrackDTO.java
  10. 15 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderItem.java
  11. 109 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderTrack.java
  12. 23 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/feign/ILandClient.java
  13. 12 6
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/vo/OrderTrackVO.java
  14. 38 4
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java
  15. 7 6
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderDescClient.java
  16. 9 4
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/Order.java
  17. 94 6
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  18. 17 5
      blade-service/blade-land/pom.xml
  19. 74 0
      blade-service/blade-land/src/main/java/org/springblade/land/config/XxlJobConfig.java
  20. 6 14
      blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderIndexController.java
  21. 21 0
      blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderItemController.java
  22. 126 0
      blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderTrackController.java
  23. 129 0
      blade-service/blade-land/src/main/java/org/springblade/land/handler/JobHandler.java
  24. 43 0
      blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderTrackMapper.java
  25. 27 0
      blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderTrackMapper.xml
  26. 16 0
      blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderItemService.java
  27. 17 10
      blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderTrackService.java
  28. 117 66
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderItemServiceImpl.java
  29. 14 19
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java
  30. 41 0
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderTrackServiceImpl.java
  31. 12 0
      blade-service/blade-land/src/main/resources/application.yml
  32. 36 40
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/SalesPolicyController.java
  33. 39 42
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java
  34. 2 6
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  35. 1 0
      pom.xml

+ 1 - 1
blade-ops/blade-report/pom.xml

@@ -58,7 +58,7 @@
         </dependency>
         <dependency>
             <groupId>org.springblade</groupId>
-            <artifactId>blade-deliver-goods-api</artifactId>
+            <artifactId>blade-land-api</artifactId>
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>

+ 0 - 597
blade-ops/blade-report/src/main/java/org/springblade/report/entity/Order.java

@@ -1,597 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 庄骞 (smallchill@163.com)
- */
-package org.springblade.report.entity;
-
-import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.time.LocalDateTime;
-import java.io.Serializable;
-import lombok.Data;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-/**
- * 销售或采购订单表实体类
- *
- * @author BladeX
- * @since 2021-12-27
- */
-@Data
-@TableName("business_order")
-@ApiModel(value = "Order对象", description = "销售或采购订单表")
-public class Order implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	* 主键
-	*/
-		@ApiModelProperty(value = "主键")
-		private Long id;
-	/**
-	* 子明细的提单号集合
-	*/
-		@ApiModelProperty(value = "子明细的提单号集合")
-		private String billNo;
-	/**
-	* 系统编号
-	*/
-		@ApiModelProperty(value = "系统编号")
-		private String sysNo;
-	/**
-	* 订单号
-	*/
-		@ApiModelProperty(value = "订单号")
-		private String orderNo;
-	/**
-	* 主订单号
-	*/
-		@ApiModelProperty(value = "主订单号")
-		private String morderNo;
-	/**
-	* 原始订单号
-	*/
-		@ApiModelProperty(value = "原始订单号")
-		private String orgOrderNo;
-	/**
-	* 来源订单号
-	*/
-		@ApiModelProperty(value = "来源订单号")
-		private String srcOrderNo;
-	/**
-	* 来源id
-	*/
-		@ApiModelProperty(value = "来源id")
-		private Long srcId;
-	/**
-	* 订单类型 销售订单 XS 采购订单 CG
-	*/
-		@ApiModelProperty(value = "订单类型 销售订单 XS 采购订单 CG")
-		private String billType;
-	/**
-	* 贸易类型(枚举:国内、进口、出口)
-	*/
-		@ApiModelProperty(value = "贸易类型(枚举:国内、进口、出口)")
-		private String tradeType;
-	/**
-	* 合同类型
-	*/
-		@ApiModelProperty(value = "合同类型")
-		private String orderType;
-	/**
-	* 订单日期
-	*/
-		@ApiModelProperty(value = "订单日期")
-		private LocalDateTime businesDate;
-	/**
-	* 客户或供应商id(全称)
-	*/
-		@ApiModelProperty(value = "客户或供应商id(全称)")
-		private Long corpId;
-	/**
-	* 采购商id
-	*/
-		@ApiModelProperty(value = "采购商id")
-		private Long purchaserId;
-	/**
-	* 仓库id
-	*/
-		@ApiModelProperty(value = "仓库id")
-		private Long storageId;
-	/**
-	* 发货地址
-	*/
-		@ApiModelProperty(value = "发货地址")
-		private String shippingAddress;
-	/**
-	* 到货地址
-	*/
-		@ApiModelProperty(value = "到货地址")
-		private String arrivalAddress;
-	/**
-	* 包装要求
-	*/
-		@ApiModelProperty(value = "包装要求")
-		private String packageRemarks;
-	/**
-	* 运费要求
-	*/
-		@ApiModelProperty(value = "运费要求")
-		private String freightRemarks;
-	/**
-	* 银行信息
-	*/
-		@ApiModelProperty(value = "银行信息")
-		private String banks;
-	/**
-	* 公司户头
-	*/
-		@ApiModelProperty(value = "公司户头")
-		private String banksAccountName;
-	/**
-	* 要求发货日期
-	*/
-		@ApiModelProperty(value = "要求发货日期")
-		private LocalDateTime requiredDeliveryDate;
-	/**
-	* 要求到货日期
-	*/
-		@ApiModelProperty(value = "要求到货日期")
-		private LocalDateTime requiredArrivalDate;
-	/**
-	* 订单备注
-	*/
-		@ApiModelProperty(value = "订单备注")
-		private String orderRemark;
-	/**
-	* 订单金额(合同金额)
-	*/
-		@ApiModelProperty(value = "订单金额(合同金额)")
-		private BigDecimal orderAmount;
-	/**
-	* 其他费用
-	*/
-		@ApiModelProperty(value = "其他费用")
-		private BigDecimal otherAmount;
-	/**
-	* 应收账款
-	*/
-		@ApiModelProperty(value = "应收账款")
-		private BigDecimal debitAmount;
-	/**
-	* 人民币-已收/已付账款
-	*/
-		@ApiModelProperty(value = "人民币-已收/已付账款")
-		private BigDecimal settlmentAmount;
-	/**
-	* 未收账款
-	*/
-		@ApiModelProperty(value = "未收账款")
-		private BigDecimal balanceAmount;
-	/**
-	* 付款方式
-	*/
-		@ApiModelProperty(value = "付款方式")
-		private String paymentType;
-	/**
-	* 信用证到期日(付款方式开证,必须输入)
-	*/
-		@ApiModelProperty(value = "信用证到期日(付款方式开证,必须输入)")
-		private LocalDateTime creditDate;
-	/**
-	* 预(收)付款
-	*/
-		@ApiModelProperty(value = "预(收)付款")
-		private BigDecimal advancePayment;
-	/**
-	* 溢付款
-	*/
-		@ApiModelProperty(value = "溢付款")
-		private BigDecimal overPayment;
-	/**
-	* 保证金
-	*/
-		@ApiModelProperty(value = "保证金")
-		private BigDecimal deposit;
-	/**
-	* 逾期款
-	*/
-		@ApiModelProperty(value = "逾期款")
-		private BigDecimal overDueAccounts;
-	/**
-	* 预收款日期
-	*/
-		@ApiModelProperty(value = "预收款日期")
-		private LocalDateTime advanceCollectionDate;
-	/**
-	* 应收(付)款日期
-	*/
-		@ApiModelProperty(value = "应收(付)款日期")
-		private LocalDateTime accountsCollectionDate;
-	/**
-	* 毛利率
-	*/
-		@ApiModelProperty(value = "毛利率")
-		private BigDecimal grossProfitRate;
-	/**
-	* 毛利润
-	*/
-		@ApiModelProperty(value = "毛利润")
-		private BigDecimal grossProfit;
-	/**
-	* 所属公司id(全称)销售公司
-	*/
-		@ApiModelProperty(value = "所属公司id(全称)销售公司")
-		private Long belongToCorpId;
-	/**
-	* 历史平均运费
-	*/
-		@ApiModelProperty(value = "历史平均运费")
-		private BigDecimal freightAmountHistory;
-	/**
-	* 实际发货日期
-	*/
-		@ApiModelProperty(value = "实际发货日期")
-		private LocalDateTime actualDeliveryDate;
-	/**
-	* 实际到货日期
-	*/
-		@ApiModelProperty(value = "实际到货日期")
-		private LocalDateTime arrivalDate;
-	/**
-	* 采购方式
-	*/
-		@ApiModelProperty(value = "采购方式")
-		private String procurementMethod;
-	/**
-	* 入库金额
-	*/
-		@ApiModelProperty(value = "入库金额")
-		private BigDecimal storageAmount;
-	/**
-	* 采购金额
-	*/
-		@ApiModelProperty(value = "采购金额")
-		private BigDecimal purchaseAmount;
-	/**
-	* 入库数量
-	*/
-		@ApiModelProperty(value = "入库数量")
-		private BigDecimal storageQuantity;
-	/**
-	* 采购数量
-	*/
-		@ApiModelProperty(value = "采购数量")
-		private BigDecimal purchaseQuantity;
-	/**
-	* 积分倍数
-	*/
-		@ApiModelProperty(value = "积分倍数")
-		private BigDecimal pointMutiple;
-	/**
-	* 特别提醒
-	*/
-		@ApiModelProperty(value = "特别提醒")
-		private String specialRemarks;
-	/**
-	* 业务员
-	*/
-		@ApiModelProperty(value = "业务员")
-		private String salesName;
-	/**
-	* 提成标准
-	*/
-		@ApiModelProperty(value = "提成标准")
-		private String commissionRate;
-	/**
-	* 销售单价
-	*/
-		@ApiModelProperty(value = "销售单价")
-		private BigDecimal salesPrice;
-	/**
-	* 发票重量
-	*/
-		@ApiModelProperty(value = "发票重量")
-		private BigDecimal invoiceWeight;
-	/**
-	* 码单重量
-	*/
-		@ApiModelProperty(value = "码单重量")
-		private BigDecimal billWeight;
-	/**
-	* 币别
-	*/
-		@ApiModelProperty(value = "币别")
-		private String currency;
-	/**
-	* 汇率
-	*/
-		@ApiModelProperty(value = "汇率")
-		private BigDecimal exchangeRate;
-	/**
-	* 计划交货日期
-	*/
-		@ApiModelProperty(value = "计划交货日期")
-		private LocalDateTime plannedDeliveryDate;
-	/**
-	* 形式发票
-	*/
-		@ApiModelProperty(value = "形式发票")
-		private String proformInvoice;
-	/**
-	* 装货港
-	*/
-		@ApiModelProperty(value = "装货港")
-		private String portOfLoad;
-	/**
-	* 目的港
-	*/
-		@ApiModelProperty(value = "目的港")
-		private String portOfDestination;
-	/**
-	* 海运费
-	*/
-		@ApiModelProperty(value = "海运费")
-		private BigDecimal oceanFreight;
-	/**
-	* 版本
-	*/
-		@ApiModelProperty(value = "版本")
-		private String version;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private Long createDept;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private LocalDateTime createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private LocalDateTime updateTime;
-	/**
-	* 状态(0 正常 1停用)
-	*/
-		@ApiModelProperty(value = "状态(0 正常 1停用)")
-		private Integer status;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
-	/**
-	* 到港日期
-	*/
-		@ApiModelProperty(value = "到港日期")
-		private LocalDateTime dateOfArrival;
-	/**
-	* 是否到货
-	*/
-		@ApiModelProperty(value = "是否到货")
-		private Integer arrival;
-	/**
-	* 首付比列
-	*/
-		@ApiModelProperty(value = "首付比列")
-		private BigDecimal downPayment;
-	/**
-	* 人民币金额
-	*/
-		@ApiModelProperty(value = "人民币金额")
-		private BigDecimal rmbAmount;
-	/**
-	* 客户联系人
-	*/
-		@ApiModelProperty(value = "客户联系人")
-		private String corpAttn;
-	/**
-	* 其他联系人
-	*/
-		@ApiModelProperty(value = "其他联系人")
-		private String otherCorpAttn;
-	/**
-	* 联系人电话
-	*/
-		@ApiModelProperty(value = "联系人电话")
-		private String corpTel;
-	/**
-	* 合同重量
-	*/
-		@ApiModelProperty(value = "合同重量")
-		private BigDecimal contractWeight;
-	/**
-	* 贸易条款
-	*/
-		@ApiModelProperty(value = "贸易条款")
-		private String tradeTerms;
-	/**
-	* 贸易条款描述
-	*/
-		@ApiModelProperty(value = "贸易条款描述")
-		private String tradeTermsDescription;
-	/**
-	* 价格条款
-	*/
-		@ApiModelProperty(value = "价格条款")
-		private String priceTerms;
-	/**
-	* 价格条款描述
-	*/
-		@ApiModelProperty(value = "价格条款描述")
-		private String priceTermsDescription;
-	/**
-	* 运输方式
-	*/
-		@ApiModelProperty(value = "运输方式")
-		private String transport;
-	/**
-	* 有效期
-	*/
-		@ApiModelProperty(value = "有效期")
-		private LocalDateTime dateValidity;
-	/**
-	* 收付款方式描述
-	*/
-		@ApiModelProperty(value = "收付款方式描述")
-		private String paymentTypeDescription;
-	/**
-	* 保险
-	*/
-		@ApiModelProperty(value = "保险")
-		private String insuranceRemarks;
-	/**
-	* 唛头
-	*/
-		@ApiModelProperty(value = "唛头")
-		private String marks;
-	/**
-	* 信用证编号
-	*/
-		@ApiModelProperty(value = "信用证编号")
-		private String creditNumber;
-	/**
-	* 信用证金额
-	*/
-		@ApiModelProperty(value = "信用证金额")
-		private BigDecimal creditAmount;
-	/**
-	* 订单状态
-	*/
-		@ApiModelProperty(value = "订单状态")
-		private String orderStatus;
-	/**
-	* 是否询价
-	*/
-		@ApiModelProperty(value = "是否询价")
-		private String ifEnquiry;
-	/**
-	* 是否船务
-	*/
-		@ApiModelProperty(value = "是否船务")
-		private String ifShipping;
-	/**
-	* 采购核价备注
-	*/
-		@ApiModelProperty(value = "采购核价备注")
-		private String purchasePricingRemarks;
-	/**
-	* 销售核价备注
-	*/
-		@ApiModelProperty(value = "销售核价备注")
-		private String sellPricingRemarks;
-	/**
-	* 是否开票
-	*/
-		@ApiModelProperty(value = "是否开票")
-		private String ifInvoice;
-	/**
-	* 箱型
-	*/
-		@ApiModelProperty(value = "箱型")
-		private String boxPile;
-	/**
-	* 起订量
-	*/
-		@ApiModelProperty(value = "起订量")
-		private BigDecimal minOrder;
-	/**
-	* 预计海运费
-	*/
-		@ApiModelProperty(value = "预计海运费")
-		private BigDecimal predictOceanFreight;
-	/**
-	* 参考海运费
-	*/
-		@ApiModelProperty(value = "参考海运费")
-		private BigDecimal referenceOceanFreight;
-	/**
-	* 箱量
-	*/
-		@ApiModelProperty(value = "箱量")
-		private BigDecimal boxNumber;
-	/**
-	* 采购备注
-	*/
-		@ApiModelProperty(value = "采购备注")
-		private String purchaseRemark;
-	/**
-	* 船务备注
-	*/
-		@ApiModelProperty(value = "船务备注")
-		private String shippingRemark;
-	/**
-	* 生产工厂
-	*/
-		@ApiModelProperty(value = "生产工厂")
-		private Long productionPlant;
-	/**
-	* FOB系数
-	*/
-		@ApiModelProperty(value = "FOB系数")
-		private BigDecimal coefficient;
-	/**
-	* 开户银行
-	*/
-		@ApiModelProperty(value = "开户银行")
-		private String accountBank;
-	/**
-	* 预付保证金币别
-	*/
-		@ApiModelProperty(value = "预付保证金币别")
-		private String prepayCurrency;
-	/**
-	* 发票金额
-	*/
-		@ApiModelProperty(value = "发票金额")
-		private BigDecimal invoiceAmount;
-	/**
-	* 特价占比
-	*/
-		@ApiModelProperty(value = "特价占比")
-		private BigDecimal specialOfferOf;
-	/**
-	* 最迟付款日期
-	*/
-		@ApiModelProperty(value = "最迟付款日期")
-		private LocalDateTime latestDate;
-	/**
-	* 外币-已收/已付账款
-	*/
-		@ApiModelProperty(value = "外币-已收/已付账款")
-		private BigDecimal foreignSettlmentAmount;
-	/**
-	* 单票毛利
-	*/
-		@ApiModelProperty(value = "单票毛利")
-		private BigDecimal singleTicketMargin;
-
-
-}

+ 0 - 120
blade-ops/blade-report/src/main/java/org/springblade/report/mapper/OrderMapper.xml

@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.report.mapper.OrderMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="orderResultMap" type="org.springblade.report.entity.Order">
-        <id column="id" property="id"/>
-        <result column="bill_no" property="billNo"/>
-        <result column="sys_no" property="sysNo"/>
-        <result column="order_no" property="orderNo"/>
-        <result column="morder_no" property="morderNo"/>
-        <result column="org_order_no" property="orgOrderNo"/>
-        <result column="src_order_no" property="srcOrderNo"/>
-        <result column="src_id" property="srcId"/>
-        <result column="bill_type" property="billType"/>
-        <result column="trade_type" property="tradeType"/>
-        <result column="order_type" property="orderType"/>
-        <result column="busines_date" property="businesDate"/>
-        <result column="corp_id" property="corpId"/>
-        <result column="purchaser_id" property="purchaserId"/>
-        <result column="storage_id" property="storageId"/>
-        <result column="shipping_address" property="shippingAddress"/>
-        <result column="arrival_address" property="arrivalAddress"/>
-        <result column="package_remarks" property="packageRemarks"/>
-        <result column="freight_remarks" property="freightRemarks"/>
-        <result column="banks" property="banks"/>
-        <result column="banks_account_name" property="banksAccountName"/>
-        <result column="required_delivery_date" property="requiredDeliveryDate"/>
-        <result column="required_arrival_date" property="requiredArrivalDate"/>
-        <result column="order_remark" property="orderRemark"/>
-        <result column="order_amount" property="orderAmount"/>
-        <result column="other_amount" property="otherAmount"/>
-        <result column="debit_amount" property="debitAmount"/>
-        <result column="settlment_amount" property="settlmentAmount"/>
-        <result column="balance_amount" property="balanceAmount"/>
-        <result column="payment_type" property="paymentType"/>
-        <result column="credit_date" property="creditDate"/>
-        <result column="advance_payment" property="advancePayment"/>
-        <result column="over_payment" property="overPayment"/>
-        <result column="deposit" property="deposit"/>
-        <result column="over_due_accounts" property="overDueAccounts"/>
-        <result column="advance_collection_date" property="advanceCollectionDate"/>
-        <result column="accounts_collection_date" property="accountsCollectionDate"/>
-        <result column="gross_profit_rate" property="grossProfitRate"/>
-        <result column="gross_profit" property="grossProfit"/>
-        <result column="belong_to_corp_id" property="belongToCorpId"/>
-        <result column="freight_amount_history" property="freightAmountHistory"/>
-        <result column="actual_delivery_date" property="actualDeliveryDate"/>
-        <result column="arrival_date" property="arrivalDate"/>
-        <result column="procurement_method" property="procurementMethod"/>
-        <result column="storage_amount" property="storageAmount"/>
-        <result column="purchase_amount" property="purchaseAmount"/>
-        <result column="storage_quantity" property="storageQuantity"/>
-        <result column="purchase_quantity" property="purchaseQuantity"/>
-        <result column="point_mutiple" property="pointMutiple"/>
-        <result column="special_remarks" property="specialRemarks"/>
-        <result column="sales_name" property="salesName"/>
-        <result column="commission_rate" property="commissionRate"/>
-        <result column="sales_price" property="salesPrice"/>
-        <result column="invoice_weight" property="invoiceWeight"/>
-        <result column="bill_weight" property="billWeight"/>
-        <result column="currency" property="currency"/>
-        <result column="exchange_rate" property="exchangeRate"/>
-        <result column="planned_delivery_date" property="plannedDeliveryDate"/>
-        <result column="proform_invoice" property="proformInvoice"/>
-        <result column="port_of_load" property="portOfLoad"/>
-        <result column="port_of_destination" property="portOfDestination"/>
-        <result column="ocean_freight" property="oceanFreight"/>
-        <result column="version" property="version"/>
-        <result column="create_user" property="createUser"/>
-        <result column="create_dept" property="createDept"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
-        <result column="date_of_arrival" property="dateOfArrival"/>
-        <result column="arrival" property="arrival"/>
-        <result column="down_payment" property="downPayment"/>
-        <result column="rmb_amount" property="rmbAmount"/>
-        <result column="corp_attn" property="corpAttn"/>
-        <result column="other_corp_attn" property="otherCorpAttn"/>
-        <result column="corp_tel" property="corpTel"/>
-        <result column="contract_weight" property="contractWeight"/>
-        <result column="trade_terms" property="tradeTerms"/>
-        <result column="trade_terms_description" property="tradeTermsDescription"/>
-        <result column="price_terms" property="priceTerms"/>
-        <result column="price_terms_description" property="priceTermsDescription"/>
-        <result column="transport" property="transport"/>
-        <result column="date_validity" property="dateValidity"/>
-        <result column="payment_type_description" property="paymentTypeDescription"/>
-        <result column="insurance_remarks" property="insuranceRemarks"/>
-        <result column="marks" property="marks"/>
-        <result column="credit_number" property="creditNumber"/>
-        <result column="credit_amount" property="creditAmount"/>
-        <result column="order_status" property="orderStatus"/>
-        <result column="if_enquiry" property="ifEnquiry"/>
-        <result column="if_shipping" property="ifShipping"/>
-        <result column="purchase_pricing_remarks" property="purchasePricingRemarks"/>
-        <result column="sell_pricing_remarks" property="sellPricingRemarks"/>
-        <result column="if_invoice" property="ifInvoice"/>
-        <result column="box_pile" property="boxPile"/>
-        <result column="min_order" property="minOrder"/>
-        <result column="predict_ocean_freight" property="predictOceanFreight"/>
-        <result column="reference_ocean_freight" property="referenceOceanFreight"/>
-        <result column="box_number" property="boxNumber"/>
-        <result column="purchase_remark" property="purchaseRemark"/>
-        <result column="shipping_remark" property="shippingRemark"/>
-        <result column="production_plant" property="productionPlant"/>
-        <result column="coefficient" property="coefficient"/>
-        <result column="account_bank" property="accountBank"/>
-        <result column="prepay_currency" property="prepayCurrency"/>
-        <result column="invoice_amount" property="invoiceAmount"/>
-        <result column="special_offer_of" property="specialOfferOf"/>
-        <result column="latest_date" property="latestDate"/>
-        <result column="foreign_settlment_amount" property="foreignSettlmentAmount"/>
-        <result column="single_ticket_margin" property="singleTicketMargin"/>
-    </resultMap>
-
-</mapper>

+ 48 - 0
blade-ops/blade-report/src/main/java/org/springblade/report/ureport/LandBean.java

@@ -0,0 +1,48 @@
+package org.springblade.report.ureport;
+
+import lombok.AllArgsConstructor;
+import org.springblade.land.entity.OrderItem;
+import org.springblade.land.feign.ILandClient;
+import org.springblade.report.util.ParamUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+@Component
+@AllArgsConstructor
+public class LandBean {
+
+	private final ILandClient landClient;
+
+	public List<OrderItem> loadLandItemData(String dsName, String datasetName, Map<String, Object> params) {
+		String orderNo = ParamUtil.getString(params.get("orderNo"));
+		Long corpId = ParamUtil.getLong(params.get("corpId"));
+		String addressDetail = ParamUtil.getString(params.get("addressDetail"));
+		String billNo = ParamUtil.getString(params.get("billNo"));
+		String ctnType = ParamUtil.getString(params.get("ctnType"));
+		Long fleetId = ParamUtil.getLong(params.get("fleetId"));
+		Long vehicleId = ParamUtil.getLong(params.get("vehicleId"));
+		Long driverId = ParamUtil.getLong(params.get("driverId"));
+		String tel = ParamUtil.getString(params.get("tel"));
+		String beginArrivalTime = ParamUtil.getString(params.get("beginArrivalTime"));
+		String endArrivalTime = ParamUtil.getString(params.get("endArrivalTime"));
+		String tenantId = ParamUtil.getString(params.get("tenantId"));
+
+		OrderItem item = new OrderItem();
+		item.setOrderNo(orderNo);
+		item.setCorpId(corpId);
+		item.setAddressDetail(addressDetail);
+		item.setBillNo(billNo);
+		item.setCtnType(ctnType);
+		item.setFleetId(fleetId);
+		item.setVehicleId(vehicleId);
+		item.setDriverId(driverId);
+		item.setTel(tel);
+		item.setBeginArrivalTime(beginArrivalTime);
+		item.setEndArrivalTime(endArrivalTime);
+		item.setTenantId(tenantId);
+		item.setTag(0);
+		return landClient.listReport(item).getData();
+	}
+}

+ 0 - 5
blade-ops/blade-report/src/main/java/org/springblade/report/ureport/ProjectBean.java

@@ -1,13 +1,8 @@
 package org.springblade.report.ureport;
 
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import lombok.AllArgsConstructor;
-import org.springblade.core.secure.utils.AuthUtil;
-
 import org.springblade.core.tool.utils.SpringUtil;
 import org.springblade.report.entity.ServiceProjectItem;
 import org.springblade.report.service.ServiceProjectItemService;
-import org.springblade.report.service.impl.OrderServiceImpl;
 import org.springframework.stereotype.Component;
 
 import java.util.List;

+ 0 - 68
blade-ops/blade-report/src/main/java/org/springblade/report/ureport/TestBean.java

@@ -1,68 +0,0 @@
-package org.springblade.report.ureport;
-
-
-import com.alibaba.nacos.common.utils.MapUtil;
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang.RandomStringUtils;
-import org.apache.commons.lang.math.RandomUtils;
-import org.springblade.core.tool.utils.SpringUtil;
-import org.springblade.report.entity.Order;
-import org.springblade.report.service.impl.OrderServiceImpl;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Component
-public class TestBean {
-	/**
-
-	 * 方法必须包含三个参数:String,String,Map
-
-	 *
-
-	 * @return 集合类型 ,包含字段:id,name,salary
-
-	 */
-
-	public List<Map<String, Object>> loadReportData(String dsName, String datasetName, Map<String, Object> parameters) {
-
-		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
-
-		for (int i = 0; i < 1000; i++) {
-
-			// 模拟数据
-
-			Map<String, Object> m = new HashMap<String, Object>();
-
-			m.put("id", i);
-
-			m.put("name", RandomStringUtils.random(10, true, false));
-
-			m.put("salary", RandomUtils.nextInt() + i);
-
-			list.add(m);
-
-		}
-
-		return list;
-
-	}
-
-	/**
-	 * 测试获取订单信息
-	 * @param dsName
-	 * @param datasetName
-	 * @param parameters
-	 * @return
-	 */
-	public List<Order> testMethod(String dsName, String datasetName, Map<String, Object> parameters){
-		List<Order> list = new ArrayList<>();
-		OrderServiceImpl bean = SpringUtil.getBean(OrderServiceImpl.class);
-		Order order = bean.getById(MapUtils.getLong(parameters,"id"));
-		list.add(order);
-		return list;
-	}
-}

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

@@ -64,6 +64,11 @@ public class Delivery implements Serializable {
 	@ApiModelProperty(value = "原始订单号")
 	private String orgOrderNo;
 	/**
+	 * 原始id
+	 */
+	@ApiModelProperty(value = "原始id")
+	private Long orgId;
+	/**
 	 * 来源订单号
 	 */
 	@ApiModelProperty(value = "来源订单号")
@@ -354,6 +359,26 @@ public class Delivery implements Serializable {
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date assistantConfirmTime;
 
+	/**
+	 * 收发货数量
+	 */
+	@ApiModelProperty(value = "收发货数量")
+	private BigDecimal freightQuantity;
+
+	/**
+	 * 收发货时间
+	 */
+	@ApiModelProperty(value = "收发货时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date freightTime;
+
+	/**
+	 * 收发货人
+	 */
+	@ApiModelProperty(value = "收发货人")
+	private String freightUser;
+
 	@ApiModelProperty(value = "详情回显所属公司中文名")
 	@TableField(exist = false)
 	private List<Map<String, Object>> companyName;

+ 1 - 1
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/enums/DeliveryStatusEnum.java

@@ -11,7 +11,7 @@ public enum DeliveryStatusEnum {
 	/**
 	 * 发货
 	 */
-	DELIVER("已货"),
+	DELIVER("已货"),
 
 	/**
 	 * 撤销发货

+ 10 - 6
blade-ops/blade-report/src/main/java/org/springblade/report/mapper/OrderMapper.java → blade-service-api/blade-land-api/src/main/java/org/springblade/land/dto/OrderTrackDTO.java

@@ -14,17 +14,21 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.report.mapper;
+package org.springblade.land.dto;
 
-import org.springblade.report.entity.Order;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.land.entity.OrderTrack;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
- * 销售或采购订单表 Mapper 接口
+ * 陆运订单轨迹表数据传输对象实体类
  *
  * @author BladeX
- * @since 2021-12-27
+ * @since 2022-04-22
  */
-public interface OrderMapper extends BaseMapper<Order> {
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class OrderTrackDTO extends OrderTrack {
+	private static final long serialVersionUID = 1L;
 
 }

+ 15 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderItem.java

@@ -329,6 +329,9 @@ public class OrderItem implements Serializable {
 	private Integer isDeleted;
 
 	@TableField(exist = false)
+	private Long corpId;
+
+	@TableField(exist = false)
 	private String corpName;
 
 	@TableField(exist = false)
@@ -365,6 +368,12 @@ public class OrderItem implements Serializable {
 	private String endCrateTime;
 
 	@TableField(exist = false)
+	private String beginFinishedTime;
+
+	@TableField(exist = false)
+	private String endFinishedTime;
+
+	@TableField(exist = false)
 	private String addressDetail;
 
 	@TableField(exist = false)
@@ -395,6 +404,12 @@ public class OrderItem implements Serializable {
 	private BigDecimal profit;
 
 	@TableField(exist = false)
+	private String businessType;
+
+	@TableField(exist = false)
+	private String shippingMode;
+
+	@TableField(exist = false)
 	private String source;
 
 }

+ 109 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderTrack.java

@@ -0,0 +1,109 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.land.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 陆运订单轨迹表实体类
+ *
+ * @author BladeX
+ * @since 2022-04-22
+ */
+@Data
+@TableName("land_order_track")
+@ApiModel(value = "OrderTrack对象", description = "陆运订单轨迹表")
+public class OrderTrack implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	@TableId
+	private Long id;
+	/**
+	 * 明细ID
+	 */
+	@ApiModelProperty(value = "明细ID")
+	private Long itemId;
+	/**
+	 * 车牌号
+	 */
+	@ApiModelProperty(value = "车牌号")
+	private String plateNo;
+	/**
+	 * 经度
+	 */
+	@ApiModelProperty(value = "经度")
+	private String lon;
+	/**
+	 * 纬度
+	 */
+	@ApiModelProperty(value = "纬度")
+	private String lat;
+	/**
+	 * 地址
+	 */
+	@ApiModelProperty(value = "地址")
+	private String adr;
+	/**
+	 * 定位时间
+	 */
+	@ApiModelProperty(value = "定位时间")
+	private String utc;
+	/**
+	 * 速度(km/h)
+	 */
+	@ApiModelProperty(value = "速度(km/h)")
+	private String spd;
+	/**
+	 * 方向
+	 */
+	@ApiModelProperty(value = "方向")
+	private String drc;
+	/**
+	 * 省
+	 */
+	@ApiModelProperty(value = "省")
+	private String province;
+	/**
+	 * 市
+	 */
+	@ApiModelProperty(value = "市")
+	private String city;
+	/**
+	 * 县
+	 */
+	@ApiModelProperty(value = "县")
+	private String country;
+	/**
+	 * 时间
+	 */
+	@ApiModelProperty(value = "时间")
+	private Date createTime;
+
+
+}

+ 23 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/feign/ILandClient.java

@@ -0,0 +1,23 @@
+package org.springblade.land.feign;
+
+import org.springblade.core.tool.api.R;
+import org.springblade.land.entity.OrderItem;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+@FeignClient(
+	value = "blade-land"
+)
+public interface ILandClient {
+
+	String LAND_ORDER_ITEM = "/order-item";
+
+	String LIST_REPORT = LAND_ORDER_ITEM + "/list-report";
+
+	@PostMapping(LIST_REPORT)
+	R<List<OrderItem>> listReport(@RequestBody OrderItem orderItem);
+
+}

+ 12 - 6
blade-ops/blade-report/src/main/java/org/springblade/report/service/IOrderService.java → blade-service-api/blade-land-api/src/main/java/org/springblade/land/vo/OrderTrackVO.java

@@ -14,17 +14,23 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.report.service;
+package org.springblade.land.vo;
 
-import org.springblade.report.entity.Order;
-import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.land.entity.OrderTrack;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
 
 /**
- * 销售或采购订单表 服务
+ * 陆运订单轨迹表视图实体
  *
  * @author BladeX
- * @since 2021-12-27
+ * @since 2022-04-22
  */
-public interface IOrderService extends IService<Order> {
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "OrderTrackVO对象", description = "陆运订单轨迹表")
+public class OrderTrackVO extends OrderTrack {
+	private static final long serialVersionUID = 1L;
 
 }

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

@@ -824,6 +824,11 @@ public class Order implements Serializable {
 	@ApiModelProperty(value = "生成采购")
 	private Integer createPurchase;
 	/**
+	 * 生成采购用户
+	 */
+	@ApiModelProperty(value = "生成采购用户")
+	private String createPurchaseUser;
+	/**
 	 * 生成采购时间
 	 */
 	@ApiModelProperty(value = "生成采购时间")
@@ -833,12 +838,41 @@ public class Order implements Serializable {
 	 * 生成收发货
 	 */
 	@ApiModelProperty(value = "生成收发货")
-	private Integer createReceiving;
+	private Integer createFreight;
 	/**
-	 * 生成收发货
+	 * 生成收发货用户
 	 */
-	@ApiModelProperty(value = "生成收发货")
+	@ApiModelProperty(value = "生成收发货用户")
+	private String createFreightUser;
+	/**
+	 * 生成收发货时间
+	 */
+	@ApiModelProperty(value = "生成收发货时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createFreightTime;
+
+	/**
+	 * 发货数量
+	 */
+	@ApiModelProperty(value = "发货数量")
+	private BigDecimal deliverQuantity;
+	/**
+	 * 发货时间
+	 */
+	@ApiModelProperty(value = "发货时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date deliverTime;
+
+	/**
+	 * 收货数量
+	 */
+	@ApiModelProperty(value = "收货数量")
+	private BigDecimal receiveQuantity;
+	/**
+	 * 收货时间
+	 */
+	@ApiModelProperty(value = "收货时间")
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date createReceivingTime;
+	private Date receiveTime;
 
 }

+ 7 - 6
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderDescClient.java

@@ -1,6 +1,5 @@
 package org.springblade.purchase.sales.feign;
 
-
 import org.springblade.common.constant.LauncherConstant;
 import org.springblade.core.tool.api.R;
 import org.springblade.purchase.sales.entity.Order;
@@ -21,15 +20,16 @@ import java.util.List;
 )
 public interface IOrderDescClient {
 	String API_PREFIX = "/client";
-	String UPDATE_ORDER=API_PREFIX+"/updateOrder";
-	String GET_BY_ORDER_NO=API_PREFIX+"/getByOrderNo";
-	String GET_BY_ID=API_PREFIX+"/getById";
-	String GET_BY_CONDITIONS=API_PREFIX+"/getByConditions";
-	String GET_BY_CG_LIST=API_PREFIX+"/getByCgList";
+	String UPDATE_ORDER = API_PREFIX + "/updateOrder";
+	String GET_BY_ORDER_NO = API_PREFIX + "/getByOrderNo";
+	String GET_BY_ID = API_PREFIX + "/getById";
+	String GET_BY_CONDITIONS = API_PREFIX + "/getByConditions";
+	String GET_BY_CG_LIST = API_PREFIX + "/getByCgList";
 	String RELEASE_STOCK = API_PREFIX + "/releaseStock";
 
 	/**
 	 * 修改采购订单状态
+	 *
 	 * @param order
 	 * @return
 	 */
@@ -50,6 +50,7 @@ public interface IOrderDescClient {
 
 	/**
 	 * 获取 达沃特 48 销售内 提交审核未收款的订单
+	 *
 	 * @param order
 	 * @return
 	 */

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

@@ -714,12 +714,17 @@ public class Order extends OrderBase {
 	 * 生成收发货
 	 */
 	@ApiModelProperty(value = "生成收发货")
-	private Integer createReceiving;
+	private Integer createFreight;
 	/**
-	 * 生成收发货
+	 * 生成收发货用户
 	 */
-	@ApiModelProperty(value = "生成收发货")
+	@ApiModelProperty(value = "生成收发货用户")
+	private String createFreightUser;
+	/**
+	 * 生成收发货时间
+	 */
+	@ApiModelProperty(value = "生成收发货时间")
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date createReceivingTime;
+	private Date createFreightTime;
 
 }

+ 94 - 6
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.trade.purchase.order.enums.OrderTypeEnum;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -37,6 +38,7 @@ import org.springblade.client.feign.IStorageClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.deliver.goods.entity.*;
 import org.springblade.deliver.goods.enums.DeliveryEnum;
 import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
@@ -159,6 +161,27 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			delivery.setTenantId(SecureUtil.getTenantId());
 			delivery.setDeliveryStatus(status);
 			baseMapper.insert(delivery);
+
+			if (ObjectUtil.isNotEmpty(delivery.getOrgId()) && ObjectUtil.isNotEmpty(delivery.getSrcId())) {
+				Order orderTemp = new Order();
+				orderTemp.setId(delivery.getSrcId());
+				if (delivery.getBillType().equals(OrderTypeEnum.RECEIPT.getType())) {
+					Order temp = new Order();
+					temp.setId(delivery.getOrgId());
+					temp.setCreateFreight(1);
+					temp.setCreateFreightUser(AuthUtil.getUserName());
+					temp.setCreateFreightTime(new Date());
+					temp.setOrderStatus("待发货");
+					orderDescClient.updateOrder(temp);
+
+					orderTemp.setOrderStatus("待发货");
+				} else {
+					orderTemp.setCreateFreight(1);
+					orderTemp.setCreateFreightUser(AuthUtil.getUserName());
+					orderTemp.setCreateFreightTime(new Date());
+				}
+				orderDescClient.updateOrder(orderTemp);
+			}
 		} else {
 			if (delivery.getLogisticsConfirm() == 0 || delivery.getAssistantConfirm() == 0) {
 				Delivery temp = baseMapper.selectById(delivery.getId());
@@ -383,16 +406,44 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			baseMapper.insert(delivery);
 		} else {
 			Delivery deliverys = baseMapper.selectById(delivery.getId());//查询原始单据
-			if (delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType()) && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())) {//发货
-				throw new RuntimeException("已发货请勿重复发货");
-			} else if (delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType()) && !delivery.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType()))//撤销发货
-			{
-				throw new RuntimeException("已撤销发货请勿重复撤销发货");
+			if (delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType()) && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())) {
+				//发货
+				throw new RuntimeException("已收货请勿重复收货");
+			} else if (delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType()) && !delivery.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())) {
+				//撤销发货
+				throw new RuntimeException("已撤销收货请勿重复撤销收货");
 			}
 			delivery.setDeliveryStatus(billStatus);
 			delivery.setUpdateUser(SecureUtil.getUserId());
 			delivery.setUpdateTime(new Date());
+
+			Order orderTemp = new Order();
+			orderTemp.setId(select.getSrcId());
+			if (delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
+				Date date = new Date();
+				delivery.setFreightQuantity(delivery.getTotalQuantity());
+				delivery.setFreightTime(date);
+				delivery.setFreightUser(AuthUtil.getUserName());
+
+				orderTemp.setOrderStatus("完成");
+				orderTemp.setDeliverQuantity(delivery.getTotalQuantity());
+				orderTemp.setDeliverTime(date);
+			} else {
+				orderTemp.setOrderStatus("待收货");
+				orderTemp.setDeliverQuantity(BigDecimal.ZERO);
+			}
+
 			baseMapper.updateById(delivery);
+			orderDescClient.updateOrder(orderTemp);
+
+			if (delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
+				baseMapper.update(null, new LambdaUpdateWrapper<Delivery>()
+					.set(Delivery::getFreightQuantity, BigDecimal.ZERO)
+					.set(Delivery::getFreightTime, null)
+					.set(Delivery::getFreightUser, null)
+					.eq(Delivery::getId, delivery.getId())
+				);
+			}
 		}
 		//保存发货明细信息
 		if (CollectionUtils.isNotEmpty(delivery.getDeliveryItemsList())) {
@@ -631,8 +682,26 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			}
 		}
 
+		Date date = new Date();
 		//更改收货主表状态
-		delivery.setDeliveryStatus("已收货");
+		delivery.setDeliveryStatus("已发货");
+		delivery.setFreightQuantity(delivery.getTotalQuantity());
+		delivery.setFreightTime(date);
+		delivery.setFreightUser(AuthUtil.getUserName());
+
+		Order temp = new Order();
+		temp.setId(select.getOrgId());
+		temp.setOrderStatus("待收货");
+		temp.setDeliverQuantity(delivery.getTotalQuantity());
+		temp.setDeliverTime(date);
+		orderDescClient.updateOrder(temp);
+
+		Order orderTemp = new Order();
+		orderTemp.setId(select.getSrcId());
+		orderTemp.setOrderStatus("待收货");
+		orderTemp.setDeliverQuantity(delivery.getTotalQuantity());
+		orderTemp.setDeliverTime(date);
+		orderDescClient.updateOrder(orderTemp);
 		baseMapper.updateById(delivery);
 
 	}
@@ -745,7 +814,26 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		}
 		//更新收货单状态为:录入
 		delivery.setDeliveryStatus("录入");
+
+		Order temp = new Order();
+		temp.setId(select.getOrgId());
+		temp.setOrderStatus("待发货");
+		temp.setDeliverQuantity(BigDecimal.ZERO);
+		orderDescClient.updateOrder(temp);
+
+		Order orderTemp = new Order();
+		orderTemp.setId(select.getSrcId());
+		orderTemp.setOrderStatus("待发货");
+		orderTemp.setDeliverQuantity(BigDecimal.ZERO);
+		orderDescClient.updateOrder(orderTemp);
 		baseMapper.updateById(delivery);
+
+		baseMapper.update(null, new LambdaUpdateWrapper<Delivery>()
+			.set(Delivery::getFreightQuantity, BigDecimal.ZERO)
+			.set(Delivery::getFreightTime, null)
+			.set(Delivery::getFreightUser, null)
+			.eq(Delivery::getId, delivery.getId())
+		);
 	}
 
 

+ 17 - 5
blade-service/blade-land/pom.xml

@@ -37,12 +37,21 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-swagger</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-transaction</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springblade</groupId>
             <artifactId>blade-core-boot</artifactId>
         </dependency>
 
+        <!--Job-->
+        <dependency>
+            <groupId>com.xuxueli</groupId>
+            <artifactId>xxl-job-core</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.springblade</groupId>
             <artifactId>blade-client-api</artifactId>
@@ -61,11 +70,14 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+
         <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-starter-transaction</artifactId>
+            <groupId>com.sinoiov</groupId>
+            <artifactId>openapi-sdk</artifactId>
+            <version>6.0</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/sinoiov.jar</systemPath>
         </dependency>
-    </dependencies>
-
 
+    </dependencies>
 </project>

+ 74 - 0
blade-service/blade-land/src/main/java/org/springblade/land/config/XxlJobConfig.java

@@ -0,0 +1,74 @@
+package org.springblade.land.config;
+
+import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * xxl-job config
+ *
+ * @author xuxueli 2017-04-28
+ */
+@Configuration
+public class XxlJobConfig {
+	private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
+
+	@Value("${xxl.job.admin.addresses}")
+	private String adminAddresses;
+
+	@Value("${xxl.job.executor.appname}")
+	private String appName;
+
+	@Value("${xxl.job.executor.ip}")
+	private String ip;
+
+	@Value("${xxl.job.executor.port}")
+	private int port;
+
+	@Value("${xxl.job.accessToken}")
+	private String accessToken;
+
+	@Value("${xxl.job.executor.logpath}")
+	private String logPath;
+
+	@Value("${xxl.job.executor.logretentiondays}")
+	private int logRetentionDays;
+
+
+	@Bean
+	public XxlJobSpringExecutor xxlJobExecutor() {
+		logger.info(">>>>>>>>>>> xxl-job config init.");
+		XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
+		xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
+		xxlJobSpringExecutor.setAppName(appName);
+		xxlJobSpringExecutor.setIp(ip);
+		xxlJobSpringExecutor.setPort(port);
+		xxlJobSpringExecutor.setAccessToken(accessToken);
+		xxlJobSpringExecutor.setLogPath(logPath);
+		xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
+
+		return xxlJobSpringExecutor;
+	}
+
+	/**
+	 * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
+	 *
+	 *      1、引入依赖:
+	 *          <dependency>
+	 *             <groupId>org.springframework.cloud</groupId>
+	 *             <artifactId>spring-cloud-commons</artifactId>
+	 *             <version>${version}</version>
+	 *         </dependency>
+	 *
+	 *      2、配置文件,或者容器启动变量
+	 *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
+	 *
+	 *      3、获取IP
+	 *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
+	 */
+
+
+}

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

@@ -17,37 +17,29 @@
 package org.springblade.land.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.ILandVehicleClient;
 import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.CollectionUtil;
-import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
-import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.land.entity.Order;
 import org.springblade.land.entity.OrderItem;
 import org.springblade.land.service.IOrderItemService;
 import org.springblade.land.service.IOrderService;
-import org.springblade.land.vo.OrderItemVO;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import javax.validation.Valid;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 陆运订单明细表 控制器
@@ -74,7 +66,7 @@ public class OrderIndexController extends BladeController {
 	 */
 	@GetMapping("/count")
 	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "统计", notes = "")
+	@ApiOperation(value = "统计")
 	public R count() {
 		// 今日新增柜数
 		int newly = orderItemService.count(new LambdaQueryWrapper<OrderItem>()
@@ -124,10 +116,10 @@ public class OrderIndexController extends BladeController {
 	 */
 	@GetMapping("/active")
 	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "运行车辆", notes = "")
+	@ApiOperation(value = "运行车辆")
 	public R<List<OrderItem>> active() {
 		LambdaQueryWrapper<OrderItem> itemQueryWrapper = new LambdaQueryWrapper<>();
-		itemQueryWrapper.in(OrderItem::getStatus, 2, 3, 5)
+		itemQueryWrapper.in(OrderItem::getStatus, 2, 3, 5, 6)
 			.eq(OrderItem::getKind, 2)
 			.eq(OrderItem::getIsDeleted, 0)
 			.eq(OrderItem::getTenantId, AuthUtil.getTenantId())

+ 21 - 0
blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderItemController.java

@@ -33,6 +33,7 @@ import org.springblade.land.vo.OrderItemVO;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 陆运订单明细表 控制器
@@ -70,6 +71,16 @@ public class OrderItemController extends BladeController {
 	}
 
 	/**
+	 * 陆运订单明细报表
+	 */
+	@PostMapping("/list-report")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入orderItem")
+	public R<List<OrderItem>> listReport(@RequestBody OrderItem orderItem) {
+		return R.data(orderItemService.getListNoPage(orderItem));
+	}
+
+	/**
 	 * 统计
 	 */
 	@GetMapping("/count")
@@ -202,6 +213,16 @@ public class OrderItemController extends BladeController {
 	}
 
 	/**
+	 * 提箱
+	 */
+	@GetMapping("/borrow")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "提箱", notes = "传入id")
+	public R borrow(Long id) {
+		return R.status(orderItemService.borrow(id));
+	}
+
+	/**
 	 * 到厂
 	 */
 	@GetMapping("/arrival")

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

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

+ 129 - 0
blade-service/blade-land/src/main/java/org/springblade/land/handler/JobHandler.java

@@ -0,0 +1,129 @@
+package org.springblade.land.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.openapi.sdk.service.DataExchangeService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.land.entity.OrderItem;
+import org.springblade.land.entity.OrderTrack;
+import org.springblade.land.service.IOrderItemService;
+import org.springblade.land.service.IOrderTrackService;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.*;
+
+@Component
+@AllArgsConstructor
+public class JobHandler {
+
+	private final IOrderItemService orderItemService;
+
+	private final IOrderTrackService orderTrackService;
+
+	private static final Map<String, String> TOKEN = new ConcurrentHashMap<>();
+
+	private static final String SUCCESS = "1001";
+
+	private static final String OVERTIME = "1013";
+
+	private static final String LOGIN_URL = "https://openapi-test.sinoiov.cn/save/apis/login";
+
+	private static final String BS_URL = "https://openapi-test.sinoiov.cn/save/apis/transTimeManage";
+
+	@XxlJob("locateJobHandler")
+	public ReturnT<String> locateJobHandler(String param) throws Exception {
+		try {
+			JSONObject json = JSON.parseObject(param);
+			String tenantId = json.getString("tenantId");
+			String token = getToken(json);
+
+			List<OrderItem> itemList = orderItemService.list(new LambdaQueryWrapper<OrderItem>()
+				.in(OrderItem::getStatus, 2, 3, 5, 6)
+				.eq(OrderItem::getKind, 2)
+				.eq(OrderItem::getIsDeleted, 0)
+				.eq(OrderItem::getTenantId, tenantId)
+			);
+
+			// 创建线程池
+			ExecutorService newFixedThreadPool = new ThreadPoolExecutor(5, 200, 0L,
+				TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024),
+				Executors.defaultThreadFactory(),
+				new ThreadPoolExecutor.AbortPolicy());
+			for (OrderItem item : itemList) {
+				newFixedThreadPool.execute(() -> {
+					// 业务处理
+					try {
+						String data = getData(json, token, item.getPlateNo());
+						OrderTrack track = JSON.parseObject(data, OrderTrack.class);
+						if (!ObjectUtil.isEmpty(track)) {
+							track.setItemId(item.getId());
+							track.setPlateNo(item.getPlateNo());
+							orderTrackService.save(track);
+						}
+					} catch (Exception e) {
+						XxlJobLogger.log(e);
+					}
+				});
+			}
+			return ReturnT.SUCCESS;
+		} catch (Exception e) {
+			XxlJobLogger.log(e);
+			return ReturnT.FAIL;
+		}
+	}
+
+	private String getToken(JSONObject json) throws Exception {
+		String tenantId = json.getString("tenantId");
+		String token = TOKEN.get(tenantId);
+		if (StringUtil.isNotBlank(token)) {
+			return token;
+		}
+
+		Map<String, String> map = new HashMap<>(4);
+		map.put("user", json.getString("user"));
+		map.put("pwd", json.getString("pwd"));
+		map.put("srt", json.getString("srt"));
+		map.put("cid", json.getString("cid"));
+
+		DataExchangeService des = new DataExchangeService(5000, 8000);
+		String res = des.postHttps(LOGIN_URL, map);
+
+		JSONObject result = JSON.parseObject(res);
+		if (!SUCCESS.equals(result.getString("status"))) {
+			throw new RuntimeException("登录失败:" + result.getString("status"));
+		}
+		TOKEN.put(tenantId, result.getString("result"));
+		return result.getString("result");
+	}
+
+	private String getData(JSONObject json, String token, String plateNo) throws Exception {
+		Map<String, String> map = new HashMap<>(4);
+		map.put("token", token);
+		map.put("cid", json.getString("cid"));
+		map.put("srt", json.getString("srt"));
+		map.put("vclN", plateNo);
+		map.put("vco", "2");
+
+		DataExchangeService des = new DataExchangeService(5000, 8000);
+		String res = des.postHttps(BS_URL, map);
+
+		JSONObject result = JSON.parseObject(res);
+		if (!SUCCESS.equals(result.getString("status"))) {
+			if (!OVERTIME.equals(result.getString("status"))) {
+				throw new RuntimeException("获取数据失败:" + result.getString("status"));
+			}
+			return null;
+		}
+		return result.getString("result");
+	}
+
+}

+ 43 - 0
blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderTrackMapper.java

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

+ 27 - 0
blade-service/blade-land/src/main/java/org/springblade/land/mapper/OrderTrackMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.land.mapper.OrderTrackMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="orderTrackResultMap" type="org.springblade.land.entity.OrderTrack">
+        <id column="id" property="id"/>
+        <result column="item_id" property="itemId"/>
+        <result column="plate_no" property="plateNo"/>
+        <result column="lon" property="lon"/>
+        <result column="lat" property="lat"/>
+        <result column="adr" property="adr"/>
+        <result column="utc" property="utc"/>
+        <result column="spd" property="spd"/>
+        <result column="drc" property="drc"/>
+        <result column="province" property="province"/>
+        <result column="city" property="city"/>
+        <result column="country" property="country"/>
+        <result column="create_time" property="createTime"/>
+    </resultMap>
+
+
+    <select id="selectOrderTrackPage" resultMap="orderTrackResultMap">
+        select * from land_order_track where is_deleted = 0
+    </select>
+
+</mapper>

+ 16 - 0
blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderItemService.java

@@ -53,6 +53,14 @@ public interface IOrderItemService extends IService<OrderItem> {
 	IPage<OrderItem> getList(OrderItem orderItem, Query query);
 
 	/**
+	 * 列表
+	 *
+	 * @param orderItem
+	 * @return
+	 */
+	List<OrderItem> getListNoPage(OrderItem orderItem);
+
+	/**
 	 * 列表 统计
 	 *
 	 * @param orderItem
@@ -125,6 +133,14 @@ public interface IOrderItemService extends IService<OrderItem> {
 	boolean cancelAccept(Long id);
 
 	/**
+	 * 提箱
+	 *
+	 * @param id
+	 * @return
+	 */
+	boolean borrow(Long id);
+
+	/**
 	 * 到厂
 	 *
 	 * @param id

+ 17 - 10
blade-ops/blade-report/src/main/java/org/springblade/report/service/impl/OrderServiceImpl.java → blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderTrackService.java

@@ -14,21 +14,28 @@
  *  this software without specific prior written permission.
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
-package org.springblade.report.service.impl;
+package org.springblade.land.service;
 
-import org.springblade.report.entity.Order;
-import org.springblade.report.mapper.OrderMapper;
-import org.springblade.report.service.IOrderService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.land.entity.OrderTrack;
+import org.springblade.land.vo.OrderTrackVO;
 
 /**
- * 销售或采购订单表 服务实现
+ * 陆运订单轨迹表 服务
  *
  * @author BladeX
- * @since 2021-12-27
+ * @since 2022-04-22
  */
-@Service
-public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
+public interface IOrderTrackService extends IService<OrderTrack> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param orderTrack
+	 * @return
+	 */
+	IPage<OrderTrackVO> selectOrderTrackPage(IPage<OrderTrackVO> page, OrderTrackVO orderTrack);
 
 }

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

@@ -88,78 +88,21 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 
 	@Override
 	public IPage<OrderItem> getList(OrderItem orderItem, Query query) {
-		List<Long> orderIdList = Collections.emptyList();
-		if (StringUtil.isNotBlank(orderItem.getBelongCompany()) || StringUtil.isNotBlank(orderItem.getStation()) || StringUtil.isNotBlank(orderItem.getFactory())) {
-			orderIdList = orderMapper.selectList(new LambdaQueryWrapper<Order>()
-				.like(StringUtil.isNotBlank(orderItem.getBelongCompany()), Order::getBelongCompany, orderItem.getBelongCompany())
-				.like(StringUtil.isNotBlank(orderItem.getStation()), Order::getStation, orderItem.getStation())
-				.like(StringUtil.isNotBlank(orderItem.getFactory()), Order::getFactory, orderItem.getFactory())
-				.like(StringUtil.isNotBlank(orderItem.getAddressDetail()), Order::getAddressDetail, orderItem.getAddressDetail())
-				.between(StringUtil.isNotBlank(orderItem.getBeginCrateTime()) && StringUtil.isNotBlank(orderItem.getEndCrateTime()), Order::getCreateTime, orderItem.getBeginCrateTime(), orderItem.getEndCrateTime())
-				.eq(Order::getIsDeleted, 0)
-				.eq(Order::getTenantId, AuthUtil.getTenantId())
-			).stream().map(Order::getId).collect(Collectors.toList());
-
-			if (CollectionUtil.isEmpty(orderIdList)) {
-				return new Page<>();
-			}
+		LambdaQueryWrapper<OrderItem> wrapper = getWrapper(orderItem);
+		if (ObjectUtil.isEmpty(wrapper)) {
+			return new Page<>();
 		}
 
-		LambdaQueryWrapper<OrderItem> itemQueryWrapper = new LambdaQueryWrapper<>();
-		if (orderItem.getTag() == 4) {
-			itemQueryWrapper.notIn(OrderItem::getStatus, 0, 1);
-		} else if (orderItem.getTag() == 3) {
-			itemQueryWrapper.notIn(OrderItem::getStatus, 0);
-		}
-
-		itemQueryWrapper.in(CollectionUtil.isNotEmpty(orderIdList), OrderItem::getOrderId, orderIdList)
-			.like(StringUtil.isNotBlank(orderItem.getGoods()), OrderItem::getGoods, orderItem.getGoods())
-			.like(StringUtil.isNotBlank(orderItem.getBillNo()), OrderItem::getBillNo, orderItem.getBillNo())
-			.like(StringUtil.isNotBlank(orderItem.getTel()), OrderItem::getTel, orderItem.getTel())
-			.like(StringUtil.isNotBlank(orderItem.getCtnNo()), OrderItem::getCtnNo, orderItem.getCtnNo())
-			.between(StringUtil.isNotBlank(orderItem.getBeginArrivalTime()) && StringUtil.isNotBlank(orderItem.getEndArrivalTime()), OrderItem::getArrivalTime, orderItem.getBeginArrivalTime(), orderItem.getEndArrivalTime())
-			.eq(ObjectUtil.isNotEmpty(orderItem.getFleetId()), OrderItem::getFleetId, orderItem.getFleetId())
-			.eq(ObjectUtil.isNotEmpty(orderItem.getVehicleId()), OrderItem::getVehicleId, orderItem.getVehicleId())
-			.eq(ObjectUtil.isNotEmpty(orderItem.getDriverId()), OrderItem::getDriverId, orderItem.getDriverId())
-			.eq(ObjectUtil.isNotEmpty(orderItem.getStatus()), OrderItem::getStatus, orderItem.getStatus())
-			.eq(OrderItem::getKind, 2)
-			.eq(OrderItem::getIsDeleted, 0)
-			.eq(OrderItem::getTenantId, AuthUtil.getTenantId())
-			.orderByDesc(OrderItem::getUpdateTime);
-		IPage<OrderItem> pages = baseMapper.selectPage(Condition.getPage(query), itemQueryWrapper);
+		IPage<OrderItem> pages = baseMapper.selectPage(Condition.getPage(query), wrapper);
 		pages.getRecords().forEach(record -> {
 			Order order = orderMapper.selectById(record.getOrderId());
-			record.setOrderNo(order.getOrderNo());
-			record.setBelongCompany(order.getBelongCompany());
-			record.setStation(order.getStation());
-			record.setFactory(order.getFactory());
-			record.setAddressDetail(order.getAddressDetail());
-
-			if (ObjectUtil.isNotEmpty(order.getCorpId())) {
-				R<CorpsDesc> corp = corpsDescClient.getCorpMessage(order.getCorpId());
-				if (corp.isSuccess() && corp.getData() != null) {
-					record.setCorpName(corp.getData().getCname());
-				}
-			}
-			if (ObjectUtil.isNotEmpty(record.getFleetId())) {
-				R<CorpsDesc> fleet = corpsDescClient.getCorpMessage(record.getFleetId());
-				if (fleet.isSuccess() && fleet.getData() != null) {
-					record.setFleetName(fleet.getData().getCname());
-				}
-			}
-			if (ObjectUtil.isNotEmpty(record.getDriverId())) {
-				LandDriver driver = landDriverClient.getDriver(record.getDriverId());
-				record.setDriverName(driver.getName());
-			}
-
-			if (orderItem.getTag() == 0) {
-				BigDecimal d = record.getLandAmountD().add(record.getOneFeeD()).add(record.getTwoFeeD()).add(record.getThreeFeeD()).add(record.getFourFeeD()).add(record.getFiveFeeD());
-				BigDecimal c = record.getLandAmountC().add(record.getOneFeeC()).add(record.getTwoFeeC()).add(record.getThreeFeeC()).add(record.getFourFeeC()).add(record.getFiveFeeC());
-				record.setProfit(d.subtract(c));
-			}
+			filling(record, order, orderItem.getTag());
 
 			// 手机端
 			if (StringUtil.isNotBlank(orderItem.getSource())) {
+				record.setBusinessType(order.getBusinessType());
+				record.setShippingMode(order.getShippingMode());
+
 				List<OrderAddress> orderAddressList = orderAddressMapper.selectList(new LambdaQueryWrapper<OrderAddress>()
 					.eq(OrderAddress::getOrderId, record.getOrderId())
 					.eq(OrderAddress::getIsDeleted, 0)
@@ -171,6 +114,21 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 	}
 
 	@Override
+	public List<OrderItem> getListNoPage(OrderItem orderItem) {
+		LambdaQueryWrapper<OrderItem> wrapper = getWrapper(orderItem);
+		if (ObjectUtil.isEmpty(wrapper)) {
+			return new ArrayList<>();
+		}
+
+		List<OrderItem> itemList = baseMapper.selectList(wrapper);
+		itemList.forEach(item -> {
+			Order order = orderMapper.selectById(item.getOrderId());
+			filling(item, order, orderItem.getTag());
+		});
+		return itemList;
+	}
+
+	@Override
 	public Map<String, Object> getCount(OrderItem orderItem) {
 		LambdaQueryWrapper<OrderItem> itemQueryWrapper = new LambdaQueryWrapper<>();
 		if (orderItem.getTag() == 4) {
@@ -397,7 +355,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		item.setFourFeeC(orderItem.getFourFeeC());
 		item.setFiveFeeC(orderItem.getFiveFeeC());
 		item.setFeeRemarksC(orderItem.getFeeRemarksC());
-		item.setStatus(5);
+		item.setStatus(6);
 		item.setAcceptTime(new Date());
 		item.setUpdateUser(AuthUtil.getUserId());
 		item.setUpdateTime(new Date());
@@ -437,6 +395,22 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class)
+	public boolean borrow(Long id) {
+		OrderItem item = new OrderItem();
+		item.setId(id);
+		item.setStatus(5);
+		item.setBorrowTime(new Date());
+		item.setUpdateUser(AuthUtil.getUserId());
+		item.setUpdateTime(new Date());
+		baseMapper.updateById(item);
+
+		addChange(id, "提箱", 1);
+		return true;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public boolean arrival(Long id) {
 		OrderItem item = new OrderItem();
 		item.setId(id);
@@ -624,6 +598,83 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		orderChangeMapper.insert(change);
 	}
 
+	private LambdaQueryWrapper<OrderItem> getWrapper(OrderItem orderItem) {
+		List<Long> orderIdList = Collections.emptyList();
+		if (StringUtil.isNotBlank(orderItem.getAddressDetail()) || StringUtil.isNotBlank(orderItem.getStation())
+			|| StringUtil.isNotBlank(orderItem.getFactory()) || StringUtil.isNotBlank(orderItem.getOrderNo())) {
+			orderIdList = orderMapper.selectList(new LambdaQueryWrapper<Order>()
+				.like(StringUtil.isNotBlank(orderItem.getOrderNo()), Order::getOrderNo, orderItem.getOrderNo())
+				.like(StringUtil.isNotBlank(orderItem.getStation()), Order::getStation, orderItem.getStation())
+				.like(StringUtil.isNotBlank(orderItem.getFactory()), Order::getFactory, orderItem.getFactory())
+				.like(StringUtil.isNotBlank(orderItem.getAddressDetail()), Order::getAddressDetail, orderItem.getAddressDetail())
+				.eq(Order::getIsDeleted, 0)
+				.eq(Order::getTenantId, AuthUtil.getTenantId())
+			).stream().map(Order::getId).collect(Collectors.toList());
+
+			if (CollectionUtil.isEmpty(orderIdList)) {
+				return null;
+			}
+		}
+
+		LambdaQueryWrapper<OrderItem> itemQueryWrapper = new LambdaQueryWrapper<>();
+		if (orderItem.getTag() == 4) {
+			itemQueryWrapper.notIn(OrderItem::getStatus, 0, 1);
+		} else if (orderItem.getTag() == 3) {
+			itemQueryWrapper.notIn(OrderItem::getStatus, 0);
+		}
+
+		itemQueryWrapper.in(CollectionUtil.isNotEmpty(orderIdList), OrderItem::getOrderId, orderIdList)
+			.like(StringUtil.isNotBlank(orderItem.getGoods()), OrderItem::getGoods, orderItem.getGoods())
+			.like(StringUtil.isNotBlank(orderItem.getBillNo()), OrderItem::getBillNo, orderItem.getBillNo())
+			.like(StringUtil.isNotBlank(orderItem.getTel()), OrderItem::getTel, orderItem.getTel())
+			.like(StringUtil.isNotBlank(orderItem.getCtnNo()), OrderItem::getCtnNo, orderItem.getCtnNo())
+			.between(StringUtil.isNotBlank(orderItem.getBeginArrivalTime()) && StringUtil.isNotBlank(orderItem.getEndArrivalTime()), OrderItem::getArrivalTime, orderItem.getBeginArrivalTime(), orderItem.getEndArrivalTime())
+			.between(StringUtil.isNotBlank(orderItem.getBeginCrateTime()) && StringUtil.isNotBlank(orderItem.getEndCrateTime()), OrderItem::getCreateTime, orderItem.getBeginCrateTime(), orderItem.getEndCrateTime())
+			.between(StringUtil.isNotBlank(orderItem.getBeginFinishedTime()) && StringUtil.isNotBlank(orderItem.getEndFinishedTime()), OrderItem::getFinishedTime, orderItem.getBeginFinishedTime(), orderItem.getEndFinishedTime())
+			.eq(StringUtil.isNotBlank(orderItem.getCtnType()), OrderItem::getCtnType, orderItem.getCtnType())
+			.eq(ObjectUtil.isNotEmpty(orderItem.getQuantity()), OrderItem::getQuantity, orderItem.getQuantity())
+			.eq(ObjectUtil.isNotEmpty(orderItem.getFleetId()), OrderItem::getFleetId, orderItem.getFleetId())
+			.eq(ObjectUtil.isNotEmpty(orderItem.getVehicleId()), OrderItem::getVehicleId, orderItem.getVehicleId())
+			.eq(ObjectUtil.isNotEmpty(orderItem.getDriverId()), OrderItem::getDriverId, orderItem.getDriverId())
+			.eq(ObjectUtil.isNotEmpty(orderItem.getStatus()), OrderItem::getStatus, orderItem.getStatus())
+			.eq(OrderItem::getKind, 2)
+			.eq(OrderItem::getIsDeleted, 0)
+			.eq(OrderItem::getTenantId, AuthUtil.getTenantId())
+			.orderByDesc(OrderItem::getUpdateTime);
+		return itemQueryWrapper;
+	}
+
+	private void filling(OrderItem item, Order order, Integer tag) {
+		item.setOrderNo(order.getOrderNo());
+		item.setBelongCompany(order.getBelongCompany());
+		item.setStation(order.getStation());
+		item.setFactory(order.getFactory());
+		item.setAddressDetail(order.getAddressDetail());
+
+		if (ObjectUtil.isNotEmpty(order.getCorpId())) {
+			R<CorpsDesc> corp = corpsDescClient.getCorpMessage(order.getCorpId());
+			if (corp.isSuccess() && corp.getData() != null) {
+				item.setCorpName(corp.getData().getCname());
+			}
+		}
+		if (ObjectUtil.isNotEmpty(item.getFleetId())) {
+			R<CorpsDesc> fleet = corpsDescClient.getCorpMessage(item.getFleetId());
+			if (fleet.isSuccess() && fleet.getData() != null) {
+				item.setFleetName(fleet.getData().getCname());
+			}
+		}
+		if (ObjectUtil.isNotEmpty(item.getDriverId())) {
+			LandDriver driver = landDriverClient.getDriver(item.getDriverId());
+			item.setDriverName(driver.getName());
+		}
+
+		if (tag == 0) {
+			BigDecimal d = item.getLandAmountD().add(item.getOneFeeD()).add(item.getTwoFeeD()).add(item.getThreeFeeD()).add(item.getFourFeeD()).add(item.getFiveFeeD());
+			BigDecimal c = item.getLandAmountC().add(item.getOneFeeC()).add(item.getTwoFeeC()).add(item.getThreeFeeC()).add(item.getFourFeeC()).add(item.getFiveFeeC());
+			item.setProfit(d.subtract(c));
+		}
+	}
+
 	private void sendMsgToCorp(OrderItem item, String mold) {
 		item.setSendUserId(item.getCreateUser());
 		sendMsg(MessageUtil.toCorp(item, mold));

+ 14 - 19
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java

@@ -147,7 +147,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				}
 			}
 			if (!ObjectUtil.isEmpty(detail.getPodId())) {
-				BasicPortDesc pod= portClient.getPort(detail.getPodId());
+				BasicPortDesc pod = portClient.getPort(detail.getPodId());
 				if (pod != null) {
 					detail.setPodName(pod.getName());
 				}
@@ -204,30 +204,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				return new Page<>();
 			}
 		}
-		if (StringUtil.isNotBlank(order.getBeginArrivalTime()) && StringUtil.isNotBlank(order.getEndArrivalTime())) {
-			orderIdList = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
-				.select(OrderItem::getOrderId)
-				.in(CollectionUtil.isNotEmpty(orderIdList), OrderItem::getOrderId, orderIdList)
-				.between(OrderItem::getArrivalTime, order.getBeginArrivalTime(), order.getEndArrivalTime())
-				.eq(OrderItem::getKind, 1)
-				.eq(OrderItem::getIsDeleted, 0)
-				.groupBy(OrderItem::getOrderId)
-			).stream().map(OrderItem::getOrderId).collect(Collectors.toList());
-
-			if (CollectionUtil.isEmpty(orderIdList)) {
-				return new Page<>();
-			}
-		}
 
 		orderQueryWrapper.in(CollectionUtil.isNotEmpty(orderIdList), Order::getId, orderIdList)
 			.eq(ObjectUtil.isNotEmpty(order.getCorpId()), Order::getCorpId, order.getCorpId())
 			.eq(ObjectUtil.isNotEmpty(order.getSalesman()), Order::getSalesman, order.getSalesman())
 			.eq(ObjectUtil.isNotEmpty(itemStatus) && itemStatus == 999, Order::getStatus, 0)
+			.like(StringUtil.isNotBlank(order.getOrderNo()), Order::getOrderNo, order.getOrderNo())
 			.like(StringUtil.isNotBlank(order.getBillNo()), Order::getBillNo, order.getBillNo())
 			.like(StringUtil.isNotBlank(order.getBelongCompany()), Order::getBelongCompany, order.getBelongCompany())
 			.like(StringUtil.isNotBlank(order.getStation()), Order::getStation, order.getStation())
 			.like(StringUtil.isNotBlank(order.getFactory()), Order::getFactory, order.getFactory())
 			.like(StringUtil.isNotBlank(order.getAddressDetail()), Order::getAddressDetail, order.getAddressDetail())
+			.between(StringUtil.isNotBlank(order.getBeginArrivalTime()) && StringUtil.isNotBlank(order.getEndArrivalTime()), Order::getArrivalTime, order.getBeginArrivalTime(), order.getEndArrivalTime())
 			.between(StringUtil.isNotBlank(order.getBeginCrateTime()) && StringUtil.isNotBlank(order.getEndCrateTime()), Order::getCreateTime, order.getBeginCrateTime(), order.getEndCrateTime())
 			.eq(Order::getIsDeleted, 0)
 			.eq(Order::getTenantId, AuthUtil.getTenantId());
@@ -336,7 +324,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					if (four > 0) {
 						statusDetail += "工单关闭(" + four + ");";
 					}
-					record.setItemStatusDetail(statusDetail.substring(0, statusDetail.lastIndexOf(";")));
+
+					if (StringUtil.isNotBlank(statusDetail)) {
+						record.setItemStatusDetail(statusDetail.substring(0, statusDetail.lastIndexOf(";")));
+					}
 				}
 			}
 
@@ -431,7 +422,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		long orderId = order.getId();
 
 		BigDecimal freight = BigDecimal.ZERO;
-		for (OrderItem item : order.getItemList()) {
+		List<OrderItem> itemList = order.getItemList();
+		for (OrderItem item : itemList) {
 			if (ObjectUtil.isEmpty(item.getId())) {
 				item.setOrderId(orderId);
 				item.setBillNo(order.getBillNo());
@@ -471,7 +463,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					.append(address.getCorpName()).append("(")
 					.append(address.getContacts()).append(" ")
 					.append(address.getTel()).append(") ")
-					.append(address.getAddress()).append(";\n");
+					.append(address.getAddress()).append("\n");
 			}
 		}
 
@@ -500,7 +492,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 		order.setFreight(freight);
 		if (addressDetail.length() > 0) {
-			order.setAddressDetail(addressDetail.deleteCharAt(addressDetail.lastIndexOf(";")).toString());
+			order.setAddressDetail(addressDetail.deleteCharAt(addressDetail.lastIndexOf("\n")).toString());
+		}
+		if (CollectionUtil.isNotEmpty(itemList)) {
+			order.setArrivalTime(itemList.get(0).getArrivalTime());
 		}
 		baseMapper.updateById(order);
 		return orderId;

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

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

+ 12 - 0
blade-service/blade-land/src/main/resources/application.yml

@@ -11,3 +11,15 @@ oss:
   access-key: D99KGE6ZTQXSATTJWU24
   secret-key: QyVqGnhIQQE734UYSUFlGOZViE6+ZlDEfUG3NjhJ
   bucket-name: bladex
+
+xxl:
+  job:
+    accessToken: ''
+    admin:
+      addresses: http://127.0.0.1:10031/xxl-job-admin
+    executor:
+      appname: blade-land
+      ip: 127.0.0.1
+      logpath: applogs/xxl-job/jobhandler
+      logretentiondays: -1
+      port: 10032

+ 36 - 40
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/SalesPolicyController.java

@@ -18,41 +18,35 @@ package org.springblade.mocha.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.mocha.excel.PriceItemExcel;
-import org.springblade.mocha.excel.SalesItemExcel;
-import org.springblade.purchase.sales.entity.Order;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.mocha.entity.SalesPolicy;
-import org.springblade.mocha.vo.SalesPolicyVO;
+import org.springblade.mocha.excel.SalesItemExcel;
 import org.springblade.mocha.service.ISalesPolicyService;
-import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.mocha.vo.SalesPolicyVO;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 销售政策表 控制器
@@ -67,7 +61,10 @@ import java.util.Map;
 public class SalesPolicyController extends BladeController {
 
 	private final ISalesPolicyService salesPolicyService;
-	private final ICorpsDescClient corpsDescClient;//客户信息
+	/**
+	 * 客户信息
+	 */
+	private final ICorpsDescClient corpsDescClient;
 
 	/**
 	 * 详情
@@ -89,29 +86,29 @@ public class SalesPolicyController extends BladeController {
 	public R<IPage<SalesPolicy>> list(SalesPolicyVO salesPolicy, Query query) {
 		QueryWrapper<SalesPolicy> queryWrapper = new QueryWrapper<>();
 		LambdaQueryWrapper<SalesPolicy> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(SalesPolicy::getIsDeleted,0);
-		lambdaQueryWrapper.eq(SalesPolicy::getTenantId,SecureUtil.getTenantId());
-		lambdaQueryWrapper.like(Func.isNotEmpty(salesPolicy.getCname()),SalesPolicy::getCname,salesPolicy.getCname());
-		lambdaQueryWrapper.like(Func.isNotEmpty(salesPolicy.getBrand()),SalesPolicy::getBrand,salesPolicy.getBrand());
-		lambdaQueryWrapper.like(Func.isNotEmpty(salesPolicy.getCorps()),SalesPolicy::getCorps,salesPolicy.getCorps());
-		lambdaQueryWrapper.eq(Func.isNotEmpty(salesPolicy.getStatus()),SalesPolicy::getStatus,salesPolicy.getStatus());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(salesPolicy.getCreateTimeStart()), SalesPolicy::getCreateTime,salesPolicy.getCreateTimeStart());
-		lambdaQueryWrapper.le(Func.isNotEmpty(salesPolicy.getCreateTimeEnd()),SalesPolicy::getCreateTime,salesPolicy.getCreateTimeEnd());
-		lambdaQueryWrapper.ge(Func.isNotEmpty(salesPolicy.getDateValidityStart()),SalesPolicy::getStartTime,salesPolicy.getDateValidityStart());
-		lambdaQueryWrapper.le(Func.isNotEmpty(salesPolicy.getDateValidityEnd()),SalesPolicy::getEndTime,salesPolicy.getDateValidityEnd());
+		lambdaQueryWrapper.eq(SalesPolicy::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(SalesPolicy::getTenantId, SecureUtil.getTenantId());
+		lambdaQueryWrapper.like(Func.isNotEmpty(salesPolicy.getCname()), SalesPolicy::getCname, salesPolicy.getCname());
+		lambdaQueryWrapper.like(Func.isNotEmpty(salesPolicy.getBrand()), SalesPolicy::getBrand, salesPolicy.getBrand());
+		lambdaQueryWrapper.like(Func.isNotEmpty(salesPolicy.getCorps()), SalesPolicy::getCorps, salesPolicy.getCorps());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(salesPolicy.getStatus()), SalesPolicy::getStatus, salesPolicy.getStatus());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(salesPolicy.getCreateTimeStart()), SalesPolicy::getCreateTime, salesPolicy.getCreateTimeStart());
+		lambdaQueryWrapper.le(Func.isNotEmpty(salesPolicy.getCreateTimeEnd()), SalesPolicy::getCreateTime, salesPolicy.getCreateTimeEnd());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(salesPolicy.getDateValidityStart()), SalesPolicy::getStartTime, salesPolicy.getDateValidityStart());
+		lambdaQueryWrapper.le(Func.isNotEmpty(salesPolicy.getDateValidityEnd()), SalesPolicy::getEndTime, salesPolicy.getDateValidityEnd());
 		lambdaQueryWrapper.orderByDesc(SalesPolicy::getId);
 		IPage<SalesPolicy> pages = salesPolicyService.page(Condition.getPage(query), lambdaQueryWrapper);
-		if (CollectionUtils.isNotEmpty(pages.getRecords())){
-			pages.getRecords().stream().forEach(item ->{
+		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
+			pages.getRecords().forEach(item -> {
 				//回显代理商中文名
-				if(StringUtils.isNotBlank(item.getCorps())){
+				if (StringUtils.isNotBlank(item.getCorps())) {
 					List<String> list = Arrays.asList(item.getCorps().split(","));
 					StringBuffer stringBuffer = new StringBuffer();
-					if (CollectionUtils.isNotEmpty(list)){
-						list.stream().forEach(items ->{
+					if (CollectionUtils.isNotEmpty(list)) {
+						list.forEach(items -> {
 							R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(Long.valueOf(items));
-							if (corpMessage.isSuccess() && corpMessage.getData() != null){
-								stringBuffer.append(corpMessage.getData().getCname()+",");
+							if (corpMessage.isSuccess() && corpMessage.getData() != null) {
+								stringBuffer.append(corpMessage.getData().getCname()).append(",");
 							}
 						});
 					}
@@ -152,8 +149,8 @@ public class SalesPolicyController extends BladeController {
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "修改", notes = "传入salesPolicy")
 	public R update(@Valid @RequestBody SalesPolicy salesPolicy) {
-		if (salesPolicy.getId() == null){
-			return R.data(500,"请选择要删除的数据","error");
+		if (salesPolicy.getId() == null) {
+			return R.data(500, "请选择要删除的数据", "error");
 		}
 		salesPolicy.setIsDeleted(1);
 		return R.status(salesPolicyService.updateById(salesPolicy));
@@ -179,6 +176,7 @@ public class SalesPolicyController extends BladeController {
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(salesPolicyService.removeByIds(Func.toLongList(ids)));
 	}
+
 	/**
 	 * 懒加载获取政策树形结构
 	 */
@@ -192,18 +190,17 @@ public class SalesPolicyController extends BladeController {
 
 	/**
 	 * 导入销售政策明细
-	 * */
+	 */
 
 	@PostMapping("/import-sales-policy")
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "导入销售政策明细", notes = "传入excel")
 	public R importSalesPolicy(MultipartFile file) {
 		List<SalesItemExcel> excelList = ExcelUtil.read(file, SalesItemExcel.class);
-		if(CollectionUtils.isEmpty(excelList))
-		{
+		if (CollectionUtils.isEmpty(excelList)) {
 			throw new SecurityException("数据不能为空");
 		}
-		return salesPolicyService.importSalesPolicy(excelList,false);
+		return salesPolicyService.importSalesPolicy(excelList, false);
 	}
 
 
@@ -215,9 +212,8 @@ public class SalesPolicyController extends BladeController {
 	@ApiOperation(value = "导出模板")
 	public void exportPrice(HttpServletResponse response) {
 		List<SalesItemExcel> list = new ArrayList<>();
-		ExcelUtil.export(response, "导模板-销售政策明细", "导入数据表", list, SalesItemExcel.class);
+		ExcelUtil.export(response, "导模板-销售政策明细", "导入数据表", list, SalesItemExcel.class);
 	}
 
 
-
 }

+ 39 - 42
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java

@@ -1,8 +1,7 @@
 package org.springblade.purchase.sales.feign;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-
-
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.trade.purchase.order.enums.OrderTypeEnum;
@@ -13,16 +12,12 @@ import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.service.IOrderService;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
 import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.time.LocalDate;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
@@ -38,24 +33,34 @@ public class OrderDescClient implements IOrderDescClient {
 
 	@Override
 	@PostMapping(UPDATE_ORDER)
-	public R updateOrder(Order order)
-	{
-		if(order.getId()==null)
-		{
+	public R updateOrder(Order order) {
+		if (order.getId() == null) {
 			throw new SecurityException("修改状态失败");
 		}
 		iOrderService.updateById(order);
+
+		if (order.getDeliverQuantity().compareTo(BigDecimal.ZERO) == 0) {
+			iOrderService.update(null, new LambdaUpdateWrapper<Order>()
+				.set(Order::getDeliverTime, null)
+				.eq(Order::getId, order.getId())
+			);
+		}
+		if (order.getReceiveQuantity().compareTo(BigDecimal.ZERO) == 0) {
+			iOrderService.update(null, new LambdaUpdateWrapper<Order>()
+				.set(Order::getReceiveTime, null)
+				.eq(Order::getId, order.getId())
+			);
+		}
 		return R.success("操作成功");
 	}
 
 	@Override
 	@PostMapping(GET_BY_ORDER_NO)
-	public Order getByOrder(Order order)
-	{
-		LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+	public Order getByOrder(Order order) {
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		orderLambdaQueryWrapper.eq(Order::getTenantId, AuthUtil.getTenantId());
 		orderLambdaQueryWrapper.eq(Order::getIsDeleted, 0);
-		orderLambdaQueryWrapper.eq(Order::getOrderNo,order.getOrderNo());
+		orderLambdaQueryWrapper.eq(Order::getOrderNo, order.getOrderNo());
 		return iOrderService.getOne(orderLambdaQueryWrapper, false);
 	}
 
@@ -68,21 +73,17 @@ public class OrderDescClient implements IOrderDescClient {
 	//销售专用查询
 	@Override
 	@PostMapping(GET_BY_CONDITIONS)
-	public R<List<Order>> getByConditions(Order order)
-	{
-		LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+	public R<List<Order>> getByConditions(Order order) {
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		orderLambdaQueryWrapper.eq(Order::getTenantId, AuthUtil.getTenantId());
 		orderLambdaQueryWrapper.eq(Order::getIsDeleted, 0);
-		orderLambdaQueryWrapper.eq(Order::getOrderNo,order.getOrderNo());
-		orderLambdaQueryWrapper.eq(Order::getBillType,"XS");
-		orderLambdaQueryWrapper.eq(Order::getTradeType,order.getTradeType());
+		orderLambdaQueryWrapper.eq(Order::getOrderNo, order.getOrderNo());
+		orderLambdaQueryWrapper.eq(Order::getBillType, "XS");
+		orderLambdaQueryWrapper.eq(Order::getTradeType, order.getTradeType());
 		List<Order> list = iOrderService.list(orderLambdaQueryWrapper);
-		if(CollectionUtils.isNotEmpty(list))
-		{
+		if (CollectionUtils.isNotEmpty(list)) {
 			return R.data(list);
-		}
-		else
-		{
+		} else {
 			return R.data(Collections.EMPTY_LIST);
 		}
 
@@ -90,21 +91,17 @@ public class OrderDescClient implements IOrderDescClient {
 
 	@Override
 	@PostMapping(GET_BY_CG_LIST)
-	public R<List<Order>> getByCgList(Order order)
-	{
+	public R<List<Order>> getByCgList(Order order) {
 		//不要修改此方法,可以复制重新写一个
-		LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		orderLambdaQueryWrapper.eq(Order::getTenantId, AuthUtil.getTenantId());
 		orderLambdaQueryWrapper.eq(Order::getIsDeleted, 0);
-		orderLambdaQueryWrapper.eq(StringUtils.isNotBlank(order.getBillType()),Order::getBillType, order.getBillType());
-		orderLambdaQueryWrapper.eq(StringUtils.isNotBlank(order.getOrgOrderNo()),Order::getOrgOrderNo, order.getOrgOrderNo());
+		orderLambdaQueryWrapper.eq(StringUtils.isNotBlank(order.getBillType()), Order::getBillType, order.getBillType());
+		orderLambdaQueryWrapper.eq(StringUtils.isNotBlank(order.getOrgOrderNo()), Order::getOrgOrderNo, order.getOrgOrderNo());
 		List<Order> list = iOrderService.list(orderLambdaQueryWrapper);
-		if(CollectionUtils.isNotEmpty(list))
-		{
+		if (CollectionUtils.isNotEmpty(list)) {
 			return R.data(list);
-		}
-		else
-		{
+		} else {
 			return R.data(Collections.EMPTY_LIST);
 		}
 	}
@@ -112,22 +109,22 @@ public class OrderDescClient implements IOrderDescClient {
 	@Override
 	public R releaseStock(Order order) {
 		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(Order::getIsDeleted,0);
-		lambdaQueryWrapper.ne(Order::getStatus,0);
-		lambdaQueryWrapper.eq(Order::getTenantId,681169);
-		lambdaQueryWrapper.eq(Order::getTradeType,OrderTypeEnum.DOMESTIC.getType());
+		lambdaQueryWrapper.eq(Order::getIsDeleted, 0);
+		lambdaQueryWrapper.ne(Order::getStatus, 0);
+		lambdaQueryWrapper.eq(Order::getTenantId, 681169);
+		lambdaQueryWrapper.eq(Order::getTradeType, OrderTypeEnum.DOMESTIC.getType());
 		lambdaQueryWrapper.eq(Order::getBillType, OrderTypeEnum.SALES.getType());
 		lambdaQueryWrapper.isNotNull(Order::getCheckDate);
 		lambdaQueryWrapper.eq(Order::getSettlmentAmount, BigDecimal.ZERO);
 		List<Order> list = iOrderService.list(lambdaQueryWrapper);
-		if (CollectionUtils.isNotEmpty(list)){
+		if (CollectionUtils.isNotEmpty(list)) {
 			for (Order orderMessage : list) {
-				Date newDate = DateUtils.addHours(orderMessage.getCheckDate(),48);
+				Date newDate = DateUtils.addHours(orderMessage.getCheckDate(), 48);
 				Calendar start = Calendar.getInstance();
 				start.setTime(newDate);
 				Calendar end = Calendar.getInstance();
 				end.setTime(new Date());
-				if (start.before(end)){
+				if (start.before(end)) {
 					orderMessage.setCheckFlag(2);
 					orderMessage.setCheckType("xsqh");
 					orderMessage.setPageLabel("销售订单(N)");

+ 2 - 6
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -361,12 +361,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		//获取订单费用明细数据
 		List<OrderFees> orderFeesList = orderFeesService.getOrderFees(order);
 		orderMessage.setOrderFeesList(orderFeesList);
-
-		Order temp = new Order();
-		temp.setId(order.getId());
-		temp.setCreateReceiving(1);
-		temp.setCreateReceivingTime(new Date());
-		baseMapper.updateById(temp);
 		return orderMessage;
 	}
 
@@ -500,7 +494,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		Order temp = new Order();
 		temp.setId(order.getId());
 		temp.setCreatePurchase(1);
+		temp.setCreatePurchaseUser(AuthUtil.getUserName());
 		temp.setCreatePurchaseTime(new Date());
+		temp.setOrderStatus("待采购");
 		baseMapper.updateById(temp);
 		return R.data(order);
 	}

+ 1 - 0
pom.xml

@@ -129,6 +129,7 @@
                     <configuration>
                         <fork>true</fork>
                         <finalName>${project.build.finalName}</finalName>
+                        <includeSystemScope>true</includeSystemScope>
                     </configuration>
                     <executions>
                         <execution>