From 1eefb88049771407e0d0f9c8711bd473e44a1ba6 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期四, 07 八月 2025 16:36:19 +0800
Subject: [PATCH] art: SAP 生产订单报工、投料、关闭接口初始代码

---
 src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java |   84 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java b/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java
index 0bfbfb8..51adc5b 100644
--- a/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java
@@ -1,10 +1,29 @@
 package org.jeecg.modules.mes.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.modules.base.entity.Factory;
+import org.jeecg.modules.base.entity.Shift;
+import org.jeecg.modules.base.entity.ShiftGroup;
+import org.jeecg.modules.base.service.IFactoryService;
+import org.jeecg.modules.base.service.IShiftGroupService;
+import org.jeecg.modules.base.service.IShiftService;
+import org.jeecg.modules.mes.dto.MesProductionWorkScheduleRequest;
 import org.jeecg.modules.mes.service.IMesProductionWorkOrderService;
 import org.jeecg.modules.mes.entity.MesProductionWorkOrder;
 import org.jeecg.modules.mes.mapper.MesProductionWorkOrderMapper;
+import org.jeecg.modules.system.service.ISysDictService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Description: 鎺掍骇宸ュ崟
@@ -14,5 +33,70 @@
  */
 @Service
 public class MesProductionWorkOrderServiceImpl extends ServiceImpl<MesProductionWorkOrderMapper, MesProductionWorkOrder> implements IMesProductionWorkOrderService {
+    @Autowired
+    private IShiftService shiftService;
+    @Autowired
+    private IShiftGroupService shiftGroupService;
+    @Autowired
+    private IFactoryService factoryService;
 
+    @Override
+    public List<MesProductionWorkOrder> schedule(MesProductionWorkScheduleRequest request) {
+        //鏌ヨ璧锋鏃ユ湡鑼冨洿鍐呯殑鎺掍骇璁″垝锛屽厛鎺掗櫎
+        //鏌ヨ璇ヤ骇绾夸笅鎵�鏈夌殑鐝
+        Map<String, ShiftGroup> shiftGroupMap = shiftGroupService.list(new LambdaQueryWrapper<ShiftGroup>()
+                        .eq(ShiftGroup::getFactoryId, request.getFactoryId())
+                        .eq(ShiftGroup::getDelFlag, CommonConstant.DEL_FLAG_0))
+                .stream().collect(Collectors.toMap(ShiftGroup::getShiftId, v1 -> v1, (v1, v2) -> v1));
+        Factory factory = factoryService.getById(request.getFactoryId());
+        Map<String, Shift> shiftNameMap = new HashMap<>();
+        List<Shift> shifts = shiftService.list(new LambdaQueryWrapper<Shift>()
+                .in(Shift::getId, shiftGroupMap.keySet()));
+        shifts.forEach(shift -> shiftNameMap.put(shift.getId(), shift));
+
+        LocalDate startDate = request.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        LocalDate endDate = request.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        // 浣跨敤鏃ユ湡鑼冨洿杩涜閬嶅巻澶勭悊
+        List<LocalDate> dateRange = Stream.iterate(startDate, date -> date.plusDays(1))
+                .limit(ChronoUnit.DAYS.between(startDate, endDate) + 1)
+                .collect(Collectors.toList());
+        List<MesProductionWorkOrder> newProductionWorkOrderList = CollectionUtil.newArrayList();
+
+        for (LocalDate date : dateRange) {
+            for (String shiftId : shiftGroupMap.keySet()) {
+                Date workOrderDate = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
+                //鏌ヨ璇ヤ骇绾裤�佺彮娆″湪璇ユ棩鏈熶笅鏄惁鏈夋帓浜ц鍒�
+                Optional<MesProductionWorkOrder> optional = list(new LambdaQueryWrapper<MesProductionWorkOrder>()
+                        .eq(MesProductionWorkOrder::getWorkOrderDate, workOrderDate)
+                        .eq(MesProductionWorkOrder::getFactoryId, request.getFactoryId())
+                        .eq(MesProductionWorkOrder::getShiftId, shiftId))
+                        .stream().findAny();
+                if (!optional.isPresent()) {
+                    ShiftGroup shiftGroup = shiftGroupMap.get(shiftId);
+                    //娌℃湁锛岀敓鎴愭柊鎺掍骇璁″垝
+                    MesProductionWorkOrder mesProductionWorkOrder = new MesProductionWorkOrder()
+                            .setFactoryId(factory.getId())
+                            .setFactoryCode(factory.getFactoryCode())
+                            .setFactoryName(factory.getFactoryName())
+                            .setShiftId(shiftId)
+                            .setShiftCode(shiftNameMap.get(shiftId).getShiftCode())
+                            .setShiftName(shiftNameMap.get(shiftId).getShiftName())
+                            .setGroupId(shiftGroup.getId())
+                            .setGroupName(shiftGroup.getGroupName())
+                            .setWorkOrderDate(workOrderDate);
+
+                    newProductionWorkOrderList.add(mesProductionWorkOrder);
+                }
+            }
+        }
+        //濡傛灉涓虹┖锛岄粯璁ょ粰涓�鏉★紝鐢ㄤ簬鎵嬪姩鏂板鏃惰〃鏍肩殑鍒濆鍖�
+        if (newProductionWorkOrderList.isEmpty()) {
+            MesProductionWorkOrder mesProductionWorkOrder = new MesProductionWorkOrder()
+                    .setFactoryId(factory.getId())
+                    .setFactoryCode(factory.getFactoryCode())
+                    .setFactoryName(factory.getFactoryName());
+            newProductionWorkOrderList.add(mesProductionWorkOrder);
+        }
+        return newProductionWorkOrderList;
+    }
 }

--
Gitblit v1.9.3