From 8e39c9bbf8a8bb4707f2a766295b40497ae96706 Mon Sep 17 00:00:00 2001
From: XiaoRuby <3114200645@qq.com>
Date: 星期五, 01 九月 2023 13:46:54 +0800
Subject: [PATCH] MOM系统-9-01 生产订单 生产计划完成

---
 production-server/src/main/java/com/yuanchu/mom/service/impl/ManualTechnologyServiceImpl.java |  136 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 131 insertions(+), 5 deletions(-)

diff --git a/production-server/src/main/java/com/yuanchu/mom/service/impl/ManualTechnologyServiceImpl.java b/production-server/src/main/java/com/yuanchu/mom/service/impl/ManualTechnologyServiceImpl.java
index 874c759..a3ce511 100644
--- a/production-server/src/main/java/com/yuanchu/mom/service/impl/ManualTechnologyServiceImpl.java
+++ b/production-server/src/main/java/com/yuanchu/mom/service/impl/ManualTechnologyServiceImpl.java
@@ -1,16 +1,35 @@
 package com.yuanchu.mom.service.impl;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.mom.mapper.DeviceMapper;
 import com.yuanchu.mom.mapper.ManualTechnologyMapper;
-import com.yuanchu.mom.pojo.ManualTechnology;
+import com.yuanchu.mom.mapper.ManufactureOrderMapper;
+import com.yuanchu.mom.pojo.*;
+import com.yuanchu.mom.pojo.dto.ManualTechnologyDto;
+import com.yuanchu.mom.pojo.dto.ManualTechnologyDto1;
 import com.yuanchu.mom.service.ManualTechnologyService;
+import com.yuanchu.mom.service.ManufactureOrderProcessService;
+import com.yuanchu.mom.service.ManufactureSchedulingService;
+import com.yuanchu.mom.service.TechnologyService;
+import com.yuanchu.mom.utils.MyUtil;
+import org.springframework.beans.BeanUtils;
+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.List;
-import java.util.Map;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 缂栧埗宸ュ簭琛�(ManualTechnology)琛ㄦ湇鍔″疄鐜扮被
@@ -25,12 +44,119 @@
     ManualTechnologyMapper manualTechnologyMapper;
 
     @Resource
-    DeviceMapper deviceMapper;
+    ManufactureOrderMapper manufactureOrderMapper;
+
+    @Autowired
+    private TechnologyService technologyService;
+
+    @Autowired
+    private ManufactureSchedulingService manufactureSchedulingService;
+
+    @Autowired
+    private ManufactureOrderProcessService manufactureOrderProcessService;
 
     //鎺掍骇-->鏌ョ湅
     @Override
