Sfoglia il codice sorgente

发货删除限制、订单删除限制

lazhaoqian 4 anni fa
parent
commit
8022af90d4
12 ha cambiato i file con 268 aggiunte e 90 eliminazioni
  1. 32 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/enums/DeliveryStatusEnum.java
  2. 6 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java
  3. 14 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryFeesController.java
  4. 15 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryFilesController.java
  5. 15 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryItemsController.java
  6. 6 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/ExportDeliveryController.java
  7. 6 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/ImportDeliveryController.java
  8. 7 6
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  9. 43 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java
  10. 39 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/entrance/EntranceOrderController.java
  11. 25 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java
  12. 60 75
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

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

@@ -0,0 +1,32 @@
+package org.springblade.deliver.goods.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+@Getter
+@AllArgsConstructor
+public enum DeliveryStatusEnum {
+	/**
+	 * 发货
+	 */
+	DELIVER("已发货"),
+
+	/**
+	 * 撤销发货
+	 */
+	REPEAL("录入"),
+
+	;
+	private final String type;
+
+	public static DeliveryStatusEnum fromType(String delivery) {
+		for (DeliveryStatusEnum type : DeliveryStatusEnum.values()) {
+			if (Objects.equals(type.getType(), delivery)) {
+				return type;
+			}
+		}
+		throw new IllegalArgumentException("order status not exist");
+	}
+}

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

@@ -35,6 +35,7 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.deliver.goods.enums.DeliveryEnum;
+import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
@@ -160,7 +161,11 @@ public class DeliveryController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入delivery")
 	public R update(@Valid @RequestBody Delivery delivery) {
 		if (delivery.getId() == null){
-			return R.fail(500,"请选择要删除的数据");
+			throw  new SecurityException("请选择要删除的数据");
+		}
+		Delivery deliveryMessage = deliveryService.getById(delivery.getId());
+		if (StringUtils.isNotBlank(deliveryMessage.getDeliveryStatus()) && deliveryMessage.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())){
+			throw  new SecurityException("已发货不能删除");
 		}
 		delivery.setIsDeleted(1);
 		return R.status(deliveryService.updateById(delivery));

