Browse Source

2022年11月08 18:27

wangzhuo 3 years ago
parent
commit
1c459d002b

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

@@ -462,4 +462,23 @@ public class Delivery implements Serializable {
 	//包装要求
 	@TableField(exist = false)
 	private String packageRemarks;
+
+	/**
+	 * 确认到货时间
+	 */
+	@ApiModelProperty(value = "确认到货时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date arrivalTime;
+
+	/**
+	 * 确认到货开始时间
+	 */
+	@TableField(exist = false)
+	private String arrivalStartTime;
+
+	/**
+	 * 确认到货结束时间
+	 */
+	@TableField(exist = false)
+	private String arrivalEndTime;
 }

+ 3 - 3
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/FactoryDelivery.java

@@ -35,11 +35,11 @@ public class FactoryDelivery {
 	 * 所属公司
 	 */
 	@ExcelProperty("所属公司")
-	private String salesCompany;
+	private String salesCompanyName;
 	/**
-	 * 入库日期
+	 * 发货日期
 	 */
-	@ExcelProperty("入库日期")
+	@ExcelProperty("发货日期")
 	private Date businessDate;
 	/**
 	 * 入库数量

+ 73 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/excel/SaleDeliveryExcel.java

@@ -0,0 +1,73 @@
+package org.springblade.deliver.goods.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+/**
+ *  客户收货导出
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class SaleDeliveryExcel {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 销售单号
+	 */
+	@ExcelProperty(value = "销售单号")
+	private String orgOrderNo;
+
+	/**
+	 * 客户名称
+	 */
+	@ExcelProperty(value = "客户名称")
+	private String corpsName;
+
+	/**
+	 * 所属公司
+	 */
+	@ExcelProperty(value = "所属公司")
+	private String salesCompany;
+
+	/**
+	 * 出库日期
+	 */
+	@ExcelProperty(value = "出库日期")
+	private String businessDate;
+
+	/**
+	 * 出库数量
+	 */
+	@ExcelProperty(value = "出库数量")
+	private String totalQuantity;
+
+	/**
+	 * 制单人
+	 */
+	@ExcelProperty(value = "制单人")
+	private String createUserName;
+
+	/**
+	 * 制单日期
+	 */
+	@ExcelProperty(value = "制单日期")
+	private String createTime;
+
+	/**
+	 * 到货日期
+	 */
+	@ExcelProperty(value = "到货日期")
+	private String arrivalTime;
+
+	/**
+	 * 状态
+	 */
+	@ExcelProperty(value = "状态")
+	private String deliveryStatus;
+}

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

@@ -908,13 +908,6 @@ public class Order implements Serializable {
 	private Date deliverTime;
 
 	/**
-	 * 确认收货时间
-	 */
-	@ApiModelProperty(value = "确认收货时间")
-	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date receiptTime;
-
-	/**
 	 * 收货数量
 	 */
 	@ApiModelProperty(value = "收货数量")
@@ -1079,5 +1072,42 @@ public class Order implements Serializable {
 	@TableField(exist = false)
 	private String corpType;
 
+	/**
+	 * 确认收货时间
+	 */
+	@ApiModelProperty(value = "确认收货时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date receiptTime;
+
+	/**
+	 * 确认收货开始时间
+	 */
+	@TableField(exist = false)
+	private String receiptTimeStart;
+
+	/**
+	 * 确认收货结束时间
+	 */
+	@TableField(exist = false)
+	private String receiptTimeEnd;
+
+	/**
+	 * 确认到货时间
+	 */
+	@ApiModelProperty(value = "确认到货时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date arrivalTime;
+
+	/**
+	 * 确认到货开始时间
+	 */
+	@TableField(exist = false)
+	private Date arrivalTimeStart;
+
+	/**
+	 * 确认到货结束时间
+	 */
+	@TableField(exist = false)
+	private Date arrivalTimeEnd;
 
 }

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

@@ -88,7 +88,7 @@ public class SaleOrderExcel {
 	/**
 	 * 生产工厂
 	 */
-	@ExcelProperty(value = "产工厂")
+	@ExcelProperty(value = "产工厂")
 	private String productionPlantName;
 
 	/**
@@ -128,6 +128,18 @@ public class SaleOrderExcel {
 	private String specialCheckName;
 
 	/**
+	 * 确认收货日期
+	 */
+	@ExcelProperty(value = "确认收货日期")
+	private String receiptTime;
+
+	/**
+	 * 确认到货日期
+	 */
+	@ExcelProperty(value = "确认到货日期")
+	private String arrivalTime;
+
+	/**
 	 * 备注
 	 */
 	@ExcelProperty(value = "备注")

+ 18 - 0
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Settlement.java

@@ -27,6 +27,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -291,6 +292,23 @@ public class Settlement  implements Serializable {
 	@ApiModelProperty(value = "账户")
 	private String account;
 
+	/**
+	 *	单据完成日期
+	 */
+	@ApiModelProperty(value = "单据完成日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date completionTime;
 
+	/**
+	 *	单据完成开始日期
+	 */
+	@ApiModelProperty(value = "单据完成日期")
+	private String completionTimeStart;
+
+	/**
+	 *	单据完成结束日期
+	 */
+	@ApiModelProperty(value = "单据完成日期")
+	private String completionTimeEnd;
 
 }

+ 84 - 5
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java

@@ -25,24 +25,32 @@ 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.entity.StorageDesc;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IStorageClient;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.deliver.goods.entity.DeliveryItems;
 import org.springblade.deliver.goods.enums.DeliveryEnum;
 import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
+import org.springblade.deliver.goods.excel.SaleDeliveryExcel;
 import org.springblade.deliver.goods.service.IDeliveryFeesService;
 import org.springblade.deliver.goods.service.IDeliveryFilesService;
 import org.springblade.deliver.goods.service.IDeliveryItemsService;
+import org.springblade.purchase.sales.excel.SaleOrderExcel;
+import org.springblade.purchase.sales.vo.OrderVO;
+import org.springblade.purchase.sales.vo.SalesDetailsVo;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
@@ -113,6 +121,8 @@ public class DeliveryController extends BladeController {
 		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getCreateUser()),Delivery::getCreateUser,delivery.getCreateUser());//制单人
 		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getStorageId()),Delivery::getStorageId,delivery.getStorageId());//仓库
 		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getDeliveryStatus()),Delivery::getDeliveryStatus,delivery.getDeliveryStatus());//状态
+		lambdaQueryWrapper.ge(Func.isNotEmpty(delivery.getArrivalStartTime()),Delivery::getArrivalTime,delivery.getArrivalStartTime());//确认到货日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(delivery.getArrivalEndTime()),Delivery::getArrivalTime,delivery.getArrivalEndTime());//确认到货日期结束
 		lambdaQueryWrapper.orderByDesc(Delivery::getId);
 		IPage<Delivery> pages = deliveryService.page(Condition.getPage(query), lambdaQueryWrapper);
 		if (CollectionUtils.isNotEmpty(pages.getRecords())){
@@ -136,7 +146,7 @@ public class DeliveryController extends BladeController {
 
 				R<User> user1 = iUserClient.userInfoById(item.getUpdateUser());
 				if (user1.isSuccess() && user1.getData() != null){
-					item.setCreateUserName(user1.getData().getName());
+					item.setUpdateUserName(user1.getData().getName());
 				}
 				//仓库信息
 				StorageDesc storageDesc = iStorageClient.findById(item.getStorageId());
@@ -149,6 +159,75 @@ public class DeliveryController extends BladeController {
 		}
 		return R.data(pages);
 	}
+
+	/**
+	 * 客户收货导出
+	 */
+	@GetMapping("/saleDeliveryExport")
+	@ApiOperation(value = "客户收货导出", notes = "传入delivery")
+	public void saleOrderExport(Delivery delivery, HttpServletResponse response){
+		LambdaQueryWrapper<Delivery> lambdaQueryWrapper = new LambdaQueryWrapper();
+		lambdaQueryWrapper.eq(Delivery::getIsDeleted,0);
+		lambdaQueryWrapper.eq(Delivery::getTenantId,SecureUtil.getTenantId());
+		lambdaQueryWrapper.eq(Delivery::getBillType,OrderTypeEnum.SHIP.getType());
+		lambdaQueryWrapper.eq(Delivery::getTradeType,OrderTypeEnum.DOMESTIC.getType());
+		lambdaQueryWrapper.eq(delivery.getSalesCompany()!=null,Delivery::getSalesCompany,delivery.getSalesCompany());
+		lambdaQueryWrapper.like(StringUtils.isNotBlank(delivery.getPurchaseMode()),Delivery::getPurchaseMode,delivery.getPurchaseMode());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(delivery.getCreateStartTime()),Delivery::getCreateTime,delivery.getCreateStartTime());//制单日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(delivery.getCreateEndTime()),Delivery::getCreateTime,delivery.getCreateEndTime());//制单日期结束
+		lambdaQueryWrapper.ge(Func.isNotEmpty(delivery.getBusinessStartDate()),Delivery::getBusinessDate,delivery.getBusinessStartDate());//发货日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(delivery.getBusinessEndDate()),Delivery::getBusinessDate,delivery.getBusinessEndDate());//发货日期结束
+		lambdaQueryWrapper.like(Func.isNotEmpty(delivery.getOrgOrderNo()),Delivery::getOrgOrderNo,delivery.getOrgOrderNo());//销售订单号
+		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getCorpId()),Delivery::getCorpId,delivery.getCorpId());//客户
+		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getSalesCompany()),Delivery::getSalesCompany,delivery.getSalesCompany());//所属公司
+		lambdaQueryWrapper.like(Func.isNotEmpty(delivery.getArrivalAddress()),Delivery::getArrivalAddress,delivery.getArrivalAddress());//收货地址
+		lambdaQueryWrapper.like(Func.isNotEmpty(delivery.getArrivalContact()),Delivery::getArrivalContact,delivery.getArrivalContact());//收货人
+		lambdaQueryWrapper.like(Func.isNotEmpty(delivery.getArrivalTel()),Delivery::getArrivalTel,delivery.getArrivalTel());//收货电话
+		lambdaQueryWrapper.like(Func.isNotEmpty(delivery.getDeliveryRemarks()),Delivery::getDeliveryRemarks,delivery.getDeliveryRemarks());//备注
+		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getCreateUser()),Delivery::getCreateUser,delivery.getCreateUser());//制单人
+		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getStorageId()),Delivery::getStorageId,delivery.getStorageId());//仓库
+		lambdaQueryWrapper.eq(Func.isNotEmpty(delivery.getDeliveryStatus()),Delivery::getDeliveryStatus,delivery.getDeliveryStatus());//状态
+		lambdaQueryWrapper.ge(Func.isNotEmpty(delivery.getArrivalStartTime()),Delivery::getArrivalTime,delivery.getArrivalStartTime());//确认到货日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(delivery.getArrivalEndTime()),Delivery::getArrivalTime,delivery.getArrivalEndTime());//确认到货日期结束
+		lambdaQueryWrapper.orderByDesc(Delivery::getId);
+		List<Delivery> list = deliveryService.list(lambdaQueryWrapper);
+		if (CollectionUtils.isNotEmpty(list)){
+			list.forEach(item ->{
+				if (item.getCorpId() != null){
+					R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());
+					if (corpMessage.isSuccess() && corpMessage.getData() != null){
+						item.setCorpsName(corpMessage.getData().getCname());
+					}
+				}
+				if (item.getSalesCompany() != null){
+					R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getSalesCompany());
+					if (corpMessage.isSuccess() && corpMessage.getData() != null){
+						item.setSalesCompanyName(corpMessage.getData().getCname());
+					}
+				}
+				R<User> user = iUserClient.userInfoById(item.getCreateUser());
+				if (user.isSuccess() && user.getData() != null){
+					item.setCreateUserName(user.getData().getName());
+				}
+
+				R<User> user1 = iUserClient.userInfoById(item.getUpdateUser());
+				if (user1.isSuccess() && user1.getData() != null){
+					item.setUpdateUserName(user1.getData().getName());
+				}
+				//仓库信息
+				StorageDesc storageDesc = iStorageClient.findById(item.getStorageId());
+				if(storageDesc!=null)
+				{
+					item.setStorageName(storageDesc.getCname());
+				}
+
+			});
+		}
+
+		List<SaleDeliveryExcel> excelList = BeanUtil.copy(list, SaleDeliveryExcel.class);
+		ExcelUtil.export(response, "客户收货", "客户收货", excelList, SaleDeliveryExcel.class);
+
+	}
 	/**
 	 * 自定义分页 国内发货通知单
 	 */