-    public List<Map<String,Object>> seleDatil(Integer manOrdId) {
+    public List<Map<String, Object>> seleDatil(Integer manOrdId) {
         return manualTechnologyMapper.seleDatil(manOrdId);
     }
+
+    //鎺掍骇-->鏇存柊
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void output(ManualTechnologyDto manualTechnologyDto) throws ParseException {
+
+        // 鏍规嵁鎺掍骇鏁伴噺璁$畻宸ヨ壓鍛ㄦ湡
+        List<ManufactureOrderProcess> manufactureOrderProcessesPeriod = matchingCycle(
+                manualTechnologyDto.getSchedulingNumber(),
+                manualTechnologyDto.getManOrdId(),
+                manualTechnologyDto.getOrderProcess());
+
+
+        // 鏍规嵁宸ュ簭鐢熶骇瀹氶鍖归厤鏃堕棿
+        List<ManufactureOrderProcess> manufactureOrderProcessesDate = datePeriodCalculate(
+                manualTechnologyDto.getDate(),
+                manufactureOrderProcessesPeriod);
+
+
+        // 娣诲姞涓�鏉℃帓浜ц褰曞埌manufacture_scheduling琛ㄦ牸锛岃繑鍥炰富閿甀d
+        Date endTime = manufactureOrderProcessesDate.get(manufactureOrderProcessesDate.size() - 1).getEndTime();
+        ManufactureScheduling manufactureScheduling = new ManufactureScheduling()
+                .setScheduled(manualTechnologyDto.getSchedulingNumber())
+                .setStartTime(DateUtil.parse(manualTechnologyDto.getDate()))
+                .setEndTime(endTime)
+                .setManufactureOrderId(manualTechnologyDto.getManOrdId())
+                .setGoState(0); // 0 琛ㄧず寰呬笅杈�
+        manufactureSchedulingService.save(manufactureScheduling);
+
+
+        // 灏嗘帓琛↖d鎻掑叆鍒癿anufactureOrderProcessesDate涓�, 寮�濮嬫壒閲忔彃鍏anufactureOrderProcesses琛ㄦ牸
+        manufactureOrderProcessesDate.forEach(i -> i.setManufactureSchedulingId(manufactureScheduling.getId()));
+        manufactureOrderProcessService.batchInsert(manufactureOrderProcessesDate);
+
+
+        // 鏇存柊璁㈠崟鐨勫凡鎺掍骇鏁伴噺
+        manufactureOrderMapper.updateManufacture(manualTechnologyDto.getManOrdId(), manualTechnologyDto.getSchedulingNumber());
+    }
+
+    @Override
+    public Integer updateTime(Integer technologyId, String startTime) {
+//        // Hutool 宸ュ叿绫昏绠楅棿闅斿皬鏃�
+//        DateTime startTime1 = DateUtil.parse(startTime);
+//        DateTime endTime1 = DateUtil.parse(endTime);
+//        long between = DateUtil.between(startTime1, endTime1, DateUnit.HOUR);
+//        // 鏇存柊
+//        LambdaUpdateWrapper<ManualTechnology> updateWrapper = Wrappers.<ManualTechnology>lambdaUpdate()
+//                .eq(ManualTechnology::getId, technologyId);
+//        return manualTechnologyMapper.update(new ManualTechnology(), updateWrapper);
+        return null;
+    }
+
+    // 鏍规嵁鎺掍骇鏁伴噺璁$畻宸ヨ壓鍛ㄦ湡
+    private List<ManufactureOrderProcess> matchingCycle(Integer schedulingNumber, Integer manOrdId, List<ManualTechnologyDto1> manualTechnologyDtoList){
+        // 鏌ヨ缂栧埗宸ヨ壓锛岀敤浜庡尮閰嶆瘡涓鍗曠殑宸ュ簭鍛ㄦ湡
+        LambdaQueryWrapper<ManualTechnology> queryWrapper = Wrappers.<ManualTechnology>lambdaQuery()
+                .eq(ManualTechnology::getManufactureOrderId, manOrdId);
+        List<ManualTechnology> technologies = manualTechnologyMapper.selectList(queryWrapper);
+
+        //鍖归厤姣忎釜璁㈠崟鐨勫伐搴忓懆鏈�
+        List<ManufactureOrderProcess> manufactureOrderProcessList = manualTechnologyDtoList.stream().map(manualTechnologyDto1 -> {
+            ManufactureOrderProcess manufactureOrderProcess = new ManufactureOrderProcess();
+            BeanUtils.copyProperties(manualTechnologyDto1, manufactureOrderProcess);
+            technologies.forEach(i -> {
+                if (Objects.equals(manufactureOrderProcess.getManualTechnologyId(), i.getId())){
+                    manufactureOrderProcess.setPeriod((int) Math.ceil((double)schedulingNumber/i.getProductionQuota()));
+                }
+            });
+            return manufactureOrderProcess;
+        }).collect(Collectors.toList());
+        return manufactureOrderProcessList;
+    }
+
+    // 鏍规嵁宸ュ簭鐢熶骇瀹氶鍖归厤鏃堕棿
+    private List<ManufactureOrderProcess> datePeriodCalculate(String date, List<ManufactureOrderProcess> manualTechnologies) throws ParseException {
+        // 璁$畻宸ュ簭鐨勫紑濮嬫棩鏈熶互鍙婄粨鏉熸棩鏈�
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date parse = dateFormat.parse(date);
+        //灏嗚捣濮嬫棩鏈熻祴鍊肩粰Calendar瀵硅薄
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(parse);
+        //绗竴涓伐搴�
+        ManufactureOrderProcess manualTechnology = manualTechnologies.get(0);
+        calendar.add(Calendar.DATE, manualTechnology.getPeriod());
+
+        manualTechnology.setStartTime(parse).setEndTime(calendar.getTime());
+        //寰幆璧嬪�兼椂闂�
+        for (int i = 0; i < manualTechnologies.size()-1 ; i++) {
+            Calendar calendar1 = Calendar.getInstance();
+            calendar1.setTime(manualTechnologies.get(i).getEndTime());
+            ManufactureOrderProcess technology = manualTechnologies.get(i + 1);
+            calendar1.add(Calendar.DATE,1);
+            technology.setStartTime(calendar1.getTime());
+            calendar1.add(Calendar.DATE,technology.getPeriod());
+            technology.setEndTime(calendar1.getTime());
+        }
+        return manualTechnologies;
+    }
 }
 

--
Gitblit v1.9.3