浏览代码

新增工单发送到mq

24282 1 年之前
父节点
当前提交
a4c6583fbb

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/artwork/impl/ArtworkLibraryServiceImpl.java

@@ -146,7 +146,7 @@ public class ArtworkLibraryServiceImpl extends ServiceImpl<ArtworkLibraryMapper,
         artworkMessage.setFileUrl(artworkLibrary.getFileUrl());
         artworkMessage.setFileUrl(artworkLibrary.getFileUrl());
         artworkMessage.setType(type);
         artworkMessage.setType(type);
 
 
-        RabbitMqUtil.send(ArtworkConfig.DIRECT_EXCHANGE_NAME, ArtworkConfig.QUEUE_NAME, artworkMessage);
+        RabbitMqUtil.send(ArtworkConfig.DIRECT_EXCHANGE_NAME, ArtworkConfig.ARTWORK_QUEUE_NAME, artworkMessage);
     }
     }
 
 
 }
 }

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -1124,7 +1124,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
             tempArtworkMessage.setImgUrl(orderSkuDto.getBlueprint());
             tempArtworkMessage.setImgUrl(orderSkuDto.getBlueprint());
             tempArtworkMessage.setFileUrl(orderSkuDto.getProductionDocument());
             tempArtworkMessage.setFileUrl(orderSkuDto.getProductionDocument());
 
 
-            RabbitMqUtil.send(ArtworkConfig.DIRECT_EXCHANGE_NAME, ArtworkConfig.TEMP_QUEUE_NAME, tempArtworkMessage);
+            RabbitMqUtil.send(ArtworkConfig.DIRECT_EXCHANGE_NAME, ArtworkConfig.TEMP_ARTWORK_QUEUE_NAME, tempArtworkMessage);
         }
         }
     }
     }
 
 

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

@@ -38,4 +38,11 @@ public interface ProductionWorkOrderService extends BaseService<ProductionWorkOr
      */
      */
     void add(Long orderId);
     void add(Long orderId);
 
 
+    /**
+     * 发送工单到mq
+     *
+     * @param list 工单列表
+     */
+    void sendMq(List<ProductionWorkOrder> list);
+
 }
 }

+ 87 - 4
sd-business/src/main/java/com/sd/business/service/production/impl/ProductionWorkOrderServiceImpl.java

@@ -1,10 +1,12 @@
 package com.sd.business.service.production.impl;
 package com.sd.business.service.production.impl;
 
 
 import cn.hutool.core.util.ObjectUtil;
 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.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.artwork.po.ArtworkLibrary;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderInfo;
@@ -15,20 +17,22 @@ import com.sd.business.entity.production.vo.ProductionOrderScheduleVo;
 import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
 import com.sd.business.entity.production.vo.ProductionWorkOrderVo;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.mapper.production.ProductionWorkOrderMapper;
 import com.sd.business.mapper.production.ProductionWorkOrderMapper;
+import com.sd.business.service.artwork.ArtworkLibraryService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.business.service.production.ProductionWorkOrderService;
 import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.service.sku.SkuSpecService;
+import com.sd.mq.config.WorkOrderConfig;
+import com.sd.mq.entity.WorkOrderDetail;
+import com.sd.mq.entity.WorkOrderMessage;
 import com.sd.mq.enums.WorkOrderStatusEnum;
 import com.sd.mq.enums.WorkOrderStatusEnum;
+import com.sd.mq.util.RabbitMqUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -51,6 +55,9 @@ public class ProductionWorkOrderServiceImpl extends ServiceImpl<ProductionWorkOr
     @Autowired
     @Autowired
     private SkuSpecService skuSpecService;
     private SkuSpecService skuSpecService;
 
 
+    @Autowired
+    private ArtworkLibraryService artworkLibraryService;
+
     @Override
     @Override
     public Page<ProductionWorkOrderVo> getPage(ProductionWorkOrderSelectDto dto) {
     public Page<ProductionWorkOrderVo> getPage(ProductionWorkOrderSelectDto dto) {
         IWrapper<ProductionWorkOrder> wrapper = getWrapper();
         IWrapper<ProductionWorkOrder> wrapper = getWrapper();
@@ -126,6 +133,82 @@ public class ProductionWorkOrderServiceImpl extends ServiceImpl<ProductionWorkOr
         });
         });
 
 
         saveBatch(productionWorkOrderList);
         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(artworkLibrary.getArtworkName() + "\\" + artworkLibrary.getImgName());
