24282 vor 1 Jahr
Ursprung
Commit
10261886df

+ 11 - 1
sd-business/src/main/java/com/sd/business/controller/production/StockPreparationController.java

@@ -10,13 +10,15 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
 import java.util.List;
 
 /**
  * 生产备料
  */
 @RestController
-@RequestMapping("/stockPreparationController")
+@RequestMapping("/stockPreparation")
 public class StockPreparationController {
 
     @Autowired
@@ -38,4 +40,12 @@ public class StockPreparationController {
         return stockPreparationService.completedPage(dto);
     }
 
+    /**
+     * 提交备料
+     */
+    @PostMapping("/submit")
+    public void submit(@Valid @NotEmpty(message = "订单skuId不能为空") @RequestBody List<Long> orderSkuIdList) {
+        stockPreparationService.submit(orderSkuIdList);
+    }
+
 }

+ 1 - 1
sd-business/src/main/java/com/sd/business/entity/bom/dto/BomDto.java

@@ -24,7 +24,7 @@ public class BomDto extends Bom {
      */
     @Valid
     @NotEmpty(message = "规格不能为空")
-    private List<BomSpecDto> bomSpecDtoList;
+    private List<BomSpecDto> bomSpecList;
 
     /**
      * 主图产品

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/production/vo/StockPreparationVo.java

@@ -10,6 +10,11 @@ import java.math.BigDecimal;
 public class StockPreparationVo {
 
     /**
+     * 订单sku id
+     */
+    private Long orderSkuId;
+
+    /**
      * 设计图
      */
     private String blueprint;

+ 13 - 12
sd-business/src/main/java/com/sd/business/service/bom/impl/BomServiceImpl.java

@@ -3,6 +3,7 @@ package com.sd.business.service.bom.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -28,7 +29,6 @@ import com.sd.business.service.bom.BomService;
 import com.sd.business.service.bom.BomSpecService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -111,7 +111,7 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
         return result;
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @DSTransactional
     @Override
     public void add(BomDto bomDto) {
         List<FileInfo> fileInfoList = new ArrayList<>();
@@ -128,10 +128,10 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
             fileInfo.setBusinessType(ObsFileUtil.defaultFileType);
             fileInfoList.add(fileInfo);
 
-            bomDto.setMainImgUrl(mainImgFile.getFileName());
+            bomDto.setMainImgUrl(mainImgFile.getFileUrl());
         }
 
-        List<BomSpecDto> bomSpecDtoList = bomDto.getBomSpecDtoList();
+        List<BomSpecDto> bomSpecDtoList = bomDto.getBomSpecList();
         List<BomSpec> bomSpecList = bomSpecDtoList.stream()
                 .peek(item -> {
                     item.setId(IdWorker.getId());
@@ -147,7 +147,7 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
                         fileInfo.setBusinessType(ObsFileUtil.defaultFileType);
                         fileInfoList.add(fileInfo);
 
-                        item.setMainImgUrl(imgFile.getFileName());
+                        item.setMainImgUrl(imgFile.getFileUrl());
                     }
                 })
                 .map(item -> BeanUtil.toBean(item, BomSpec.class))
@@ -167,7 +167,7 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
         bomOperatingLogService.save(bomOperatingLog);
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @DSTransactional
     @Override
     public void edit(BomDto bomDto) {
         List<FileInfo> fileInfoList = new ArrayList<>();
@@ -182,10 +182,10 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
             fileInfo.setBusinessType(ObsFileUtil.defaultFileType);
             fileInfoList.add(fileInfo);
 
-            bomDto.setMainImgUrl(mainImgFile.getFileName());
+            bomDto.setMainImgUrl(mainImgFile.getFileUrl());
         }
 
