24282 1 rok pred
rodič
commit
40eb8067d6
20 zmenil súbory, kde vykonal 30 pridanie a 799 odobranie
  1. 0 24
      sd-business/src/main/java/com/sd/business/controller/order/OrderFlowExampleController.java
  2. 1 18
      sd-business/src/main/java/com/sd/business/controller/order/OrderInfoController.java
  3. 0 71
      sd-business/src/main/java/com/sd/business/controller/production/ProductionWorkOrderController.java
  4. 0 17
      sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionWorkOrderDto.java
  5. 0 17
      sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionWorkOrderSelectDto.java
  6. 0 73
      sd-business/src/main/java/com/sd/business/entity/production/po/ProductionWorkOrder.java
  7. 0 17
      sd-business/src/main/java/com/sd/business/entity/production/vo/ProductionWorkOrderVo.java
  8. 10 1
      sd-business/src/main/java/com/sd/business/flow/OrderDeleteFlow.java
  9. 1 13
      sd-business/src/main/java/com/sd/business/flow/OrderFlow.java
  10. 0 16
      sd-business/src/main/java/com/sd/business/mapper/production/ProductionWorkOrderMapper.java
  11. 1 8
      sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedOrderService.java
  12. 0 7
      sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedService.java
  13. 1 7
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderServiceImpl.java
  14. 0 39
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedServiceImpl.java
  15. 0 16
      sd-business/src/main/java/com/sd/business/service/order/OrderInfoService.java
  16. 15 175
      sd-business/src/main/java/com/sd/business/service/order/impl/OrderInfoServiceImpl.java
  17. 0 60
      sd-business/src/main/java/com/sd/business/service/production/ProductionWorkOrderService.java
  18. 0 214
      sd-business/src/main/java/com/sd/business/service/production/impl/ProductionWorkOrderServiceImpl.java
  19. 0 5
      sd-business/src/main/resources/mapper/production/ProductionWorkOrderMapper.xml
  20. 1 1
      sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

+ 0 - 24
sd-business/src/main/java/com/sd/business/controller/order/OrderFlowExampleController.java

@@ -1,24 +0,0 @@
-package com.sd.business.controller.order;
-
-import com.sd.business.service.order.OrderFlowExampleService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-
-/**
- * <p>
- * 订单流程 关联 前端控制器
- * </p>
- *
- * @author
- * @since 2023-12-14
- */
-@RestController
-@RequestMapping("/orderFlowExample")
-public class OrderFlowExampleController {
-
-    @Autowired
-    private OrderFlowExampleService orderFlowExampleService;
-
-}

+ 1 - 18
sd-business/src/main/java/com/sd/business/controller/order/OrderInfoController.java

@@ -10,7 +10,6 @@ import com.sd.business.entity.order.enums.OrderExceptionTypeEnum;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.vo.OrderInfoVo;
 import com.sd.business.entity.order.vo.OrderPackageBomVo;