@@ -165,7 +244,7 @@ public class DeliveryController extends BladeController {
 	}
 
 	/**
-	 * 确认发货通知单
+	 * 确认收货
 	 */
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
@@ -191,7 +270,7 @@ public class DeliveryController extends BladeController {
 		return deliveryService.submit(delivery);
 	}
 	/**
-	 * 国内贸易发货单确认收
+	 * 国内贸易客户收货-确认到
 	 */
 	@PostMapping("/takeDelivery")
 	@ApiOperationSupport(order = 4)
@@ -204,11 +283,11 @@ public class DeliveryController extends BladeController {
 		return deliveryService.revocation(delivery);
 	}
 	/**
-	 * 国内贸易发货单撤销确认
+	 * 国内贸易发货单撤销确认
 	 */
 	@PostMapping("/revocation")
 	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "国内贸易发货单撤销确认货,确认收货才能点", notes = "传入delivery")
+	@ApiOperation(value = "国内贸易发货单撤销确认货,确认收货才能点", notes = "传入delivery")
 	public R revocation(@Valid @RequestBody Delivery delivery) {
 		delivery.setBillType(OrderTypeEnum.SHIP.getType());
 		delivery.setTradeType(OrderTypeEnum.DOMESTIC.getType());

+ 69 - 64
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -450,8 +450,74 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			delivery.setDeliveryFilesList(deliveryFilesList);
 		}
 
