|
@@ -0,0 +1,133 @@
|
|
|
+package com.sd.business.service.work.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
+import com.ruoyi.common.exception.ServiceException;
|
|
|
+import com.sd.business.entity.order.po.OrderSku;
|
|
|
+import com.sd.business.entity.sku.po.SkuSpec;
|
|
|
+import com.sd.business.entity.work.dto.WorkOrderSelectDto;
|
|
|
+import com.sd.business.entity.work.enums.WorkOrderFixationSpecEnum;
|
|
|
+import com.sd.business.entity.work.po.WorkOrder;
|
|
|
+import com.sd.business.entity.work.vo.WorkOrderVo;
|
|
|
+import com.sd.business.mapper.work.WorkOrderMapper;
|
|
|
+import com.sd.business.service.sku.SkuSpecService;
|
|
|
+import com.sd.business.service.work.WorkOrderService;
|
|
|
+import com.sd.framework.util.Assert;
|
|
|
+import com.sd.framework.util.sql.Sql;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 生产工单 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author
|
|
|
+ * @since 2024-01-02
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder> implements WorkOrderService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SkuSpecService skuSpecService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<WorkOrderVo> getPage(WorkOrderSelectDto dto) {
|
|
|
+
|
|
|
+ Page<WorkOrderVo> page = Sql.create(WorkOrderVo.class)
|
|
|
+ .selectAll(WorkOrder.class)
|
|
|
+ .from(WorkOrder.class)
|
|
|
+ .orderByDesc(WorkOrder::getId)
|
|
|
+ .page(dto);
|
|
|
+
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public WorkOrderVo detail(Long id) {
|
|
|
+
|
|
|
+ WorkOrderVo vo = Sql.create(WorkOrderVo.class)
|
|
|
+ .selectAll(WorkOrder.class)
|
|
|
+ .from(WorkOrder.class)
|
|
|
+ .eq(WorkOrder::getId, id)
|
|
|
+ .one();
|
|
|
+
|
|
|
+ Assert.notNull(vo, "未知数据");
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void scheduling(List<OrderSku> list) {
|
|
|
+
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 固定排版订单
|
|
|
+ List<OrderSku> fixationList = new ArrayList<>();
|
|
|
+
|
|
|
+ // 不固定排版订单
|
|
|
+ List<OrderSku> notFixationList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<Long> skuSpecIdList = list.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList());
|
|
|
+ Map<Long, SkuSpec> skuSpecMap = skuSpecService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, skuSpecIdList));
|
|
|
+
|
|
|
+ for (OrderSku orderSku : list) {
|
|
|
+ Long skuSpecId = orderSku.getSkuSpecId();
|
|
|
+ SkuSpec skuSpec = skuSpecMap.get(skuSpecId);
|
|
|
+ boolean fixation = WorkOrderFixationSpecEnum.isFixation(skuSpec.getLength(), skuSpec.getWidth());
|
|
|
+
|
|
|
+ if (fixation) {
|
|
|
+ fixationList.add(orderSku);
|
|
|
+ } else {
|
|
|
+ notFixationList.add(orderSku);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 固定排版
|
|
|
+ fixationScheduling(skuSpecMap, fixationList);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 固定排版
|
|
|
+ */
|
|
|
+ private void fixationScheduling(Map<Long, SkuSpec> skuSpecMap, List<OrderSku> list) {
|
|
|
+
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据固定排版规则区分
|
|
|
+ Map<WorkOrderFixationSpecEnum, List<OrderSku>> map = list.stream().collect(Collectors.groupingBy(
|
|
|
+ item -> {
|
|
|
+ SkuSpec skuSpec = skuSpecMap.get(item.getSkuSpecId());
|
|
|
+ if (skuSpec == null) {
|
|
|
+ throw new ServiceException("未知Sku规格");
|
|
|
+ }
|
|
|
+ return WorkOrderFixationSpecEnum.getEnum(skuSpec.getLength(), skuSpec.getWidth());
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ map.forEach(this::doFixationScheduling);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 固定排版
|
|
|
+ */
|
|
|
+ private void doFixationScheduling(WorkOrderFixationSpecEnum workOrderFixationSpecEnum, List<OrderSku> list) {
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|