|
@@ -0,0 +1,486 @@
|
|
|
+package com.zkqy.amichi.service.impl;
|
|
|
+
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
+import com.zkqy.amichi.domain.*;
|
|
|
+import com.zkqy.amichi.domain.vo.*;
|
|
|
+import com.zkqy.amichi.mapper.*;
|
|
|
+import com.zkqy.amichi.service.IManhourService;
|
|
|
+import com.zkqy.amichi.utils.AmichiCommissionNumberGenerator;
|
|
|
+import com.zkqy.amichi.utils.PurchaseNumberGenerator;
|
|
|
+import com.zkqy.common.utils.DateUtils;
|
|
|
+import com.zkqy.common.utils.SecurityUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import com.zkqy.amichi.service.IOnSiteProgramDetailsService;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 场内计划详情crudService业务层处理
|
|
|
+ *
|
|
|
+ * @author zkqy
|
|
|
+ * @date 2024-08-06
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class OnSiteProgramDetailsServiceImpl implements IOnSiteProgramDetailsService
|
|
|
+{
|
|
|
+ @Autowired
|
|
|
+ private OnSiteProgramDetailsMapper onSiteProgramDetailsMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProductionPlanningManagementMapper productionPlanningManagementMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AmichiCommissionNumberGenerator amichiCommissionNumberGenerator;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SemiFinishedMaterialListMapper semiFinishedMaterialListMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ //插入工时信息
|
|
|
+ IManhourService manhourService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ AutomaticSchedulingOnSiteMapper automaticSchedulingOnSiteMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ PurchaseNumberGenerator purchaseNumberGenerator;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ PurchaseOrderMapper purchaseOrderMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ PocurementdetailsMapper pocurementdetailsMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SchedulingProcessTimeMapper schedulingProcessTimeMapper;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询场内计划详情crud
|
|
|
+ *
|
|
|
+ * @param id 场内计划详情crud主键
|
|
|
+ * @return 场内计划详情crud
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public OnSiteProgramDetails selectOnSiteProgramDetailsById(Long id)
|
|
|
+ {
|
|
|
+ return onSiteProgramDetailsMapper.selectOnSiteProgramDetailsById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询场内计划详情crud列表
|
|
|
+ *
|
|
|
+ * @param onSiteProgramDetails 场内计划详情crud
|
|
|
+ * @return 场内计划详情crud
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<OnSiteProgramDetails> selectOnSiteProgramDetailsList(OnSiteProgramDetails onSiteProgramDetails)
|
|
|
+ {
|
|
|
+ return onSiteProgramDetailsMapper.selectOnSiteProgramDetailsList(onSiteProgramDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增场内计划详情crud
|
|
|
+ *
|
|
|
+ * @param onSiteProgramDetails 场内计划详情crud
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int insertOnSiteProgramDetails(OnSiteProgramDetails onSiteProgramDetails)
|
|
|
+ {
|
|
|
+ onSiteProgramDetails.setCreateTime(DateUtils.getNowDate());
|
|
|
+ return onSiteProgramDetailsMapper.insertOnSiteProgramDetails(onSiteProgramDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改场内计划详情crud
|
|
|
+ *
|
|
|
+ * @param onSiteProgramDetails 场内计划详情crud
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int updateOnSiteProgramDetails(OnSiteProgramDetails onSiteProgramDetails)
|
|
|
+ {
|
|
|
+ onSiteProgramDetails.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ return onSiteProgramDetailsMapper.updateOnSiteProgramDetails(onSiteProgramDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量删除场内计划详情crud
|
|
|
+ *
|
|
|
+ * @param ids 需要删除的场内计划详情crud主键
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int deleteOnSiteProgramDetailsByIds(Long[] ids)
|
|
|
+ {
|
|
|
+ //传递过来的是计划id
|
|
|
+ for (Long id : ids) {
|
|
|
+ productionPlanningManagementMapper.deleteProductionPlanningManagementById(id);//删除计划信息
|
|
|
+ //删除关于这个物料的详细信息
|
|
|
+ onSiteProgramDetailsMapper.deleteOnSiteProgramDetailsByPlanid(id.toString());
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除场内计划详情crud信息
|
|
|
+ *
|
|
|
+ * @param id 场内计划详情crud主键
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int deleteOnSiteProgramDetailsById(Long id)
|
|
|
+ {
|
|
|
+ return onSiteProgramDetailsMapper.deleteOnSiteProgramDetailsById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public int insertOnSiteProgramDetailsVo(OnSiteProgramDetailsVo onSiteProgramDetailsVo) {
|
|
|
+ //插入计划信息
|
|
|
+ ProductionPlanningManagement productionPlanningManagement=new ProductionPlanningManagement();
|
|
|
+ productionPlanningManagement.setQuantity(onSiteProgramDetailsVo.getQuantity().toString());//数量
|
|
|
+ productionPlanningManagement.setPlanType("1");//场内还是厂外
|
|
|
+ productionPlanningManagement.setRemark(onSiteProgramDetailsVo.getRemark());//备注
|
|
|
+ String localDateStr = DateUtils.toLocalDateStr(onSiteProgramDetailsVo.getCompletionTime());
|
|
|
+ productionPlanningManagement.setCompletionTime(localDateStr);//完成时间
|
|
|
+ productionPlanningManagement.setTaskStatus("2");//待排产
|
|
|
+ //生成计划编号
|
|
|
+ String s = amichiCommissionNumberGenerator.generateCommissionNumber();
|
|
|
+ //计划编号
|
|
|
+ productionPlanningManagement.setPlanNumber(s);
|
|
|
+ AtomicReference<Double> totalHour= new AtomicReference<>(0.0);
|
|
|
+ AtomicReference<Boolean> booleanAtomicReference=new AtomicReference<>(true);
|
|
|
+ onSiteProgramDetailsVo.getOnSiteProgramDetails().forEach(item->{
|
|
|
+ //查询物料工时,
|
|
|
+ Manhour manhour=new Manhour();
|
|
|
+ manhour.setProductCode(item.getItemCode());
|
|
|
+ manhour.setProductModel(item.getModelMumber());
|
|
|
+ manhour.setProductSpecification(item.getSpecification());
|
|
|
+ List<Manhour> manhours = manhourService.selectManhourList(manhour);
|
|
|
+ if(manhours.size()>0){
|
|
|
+ totalHour.set(totalHour.get()+Double.parseDouble(manhours.get(0).getManhourspent()));
|
|
|
+ }
|
|
|
+ //这里是不能计算这个物流是否齐全的,如果说有的订单生产比他早那么就只能是他物料不齐全,不能是排在前边那个待生产的订单因为物料问题不能生产.
|
|
|
+ SemiFinishedMaterialList semiFinishedMaterialList=new SemiFinishedMaterialList();
|
|
|
+ semiFinishedMaterialList.setFid(item.getItemId().toString());
|
|
|
+ List<SemiFinishedMaterialListAndMaterialInventory> semiFinishedMaterialListAndMaterialInventories = semiFinishedMaterialListMapper.selectSemiFinishedMaterialListListJoinMaterialInventory(semiFinishedMaterialList);
|
|
|
+ List<SemiFinishedMaterialListAndMaterialInventory> collect = semiFinishedMaterialListAndMaterialInventories.stream()
|
|
|
+ .filter(a -> Double.parseDouble(a.getStockQuantity().toString()) < (Double.parseDouble(a.getAmountOfMateria())*item.getQuantity())).collect(Collectors.toList());
|
|
|
+ if(collect.size()>0){
|
|
|
+ booleanAtomicReference.set(false);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if(booleanAtomicReference.get()==false){
|
|
|
+ productionPlanningManagement.setSpareb("1");//物料是否齐全
|
|
|
+ }else {
|
|
|
+ productionPlanningManagement.setSpareb("0");//物料是否齐全
|
|
|
+ }
|
|
|
+ productionPlanningManagement.setSparea(totalHour.get().toString());//总功工时信息
|
|
|
+ //先不锁定物料信息(先判定这条计划物料是否完整)
|
|
|
+
|
|
|
+ //插入计划详情信息
|
|
|
+ int i = productionPlanningManagementMapper.insertProductionPlanningManagement(productionPlanningManagement);
|
|
|
+ onSiteProgramDetailsVo.getOnSiteProgramDetails().forEach(item->{
|
|
|
+ //插入计划详情信息
|
|
|
+ item.setPlanId(productionPlanningManagement.getId().toString());//计划号
|
|
|
+ onSiteProgramDetailsMapper.insertOnSiteProgramDetails(item);
|
|
|
+ });
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<OnSiteProgramDetailsVo> getOnSiteProgramDetailsInfoVo(ProductionPlanningManagementVo productionPlanningManagementVo) {
|
|
|
+ //查询计划类型plan_type=1的信息
|
|
|
+ ProductionPlanningManagement productionPlanningManagement=new ProductionPlanningManagement();
|
|
|
+ productionPlanningManagement.setPlanType(productionPlanningManagementVo.getPlanType());//计划类型为1
|
|
|
+ List<ProductionPlanningManagement> productionPlanningManagements = productionPlanningManagementMapper.selectProductionPlanningManagementList(productionPlanningManagement);
|
|
|
+ List<OnSiteProgramDetailsVo> collect = productionPlanningManagements.stream().map(item -> {
|
|
|
+ OnSiteProgramDetailsVo onSiteProgramDetailsVo = new OnSiteProgramDetailsVo();
|
|
|
+ onSiteProgramDetailsVo.setQuantity(Integer.valueOf(item.getQuantity())); //数量
|
|
|
+ onSiteProgramDetailsVo.setRemark(item.getRemark());//备注
|
|
|
+ LocalDate localDate = DateUtils.toLocalDate(item.getCompletionTime().toString(), "yyyy-MM-dd");
|
|
|
+ onSiteProgramDetailsVo.setCompletionTime(localDate); //完成时间
|
|
|
+ onSiteProgramDetailsVo.setPlanNumber(item.getPlanNumber());//计划编号
|
|
|
+ onSiteProgramDetailsVo.setTaskStatus(item.getTaskStatus());//投产状态
|
|
|
+ onSiteProgramDetailsVo.setId(item.getId().toString());//计划id;
|
|
|
+ //计划详细信息
|
|
|
+ OnSiteProgramDetails onSiteProgramDetails = new OnSiteProgramDetails();
|
|
|
+ onSiteProgramDetails.setPlanId(item.getId().toString());//计划id
|
|
|
+ List<OnSiteProgramDetails> onSiteProgramDetails1 = onSiteProgramDetailsMapper.selectOnSiteProgramDetailsList(onSiteProgramDetails);
|
|
|
+ onSiteProgramDetailsVo.setOnSiteProgramDetails(onSiteProgramDetails1);
|
|
|
+ return onSiteProgramDetailsVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ return collect;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public OnSiteProgramDetailsVo selectOnSiteProgramDetailsVoById(Long id) {
|
|
|
+ //查询计划类型plan_type=1的信息
|
|
|
+ ProductionPlanningManagement productionPlanningManagements = productionPlanningManagementMapper.selectProductionPlanningManagementById(id);
|
|
|
+ OnSiteProgramDetailsVo onSiteProgramDetailsVo = new OnSiteProgramDetailsVo();
|
|
|
+ onSiteProgramDetailsVo.setQuantity(Integer.valueOf(productionPlanningManagements.getQuantity())); //数量
|
|
|
+ onSiteProgramDetailsVo.setRemark(productionPlanningManagements.getRemark());//备注
|
|
|
+ LocalDate localDate = DateUtils.toLocalDate(productionPlanningManagements.getCompletionTime().toString(), "yyyy-MM-dd");
|
|
|
+ onSiteProgramDetailsVo.setCompletionTime(localDate); //完成时间
|
|
|
+ onSiteProgramDetailsVo.setPlanNumber(productionPlanningManagements.getPlanNumber());//计划编号
|
|
|
+ onSiteProgramDetailsVo.setTaskStatus(productionPlanningManagements.getTaskStatus());//投产状态
|
|
|
+ onSiteProgramDetailsVo.setId(productionPlanningManagements.getId().toString());//计划id;
|
|
|
+ //计划详细信息
|
|
|
+ OnSiteProgramDetails onSiteProgramDetails = new OnSiteProgramDetails();
|
|
|
+ onSiteProgramDetails.setPlanId(productionPlanningManagements.getId().toString());//计划id
|
|
|
+ List<OnSiteProgramDetails> onSiteProgramDetails1 = onSiteProgramDetailsMapper.selectOnSiteProgramDetailsList(onSiteProgramDetails);
|
|
|
+ onSiteProgramDetailsVo.setOnSiteProgramDetails(onSiteProgramDetails1);
|
|
|
+ return onSiteProgramDetailsVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int editOnSiteProgramDetailsAndProductionPlanning(OnSiteProgramDetailsVo onSiteProgramDetails) {
|
|
|
+ //查询计划类型plan_type=1的信息
|
|
|
+ ProductionPlanningManagement productionPlanningManagements =new ProductionPlanningManagement();
|
|
|
+ productionPlanningManagements.setQuantity(onSiteProgramDetails.getQuantity().toString());//数量
|
|
|
+ productionPlanningManagements.setRemark(onSiteProgramDetails.getRemark());//备注
|
|
|
+ productionPlanningManagements.setCompletionTime(productionPlanningManagements.getCompletionTime()); //完成时间
|
|
|
+ productionPlanningManagements.setId(Long.valueOf(onSiteProgramDetails.getId()));
|
|
|
+ int i = productionPlanningManagementMapper.updateProductionPlanningManagement(productionPlanningManagements);
|
|
|
+ //删除
|
|
|
+ onSiteProgramDetailsMapper.deleteOnSiteProgramDetailsByPlanid(onSiteProgramDetails.getId());
|
|
|
+ //循环新增
|
|
|
+ onSiteProgramDetails.getOnSiteProgramDetails().forEach(item->{
|
|
|
+ //插入计划详情信息
|
|
|
+ item.setPlanId(onSiteProgramDetails.getId());//计划id
|
|
|
+ item.setId(null);
|
|
|
+ onSiteProgramDetailsMapper.insertOnSiteProgramDetails(item);
|
|
|
+ });
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<OnSiteProgramDetails> selectOnSiteProgramDetailsListInPlanId(List<String> ids) {
|
|
|
+ return onSiteProgramDetailsMapper.selectOnSiteProgramDetailsListInPlanId(ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * A计划
|
|
|
+ * 产品 A需要 10个
|
|
|
+ * B计划
|
|
|
+ * 产品 B需要
|
|
|
+ * @param stringIds
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public int inPlanAutomaticScheduling(List<String> stringIds) {
|
|
|
+ List<ProductionPlanningManagementVo> managementVoList = productionPlanningManagementMapper.selectProductionPlanningManagementListVoIn(stringIds);
|
|
|
+
|
|
|
+ //根据排产类型查询工序工时信息
|
|
|
+ SchedulingProcessTime schedulingProcessTime=new SchedulingProcessTime();//排产数据对象
|
|
|
+ schedulingProcessTime.setSchedulingType("3");//排产类型
|
|
|
+ List<SchedulingProcessTime> schedulingProcessTimes = schedulingProcessTimeMapper.selectSchedulingProcessTimeList(schedulingProcessTime);
|
|
|
+ //收集为工序+时间信息Map(工序名称,工序时间)
|
|
|
+ Map<String, String> schedulingProcessTimesMap = schedulingProcessTimes.stream()
|
|
|
+ .collect(Collectors.toMap(SchedulingProcessTime::getSchedulingProcessName,SchedulingProcessTime::getSchedulingProcessTime));
|
|
|
+ //插入场内排产信息
|
|
|
+ managementVoList.stream().forEach(item->{
|
|
|
+ AutomaticSchedulingOnSite automaticSchedulingOnSite=new AutomaticSchedulingOnSite();
|
|
|
+ automaticSchedulingOnSite.setWorkmanship(item.getPlanNumber());//计划编号
|
|
|
+ automaticSchedulingOnSite.setQuantity(item.getQuantity());//数量台
|
|
|
+
|
|
|
+ automaticSchedulingOnSite.setPlanstarttime(item.getCompletionTime());//计划开始时间 ---不对应没关系!懒的改了
|
|
|
+
|
|
|
+
|
|
|
+ automaticSchedulingOnSite.setReminder("");//到期提醒
|
|
|
+
|
|
|
+ //焊接
|
|
|
+ LocalDate localDate = DateUtils.toLocalDate(item.getCompletionTime(), "yyyy-MM-dd");
|
|
|
+ automaticSchedulingOnSite.setWeld(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+
|
|
|
+ //线嵌
|
|
|
+ int hjTotalTime= getRoundedHjTotalTime(item.getQuantity(),"焊接工段", schedulingProcessTimesMap);
|
|
|
+ int i1=hjTotalTime / 8;
|
|
|
+ LocalDateTime xqGdStartTime = localDate.plusDays(i1).atStartOfDay();
|
|
|
+ automaticSchedulingOnSite.setLineEmbedding(xqGdStartTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+
|
|
|
+
|
|
|
+ //线头绑扎
|
|
|
+ int rqgdTotalTime= getRoundedHjTotalTime(item.getQuantity(),"绕嵌工段", schedulingProcessTimesMap);
|
|
|
+ int i2=rqgdTotalTime / 8;
|
|
|
+ LocalDateTime xtbzStartTime = xqGdStartTime.plusDays(i2);
|
|
|
+ automaticSchedulingOnSite.setWireBinding(xtbzStartTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+
|
|
|
+
|
|
|
+ //浸漆
|
|
|
+ int xtbzTotalTime= getRoundedHjTotalTime(item.getQuantity(),"线头绑扎", schedulingProcessTimesMap);
|
|
|
+ int i3=xtbzTotalTime / 8;
|
|
|
+ LocalDateTime jqStartTime = xtbzStartTime.plusDays(i3);
|
|
|
+ automaticSchedulingOnSite.setVarnish(jqStartTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+
|
|
|
+
|
|
|
+ //压装平衡
|
|
|
+ int jqTotalTime= getRoundedHjTotalTime(item.getQuantity(),"浸漆", schedulingProcessTimesMap);
|
|
|
+ int i4=jqTotalTime / 8;
|
|
|
+ LocalDateTime yzphStartTime = jqStartTime.plusDays(i4);
|
|
|
+ automaticSchedulingOnSite.setPressFitBalance(yzphStartTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+
|
|
|
+
|
|
|
+ //总装
|
|
|
+ int yzphTotalTime= getRoundedHjTotalTime(item.getQuantity(),"压装平衡", schedulingProcessTimesMap);
|
|
|
+ int i5=yzphTotalTime / 8;
|
|
|
+ LocalDateTime zzStartTime = yzphStartTime.plusDays(i5);
|
|
|
+ automaticSchedulingOnSite.setFinalAssembly(zzStartTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //试机开关箱
|
|
|
+ int zzTotalTime= getRoundedHjTotalTime(item.getQuantity(),"总装", schedulingProcessTimesMap);
|
|
|
+ int i6=zzTotalTime / 8;
|
|
|
+ LocalDateTime sjkgxStringTime = zzStartTime.plusDays(i6);
|
|
|
+ automaticSchedulingOnSite.setSwitching(sjkgxStringTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+
|
|
|
+ //包装
|
|
|
+ int sjkgxTotalTime= getRoundedHjTotalTime(item.getQuantity(),"试机开关箱", schedulingProcessTimesMap);
|
|
|
+ int i7=sjkgxTotalTime / 8;
|
|
|
+ LocalDateTime bzStringTime = sjkgxStringTime.plusDays(i7);
|
|
|
+ automaticSchedulingOnSite.setPackageIng(bzStringTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+
|
|
|
+ //完成时间
|
|
|
+ int bgTotalTime= getRoundedHjTotalTime(item.getQuantity(),"包装", schedulingProcessTimesMap);
|
|
|
+ int i8=sjkgxTotalTime / 8;
|
|
|
+ LocalDateTime days = bzStringTime.plusDays(i8);
|
|
|
+ LocalDateTime days1 = days.plusDays(1);
|
|
|
+ automaticSchedulingOnSite.setCompletiontime(days.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));//现在还是空的
|
|
|
+
|
|
|
+ //物料工时信息
|
|
|
+ automaticSchedulingOnSite.setMaterialNo(item.getSpareb());//物料是否齐全
|
|
|
+ int totalTime=hjTotalTime+rqgdTotalTime+xtbzTotalTime+jqTotalTime+yzphTotalTime+zzTotalTime+sjkgxTotalTime+bgTotalTime;
|
|
|
+ automaticSchedulingOnSite.setManHour(String.valueOf(totalTime));//工时信息
|
|
|
+
|
|
|
+
|
|
|
+ automaticSchedulingOnSite.setCreateTime(new DateTime());//创建时间
|
|
|
+ automaticSchedulingOnSite.setCreateById(SecurityUtils.getUserId());//创建人id
|
|
|
+ automaticSchedulingOnSite.setCreateBy(SecurityUtils.getUsername());//创建人姓名
|
|
|
+
|
|
|
+ //插入场内计划信息
|
|
|
+ automaticSchedulingOnSiteMapper.insertAutomaticSchedulingOnSite(automaticSchedulingOnSite);
|
|
|
+ });
|
|
|
+ //更改计划的投产状态
|
|
|
+ stringIds.forEach(item->{
|
|
|
+ ProductionPlanningManagement productionPlanningManagement = new ProductionPlanningManagement();
|
|
|
+ productionPlanningManagement.setTaskStatus("0");
|
|
|
+ productionPlanningManagement.setId(Long.valueOf(item));
|
|
|
+ //改排产状态
|
|
|
+ productionPlanningManagementMapper.updateProductionPlanningManagement(productionPlanningManagement);
|
|
|
+ });
|
|
|
+
|
|
|
+ //查看那些物料是不全的 生成一个采购单(查询这些计划所有的产品信息)
|
|
|
+// List<OnSiteProgramDetailsSumVo> onSiteProgramDetails = onSiteProgramDetailsMapper.selectOnSiteProgramDetailsListInPlanIdPacketCalculationSum(stringIds);
|
|
|
+// List<String> wlIds = onSiteProgramDetails.stream().map(OnSiteProgramDetails::getItemId).map(String::valueOf).collect(Collectors.toList());
|
|
|
+ //所有计划的物料单
|
|
|
+ List<SemiFinishedMaterialListAndMaterialInventory> semiFinishedMaterialListAndMaterialInventories = semiFinishedMaterialListMapper.selectSemiFinishedMaterialListListJoinMaterialInventoryInFid(stringIds);
|
|
|
+ //过滤出来那些物料不够需要添加到采购单里的
|
|
|
+ //创建采购单
|
|
|
+ PurchaseOrder purchaseOrder=new PurchaseOrderVo();
|
|
|
+ String s = purchaseNumberGenerator.generatePurchaseNumber();
|
|
|
+ purchaseOrder.setNumber(s);//采购编号
|
|
|
+ purchaseOrder.setApply("铨一科技");
|
|
|
+ purchaseOrder.setCurrency("人民币");//默认是人民币
|
|
|
+ purchaseOrder.setDepartment("生产部门");
|
|
|
+ purchaseOrder.setTotal(0.0);
|
|
|
+ purchaseOrder.setApplypeople(SecurityUtils.getUsername());//申请人
|
|
|
+ purchaseOrder.setState("3");//状态为0待发起
|
|
|
+ purchaseOrder.setApplytime(LocalDate.now());//申请时间
|
|
|
+ purchaseOrder.setCreateBy(SecurityUtils.getUsername());//创建人
|
|
|
+ purchaseOrder.setCreatepeople(SecurityUtils.getUsername());//创建人
|
|
|
+ purchaseOrder.setDelFlag("0");
|
|
|
+ purchaseOrder.setCreateTime(new DateTime());//创建是时间
|
|
|
+ int i = purchaseOrderMapper.insertPurchaseOrder(purchaseOrder);
|
|
|
+ List<Pocurementdetails> pocurementdetailsArrayList=new ArrayList<>();
|
|
|
+ //========添加采购计划详情信息=================================
|
|
|
+ semiFinishedMaterialListAndMaterialInventories.stream().forEach(item->{
|
|
|
+ Pocurementdetails pocurementdetails=new Pocurementdetails();
|
|
|
+ pocurementdetails.setDelFlag("0");
|
|
|
+ pocurementdetails.setPurchaseId(purchaseOrder.getId().toString());//采购单id
|
|
|
+ pocurementdetails.setOrganization("铨一科技");
|
|
|
+ pocurementdetails.setDemand("生产部门");
|
|
|
+ pocurementdetails.setMaterialnum(item.getMaterialCode());//物料编码
|
|
|
+ pocurementdetails.setMaterialname(item.getMaterialName());//物料名称
|
|
|
+ pocurementdetails.setModel(item.getModelNumber()+"/"+item.getSpecification());//规格型号
|
|
|
+ pocurementdetails.setCompany("单位");
|
|
|
+ Double v1 = Double.parseDouble(item.getAmountOfMateria().toString()) - Double.parseDouble(item.getStockQuantity().toString());
|
|
|
+ pocurementdetails.setQuantity(String.valueOf(v1));//需要采购的数量
|
|
|
+ pocurementdetailsArrayList.add(pocurementdetails);//添加集合
|
|
|
+ });
|
|
|
+ if(pocurementdetailsArrayList.size()>0){
|
|
|
+ int i1 = pocurementdetailsMapper.insertPocurementdetailsBatch(pocurementdetailsArrayList);
|
|
|
+ }
|
|
|
+ //处理何必逻辑
|
|
|
+ //更改排产计划信息
|
|
|
+// List<OnSiteProgramDetails> onSiteProgramDetails = onSiteProgramDetailsMapper.selectOnSiteProgramDetailsListInPlanId(stringIds);
|
|
|
+// List<SemiFinishedMaterialListAndMaterialInventory> allSemiFinishedMaterialListAndMaterialInventory =new ArrayList<>();
|
|
|
+// onSiteProgramDetails.stream().forEach(item->{
|
|
|
+// SemiFinishedMaterialList materialList=new SemiFinishedMaterialList();
|
|
|
+// materialList.setFid(item.getItemId().toString());
|
|
|
+// List<SemiFinishedMaterialListAndMaterialInventory> semiFinishedMaterialListAndMaterialInventories = semiFinishedMaterialListMapper.selectSemiFinishedMaterialListListJoinMaterialInventory(materialList);
|
|
|
+// //有很多的物料信息(把那些物料不足的给过滤出来)
|
|
|
+// List<SemiFinishedMaterialListAndMaterialInventory> collect = semiFinishedMaterialListAndMaterialInventories.stream()
|
|
|
+// .filter(s -> Double.parseDouble(s.getStockQuantity().toString()) < Double.parseDouble(s.getAmountOfMateria())).map(a->{
|
|
|
+// a.setPlanId(item.getPlanId());
|
|
|
+// return a;
|
|
|
+// }).collect(Collectors.toList());
|
|
|
+// allSemiFinishedMaterialListAndMaterialInventory.addAll(collect);
|
|
|
+// });
|
|
|
+// List<String> collect = allSemiFinishedMaterialListAndMaterialInventory.stream().map(SemiFinishedMaterialListAndMaterialInventory::getPlanId).collect(Collectors.toList());
|
|
|
+// managementVoList.stream().forEach(item->{
|
|
|
+// if(collect.contains(item.getId())){
|
|
|
+// //证明物料不全
|
|
|
+// AutomaticSchedulingOnSite automaticSchedulingOnSite=new AutomaticSchedulingOnSite();
|
|
|
+// automaticSchedulingOnSite.setCompletiontime(item.getCompletiontime());//完成时间
|
|
|
+// automaticSchedulingOnSite.setCreateTime(new DateTime());//创建时间
|
|
|
+// automaticSchedulingOnSite.setCreateById(SecurityUtils.getUserId());//创建人id
|
|
|
+// automaticSchedulingOnSite.setCreateBy(SecurityUtils.getUsername());//创建人姓名
|
|
|
+// automaticSchedulingOnSite.setWorkmanship(item.getPlanNumber());//计划编号
|
|
|
+// automaticSchedulingOnSite.setMaterialNo("1");
|
|
|
+// automaticSchedulingOnSite.setManHour(item.getSparea());//工时信息
|
|
|
+// automaticSchedulingOnSiteMapper.insertAutomaticSchedulingOnSite(automaticSchedulingOnSite);
|
|
|
+// }else {
|
|
|
+// //证明物料全
|
|
|
+// AutomaticSchedulingOnSite automaticSchedulingOnSite=new AutomaticSchedulingOnSite();
|
|
|
+// automaticSchedulingOnSite.setCompletiontime(item.getCompletiontime());//完成时间
|
|
|
+// automaticSchedulingOnSite.setCreateTime(new DateTime());//创建时间
|
|
|
+// automaticSchedulingOnSite.setCreateById(SecurityUtils.getUserId());//创建人id
|
|
|
+// automaticSchedulingOnSite.setCreateBy(SecurityUtils.getUsername());//创建人姓名
|
|
|
+// automaticSchedulingOnSite.setWorkmanship(item.getPlanNumber());//计划编号
|
|
|
+// automaticSchedulingOnSite.setMaterialNo("0");
|
|
|
+// automaticSchedulingOnSite.setManHour(item.getSparea());//工时信息
|
|
|
+// automaticSchedulingOnSiteMapper.insertAutomaticSchedulingOnSite(automaticSchedulingOnSite);
|
|
|
+// }
|
|
|
+// });
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计划数量
|
|
|
+ * 工序名称
|
|
|
+ * @param quantity
|
|
|
+ * @param processName
|
|
|
+ * @param schedulingProcessTimesMap
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static int getRoundedHjTotalTime(String quantity,String processName, Map<String, String> schedulingProcessTimesMap) {
|
|
|
+ //焊接工段(查询一个产品需要的工序时间)
|
|
|
+ String hjProcess= schedulingProcessTimesMap.get(processName);
|
|
|
+ double hjTotalTime=Double.parseDouble(hjProcess)*Double.parseDouble(quantity);
|
|
|
+ //检查是否有小数部分
|
|
|
+ int roundedHjTotalTime = hjTotalTime % 1 == 0 ? (int) hjTotalTime: (int) hjTotalTime + 1;
|
|
|
+ return roundedHjTotalTime;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|