+		return R.data(delivery);
+	}
+
+	@Override
+	@GlobalTransactional(timeoutMills = 12000000)
+	@Transactional(rollbackFor = Exception.class)
+	public R revocation(Delivery delivery) {
+		Long deliveryId = delivery.getId();
+		Delivery select = baseMapper.selectById(deliveryId);
+
+		String billStatus = null;//订单状态
+		if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.TAKE.getType())) {
+			billStatus = DeliveryStatusEnum.HAVWARRIVED.getType();
+		} else if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.REVOCATION.getType())) {
+			billStatus = DeliveryStatusEnum.DELIVER.getType();
+		}
+		if (delivery.getId() == null) {
+			R billNo = serialClient.getBillNo(delivery.getBillType(), delivery.getTradeType(), delivery.getBillType());
+			if (billNo.isSuccess() && billNo.getData() != null) {
+				delivery.setSysNo((String) billNo.getData());
+			} else {
+				return R.fail(500, "系统编号生成失败");
+			}
+			delivery.setCreateUser(SecureUtil.getUserId());
+			delivery.setCreateTime(new Date());
+			delivery.setTenantId(SecureUtil.getTenantId());
+			delivery.setDeliveryStatus(billStatus);
+			baseMapper.insert(delivery);
+		} else {
+			baseMapper.selectById(delivery.getId());//查询原始单据
+			if (delivery.getDeliveryType().equals(DeliveryEnum.TAKE.getType()) && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.REVOCATION.getType())) {//发货
+				throw new RuntimeException("已收货请勿重复收货");
+			} else if (delivery.getDeliveryType().equals(DeliveryEnum.REVOCATION.getType()) && !delivery.getDeliveryStatus().equals(DeliveryStatusEnum.HAVWARRIVED.getType()))//撤销发货
+			{
+				throw new RuntimeException("已撤销收货请勿重复撤销收货");
+			}
+			if (select.getDeliveryStatus() != null && select.getDeliveryStatus().equals(DeliveryStatusEnum.HAVWARRIVED.getType()) && "681169".equals(AuthUtil.getTenantId())){
+				throw new SecurityException("此单据已生成凭证,禁止撤销");
+			}
+			delivery.setDeliveryStatus(billStatus);
+			delivery.setUpdateUser(SecureUtil.getUserId());
+			delivery.setUpdateTime(new Date());
+			delivery.setArrivalTime(new Date());
+			baseMapper.updateById(delivery);
+
+			if (DeliveryEnum.TAKE.getType().equals(delivery.getDeliveryType())) {
+				Order order = new Order();
+				order.setId(delivery.getOrgId());
+				order.setOrderStatus("已完成");
+				order.setArrivalTime(delivery.getArrivalTime());
+				orderDescClient.updateOrder(order);
+			} else if (DeliveryEnum.REVOCATION.getType().equals(delivery.getDeliveryType())) {
+				Order order = new Order();
+				order.setId(delivery.getOrgId());
+				order.setOrderStatus("待发货");
+				order.setArrivalTime(null);
+				orderDescClient.updateOrder(order);
+			}
+		}
+		//保存发货明细信息
+		if (CollectionUtils.isNotEmpty(delivery.getDeliveryItemsList())) {
+			List<DeliveryItems> deliveryItemsList = deliveryItemsService.revocation(delivery.getId(), delivery, delivery.getDeliveryItemsList());
+			delivery.setDeliveryItemsList(deliveryItemsList);
+		}
+
 		//销售-发货-生成凭证, 如果销售订单号为空, 则代表是手动录入的发货单,不可以参与生成凭证