+                    workOrderDetail.setFilePath(artworkLibrary.getArtworkName() + "\\" + artworkLibrary.getFileName());
+                }
+            }
+
+            if (StrUtil.isAllNotBlank(workOrderDetail.getImgPath(), workOrderDetail.getFilePath())) {
+                workOrderDetail.setImgPath(orderSku.getBlueprint().replace("https://os.winfaster.cn/sd/", "")
+                        .replace("test/", "")
+                        .replace("prod/", "")
+                        .replace("dev/", ""));
+                workOrderDetail.setFilePath(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);
+
+    }
+
+
 }
 }

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/production/impl/StockPreparationServiceImpl.java

@@ -259,7 +259,7 @@ public class StockPreparationServiceImpl implements StockPreparationService {
         }
         }
 
 
         // 把生产工单发送到mq
         // 把生产工单发送到mq
-        sendWorkOrderMq(productionWorkOrderList);
+        productionWorkOrderService.sendMq(productionWorkOrderList);
 
 
     }
     }
 
 

+ 27 - 19
sd-mq/src/main/java/com/sd/mq/config/ArtworkConfig.java

@@ -12,50 +12,58 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 @Configuration
 public class ArtworkConfig {
 public class ArtworkConfig {
 
 
-    public static final String QUEUE_NAME = "artwork.queue";
-    public static final String TEMP_QUEUE_NAME = "temp.artwork.queue";
+    public static final String ARTWORK_QUEUE_NAME = "artwork.queue";
+    public static final String TEMP_ARTWORK_QUEUE_NAME = "temp.artwork.queue";
     public static final String DIRECT_EXCHANGE_NAME = "artwork.direct.exchange";
     public static final String DIRECT_EXCHANGE_NAME = "artwork.direct.exchange";
 
 
-    // 创建一个队列
+    /**
+     * 创建一个Direct类型的交换机
+     */
+    @Bean
+    public DirectExchange artworkDirectExchange() {
+        // durable:是否持久化,默认是false,持久化交换机。
+        // autoDelete:是否自动删除,交换机先有队列或者其他交换机绑定的时候,然后当该交换机没有队列或其他交换机绑定的时候,会自动删除。
+        // arguments:交换机设置的参数,比如设置交换机的备用交换机(Alternate Exchange),当消息不能被路由到该交换机绑定的队列上时,会自动路由到备用交换机
+        return new DirectExchange(DIRECT_EXCHANGE_NAME, true, false);
+    }
+
+    /**
+     * 创建一个队列
+     */
     @Bean
     @Bean
     public Queue artworkQueue() {
     public Queue artworkQueue() {
         // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
         // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
         // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
         // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
         // autoDelete:是否自动删除,有消息者订阅本队列,然后所有消费者都解除订阅此队列,会自动删除。
         // autoDelete:是否自动删除,有消息者订阅本队列,然后所有消费者都解除订阅此队列,会自动删除。
         // arguments:队列携带的参数,比如设置队列的死信队列,消息的过期时间等等。
         // arguments:队列携带的参数,比如设置队列的死信队列,消息的过期时间等等。
-        return new Queue(QUEUE_NAME, true, false, false);
+        return new Queue(ARTWORK_QUEUE_NAME, true, false, false);
     }
     }
 
 
-    // 创建一个队列
+    /**
+     * 创建一个队列
+     */
     @Bean
     @Bean
     public Queue tempArtworkQueue() {
     public Queue tempArtworkQueue() {
         // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
         // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
         // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
         // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
         // autoDelete:是否自动删除,有消息者订阅本队列,然后所有消费者都解除订阅此队列,会自动删除。
         // autoDelete:是否自动删除,有消息者订阅本队列,然后所有消费者都解除订阅此队列,会自动删除。
         // arguments:队列携带的参数,比如设置队列的死信队列,消息的过期时间等等。
         // arguments:队列携带的参数,比如设置队列的死信队列,消息的过期时间等等。
-        return new Queue(TEMP_QUEUE_NAME, true, false, false);
-    }
-
-    // 创建一个名为TestDirectExchange的Direct类型的交换机
-    @Bean
-    public DirectExchange artworkDirectExchange() {
-        // durable:是否持久化,默认是false,持久化交换机。
-        // autoDelete:是否自动删除,交换机先有队列或者其他交换机绑定的时候,然后当该交换机没有队列或其他交换机绑定的时候,会自动删除。
-        // arguments:交换机设置的参数,比如设置交换机的备用交换机(Alternate Exchange),当消息不能被路由到该交换机绑定的队列上时,会自动路由到备用交换机
-        return new DirectExchange(DIRECT_EXCHANGE_NAME, true, false);
+        return new Queue(TEMP_ARTWORK_QUEUE_NAME, true, false, false);
     }
     }
 
 
-    // 绑定交换机和队列
+    /**
+     * 绑定交换机和队列
+     */
     @Bean
     @Bean
     public Binding artworkBinding() {
     public Binding artworkBinding() {
-        //bind队列to交换机
         return BindingBuilder.bind(artworkQueue()).to(artworkDirectExchange()).withQueueName();
         return BindingBuilder.bind(artworkQueue()).to(artworkDirectExchange()).withQueueName();
     }
     }
 
 
-    // 绑定交换机和队列
+    /**
+     * 绑定交换机和队列
+     */
     @Bean
     @Bean
     public Binding tempArtworkBinding() {
     public Binding tempArtworkBinding() {
-        //bind队列to交换机
         return BindingBuilder.bind(tempArtworkQueue()).to(artworkDirectExchange()).withQueueName();
         return BindingBuilder.bind(tempArtworkQueue()).to(artworkDirectExchange()).withQueueName();
     }
     }
 
 

+ 49 - 0
sd-mq/src/main/java/com/sd/mq/config/WorkOrderConfig.java

@@ -0,0 +1,49 @@
+package com.sd.mq.config;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.DirectExchange;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.rabbit.annotation.EnableRabbit;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@EnableRabbit
+@Configuration
+public class WorkOrderConfig {
+
+    public static final String ADD_WORK_ORDER_QUEUE_NAME = "add.work.order.artwork.queue";
+    public static final String DIRECT_EXCHANGE_NAME = "work.order.direct.exchange";
+
+    /**
+     * 创建一个Direct类型的交换机
+     */
+    @Bean
+    public DirectExchange workOrderDirectExchange() {
+        // durable:是否持久化,默认是false,持久化交换机。
+        // autoDelete:是否自动删除,交换机先有队列或者其他交换机绑定的时候,然后当该交换机没有队列或其他交换机绑定的时候,会自动删除。
+        // arguments:交换机设置的参数,比如设置交换机的备用交换机(Alternate Exchange),当消息不能被路由到该交换机绑定的队列上时,会自动路由到备用交换机
+        return new DirectExchange(DIRECT_EXCHANGE_NAME, true, false);
+    }
+
+    /**
+     * 创建一个队列
+     */
+    @Bean
+    public Queue addWorkOrderQueue() {
+        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
+        // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
+        // autoDelete:是否自动删除,有消息者订阅本队列,然后所有消费者都解除订阅此队列,会自动删除。
+        // arguments:队列携带的参数,比如设置队列的死信队列,消息的过期时间等等。
+        return new Queue(ADD_WORK_ORDER_QUEUE_NAME, true, false, false);
+    }
+
+    /**
+     * 绑定交换机和队列
+     */
+    @Bean
+    public Binding addWorkOrderBinding() {
+        return BindingBuilder.bind(addWorkOrderQueue()).to(workOrderDirectExchange()).withQueueName();
+    }
+
+}

+ 8 - 5
sd-mq/src/main/java/com/sd/mq/entity/WorkOrderDetail.java

@@ -3,11 +3,14 @@ package com.sd.mq.entity;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 
 
 @Getter
 @Getter
 @Setter
 @Setter
-public class WorkOrderDetail {
+public class WorkOrderDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
 
 
     /**
     /**
      * 工单id
      * 工单id
@@ -15,14 +18,14 @@ public class WorkOrderDetail {
     private Long workOrderId;
     private Long workOrderId;
 
 
     /**
     /**
-     * 图稿路径
+     * 图路径
      */
      */
-    private String fileUrl;
+    private String imgPath;
 
 
     /**
     /**
-     * 图路径
+     * 图稿路径
      */
      */
-    private String imgUrl;
+    private String filePath;
 
 
     /**
     /**
      * 长(cm)
      * 长(cm)