+ 14 - 1
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryFeesController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.deliver.goods.controller;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -27,6 +28,9 @@ 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.deliver.goods.entity.Delivery;
+import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
+import org.springblade.deliver.goods.service.IDeliveryService;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.deliver.goods.entity.DeliveryFees;
@@ -47,6 +51,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 public class DeliveryFeesController extends BladeController {
 
 	private final IDeliveryFeesService deliveryFeesService;
+	private final IDeliveryService deliveryService;
 
 	/**
 	 * 详情
@@ -99,7 +104,15 @@ public class DeliveryFeesController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入deliveryFees")
 	public R update(@Valid @RequestBody DeliveryFees deliveryFees) {
 		if (deliveryFees.getId() == null){
-			return R.fail(500,"请选择要删除的数据");
+			throw  new SecurityException("请选择要删除的数据");
+		}
+		DeliveryFees deliveryFeesMessage = deliveryFeesService.getById(deliveryFees.getId());
+		if (deliveryFeesMessage == null){
+			throw  new SecurityException("未找到费用明细");
+		}
+		Delivery deliveryMessage = deliveryService.getById(deliveryFeesMessage.getPid());
+		if (StringUtils.isNotBlank(deliveryMessage.getDeliveryStatus()) && deliveryMessage.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())){
+			throw  new SecurityException("明细已确认不能删除");
 		}
 		deliveryFees.setIsDeleted(1);
 		return R.status(deliveryFeesService.updateById(deliveryFees));

+ 15 - 1
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryFilesController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.deliver.goods.controller;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -27,6 +28,10 @@ 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.deliver.goods.entity.Delivery;
+import org.springblade.deliver.goods.entity.DeliveryFees;
+import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
+import org.springblade.deliver.goods.service.IDeliveryService;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.deliver.goods.entity.DeliveryFiles;
@@ -47,6 +52,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 public class DeliveryFilesController extends BladeController {
 
 	private final IDeliveryFilesService deliveryFilesService;
+	private final IDeliveryService deliveryService;
 
 	/**
 	 * 详情
@@ -99,7 +105,15 @@ public class DeliveryFilesController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入deliveryFiles")
 	public R update(@Valid @RequestBody DeliveryFiles deliveryFiles) {
 		if (deliveryFiles.getId() == null){
-			return R.fail(500,"请选择要删除的数据");
+			throw  new  SecurityException("请选择要删除的数据");
+		}
+		DeliveryFiles deliveryFilesMessage = deliveryFilesService.getById(deliveryFiles.getId());
+		if (deliveryFilesMessage == null){
+			throw  new SecurityException("未找到费用明细");
+		}
+		Delivery deliveryMessage = deliveryService.getById(deliveryFilesMessage.getPid());
+		if (StringUtils.isNotBlank(deliveryMessage.getDeliveryStatus()) && deliveryMessage.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())){
+			throw  new SecurityException("明细已确认不能删除");
 		}
 		deliveryFiles.setIsDeleted(1);
 		return R.status(deliveryFilesService.updateById(deliveryFiles));

+ 15 - 1
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryItemsController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.deliver.goods.controller;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -28,6 +29,10 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.deliver.goods.entity.Delivery;
+import org.springblade.deliver.goods.entity.DeliveryFees;
+import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
+import org.springblade.deliver.goods.service.IDeliveryService;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.deliver.goods.entity.DeliveryItems;
@@ -48,6 +53,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 public class DeliveryItemsController extends BladeController {
 
 	private final IDeliveryItemsService deliveryItemsService;
+	private final IDeliveryService deliveryService;
 
 	/**
 	 * 详情
@@ -104,7 +110,15 @@ public class DeliveryItemsController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入deliveryItems")
 	public R update(@Valid @RequestBody DeliveryItems deliveryItems) {
 		if (deliveryItems.getId() == null){
-			return R.fail(500,"请选择要删除的数据");
+			throw new  SecurityException("请选择要删除的数据");
+		}
+		DeliveryItems deliveryItemsMessage = deliveryItemsService.getById(deliveryItems.getId());
+		if (deliveryItemsMessage == null){
+			throw  new SecurityException("未找到费用明细");
+		}
+		Delivery deliveryMessage = deliveryService.getById(deliveryItemsMessage.getPid());
+		if (StringUtils.isNotBlank(deliveryMessage.getDeliveryStatus()) && deliveryMessage.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())){
+			throw  new SecurityException("明细已确认不能删除");
 		}
 		deliveryItems.setIsDeleted(1);
 		return R.status(deliveryItemsService.updateById(deliveryItems));

+ 6 - 1
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/ExportDeliveryController.java

@@ -36,6 +36,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.deliver.goods.entity.Delivery;
 import org.springblade.deliver.goods.enums.DeliveryEnum;
+import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
 import org.springblade.deliver.goods.service.IDeliveryService;
 import org.springblade.deliver.goods.vo.DeliveryVO;
 import org.springblade.system.user.entity.User;
@@ -131,7 +132,11 @@ public class ExportDeliveryController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入delivery")
 	public R update(@Valid @RequestBody Delivery delivery) {
 		if (delivery.getId() == null){
-			return R.fail(500,"请选择要删除的数据");
+			throw new SecurityException("请选择要删除的数据");
+		}
+		Delivery deliveryMessage = deliveryService.getById(delivery.getId());
+		if (StringUtils.isNotBlank(deliveryMessage.getDeliveryStatus()) && deliveryMessage.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())){
+			throw  new SecurityException("已发货不能删除");
 		}
 		delivery.setIsDeleted(1);
 		return R.status(deliveryService.updateById(delivery));

+ 6 - 1
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/ImportDeliveryController.java

@@ -37,6 +37,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.deliver.goods.entity.Delivery;
 import org.springblade.deliver.goods.enums.DeliveryEnum;
+import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
 import org.springblade.deliver.goods.service.IDeliveryService;
 import org.springblade.deliver.goods.vo.DeliveryVO;
 import org.springblade.stock.feign.IStockGoodsClient;
@@ -135,7 +136,11 @@ public class ImportDeliveryController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入delivery")
 	public R update(@Valid @RequestBody Delivery delivery) {
 		if (delivery.getId() == null){
-			return R.fail(500,"请选择要删除的数据");
+			throw new SecurityException("请选择要删除的数据");
+		}
+		Delivery deliveryMessage = deliveryService.getById(delivery.getId());
+		if (StringUtils.isNotBlank(deliveryMessage.getDeliveryStatus()) && deliveryMessage.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())){
+			throw  new SecurityException("已发货不能删除");
 		}
 		delivery.setIsDeleted(1);
 		return R.status(deliveryService.updateById(delivery));

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

@@ -35,6 +35,7 @@ import org.springblade.deliver.goods.entity.DeliveryFees;
 import org.springblade.deliver.goods.entity.DeliveryFiles;
 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.mapper.DeliveryItemsMapper;
 import org.springblade.deliver.goods.service.IDeliveryItemsService;
 import org.springblade.deliver.goods.vo.DeliveryVO;
@@ -99,12 +100,12 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			delivery.setCreateUser(SecureUtil.getUserId());
 			delivery.setCreateTime(new Date());
 			delivery.setTenantId(SecureUtil.getTenantId());
-			delivery.setDeliveryStatus("录入");
+			delivery.setDeliveryStatus(DeliveryStatusEnum.REPEAL.getType());
 			baseMapper.insert(delivery);
 		}else {
 			delivery.setUpdateUser(SecureUtil.getUserId());
 			delivery.setUpdateTime(new Date());
-			delivery.setDeliveryStatus("录入");
+			delivery.setDeliveryStatus(DeliveryStatusEnum.REPEAL.getType());
 			baseMapper.updateById(delivery);
 		}
 		//保存发货明细信息
@@ -178,9 +179,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	public R submit(Delivery delivery) {
 		String billStatus = null;//订单状态
 		if (delivery.getDeliveryType() != null && delivery.getDeliveryType() == DeliveryEnum.DELIVER.getType()){
-			billStatus = "已发货";
+			billStatus = DeliveryStatusEnum.DELIVER.getType();
 		}else if (delivery.getDeliveryType() != null && delivery.getDeliveryType() == DeliveryEnum.REPEAL.getType()){
-			billStatus = "录入";
+			billStatus = DeliveryStatusEnum.REPEAL.getType();
 		}
 		if (delivery.getId() == null){
 			R billNo = serialClient.getBillNo(delivery.getBillType(),delivery.getTradeType());
@@ -196,9 +197,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			baseMapper.insert(delivery);
 		}else {
 			Delivery deliverys = baseMapper.selectById(delivery.getId());//查询原始单据
-			if (delivery.getDeliveryType() == DeliveryEnum.DELIVER.getType() && delivery.getDeliveryStatus().equals("已发货")){//发货
+			if (delivery.getDeliveryType() == DeliveryEnum.DELIVER.getType() && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())){//发货
 				throw  new RuntimeException("已发货请勿重复发货");
-			}else if (delivery.getDeliveryType() == DeliveryEnum.REPEAL.getType() && !delivery.getDeliveryStatus().equals("已发货"))//撤销发货
+			}else if (delivery.getDeliveryType() == DeliveryEnum.REPEAL.getType() && !delivery.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType()))//撤销发货
 			{
 				throw  new RuntimeException("已撤销发货请勿重复撤销发货");
 			}

+ 43 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java

@@ -16,7 +16,9 @@
  */
 package org.springblade.purchase.sales.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.google.protobuf.ServiceException;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -40,6 +42,8 @@ import org.springblade.purchase.sales.vo.OrderVO;
 import org.springblade.purchase.sales.service.IOrderService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 国内销售或采购订单表 控制器
  *
@@ -115,8 +119,30 @@ public class OrderController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入order")
 	public R update(@Valid @RequestBody Order order) {
 		if (order.getId() == null){
-			return R.fail(500,"请选择要删除的数据");
+			throw  new SecurityException("请选择要删除的数据");
+		}
+		//先查订单信息
+		Order orderMessage = orderService.getById(order.getId());
+		//是否生成采购单
+		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Order::getSysNo,orderMessage.getSysNo());
+		lambdaQueryWrapper.eq(Order::getTradeType,OrderTypeEnum.DOMESTIC.getType());
+		lambdaQueryWrapper.eq(Order::getBillType,OrderTypeEnum.PURCHASE.getType());
+		List<Order> orderList = orderService.list(lambdaQueryWrapper);
+		if (CollectionUtils.isNotEmpty(orderList)){
+			throw  new SecurityException("销售单已生成采购单不能删除");
+		}
+		//是否生成发货单
+		LambdaQueryWrapper<Order> lambdaQuery = new LambdaQueryWrapper<>();
+		lambdaQuery.eq(Order::getSysNo,orderMessage.getSysNo());
+		lambdaQuery.eq(Order::getTradeType,OrderTypeEnum.DOMESTIC.getType());
+		lambdaQuery.eq(Order::getBillType,OrderTypeEnum.SHIP.getType());
+		List<Order> list = orderService.list(lambdaQuery);
+		if (CollectionUtils.isNotEmpty(list)){
+			throw  new SecurityException("销售单已生成发货单不能删除");
 		}
+		//是否生成账单
+		LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
 		order.setIsDeleted(1);
 		return R.status(orderService.updateById(order));
 	}