-		if ("681169".equals(AuthUtil.getTenantId()) && "GN".equals(delivery.getTradeType())) {
+		if ("681169".equals(AuthUtil.getTenantId()) && "GN".equals(delivery.getTradeType())
+			&& delivery.getDeliveryType().equals(DeliveryEnum.TAKE.getType())) {
 
 			//=============生成凭证所需信息==============
 			if (select == null) {
@@ -492,7 +558,6 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				wareHouse = storageDesc.getCname();
 			}
 
-
 			//计算明细的入库金额(明细的总采购价 和 总销售价)
 			LambdaQueryWrapper<DeliveryItems> deliveryItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			deliveryItemsLambdaQueryWrapper
@@ -500,7 +565,6 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				.eq(DeliveryItems::getIsDeleted, 0);
 			List<DeliveryItems> deliveryItems = deliveryItemsMapper.selectList(deliveryItemsLambdaQueryWrapper);
 			BigDecimal pricetotal1 = deliveryItems.stream().map(DeliveryItems::getPurchaseTotalAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal pricetotal2 = deliveryItems.stream().map(DeliveryItems::getDeliveryAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 
 			//获得商品品牌
 			R<GoodsDescVO> goods = goodsDescClient.selectGoodsMessage(deliveryItems.get(0).getItemId());
@@ -510,9 +574,6 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 			//明细总采购价
 			String purchaseTotalAmount = CollectionUtils.isEmpty(deliveryItems) ? "0" : pricetotal1.toString();
-			//明细总销售价
-			/*String deliveryAmount = CollectionUtils.isEmpty(deliveryItems) ? "0" : pricetotal2.toString();*/
-			/*String deliveryAmount = delivery.getDeliveryAmount().toString();*/
 
 			//=============生成凭证所需信息==============
 			String accountName = select.getBelongCompany();
@@ -529,62 +590,6 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				}
 			}
 		}
-
-		return R.data(delivery);
-	}
-
-	@Override
-	@GlobalTransactional(timeoutMills = 12000000)
-	@Transactional(rollbackFor = Exception.class)
-	public R revocation(Delivery delivery) {
-		String billStatus = null;//订单状态
-		if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.TAKE.getType())) {
-			billStatus = DeliveryStatusEnum.HAVWARRIVED.getType();
-		} else if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.REVOCATION.getType())) {
-			billStatus = DeliveryStatusEnum.DELIVER.getType();
-		}
-		if (delivery.getId() == null) {
-			R billNo = serialClient.getBillNo(delivery.getBillType(), delivery.getTradeType(), delivery.getBillType());
-			if (billNo.isSuccess() && billNo.getData() != null) {
-				delivery.setSysNo((String) billNo.getData());
-			} else {
-				return R.fail(500, "系统编号生成失败");
-			}
-			delivery.setCreateUser(SecureUtil.getUserId());
-			delivery.setCreateTime(new Date());
-			delivery.setTenantId(SecureUtil.getTenantId());
-			delivery.setDeliveryStatus(billStatus);
-			baseMapper.insert(delivery);
-		} else {
-			baseMapper.selectById(delivery.getId());//查询原始单据
-			if (delivery.getDeliveryType().equals(DeliveryEnum.TAKE.getType()) && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.REVOCATION.getType())) {//发货
-				throw new RuntimeException("已收货请勿重复收货");
-			} else if (delivery.getDeliveryType().equals(DeliveryEnum.REVOCATION.getType()) && !delivery.getDeliveryStatus().equals(DeliveryStatusEnum.HAVWARRIVED.getType()))//撤销发货
-			{
-				throw new RuntimeException("已撤销收货请勿重复撤销收货");
-			}
-			delivery.setDeliveryStatus(billStatus);
-			delivery.setUpdateUser(SecureUtil.getUserId());
-			delivery.setUpdateTime(new Date());
-			baseMapper.updateById(delivery);
-
-			if (DeliveryEnum.TAKE.getType().equals(delivery.getDeliveryType())) {
-				Order order = new Order();
-				order.setId(delivery.getOrgId());
-				order.setOrderStatus("已完成");
-				orderDescClient.updateOrder(order);
-			} else if (DeliveryEnum.REVOCATION.getType().equals(delivery.getDeliveryType())) {
-				Order order = new Order();
-				order.setId(delivery.getOrgId());
-				order.setOrderStatus("待发货");
-				orderDescClient.updateOrder(order);
-			}
-		}
-		//保存发货明细信息
-		if (CollectionUtils.isNotEmpty(delivery.getDeliveryItemsList())) {
-			List<DeliveryItems> deliveryItemsList = deliveryItemsService.revocation(delivery.getId(), delivery, delivery.getDeliveryItemsList());
-			delivery.setDeliveryItemsList(deliveryItemsList);
-		}
 		return R.data(delivery);
 	}
 