-import com.sd.business.entity.order.vo.OutBomVo;
 import com.sd.business.entity.order.vo.SkuSpecPriceVo;
 import com.sd.business.service.order.OrderInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -76,15 +75,7 @@ public class OrderInfoController {
      */
     @PostMapping("/delete")
     public void delete(@RequestBody BaseSelectDto dto) {
-        orderInfoService.deleteValidated(dto.getId());
-    }
-
-    /**
-     * 订单删除并回滚库存
-     */
-    @PostMapping("/deleteAndStore")
-    public void deleteAndStore(@RequestBody BaseSelectDto dto) {
-        orderInfoService.deleteAndStore(dto.getId());
+        orderInfoService.delete(dto.getId());
     }
 
     /**
@@ -144,14 +135,6 @@ public class OrderInfoController {
     }
 
     /**
-     * 订单删除退料清单
-     */
-    @PostMapping("/returnBomList")
-    public List<OutBomVo> returnBomList(@RequestBody BaseSelectDto dto) {
-        return orderInfoService.returnBomList(dto.getId());
-    }
-
-    /**
      * 修改订单产品包装
      */
     @PostMapping("/editOrderPackageBom")

+ 0 - 71
sd-business/src/main/java/com/sd/business/controller/production/ProductionWorkOrderController.java

@@ -1,71 +0,0 @@
-package com.sd.business.controller.production;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.domain.BaseSelectDto;
-import com.sd.business.entity.production.dto.ProductionWorkOrderDto;
-import com.sd.business.entity.production.dto.ProductionWorkOrderSelectDto;
-import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
-import com.sd.business.service.production.ProductionWorkOrderService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-
-/**
- * <p>
- * 生产工单 前端控制器
- * </p>
- *
- * @author
- * @since 2023-12-11
- */
-@RestController
-@RequestMapping("/productionWorkOrder")
-public class ProductionWorkOrderController {
-
-    @Autowired
-    private ProductionWorkOrderService productionWorkOrderService;
-
-    /**
-     * 生产工单分页
-     */
-    @PostMapping("/page")
-    public Page<ProductionWorkOrderVo> page(@RequestBody ProductionWorkOrderSelectDto dto) {
-        return productionWorkOrderService.getPage(dto);
-    }
-
-    /**
-     * 生产工单明细
-     */
-    @PostMapping("/detail")
-    public ProductionWorkOrderVo detail(@RequestBody BaseSelectDto dto) {
-        return productionWorkOrderService.detail(dto.getId());
-    }
-
-    /**
-     * 生产工单新增
-     */
-    @PostMapping("/add")
-    public void add(@RequestBody ProductionWorkOrderDto dto) {
-        productionWorkOrderService.add(dto);
-    }
-
-    /**
-     * 生产工单编辑
-     */
-    @PostMapping("/edit")
-    public void edit(@RequestBody ProductionWorkOrderDto dto) {
-        productionWorkOrderService.edit(dto);
-    }
-
-    /**
-     * 生产工单删除
-     */
-    @PostMapping("/delete")
-    public void delete(@RequestBody BaseSelectDto dto) {
-        productionWorkOrderService.delete(dto.getId());
-    }
-
-}

+ 0 - 17
sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionWorkOrderDto.java

@@ -1,17 +0,0 @@
-package com.sd.business.entity.production.dto;
-
-import com.sd.business.entity.production.po.ProductionWorkOrder;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 生产工单新增编辑入参实体
- *
- * @author
- * @since 2023-12-11
- */
-@Getter
-@Setter
-public class ProductionWorkOrderDto extends ProductionWorkOrder {
-
-}

+ 0 - 17
sd-business/src/main/java/com/sd/business/entity/production/dto/ProductionWorkOrderSelectDto.java

@@ -1,17 +0,0 @@
-package com.sd.business.entity.production.dto;
-
-import com.ruoyi.common.core.domain.BaseSelectDto;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 生产工单列表查询入参实体
- *
- * @author
- * @since 2023-12-11
- */
-@Getter
-@Setter
-public class ProductionWorkOrderSelectDto extends BaseSelectDto {
-
-}

+ 0 - 73
sd-business/src/main/java/com/sd/business/entity/production/po/ProductionWorkOrder.java

@@ -1,73 +0,0 @@
-package com.sd.business.entity.production.po;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.ruoyi.common.core.domain.BasePo;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.Date;
-
-/**
- * <p>
- * 生产工单
- * </p>
- *
- * @author
- * @since 2023-12-11
- */
-@Getter
-@Setter
-@TableName("production_work_order")
-public class ProductionWorkOrder extends BasePo {
-
-    /**
-     * 工单号
-     */
-    private String code;
-
-    /**
-     * 生产任务id
-     */
-    private Long productionTaskId;
-
-    /**
-     * 订单id
-     */
-    private Long orderId;
-
-    /**
-     * 订单明细id
-     */
-    private Long orderSkuId;
-
-    /**
-     * sku规格id
-     */
-    private Long skuSpecId;
-
-    /**
-     * bom规格id
-     */
-    private Long bomSpecId;
-
-    /**
-     * 状态 0待投产 1已扫描 2生产中 3生产完成 4生产异常 5重新排单
-     */
-    private Integer status;
-
-    /**
-     * 完成时间
-     */
-    private Date completeTime;
-
-    /**
-     * 批量工单主id
-     */
-    private Long masterId;
-
-    /**
-     * 类型 1单片 2批量
-     */
-    private Integer type;
-
-}

+ 0 - 17
sd-business/src/main/java/com/sd/business/entity/production/vo/ProductionWorkOrderVo.java

@@ -1,17 +0,0 @@
-package com.sd.business.entity.production.vo;
-
-import com.sd.business.entity.production.po.ProductionWorkOrder;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 生产工单列表查询返回值实体
- *
- * @author
- * @since 2023-12-11
- */
-@Getter
-@Setter
-public class ProductionWorkOrderVo extends ProductionWorkOrder {
-
-}

+ 10 - 1
sd-business/src/main/java/com/sd/business/flow/OrderDeleteFlow.java

@@ -3,8 +3,11 @@ package com.sd.business.flow;
 import com.alibaba.fastjson.JSONObject;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.flow.enums.FlowStatusEnum;
+import com.ruoyi.common.constant.StatusConstant;
 import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderFlowExample;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.service.order.OrderFlowExampleService;
@@ -14,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * 发起订单删除流程
@@ -39,6 +43,11 @@ public class OrderDeleteFlow extends FlowDelegate {
         OrderInfo orderInfo = orderInfoService.getById(Long.parseLong(id.toString()));
         Assert.notNull(orderInfo, "未找到订单");
 
+        if (Objects.equals(orderInfo.getDelFlag(), StatusConstant.NOT_DELETED)
+                && orderInfo.getStatus() > OrderStatusEnum.SCHEDULING.getKey()) {
+            throw new ServiceException("订单已生产,无法删除");
+        }
+
         OrderFlowExample orderFlowExample = new OrderFlowExample();
         orderFlowExample.setOrderId(orderInfo.getId());
         orderFlowExample.setFlowId(flowId);
@@ -50,7 +59,7 @@ public class OrderDeleteFlow extends FlowDelegate {
 
     @Override
     public void end(Long flowId, Long businessId, JSONObject submitData) {
-        orderInfoService.deleteAndStore(businessId);
+        orderInfoService.delete(businessId);
         orderFlowExampleService.update(q -> q.eq(OrderFlowExample::getOrderId, businessId)
                 .eq(OrderFlowExample::getFlowId, flowId)
                 .set(OrderFlowExample::getFlowStatus, FlowStatusEnum.PASS.getKey())

+ 1 - 13
sd-business/src/main/java/com/sd/business/flow/OrderFlow.java

@@ -13,7 +13,6 @@ import com.sd.business.entity.order.po.OrderFlowExample;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.service.order.OrderFlowExampleService;
 import com.sd.business.service.order.OrderInfoService;
-import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.mq.config.ArtworkConfig;
 import com.sd.mq.entity.TempArtworkMessage;
 import com.sd.mq.util.RabbitMqUtil;
@@ -24,7 +23,7 @@ import java.util.Date;
 import java.util.List;
 
 /**
- * 发起采购流程
+ * 发起订单流程
  */
 @Service
 public class OrderFlow extends FlowDelegate {
@@ -35,9 +34,6 @@ public class OrderFlow extends FlowDelegate {
     @Autowired
     private OrderFlowExampleService orderFlowExampleService;
 
-    @Autowired
-    private ProductionWorkOrderService productionWorkOrderService;
-
     @Override
     public String getFlowKey() {
         return "order";
@@ -78,9 +74,6 @@ public class OrderFlow extends FlowDelegate {
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
         );
 
-        // 生成生产任务和工单
-        productionWorkOrderService.addByOrderId(businessId);
-
         orderFlowExampleService.update(q -> q.eq(OrderFlowExample::getOrderId, businessId)
                 .eq(OrderFlowExample::getFlowId, flowId)
                 .set(OrderFlowExample::getFlowStatus, FlowStatusEnum.PASS.getKey())
@@ -130,19 +123,14 @@ public class OrderFlow extends FlowDelegate {
 
 
     private void sendMq(OrderInfoDto dto) {
-
         List<OrderSkuDto> orderSkuList = dto.getOrderSkuList();
-
         for (OrderSkuDto orderSkuDto : orderSkuList) {
-
             if (orderSkuDto.getArtworkLibraryId() == null || orderSkuDto.getArtworkLibraryId() == 0L) {
                 continue;
             }
-
             TempArtworkMessage tempArtworkMessage = new TempArtworkMessage();
             tempArtworkMessage.setImgUrl(orderSkuDto.getBlueprint());
             tempArtworkMessage.setFileUrl(orderSkuDto.getProductionDocument());
-
             RabbitMqUtil.send(ArtworkConfig.DIRECT_EXCHANGE_NAME, ArtworkConfig.TEMP_ARTWORK_QUEUE_NAME, tempArtworkMessage);
         }
     }

+ 0 - 16
sd-business/src/main/java/com/sd/business/mapper/production/ProductionWorkOrderMapper.java

@@ -1,16 +0,0 @@
-package com.sd.business.mapper.production;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.sd.business.entity.production.po.ProductionWorkOrder;
-
-/**
- * <p>
- * 生产工单 Mapper 接口
- * </p>
- *
- * @author
- * @since 2023-12-11
- */
-public interface ProductionWorkOrderMapper extends BaseMapper<ProductionWorkOrder> {
-
-}

+ 1 - 8
sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedOrderService.java

@@ -55,15 +55,8 @@ public interface InventoryFinishedOrderService extends BaseService<InventoryFini
     void productionWarehousing(List<OrderSku> orderSkuList);
 
     /**
-     * 根据订单id删除记录
-     *
-     * @param orderId 订单id
-     */
-    void removeByOrderId(Long orderId);
-
-    /**
      * 成品仓明细E10模板导出
-     * @param list
      */
     void excelErpExport(List<InventoryFinishedErpImportDataDto> list);
+
 }

+ 0 - 7
sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedService.java

@@ -55,11 +55,4 @@ public interface InventoryFinishedService extends BaseService<InventoryFinished>
      */
     void inOut(List<InventoryFinished> list, boolean isIn);
 
-    /**
-     * 删除订单回滚库存
-     *
-     * @param orderId 订单id
-     */
-    void removeOrder(Long orderId);
-
 }

+ 1 - 7
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderServiceImpl.java

@@ -162,12 +162,6 @@ public class InventoryFinishedOrderServiceImpl extends ServiceImpl<InventoryFini
     }
 
     @Override
-    public void removeByOrderId(Long orderId) {
-        remove(q -> q.eq(InventoryFinishedOrder::getOrderInfoId, orderId));
-        inventoryFinishedOrderDetailService.remove(q -> q.eq(InventoryFinishedOrderDetail::getOrderInfoId, orderId));
-    }
-
-    @Override
     public void excelErpExport(List<InventoryFinishedErpImportDataDto> list) {
         List<String> outboundOrderCodes = list.stream().map(InventoryFinishedErpImportDataDto::getOutboundOrderCode).collect(Collectors.toList());
         Map<String, OutboundOrder> outboundOrderMap = outboundOrderService.mapKEntity(
@@ -292,7 +286,7 @@ public class InventoryFinishedOrderServiceImpl extends ServiceImpl<InventoryFini
                         serialNumber = 1;
                         serialNumberMap.put(item.getCode(), serialNumber);
                     } else {
-                        serialNumberMap.put(item.getCode(), serialNumber+=1);
+                        serialNumberMap.put(item.getCode(), serialNumber += 1);
                     }
                     item.setSerialNumber(serialNumber.toString());
                 })

+ 0 - 39
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedServiceImpl.java

@@ -2,11 +2,9 @@ package com.sd.business.service.inventory.impl;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.constant.StatusConstant;
 import com.sd.business.entity.inventory.dto.InventoryFinishedDto;
 import com.sd.business.entity.inventory.dto.InventoryFinishedSelectDto;
 import com.sd.business.entity.inventory.po.InventoryFinished;
-import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
 import com.sd.business.entity.inventory.vo.InventoryFinishedVo;
 import com.sd.business.entity.order.po.OrderSku;
 import com.sd.business.mapper.inventory.InventoryFinishedMapper;
@@ -154,41 +152,4 @@ public class InventoryFinishedServiceImpl extends ServiceImpl<InventoryFinishedM
 
     }
 
-    @Override
-    public void removeOrder(Long orderId) {
-
-        // 查询成品仓库
-        List<InventoryFinishedOrder> list = inventoryFinishedOrderService.list(q -> q
-                .eq(InventoryFinishedOrder::getOrderInfoId, orderId)
-                .eq(InventoryFinishedOrder::getStatus, StatusConstant.YES));
-
-        if (list.isEmpty()) {
-            return;
-        }
-
-        // 成品库存出库
-        outByFinishedOrder(list);
-
-        // 删除成品仓库订单以及明细
-        inventoryFinishedOrderService.removeByOrderId(orderId);
-    }
-
-    /**
-     * 成品库存出库
-     *
-     * @param list 成品仓库
-     */
-    private void outByFinishedOrder(List<InventoryFinishedOrder> list) {
-
-        List<InventoryFinished> inventoryFinishedList = list.stream().map(item -> {
-            InventoryFinished inventoryFinished = new InventoryFinished();
-            inventoryFinished.setQuantity(item.getQuantity());
-            inventoryFinished.setSkuSpecId(item.getSkuSpecId());
-            return inventoryFinished;
-        }).collect(Collectors.toList());
-
-        inOut(inventoryFinishedList, false);
-
-    }
-
 }

+ 0 - 16
sd-business/src/main/java/com/sd/business/service/order/OrderInfoService.java

@@ -10,7 +10,6 @@ import com.sd.business.entity.order.dto.SkuSpecPriceDto;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.vo.OrderInfoVo;
 import com.sd.business.entity.order.vo.OrderPackageBomVo;
-import com.sd.business.entity.order.vo.OutBomVo;
 import com.sd.business.entity.order.vo.SkuSpecPriceVo;
 
 import java.util.List;
@@ -52,16 +51,6 @@ public interface OrderInfoService extends BaseService<OrderInfo> {
     void delete(Long id);
 
     /**
-     * 删除订单并回滚库存
-     */
-    void deleteAndStore(Long id);
-
-    /**
-     * 验证订单后删除
-     */
-    void deleteValidated(Long id);
-
-    /**
      * 订单确认
      */
     void confirmation(OrderInfoDto dto);
@@ -97,11 +86,6 @@ public interface OrderInfoService extends BaseService<OrderInfo> {
     void cancelSuspendOrder(Long id);
 
     /**
-     * 订单删除退料清单
-     */
-    List<OutBomVo> returnBomList(Long id);
-
-    /**
      * 修改订单产品包装
      */
     void editOrderPackageBom(OrderInfoDto dto);

+ 15 - 175
sd-business/src/main/java/com/sd/business/service/order/impl/OrderInfoServiceImpl.java

@@ -46,11 +46,9 @@ import com.sd.business.entity.order.vo.OrderPackageBomVo;
 import com.sd.business.entity.order.vo.OrderSkuBomVo;
 import com.sd.business.entity.order.vo.OrderSkuExportVo;
 import com.sd.business.entity.order.vo.OrderSkuVo;
-import com.sd.business.entity.order.vo.OutBomVo;
 import com.sd.business.entity.order.vo.SkuSpecPriceVo;
 import com.sd.business.entity.price.po.PriceBillingStandard;
 import com.sd.business.entity.price.po.PriceBillingStandardDetail;
-import com.sd.business.entity.production.po.ProductionWorkOrder;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.po.SkuSpecLink;
 import com.sd.business.entity.warehouse.constant.WarehouseConstant;
@@ -67,7 +65,6 @@ import com.sd.business.service.order.OrderSkuProductionCostService;
 import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.price.PriceBillingStandardDetailService;
 import com.sd.business.service.price.PriceBillingStandardService;
-import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.business.service.sku.SkuSpecLinkService;
 import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.util.CodeEnum;
@@ -87,7 +84,6 @@ import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -97,7 +93,6 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 
 /**
@@ -127,9 +122,6 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
     private OrderSkuProductionCostService orderSkuProductionCostService;
 
     @Autowired
-    private ProductionWorkOrderService productionWorkOrderService;
-
-    @Autowired
     private InOutStorageService inOutStorageService;
 
     @Autowired
@@ -385,8 +377,6 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
                 && ObjectUtil.equals(dto.getType(), 2)
                 && ObjectUtil.isEmpty(orderSkuBomList)) {
             dto.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
-            // 生成工单
-            productionWorkOrderService.addByOrderId(dto.getId());
             update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
         }
 
@@ -479,8 +469,6 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
                 && ObjectUtil.equals(dto.getType(), 2)
                 && ObjectUtil.isEmpty(orderSkuBomList)) {
             dto.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
-            // 生成工单
-            productionWorkOrderService.addByOrderId(dto.getId());
             update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
         }
 
@@ -507,81 +495,6 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
     @DSTransactional
     @Override
     public void delete(Long id) {
-        removeById(id);
-        orderSkuService.remove(q -> q.eq(OrderSku::getOrderId, id));
-        orderSkuBomService.remove(q -> q.eq(OrderSkuBom::getOrderId, id));
-        orderPackageBomService.remove(q -> q.eq(OrderPackageBom::getOrderId, id));
-        orderSkuProductionCostService.remove(q -> q.eq(OrderSkuProductionCost::getOrderId, id));
-        productionWorkOrderService.remove(q -> q.eq(ProductionWorkOrder::getOrderId, id));
-
-        ObsFileUtil.removeFile(id);
-    }
-
-    @DSTransactional
-    @Override
-    public synchronized void deleteAndStore(Long id) {
-        OrderInfo orderInfo = getById(id);
-
-        if (orderInfo == null) {
-            throw new ServiceException("未找到订单");
-        }
-
-        if (orderInfo.getStatus() <= OrderStatusEnum.SCHEDULING.getKey()) {
-            delete(id);
-            return;
-        }
-
-        // 获取订单商品主材和包材
-        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, id));
-        List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.eq(OrderSkuBom::getOrderId, id));
-
-        Map<Long, OrderSku> orderSkuMap = orderSkuList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
-
-        // 合并主材和包材
-        List<InOutStorageBom> inOutStorageBomList = orderSkuList.stream().map(item -> {
-            InOutStorageBom inOutStorageBom = new InOutStorageBom();
-            inOutStorageBom.setBomSpecId(item.getBomSpecId());
-            inOutStorageBom.setQuantity(item.getQuantity());
-            return inOutStorageBom;
-        }).collect(Collectors.toList());
-
-        for (OrderSkuBom orderSkuBom : orderSkuBomList) {
-            OrderSku orderSku = orderSkuMap.get(orderSkuBom.getOrderSkuId());
-            InOutStorageBom inOutStorageBom = new InOutStorageBom();
-            inOutStorageBom.setBomSpecId(orderSkuBom.getBomSpecId());
-            inOutStorageBom.setQuantity(orderSkuBom.getQuantity().multiply(orderSku.getQuantity()));
-            inOutStorageBomList.add(inOutStorageBom);
-        }
-
-        // 合并数量
-        Map<Long, InOutStorageBom> map = inOutStorageBomList.stream().collect(Collectors.toMap(
-                InOutStorageBom::getBomSpecId,
-                Function.identity(),
-                (v1, v2) -> {
-                    v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
-                    return v1;
-                }
-        ));
-        inOutStorageBomList = new ArrayList<>(map.values());
-
-        // 区分半成品仓和包材仓库
-        Map<Long, BomSpecBo> bomSpecBoMap = bomSpecService.getBomSpecBo(map.keySet());
-
-        // 主材从半成品仓入库
-        semiFinishedProductOutStorage(inOutStorageBomList, bomSpecBoMap, orderInfo);
-
-        // 包材从包材仓出库
-        packagingMaterialOutStorage(inOutStorageBomList, bomSpecBoMap, orderInfo);
-
-        // 删除订单回滚成品仓库存
-        inventoryFinishedService.removeOrder(id);
-
-        delete(id);
-    }
-
-    @DSTransactional
-    @Override
-    public void deleteValidated(Long id) {
         OrderInfo orderInfo = getById(id);
 
         if (orderInfo == null) {
@@ -590,14 +503,15 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
         if (Objects.equals(orderInfo.getDelFlag(), StatusConstant.NOT_DELETED)
                 && orderInfo.getStatus() > OrderStatusEnum.SCHEDULING.getKey()) {
-            throw new ServiceException("订单正在生产中,无法直接删除,需要走审批流程");
+            throw new ServiceException("订单已生产,无法删除");
         }
 
-        // 删除订单回滚成品仓库存
-        inventoryFinishedService.removeOrder(id);
-
-        // 删除订单以及订单关联数据
-        delete(id);
+        removeById(id);
+        orderSkuService.remove(q -> q.eq(OrderSku::getOrderId, id));
+        orderSkuBomService.remove(q -> q.eq(OrderSkuBom::getOrderId, id));
+        orderPackageBomService.remove(q -> q.eq(OrderPackageBom::getOrderId, id));
+        orderSkuProductionCostService.remove(q -> q.eq(OrderSkuProductionCost::getOrderId, id));
+        ObsFileUtil.removeFile(id);
     }
 
     @DSTransactional
@@ -610,11 +524,6 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
             throw new ServiceException("订单不在草稿或待确认状态");
         }
 
-        // 自主订单需要锁定库存
-        List<OrderSkuDto> orderSkuList = dto.getOrderSkuList();
-
-        // 更新订单
-        dto.setStatus(OrderStatusEnum.SCHEDULING.getKey());
         // 订单为委外订单时,订单分类为委外订单,订单费用修改
         if (Objects.equals(dto.getType(), 2)) {
             dto.setClassify(OrderClassifyEnum.OUTSOURCE_ORDER.getKey());
@@ -642,12 +551,15 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
                 dto.setClassify(OrderClassifyEnum.PURCHASE_ORDER.getKey());
             }
         }
+
+        // 更新订单
+        dto.setStatus(OrderStatusEnum.SCHEDULING.getKey());
         updateById(dto);
 
         // 更新订单产品
-        List<OrderSku> tempOrderSkuList = orderSkuList.stream()
-                .peek(item -> item.setOrderId(dto.getId()))
+        List<OrderSku> tempOrderSkuList = dto.getOrderSkuList().stream()
                 .peek(item -> {
+                    item.setOrderId(dto.getId());
                     // 委外订单修改金额
                     if (ObjectUtil.equals(dto.getType(), 2)) {
                         item.setUnitPrice(BigDecimal.ZERO);
@@ -662,7 +574,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         orderSkuService.editLinked(tempOrderSkuList, OrderSku::getOrderId, dto.getId());
 
         // 更新包材
-        List<OrderSkuBom> orderSkuBomList = orderSkuList.stream()
+        List<OrderSkuBom> orderSkuBomList = dto.getOrderSkuList().stream()
                 .flatMap(orderSku -> orderSku.getOrderSkuBomList().stream()
                         .peek(orderSkuBom -> orderSkuBom.setOrderId(dto.getId()))
                         .peek(orderSkuBom -> orderSkuBom.setOrderSkuId(orderSku.getId())))
@@ -699,13 +611,11 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         }).collect(Collectors.toList());
         orderSkuProductionCostService.editLinked(orderSkuProductionCostList, OrderSkuProductionCost::getOrderId, dto.getId());
 
-        // 是委外订单并且没有包材时,修改订单状态为生产中,并生成生产任务和工单
+        // 是委外订单并且没有包材时,修改订单状态为生产中
         if (ObjectUtil.equals(dto.getStatus(), OrderStatusEnum.SCHEDULING.getKey())
                 && ObjectUtil.equals(dto.getType(), 2)
                 && ObjectUtil.isEmpty(orderSkuBomList)) {
             dto.setStatus(OrderStatusEnum.IN_PRODUCTION.getKey());
-            // 生成工单
-            productionWorkOrderService.addByOrderId(dto.getId());
             update(q -> q.set(OrderInfo::getStatus, OrderStatusEnum.IN_PRODUCTION.getKey()).eq(BaseIdPo::getId, dto.getId()));
         }
 
@@ -721,7 +631,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         orderPackageBomService.editLinked(orderPackageBomList, OrderPackageBom::getOrderId, dto.getId());
 
         // 更新产品不干胶图稿
-        for (OrderSkuDto item : orderSkuList) {
+        for (OrderSkuDto item : dto.getOrderSkuList()) {
             ObsFileUtil.editFile(item.getSelfAdhesiveStickerFile(), item.getId());
         }
 
@@ -887,76 +797,6 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
     }
 
     @Override
-    public List<OutBomVo> returnBomList(Long id) {
-        OrderInfo orderInfo = getById(id);
-        Assert.notNull(orderInfo, "未找到订单");
-
-        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, id));
-        List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.eq(OrderSkuBom::getOrderId, id));
-        Map<Long, OrderSku> orderSkuMap = orderSkuList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
-        if (Objects.equals(orderInfo.getClassify(), OrderClassifyEnum.OUTSOURCE_ORDER.getKey())) {
-            orderSkuList = Collections.emptyList();
-        }
-
-        Map<Long, OutBomVo> map = Stream.concat(
-                        // 主材
-                        orderSkuList.stream().map(item -> {
-                            OutBomVo outBomVo = new OutBomVo();
-                            outBomVo.setBomSpecId(item.getBomSpecId());
-                            outBomVo.setOutQuantity(item.getQuantity());
-                            return outBomVo;
-                        }),
-
-                        // 包材
-                        orderSkuBomList.stream().map(item -> {
-                            OrderSku orderSku = orderSkuMap.get(item.getOrderSkuId());
-                            OutBomVo outBomVo = new OutBomVo();
-                            outBomVo.setBomSpecId(item.getBomSpecId());
-                            outBomVo.setOutQuantity(item.getQuantity().multiply(orderSku.getQuantity()));
-                            return outBomVo;
-                        })
-                )
-                .collect(Collectors.toMap(
-                        OutBomVo::getBomSpecId,
-                        Function.identity(),
-                        (v1, v2) -> {
-                            v1.setOutQuantity(v1.getOutQuantity().add(v2.getOutQuantity()));
-                            return v1;
-                        })
-                );
-
-        // 合并sku主材和包材
-        List<OutBomVo> outBomVoList = new ArrayList<>(map.values());
-
-        // 区分半成品仓和包材仓库
-        Map<Long, BomSpecBo> bomSpecBoMap = bomSpecService.getBomSpecBo(map.keySet());
-
-        for (OutBomVo outBomVo : outBomVoList) {
-            Long bomSpecId = outBomVo.getBomSpecId();
-            BomSpecBo bomSpecBo = bomSpecBoMap.get(bomSpecId);
-            outBomVo.setBomSpecCode(bomSpecBo.getBomSpecCode());
-            outBomVo.setBomSpecName(bomSpecBo.getBomSpecName());
-            outBomVo.setClassifyId(bomSpecBo.getClassifyId());
-            outBomVo.setClassifyName(bomSpecBo.getClassifyName());
-            outBomVo.setClassifyParentId(bomSpecBo.getClassifyParentId());
-
-            // 主材
-            if (Objects.equals(bomSpecBo.getClassifyParentId(), 1L)) {
-                outBomVo.setWarehouseId(WarehouseConstant.SEMI_FINISHED_PRODUCT);
-                outBomVo.setWarehouseName("半成品仓");
-            }
-            // 包材
-            else {
-                outBomVo.setWarehouseId(WarehouseConstant.PACKAGING_MATERIAL);
-                outBomVo.setWarehouseName("包材仓");
-            }
-        }
-        return outBomVoList.stream()
-                .sorted(Comparator.comparing(OutBomVo::getWarehouseId, Comparator.reverseOrder()).thenComparing(OutBomVo::getBomSpecCode))
-                .collect(Collectors.toList());
-    }
-
-    @Override
     public void editOrderPackageBom(OrderInfoDto dto) {
         OrderInfo orderInfo = getById(dto.getId());
         Assert.notNull(orderInfo, "未找到订单");

+ 0 - 60
sd-business/src/main/java/com/sd/business/service/production/ProductionWorkOrderService.java

@@ -1,60 +0,0 @@
-package com.sd.business.service.production;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.core.service.BaseService;
-import com.sd.business.entity.production.dto.ProductionWorkOrderDto;
-import com.sd.business.entity.production.dto.ProductionWorkOrderSelectDto;
-import com.sd.business.entity.production.po.ProductionWorkOrder;
-import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
-
-import java.util.List;
-
-
-/**
- * <p>
- * 生产工单 服务类
- * </p>
- *
- * @author
- * @since 2023-12-11
- */
-public interface ProductionWorkOrderService extends BaseService<ProductionWorkOrder> {
-
-    /**
-     * 生产工单分页
-     */
-    Page<ProductionWorkOrderVo> getPage(ProductionWorkOrderSelectDto dto);
-
-    /**
-     * 生产工单明细
-     */
-    ProductionWorkOrderVo detail(Long id);
-
-    /**
-     * 生产工单新增
-     */
-    void add(ProductionWorkOrderDto dto);
-
-    /**
-     * 生产工单编辑
-     */
-    void edit(ProductionWorkOrderDto dto);
-
-    /**
-     * 生产工单删除
-     */
-    void delete(Long id);
-
-    /**
-     * 通过订单id生成工单
-     */
-    void addByOrderId(Long orderId);
-
-    /**
-     * 发送工单到mq
-     *
-     * @param list 工单列表
-     */
-    void sendMq(List<ProductionWorkOrder> list);
-
-}

+ 0 - 214
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionWorkOrderServiceImpl.java

@@ -1,214 +0,0 @@
-package com.sd.business.service.production.impl;
-
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.exception.ServiceException;
-import com.sd.business.entity.artwork.po.ArtworkLibrary;
-import com.sd.business.entity.order.po.OrderInfo;
-import com.sd.business.entity.order.po.OrderSku;
-import com.sd.business.entity.production.dto.ProductionWorkOrderDto;
-import com.sd.business.entity.production.dto.ProductionWorkOrderSelectDto;
-import com.sd.business.entity.production.po.ProductionWorkOrder;
-import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
-import com.sd.business.entity.sku.po.SkuSpec;
-import com.sd.business.mapper.production.ProductionWorkOrderMapper;
-import com.sd.business.service.artwork.ArtworkLibraryService;
-import com.sd.business.service.order.OrderInfoService;
-import com.sd.business.service.order.OrderSkuService;
-import com.sd.business.service.production.ProductionWorkOrderService;
-import com.sd.business.service.sku.SkuSpecService;
-import com.sd.framework.util.Assert;
-import com.sd.framework.util.sql.Sql;
-import com.sd.mq.config.WorkOrderConfig;
-import com.sd.mq.entity.WorkOrderDetail;
-import com.sd.mq.entity.WorkOrderMessage;
-import com.sd.mq.util.RabbitMqUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-
-/**
- * <p>
- * 生产工单 服务实现类
- * </p>
- *
- * @author
- * @since 2023-12-11
- */
-@Service
-public class ProductionWorkOrderServiceImpl extends ServiceImpl<ProductionWorkOrderMapper, ProductionWorkOrder> implements ProductionWorkOrderService {
-
-    @Autowired
-    private OrderInfoService orderInfoService;
-
-    @Autowired
-    private OrderSkuService orderSkuService;
-
-    @Autowired
-    private SkuSpecService skuSpecService;
-
-    @Autowired
-    private ArtworkLibraryService artworkLibraryService;
-
-    @Override
-    public Page<ProductionWorkOrderVo> getPage(ProductionWorkOrderSelectDto dto) {
-
-        Page<ProductionWorkOrderVo> page = Sql.create(ProductionWorkOrderVo.class)
-                .selectAll(ProductionWorkOrder.class)
-                .from(ProductionWorkOrder.class)
-                .orderByDesc(ProductionWorkOrder::getId)
-                .page(dto);
-
-        return page;
-    }
-
-    @Override
-    public ProductionWorkOrderVo detail(Long id) {
-
-        ProductionWorkOrderVo vo = Sql.create(ProductionWorkOrderVo.class)
-                .selectAll(ProductionWorkOrder.class)
-                .from(ProductionWorkOrder.class)
-                .eq(ProductionWorkOrder::getId, id)
-                .one();
-
-        Assert.notNull(vo, "未知数据");
-
-        return vo;
-    }
-
-    @Override
-    public void add(ProductionWorkOrderDto dto) {
-        save(dto);
-    }
-
-    @Override
-    public void edit(ProductionWorkOrderDto dto) {
-        updateById(dto);
-    }
-
-    @Override
-    public void delete(Long id) {
-        removeById(id);
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void addByOrderId(Long orderId) {
-        OrderInfo orderInfo = orderInfoService.getById(orderId);
-        if (orderInfo == null) {
-            throw new ServiceException("未知订单");
-        }
-
-        List<ProductionWorkOrder> productionWorkOrderList = new ArrayList<>();
-
-        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, orderId));
-
-        String code = ObjectUtil.defaultIfNull(orderInfo.getWlnCode(), orderInfo.getCode());
-
-        int num = 1;
-
-        for (OrderSku orderSku : orderSkuList) {
-            BigDecimal quantity = orderSku.getQuantity();
-            for (int i = 0; i < quantity.intValue(); i++) {
-                ProductionWorkOrder productionWorkOrder = new ProductionWorkOrder();
-                productionWorkOrder.setType(1);
-                productionWorkOrder.setCode(code + String.format("-%05d", num));
-                productionWorkOrder.setOrderId(orderId);
-                productionWorkOrder.setOrderSkuId(orderSku.getId());
-                productionWorkOrder.setSkuSpecId(orderSku.getSkuSpecId());
-                productionWorkOrder.setBomSpecId(orderSku.getBomSpecId());
-                productionWorkOrder.setStatus(0);
-                productionWorkOrderList.add(productionWorkOrder);
-                num++;
-            }
-        }
-
-        saveBatch(productionWorkOrderList);
-
-        sendMq(productionWorkOrderList);
-    }
-
-    @Override
-    public void sendMq(List<ProductionWorkOrder> list) {
-        if (list.isEmpty()) {
-            return;
-        }
-
-        // 订单详情
-        List<Long> orderSkuIdList = list.stream().map(ProductionWorkOrder::getOrderSkuId).collect(Collectors.toList());
-        Map<Long, OrderSku> orderSkuMap = orderSkuService.byIdsToMap(orderSkuIdList);
-
-        // 图稿库
-        List<Long> artworkLibraryIdList = orderSkuMap.values().stream()
-                .map(OrderSku::getArtworkLibraryId)
-                .filter(Objects::nonNull)
-                .filter(item -> item != 0)
-                .distinct()
-                .collect(Collectors.toList());
-        Map<Long, ArtworkLibrary> artworkLibraryMap;
-        if (artworkLibraryIdList.isEmpty()) {
-            artworkLibraryMap = Collections.emptyMap();
-        } else {
-            artworkLibraryMap = artworkLibraryService.byIdsToMap(artworkLibraryIdList);
-        }
-
-        // sku规格
-        List<Long> skuSpecIdList = list.stream().map(ProductionWorkOrder::getSkuSpecId).collect(Collectors.toList());
-        Map<Long, SkuSpec> skuSpecMap = skuSpecService.byIdsToMap(skuSpecIdList);
-
-        List<WorkOrderDetail> workOrderDetailList = list.stream().map(item -> {
-            WorkOrderDetail workOrderDetail = new WorkOrderDetail();
-
-            workOrderDetail.setWorkOrderId(item.getId());
-
-            Long orderSkuId = item.getOrderSkuId();
-            OrderSku orderSku = orderSkuMap.get(orderSkuId);
-            Long artworkLibraryId = orderSku.getArtworkLibraryId();
-
-            if (artworkLibraryId != null && artworkLibraryId != 0) {
-                ArtworkLibrary artworkLibrary = artworkLibraryMap.get(artworkLibraryId);
-                if (artworkLibrary != null) {
-                    workOrderDetail.setImgPath("artwork\\" + artworkLibrary.getArtworkName() + "\\" + artworkLibrary.getImgName());
-                    workOrderDetail.setFilePath("artwork\\" + artworkLibrary.getArtworkName() + "\\" + artworkLibrary.getFileName());
-                }
-            }
-
-            if (StrUtil.isAllBlank(workOrderDetail.getImgPath(), workOrderDetail.getFilePath())) {
-                workOrderDetail.setImgPath("tempArtwork\\" + orderSku.getBlueprint().replace("https://os.winfaster.cn/sd/", "")
-                        .replace("test/", "")
-                        .replace("prod/", "")
-                        .replace("dev/", ""));
-                workOrderDetail.setFilePath("tempArtwork\\" + orderSku.getProductionDocument().replace("https://os.winfaster.cn/sd/", "")
-                        .replace("test/", "")
-                        .replace("prod/", "")
-                        .replace("dev/", ""));
-            }
-
-            SkuSpec skuSpec = skuSpecMap.get(item.getSkuSpecId());
-
-            workOrderDetail.setLength(skuSpec.getLength());
-            workOrderDetail.setWide(skuSpec.getWidth());
-            workOrderDetail.setHight(skuSpec.getHeight());
-
-            return workOrderDetail;
-        }).collect(Collectors.toList());
-
-        WorkOrderMessage workOrderMessage = new WorkOrderMessage();
-        workOrderMessage.setWorkOrderDetailList(workOrderDetailList);
-
-        RabbitMqUtil.send(WorkOrderConfig.DIRECT_EXCHANGE_NAME, WorkOrderConfig.ADD_WORK_ORDER_QUEUE_NAME, workOrderMessage);
-
-    }
-
-}

+ 0 - 5
sd-business/src/main/resources/mapper/production/ProductionWorkOrderMapper.xml

@@ -1,5 +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="com.sd.business.mapper.production.ProductionWorkOrderMapper">
-
-</mapper>

+ 1 - 1
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -245,7 +245,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         // 打回审核真删订单
         if (wlnOrder.getInteger("process_status") == 0) {
             LogicHolder.setLogicHolder(true);
-            orderInfoService.deleteAndStore(orderInfo.getId());
+            orderInfoService.delete(orderInfo.getId());
             LogicHolder.clear();
             return;
         }