@@ -186,4 +212,20 @@ public class OrderController extends BladeController {
 			tradeType,billType,tenantId);
 		return R.data(pages);
 	}
+	/**
+	 * 国内销售单生成采购单
+	 * @param order
+	 * @return
+	 */
+	@PostMapping("/createMarket")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "国内销售单生成采购单")
+	public R createMarket(@Valid @RequestBody Order order) {
+		if (order.getId() == null){
+			return R.fail(500,"参数缺失");
+		}
+		order.setBillType(OrderTypeEnum.PURCHASE.getType());
+		order.setTradeType(OrderTypeEnum.DOMESTIC.getType());
+		return R.data(orderService.createMarket(order));
+	}
 }

+ 39 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/entrance/EntranceOrderController.java

@@ -103,8 +103,30 @@ public class EntranceOrderController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入order")
 	public R update(@Valid @RequestBody Order order) {
 		if (order.getId() == null){
-			return R.fail(500,"请选择要删除的数据");
+			throw  new SecurityException("请选择要删除的数据");
 		}
+		//先查订单信息
+		Order orderMessage = orderService.getById(order.getId());
+		//是否生成采购单
+		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Order::getSysNo,orderMessage.getSysNo());
+		lambdaQueryWrapper.eq(Order::getTradeType,OrderTypeEnum.IMPORT.getType());
+		lambdaQueryWrapper.eq(Order::getBillType,OrderTypeEnum.PURCHASE.getType());
+		List<Order> orderList = orderService.list(lambdaQueryWrapper);
+		if (CollectionUtils.isNotEmpty(orderList)){
+			throw  new SecurityException("销售单已生成采购单不能删除");
+		}
+		//是否生成发货单
+		LambdaQueryWrapper<Order> lambdaQuery = new LambdaQueryWrapper<>();
+		lambdaQuery.eq(Order::getSysNo,orderMessage.getSysNo());
+		lambdaQuery.eq(Order::getTradeType,OrderTypeEnum.DOMESTIC.getType());
+		lambdaQuery.eq(Order::getBillType,OrderTypeEnum.SHIP.getType());
+		List<Order> list = orderService.list(lambdaQuery);
+		if (CollectionUtils.isNotEmpty(list)){
+			throw  new SecurityException("销售单已生成发货单不能删除");
+		}
+		//是否生成账单
+		LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
 		order.setIsDeleted(1);
 		return R.status(orderService.updateById(order));
 	}