@@ -852,7 +857,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			orderDescClient.updateOrder(orderTemp);
 		}
 
-		//货凭证
+		//工厂发货凭证
 		if ("681169".equals(select.getTenantId())) {
 			String accountName = select.getBelongCompany();
 			if (!"青岛通用沃德轮胎有限公司".equals(accountName)) {
@@ -862,7 +867,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			if(jdTenant != null) {
 				//todo
 				try {
-					//测试账套-货生成凭证
+					//测试账套-工厂发货生成凭证
 					this.testTakeGoodsSaveVoucher(brand, select, accountName, corpName, corpNumber, wareHouse, acoount, orderNo);
 				} catch (Exception exception) {
 					throw new SecurityException(exception.getMessage());

+ 9 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java

@@ -156,6 +156,11 @@ public class OrderController extends BladeController {
 		lambdaQueryWrapper.like(Func.isNotEmpty(order.getPortOfDestination()), Order::getPortOfDestination, order.getPortOfDestination());//目的港
 		lambdaQueryWrapper.like(Func.isNotEmpty(order.getPlannedDeliveryStart()), Order::getPlannedDeliveryDate, order.getPlannedDeliveryStart());//计划交货开始
 		lambdaQueryWrapper.like(Func.isNotEmpty(order.getPlannedDeliveryEnd()), Order::getPlannedDeliveryDate, order.getPlannedDeliveryEnd());//计划交货结束
+		lambdaQueryWrapper.ge(Func.isNotEmpty(order.getReceiptTimeStart()), Order::getReceiptTime, order.getReceiptTimeStart());//确认收货日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(order.getReceiptTimeEnd()), Order::getReceiptTime, order.getReceiptTimeEnd());//确认收货日期结束
+		lambdaQueryWrapper.ge(Func.isNotEmpty(order.getArrivalTimeStart()), Order::getArrivalTime, order.getArrivalTimeStart());//确认到货日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(order.getArrivalTimeEnd()), Order::getArrivalTime, order.getArrivalTimeEnd());//确认到货日期结束
+
 		lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderRemark()), Order::getOrderRemark, order.getOrderRemark());//备注
 		if (order.getGathering() != null && order.getGathering() == 0){
 			lambdaQueryWrapper.eq(Order::getBalanceAmount,BigDecimal.ZERO);
@@ -261,6 +266,10 @@ public class OrderController extends BladeController {
 		lambdaQueryWrapper.le(Func.isNotEmpty(order.getDateValidityEnd()), Order::getDateValidity, order.getDateValidityEnd());//有效日期结束
 		lambdaQueryWrapper.ge(Func.isNotEmpty(order.getOrderStartDate()), Order::getBusinesDate, order.getOrderStartDate());//订单日期开始
 		lambdaQueryWrapper.le(Func.isNotEmpty(order.getOrderEndDate()), Order::getBusinesDate, order.getOrderEndDate());//订单日期结束
+		lambdaQueryWrapper.ge(Func.isNotEmpty(order.getReceiptTimeStart()), Order::getReceiptTime, order.getReceiptTimeStart());//确认收货日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(order.getReceiptTimeEnd()), Order::getReceiptTime, order.getReceiptTimeEnd());//确认收货日期结束
+		lambdaQueryWrapper.ge(Func.isNotEmpty(order.getArrivalTimeStart()), Order::getArrivalTime, order.getArrivalTimeStart());//确认到货日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(order.getArrivalTimeEnd()), Order::getArrivalTime, order.getArrivalTimeEnd());//确认到货日期结束
 
 		if (order.getGathering() != null && order.getGathering() == 0){
 			lambdaQueryWrapper.eq(Order::getBalanceAmount,BigDecimal.ZERO);

+ 49 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java

@@ -32,17 +32,21 @@ import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IFeesDescClient;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.deliver.goods.entity.Delivery;
+import org.springblade.deliver.goods.excel.SaleDeliveryExcel;
 import org.springblade.finance.dto.ApplyDTO;
 import org.springblade.finance.dto.SettlementDTO;
 import org.springblade.finance.entity.InvoiceItem;
+import org.springblade.finance.excel.ExpenseExcel;
 import org.springblade.finance.service.IAccService;
 import org.springblade.finance.service.IInvoiceItemService;
 import org.springblade.finance.service.IItemsService;
@@ -58,6 +62,7 @@ import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
@@ -184,6 +189,8 @@ public class SettlementController extends BladeController {
 		settlementLambdaQueryWrapper.eq(StringUtils.isNotBlank(settlement.getFinanceStatus()), Settlement::getFinanceStatus, settlement.getFinanceStatus());
 		settlementLambdaQueryWrapper.eq(StringUtils.isNotBlank(settlement.getCheckStatus()), Settlement::getCheckStatus, settlement.getCheckStatus());
 		settlementLambdaQueryWrapper.eq(StringUtils.isNotBlank(settlement.getBillType()), Settlement::getBillType, settlement.getBillType());
+		settlementLambdaQueryWrapper.between(StringUtils.isNotBlank(settlement.getCompletionTimeStart()) && StringUtils.isNotBlank(settlement.getCompletionTimeEnd()),
+			Settlement::getCompletionTime, settlement.getCompletionTimeStart(), settlement.getCompletionTimeEnd());//单据完成日期
 		settlementLambdaQueryWrapper.eq(Settlement::getTenantId, AuthUtil.getTenantId());
 		settlementLambdaQueryWrapper.eq(Settlement::getIsDeleted, 0);
 		settlementLambdaQueryWrapper.orderByDesc(Settlement::getCreateTime);
@@ -201,6 +208,48 @@ public class SettlementController extends BladeController {
 	}
 
 	/**
+	 * 付费收费导出
+	 */
+	@GetMapping("/expenseExport")
+	@ApiOperation(value = "付费收费导出", notes = "传入settlement")
+	public void expenseExport(Settlement settlement, HttpServletResponse response){
+		LambdaQueryWrapper<Settlement> settlementLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		settlementLambdaQueryWrapper.between(StringUtils.isNotBlank(settlement.getSettlementStartDate()) && StringUtils.isNotBlank(settlement.getSettlementEndDate()), Settlement::getSettlementDate, settlement.getSettlementStartDate(), settlement.getSettlementEndDate());
+		settlementLambdaQueryWrapper.between(StringUtils.isNotBlank(settlement.getCreateStartDate()) && StringUtils.isNotBlank(settlement.getCreateEndDate()), Settlement::getCreateTime, settlement.getCreateStartDate(), settlement.getCreateEndDate());
+		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getSrcOrderno()), Settlement::getSrcOrderno, settlement.getSrcOrderno());
+		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getSysNo()), Settlement::getSysNo, settlement.getSysNo());
+		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getBillNo()), Settlement::getBillNo, settlement.getBillNo());
+		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getAccount()), Settlement::getAccount, settlement.getAccount());
+		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getRemark()), Settlement::getRemark, settlement.getRemark());
+		settlementLambdaQueryWrapper.like(StringUtils.isNotBlank(settlement.getAccountName()), Settlement::getAccountName, settlement.getAccountName());
+		settlementLambdaQueryWrapper.like(settlement.getCorpId() != null, Settlement::getCorpId, settlement.getCorpId());
+		settlementLambdaQueryWrapper.eq(StringUtils.isNotBlank(settlement.getFinanceStatus()), Settlement::getFinanceStatus, settlement.getFinanceStatus());
+		settlementLambdaQueryWrapper.eq(StringUtils.isNotBlank(settlement.getCheckStatus()), Settlement::getCheckStatus, settlement.getCheckStatus());
+		settlementLambdaQueryWrapper.eq(StringUtils.isNotBlank(settlement.getBillType()), Settlement::getBillType, settlement.getBillType());
+		settlementLambdaQueryWrapper.between(StringUtils.isNotBlank(settlement.getCompletionTimeStart()) && StringUtils.isNotBlank(settlement.getCompletionTimeEnd()),
+			Settlement::getCompletionTime, settlement.getCompletionTimeStart(), settlement.getCompletionTimeEnd());//单据完成日期
+		settlementLambdaQueryWrapper.eq(Settlement::getTenantId, AuthUtil.getTenantId());
+		settlementLambdaQueryWrapper.eq(Settlement::getIsDeleted, 0);
+		settlementLambdaQueryWrapper.orderByDesc(Settlement::getCreateTime);
+		List<Settlement> list = settlementService.list(settlementLambdaQueryWrapper);
+		if (CollectionUtils.isNotEmpty(list)) {
+			list.forEach(e -> {
+				R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(e.getCorpId());
+				if (corpMessage.getData() != null) {
+					e.setCorpName(corpMessage.getData().getCname());
+				}
+			});
+		}
+
+		List<ExpenseExcel> excelList = BeanUtil.copy(list, ExpenseExcel.class);
+		if(settlement.getBillType().equals("付费")){
+			ExcelUtil.export(response, "付费结算", "付费结算", excelList, ExpenseExcel.class);
+		}else if (settlement.getBillType().equals("收费")){
+			ExcelUtil.export(response, "收费结算", "收费结算", excelList, ExpenseExcel.class);
+		}
+	}
+
+	/**
 	 * 自定义分页 结算表
 	 */
 	@GetMapping("/page")