-        List<BomSpecDto> bomSpecDtoList = bomDto.getBomSpecDtoList();
+        List<BomSpecDto> bomSpecDtoList = bomDto.getBomSpecList();
         List<BomSpec> bomSpecList = bomSpecDtoList.stream()
                 .peek(item -> {
                     item.setId(ObjectUtil.defaultIfNull(item.getId(), IdWorker.getId()));
@@ -201,7 +201,7 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
                         fileInfo.setBusinessType(ObsFileUtil.defaultFileType);
                         fileInfoList.add(fileInfo);
 
-                        item.setMainImgUrl(imgFile.getFileName());
+                        item.setMainImgUrl(imgFile.getFileUrl());
                     }
                 })
                 .map(item -> BeanUtil.toBean(item, BomSpec.class))
@@ -215,16 +215,17 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
                 .filter(Objects::nonNull).distinct().collect(Collectors.toList());
         bomSpecService.remove(q -> q
                 .eq(BomSpec::getBomId, bomDto.getId())
-                .ne(ObjectUtil.isNotEmpty(bomSpecIdList), BaseIdPo::getId, bomSpecIdList));
+                .notIn(ObjectUtil.isNotEmpty(bomSpecIdList), BaseIdPo::getId, bomSpecIdList));
         bomSpecService.saveOrUpdateBatch(bomSpecList);
 
         // 修改文件
         List<Long> businessIdList = bomSpecList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
         businessIdList.add(bomDto.getId());
         List<Long> fileInfoIdList = fileInfoList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+
         fileInfoService.remove(q -> q
                 .in(FileInfo::getBusinessId, businessIdList)
-                .ne(ObjectUtil.isNotEmpty(fileInfoIdList), BaseIdPo::getId, fileInfoIdList));
+                .notIn(ObjectUtil.isNotEmpty(fileInfoIdList), BaseIdPo::getId, fileInfoIdList));
         if (fileInfoList.size() > 0) {
             fileInfoService.updateBatchById(fileInfoList);
         }