@@ -202,6 +224,22 @@ public class EntranceOrderController extends BladeController {
 			tradeType,billType,tenantId);
 		return R.data(pages);
 	}
+	/**
+	 * 进口销售单生成采购单
+	 * @param order
+	 * @return
+	 */
+	@PostMapping("/createMarket")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "进口销售单生成采购单")
+	public R createMarket(@Valid @RequestBody Order order) {
+		if (order.getId() == null){
+			return R.fail(500,"参数缺失");
+		}
+		order.setBillType(OrderTypeEnum.PURCHASE.getType());
+		order.setTradeType(OrderTypeEnum.IMPORT.getType());
+		return R.data(orderService.createMarket(order));
+	}
 
 
 }

+ 25 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java

@@ -1,5 +1,6 @@
 package org.springblade.purchase.sales.export;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@@ -22,6 +23,7 @@ import org.springblade.purchase.sales.vo.OrderVO;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 出口销售单控制器
@@ -92,8 +94,30 @@ public class ExportOrderController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入order")
 	public R update(@Valid @RequestBody Order order) {
 		if (order.getId() == null){
-			return R.fail(500,"请选择要删除的数据");
+			throw  new SecurityException("请选择要删除的数据");
 		}
+		//先查订单信息
+		Order orderMessage = orderService.getById(order.getId());
+		//是否生成采购单
+		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Order::getSysNo,orderMessage.getSysNo());
+		lambdaQueryWrapper.eq(Order::getTradeType,OrderTypeEnum.EXPORT.getType());
+		lambdaQueryWrapper.eq(Order::getBillType,OrderTypeEnum.PURCHASE.getType());
+		List<Order> orderList = orderService.list(lambdaQueryWrapper);
+		if (CollectionUtils.isNotEmpty(orderList)){
+			throw  new SecurityException("销售单已生成采购单不能删除");
+		}
+		//是否生成发货单
+		LambdaQueryWrapper<Order> lambdaQuery = new LambdaQueryWrapper<>();
+		lambdaQuery.eq(Order::getSysNo,orderMessage.getSysNo());
+		lambdaQuery.eq(Order::getTradeType,OrderTypeEnum.DOMESTIC.getType());
+		lambdaQuery.eq(Order::getBillType,OrderTypeEnum.SHIP.getType());
+		List<Order> list = orderService.list(lambdaQuery);
+		if (CollectionUtils.isNotEmpty(list)){
+			throw  new SecurityException("销售单已生成发货单不能删除");
+		}
+		//是否生成账单
+		LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
 		order.setIsDeleted(1);
 		return R.status(orderService.updateById(order));
 	}