+ 81 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/excel/ExpenseExcel.java

@@ -0,0 +1,81 @@
+package org.springblade.finance.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 付费收费导出
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ExpenseExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 单据状态
+	 */
+	@ExcelProperty(value = "单据状态")
+	private String financeStatus;
+
+	/**
+	 * 合同号
+	 */
+	@ExcelProperty(value = "合同号")
+	private String srcOrderno;
+
+	/**
+	 * 往来单位
+	 */
+	@ExcelProperty(value = "往来单位")
+	private String corpName;
+
+	/**
+	 * 人民币金额
+	 */
+	@ExcelProperty(value = "人民币金额")
+	private String amount;
+
+	/**
+	 * 结算日期
+	 */
+	@ExcelProperty(value = "结算日期")
+	private String settlementDate;
+
+	/**
+	 * 银行名称
+	 */
+	@ExcelProperty(value = "银行名称")
+	private String accountBank;
+
+	/**
+	 * 银行户头
+	 */
+	@ExcelProperty(value = "银行户头")
+	private String accountName;
+
+	/**
+	 * 银行账号
+	 */
+	@ExcelProperty(value = "银行账号")
+	private String accountNo;
+
+	/**
+	 * 创建人
+	 */
+	@ExcelProperty(value = "创建人")
+	private String createUserName;
+
+	/**
+	 * 单据完成日期
+	 */
+	@ExcelProperty(value = "单据完成日期")
+	private String completionTime;
+}

+ 2 - 1
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -308,10 +308,10 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			model.setSettlementDate(new Date());
 			model.setCreateUser(AuthUtil.getUserId());
 			model.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+			model.setCompletionTime(new Date());
 			baseMapper.insert(model);
 			if (CollectionUtils.isNotEmpty(itemsList)) {
 				itemsList.forEach(e -> {
-
 					e.setPid(model.getId());
 					e.setTenantId(AuthUtil.getTenantId());
 					e.setCreateTime(new Date());
@@ -329,6 +329,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			model.setUpdateUser(AuthUtil.getUserId());
 			/*model.setSettlementDate(new Date());*/
 			model.setUpdateUserName(AuthUtil.getUser().getRoleName());
+			model.setCompletionTime(new Date());
 			baseMapper.updateById(model);
 
 			if (CollectionUtils.isNotEmpty(itemsList)) {