@@ -237,7 +238,7 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
         bomOperatingLogService.save(bomOperatingLog);
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @DSTransactional
     @Override
     public void delete(Long id) {
         Bom bom = getById(id);

+ 5 - 0
sd-business/src/main/java/com/sd/business/service/production/StockPreparationService.java

@@ -18,4 +18,9 @@ public interface StockPreparationService {
      */
     Page<StockPreparationVo> completedPage(StockPreparationDto dto);
 
+    /**
+     * 提交备料
+     */
+    void submit(List<Long> orderSkuIdList);
+
 }

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

@@ -2,6 +2,7 @@ package com.sd.business.service.production.impl;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.constant.StatusConstant;
+import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.department.po.Department;
@@ -12,11 +13,19 @@ import com.sd.business.entity.production.dto.StockPreparationDto;
 import com.sd.business.entity.production.vo.StockPreparationVo;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.mapper.production.StockPreparationMapper;
+import com.sd.business.service.order.OrderService;
+import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.production.StockPreparationService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class StockPreparationServiceImpl implements StockPreparationService {
@@ -24,25 +33,82 @@ public class StockPreparationServiceImpl implements StockPreparationService {
     @Resource
     private StockPreparationMapper stockPreparationMapper;
 
+    @Autowired
+    private OrderSkuService orderSkuService;
+
+    @Autowired
+    private OrderService orderService;
 
     @Override
     public List<StockPreparationVo> uncompletedList(StockPreparationDto dto) {
         IWrapper<StockPreparationVo> wrapper = createWrapper(dto);
+        wrapper.eq("oi", OrderInfo::getStatus, OrderStatusEnum.STOCK_PREPARATION.getKey());
+        wrapper.eq("os", OrderSku::getStockPreparationStatus, StatusConstant.NO);
         return stockPreparationMapper.uncompletedList(wrapper);
     }
 
     @Override
     public Page<StockPreparationVo> completedPage(StockPreparationDto dto) {
         IWrapper<StockPreparationVo> wrapper = createWrapper(dto);
+        wrapper.eq("os", OrderSku::getStockPreparationStatus, StatusConstant.YES);
         wrapper.orderByDesc("os", OrderSku::getStockPreparationTime);
         wrapper.orderByAsc("os", OrderSku::getId);
         return stockPreparationMapper.completedPage(dto.getPage(), wrapper);
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public synchronized void submit(List<Long> orderSkuIdList) {
+
+        // 更爱状态为已备料
+        List<OrderSku> orderSkuList = orderSkuService.list(q -> q
+                .select(BaseIdPo::getId, OrderSku::getStockPreparationStatus, OrderSku::getOrderId)
+                .eq(OrderSku::getStockPreparationStatus, StatusConstant.NO)
+                .in(BaseIdPo::getId, orderSkuIdList));
+        Date stockPreparationTime = new Date();
+        for (OrderSku orderSku : orderSkuList) {
+            orderSku.setStockPreparationTime(stockPreparationTime);
+            orderSku.setStockPreparationStatus(StatusConstant.YES);
+        }
+        orderSkuService.updateBatchById(orderSkuList);
+
+        List<Long> orderIdList = orderSkuList.stream().map(OrderSku::getOrderId).distinct().collect(Collectors.toList());
+        List<OrderSku> list = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIdList));
+        Map<Long, List<OrderSku>> map = list.stream().collect(Collectors.groupingBy(OrderSku::getOrderId));
+
+        List<OrderInfo> orderInfoList = new ArrayList<>();
+
+        for (List<OrderSku> tempOrderSku : map.values()) {
+            // 订单中未备料数量
+            long count = tempOrderSku.stream()
+                    .map(OrderSku::getStockPreparationStatus)
+                    .filter(item -> item.equals(StatusConstant.NO))
+                    .count();
+
+            if (count != 0) {
+                continue;
+            }
+
+            // 订单状态改为 生产中
+            OrderInfo orderInfo = new OrderInfo();
+            orderInfo.setId(tempOrderSku.get(0).getOrderId());
+            orderInfo.setStatus(OrderStatusEnum.REJECT.getKey());
+            orderInfoList.add(orderInfo);
+
+            // TODO 生成生产任务和生产工单
+
+            // TODO 出库
+
+        }
+
+        if (orderInfoList.size() > 0) {
+            orderService.updateBatchById(orderInfoList);
+        }
+
+    }
+
     private IWrapper<StockPreparationVo> createWrapper(StockPreparationDto dto) {
         IWrapper<StockPreparationVo> wrapper = IWrapper.getWrapper();
-        wrapper.eq("oi", OrderInfo::getStatus, OrderStatusEnum.STOCK_PREPARATION.getKey());
-        wrapper.eq("os", OrderSku::getStockPreparationStatus, StatusConstant.NO);
 
         wrapper.eq("oi", OrderInfo::getCode, dto.getOrderCode());
         wrapper.eq("oi", OrderInfo::getWlnCode, dto.getOrderWlnCode());

+ 1 - 1
sd-business/src/main/resources/mapper/bom/BomSpecMapper.xml

@@ -15,7 +15,7 @@
                bs.length,
                bs.width,
                bs.height,
-               bs.netWeight,
+               bs.net_weight,
                bs.create_user,
                bs.create_time,
                bs.update_user,

+ 2 - 1
sd-business/src/main/resources/mapper/production/StockPreparationMapper.xml

@@ -22,7 +22,8 @@
                bs.height,
                os.quantity,
                oi.code     orderCode,
-               oi.wln_code orderWlnCode
+               oi.wln_code orderWlnCode,
+               os.id       orderSkuId
         from order_info oi
                  inner join order_sku os on oi.id = os.order_id
                  left join department d on oi.department_id = d.id

+ 1 - 1
sd-framework/src/main/java/com/sd/framework/aspect/DataSourceAspect.java

@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
 @Order(Ordered.HIGHEST_PRECEDENCE)
 public class DataSourceAspect {
 
-    @Pointcut("execution (* com.*.*.service.*.*.*(..))")
+    @Pointcut("execution (* com.*.*.service.*.*.*(..)) || execution (* com.*.*.service.*.*(..))")
     public void pointcut() {
 
     }