+ 60 - 75
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.purchase.sales.service.impl;
 
+import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.google.protobuf.ServiceException;
@@ -285,83 +286,67 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Override
 	@Transactional
 	public R createMarket(Order order) {
-		Order selectById = baseMapper.selectById(order.getId());
-		if (selectById == null){
-			throw  new RuntimeException("找不到单据信息");
-		}
-		//保存订单主表信息
-		//获取系统编号
-		R billNo = serialClient.getBillNo(order.getBillType(),order.getTradeType());
-		if (billNo.getCode() != 200){
-			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-			throw  new RuntimeException("生成系统编号失败");
-		}
-		selectById.setOrgOrderNo(selectById.getOrderNo());
-		R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(selectById.getCorpId());
-		if (corpMessage.isSuccess()){
-			R clientBillNo = serialClient.getBillNo(corpMessage.getData().getCode(),order.getTradeType());
-			if (!clientBillNo.isSuccess()){
-				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-				return R.fail(500,"生成订单编号失败");
-			}
-			selectById.setOrderNo((String) clientBillNo.getData());
-		}
-		selectById.setSrcId(order.getId());
-		selectById.setSrcOrderNo(selectById.getSysNo());
-		selectById.setId(null);
-		selectById.setSysNo((String) billNo.getData());
-		selectById.setTenantId(SecureUtil.getTenantId());
-		selectById.setCreateTime(new Date());
-		selectById.setCreateUser(SecureUtil.getUserId());
-		selectById.setUpdateUser(null);
-		selectById.setUpdateTime(null);
-		selectById.setOrderStatus("录入");
-		selectById.setIfEnquiry(null);
-		selectById.setIfShipping(null);
-		selectById.setIfInvoice("否");
-		selectById.setBillType(order.getBillType());
-		selectById.setTradeType(order.getTradeType());
-		if (order.getBusinesDate() == null){
-			selectById.setBusinesDate(new Date());
-		}
-		baseMapper.insert(selectById);
-		//保存订单费用明细
-		List<OrderFees> orderFeesList = orderFeesService.list(new QueryWrapper<OrderFees>().eq("pid", order.getId()).eq("is_deleted", 0));
-		if (CollectionUtils.isNotEmpty(orderFeesList)){
-			orderFeesList.stream().forEach(fee ->{
-				fee.setPid(selectById.getId());
-				fee.setId(null);
-				fee.setCreateTime(new Date());
-				fee.setCreateUser(SecureUtil.getUserId());
-				fee.setUpdateTime(null);
-				fee.setUpdateUser(null);
-				orderFeesService.save(fee);
-			});
-		}
-		//保存订单明细
-		List<OrderItems> orderItemsList = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", order.getId()).eq("is_deleted", 0));
+		//先获取订单明细有多少个供应商
+		List<OrderItems> orderItemsList = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", order.getId()).eq("is_deleted", 0).groupBy("corp_id"));
 		if (CollectionUtils.isNotEmpty(orderItemsList)){
 			orderItemsList.stream().forEach(item ->{
-				item.setPid(selectById.getId());
-				item.setId(null);
-				item.setCreateTime(new Date());
-				item.setCreateUser(SecureUtil.getUserId());
-				item.setUpdateTime(null);
-				item.setUpdateUser(null);
-				orderItemsService.save(item);
-			});
-		}
-		//保存订单文件信息
-		List<OrderFiles> orderFilesList = orderFilesService.list(new QueryWrapper<OrderFiles>().eq("pid", order.getId()).eq("is_deleted", 0));
-		if (CollectionUtils.isNotEmpty(orderFilesList)){
-			orderFilesList.stream().forEach(file ->{
-				file.setPid(selectById.getId());
-				file.setId(null);
-				file.setCreateTime(new Date());
-				file.setCreateUser(SecureUtil.getUserId());
-				file.setUpdateTime(null);
-				file.setUpdateUser(null);
-				orderFilesService.save(file);
+				Order selectById = baseMapper.selectById(order.getId());
+				if (selectById == null){
+					throw  new RuntimeException("找不到单据信息");
+				}
+				//保存订单主表信息
+				//获取系统编号
+				R billNo = serialClient.getBillNo(order.getBillType(),order.getTradeType());
+				if (billNo.getCode() != 200){
+					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+					throw  new RuntimeException("生成系统编号失败");
+				}
+				selectById.setOrgOrderNo(selectById.getOrderNo());
+				R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());
+				if (corpMessage.isSuccess()){
+					R clientBillNo = serialClient.getBillNo(corpMessage.getData().getCode(),order.getTradeType());
+					if (!clientBillNo.isSuccess()){
+						TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+						throw  new RuntimeException("生成订单编号失败");
+					}
+					if (!order.getBillType().equals(OrderTypeEnum.IMPORT.getType())){   //进口的orgOrderNo 存的是采购订单号  出口国内存的是本身的订单号码
+						order.setOrgOrderNo((String) clientBillNo.getData());
+					}
+				}
+				selectById.setSrcId(order.getId());
+				selectById.setCorpId(item.getCorpId());
+				selectById.setSrcOrderNo(selectById.getSysNo());
+				selectById.setId(null);
+				selectById.setSysNo((String) billNo.getData());
+				selectById.setTenantId(SecureUtil.getTenantId());
+				selectById.setCreateTime(new Date());
+				selectById.setCreateUser(SecureUtil.getUserId());
+				selectById.setUpdateUser(null);
+				selectById.setUpdateTime(null);
+				selectById.setOrderStatus("录入");
+				selectById.setIfEnquiry(null);
+				selectById.setIfShipping(null);
+				selectById.setIfInvoice("否");
+				selectById.setBillType(order.getBillType());
+				selectById.setTradeType(order.getTradeType());
+				if (order.getBusinesDate() == null){
+					selectById.setBusinesDate(new Date());
+				}
+				baseMapper.insert(selectById);
+				//保存订单明细
+				List<OrderItems> orderList = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", order.getId()).eq("is_deleted", 0)
+				.eq("corp_id",item.getCorpId()));
+				if (CollectionUtils.isNotEmpty(orderList)){
+					orderList.stream().forEach(items ->{
+						items.setPid(selectById.getId());
+						items.setId(null);
+						items.setCreateTime(new Date());
+						items.setCreateUser(SecureUtil.getUserId());
+						items.setUpdateTime(null);
+						items.setUpdateUser(null);
+						orderItemsService.save(items);
+					});
+				}
 			});
 		}
 		return R.data(order);