Procházet zdrojové kódy

操作工堆垛新增

qiangxuan před 3 týdny
rodič
revize
7e8d45c47f

+ 125 - 2
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/stackingAndLoadingVehicles/controller/StackingAndLoadingVehiclesController.java

@@ -1,6 +1,8 @@
 package org.jeecg.modules.billet.stackingAndLoadingVehicles.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,22 +14,30 @@ import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.actualControl.billetActual.billetActual.entity.BilletBasicInfo;
+import org.jeecg.modules.actualControl.billetActual.billetActual.service.IBilletBasicInfoService;
+import org.jeecg.modules.billet.billetHotsend.entity.BilletHotsend;
+import org.jeecg.modules.billet.billetHotsend.entity.RollClubCommon;
 import org.jeecg.modules.billet.stackingAndLoadingVehicles.entity.StackingAndLoadingVehicles;
 import org.jeecg.modules.billet.stackingAndLoadingVehicles.entity.UpdateBatchParams;
 import org.jeecg.modules.billet.stackingAndLoadingVehicles.service.IStackingAndLoadingVehiclesService;
 import org.jeecg.modules.billet.stackingAndLoadingVehicles.vo.ClipLayerVo;
 import org.jeecg.modules.billet.stackingAndLoadingVehicles.vo.LoadingParams;
 import org.jeecg.modules.billet.stackingAndLoadingVehicles.vo.StackLocationChangeVO;
+import org.jeecg.modules.billet.stackingAndLoadingVehicles.vo.StackingAddParams;
 import org.jeecg.modules.billet.storageBill.entity.StorageBill;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
- /**
+/**
  * @Description: 垛位装车
  * @Author: jeecg-boot
  * @Date:   2024-05-22
@@ -42,6 +52,11 @@ public class StackingAndLoadingVehiclesController extends JeecgController<Stacki
 	@Autowired
 	private IStackingAndLoadingVehiclesService stackingAndLoadingVehiclesService;
 
+	@Autowired
+	public RedisTemplate redisTemplate;
+
+	@Autowired
+	private IBilletBasicInfoService billetBasicInfoService;
 	/**
 	 * 分页列表查询
 	 *
@@ -165,6 +180,114 @@ public class StackingAndLoadingVehiclesController extends JeecgController<Stacki
 		 return Result.OK((String) jsonObject.get("success"));
 	 }
 
+	 @ApiOperation(value="操作工-新增堆垛", notes="操作工-新增堆垛")
+	 @PostMapping(value = "/stackingUpAdd")
+	 public Result<?> addStack(@RequestBody StackingAddParams stackingAddParams){
+		 LoadingParams loadingParams = new LoadingParams();
+
+		 if (oConvertUtils.listIsEmpty(stackingAddParams.getStackingAndLoadingVehiclesIds())){
+			 return Result.OK("请选择堆垛位置!");
+		 }
+
+		 BilletHotsend billetHotsend = new BilletHotsend();
+		 billetHotsend.setCcmNo(stackingAddParams.getCcmNo());
+		 billetHotsend.setIsUpd(false);
+		 loadingParams.setBilletHotsend(billetHotsend);
+
+		 loadingParams.setBelongTable("stacking_and_loading_vehicles");
+		 loadingParams.setBilletHotsendTypeConfigId(stackingAddParams.getBilletHotsendTypeConfigId());
+
+
+		 String classShiftGroup = String.format("class:shift:group:%s", stackingAddParams.getCcmNo()); // 班组
+		 String classShift = String.format("class:shift:%s",stackingAddParams.getCcmNo()); // 班别
+		 String shift = !oConvertUtils.getString(redisTemplate.opsForValue().get(classShift)).isEmpty() ? oConvertUtils.getString(redisTemplate.opsForValue().get(classShift)) : "";
+		 String shiftGroup = !oConvertUtils.getString(redisTemplate.opsForValue().get(classShiftGroup)).isEmpty() ? oConvertUtils.getString(redisTemplate.opsForValue().get(classShiftGroup)) : "";
+
+		 LambdaQueryWrapper<BilletBasicInfo> queryWrapper2 = new LambdaQueryWrapper<>();
+		 queryWrapper2.eq(BilletBasicInfo::getCcmNo, stackingAddParams.getCcmNo())
+				 .eq(BilletBasicInfo::getHeatNo, stackingAddParams.getHeatNo())
+				 .eq(BilletBasicInfo::getShift, shift)
+				 .eq(BilletBasicInfo::getShiftGroup, shiftGroup)
+				 .isNull(BilletBasicInfo::getBelongTable)
+				 .isNotNull(BilletBasicInfo::getAssemblyNumber)
+				 .orderByAsc(BilletBasicInfo::getCreateTime);
+		 List<BilletBasicInfo> billetBasicInfoList = billetBasicInfoService.list(queryWrapper2);
+		 if (oConvertUtils.listIsEmpty(billetBasicInfoList)){
+			 log.info("{}{}", "钢坯实绩不存在,起垛操作失败!", JSON.toJSON(stackingAddParams));
+			 return Result.error("钢坯实绩不存在,起垛操作失败!");
+		 }
+
+		 // 按assemblyNumber分组,并过滤出数量为4的组
+		 Map<String, List<BilletBasicInfo>> groupByAssemblyNumber = billetBasicInfoList.stream()
+				 .collect(Collectors.groupingBy(BilletBasicInfo::getAssemblyNumber))
+				 .entrySet()
+				 .stream()
+				 .filter(entry -> entry.getValue().size() == 4)
+				 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+
+
+		 List<StackingAndLoadingVehicles> stackingAndLoadingVehiclesList = new ArrayList<>();
+		 List<RollClubCommon> rollClubCommonList = new ArrayList<>();
+
+		 List<String> idList = stackingAddParams.getStackingAndLoadingVehiclesIds();
+		 Iterator<Map.Entry<String, List<BilletBasicInfo>>> entryIterator = groupByAssemblyNumber.entrySet().iterator();
+
+		 idList.forEach(x -> {
+			 // 根据ID,查询堆垛公共容器
+			 StackingAndLoadingVehicles original = stackingAndLoadingVehiclesService.getById(x);
+
+			 if (original != null && entryIterator.hasNext()) {
+				 // 获取并移除下一个分组
+				 Map.Entry<String, List<BilletBasicInfo>> entry = entryIterator.next();
+				 entryIterator.remove(); // 从集合中移除,确保不会被重复使用
+
+				 StackingAndLoadingVehicles stackingAndLoadingVehicles = new StackingAndLoadingVehicles();
+				 BeanUtils.copyProperties(original, stackingAndLoadingVehicles);
+
+				 List<BilletBasicInfo> groupBilletBasicInfo = entry.getValue();
+				 BilletBasicInfo firstItem = groupBilletBasicInfo.get(0);
+
+				 // 拼接坯号
+				 String billetNos = groupBilletBasicInfo.stream()
+						 .map(BilletBasicInfo::getBilletNo)
+						 .collect(Collectors.joining(","));
+
+				 // 填充到StackingAndLoadingVehicles对象
+				 stackingAndLoadingVehicles.setBilletNos(billetNos);
+				 stackingAndLoadingVehicles.setHeatNo(firstItem.getHeatNo());
+				 stackingAndLoadingVehicles.setSize(String.valueOf(firstItem.getLength()));
+				 stackingAndLoadingVehicles.setSpec(firstItem.getSpec());
+				 stackingAndLoadingVehicles.setSteel(firstItem.getGrade());
+				 stackingAndLoadingVehicles.setShiftGroup(firstItem.getShiftGroup());
+				 stackingAndLoadingVehicles.setShift(firstItem.getShift());
+
+				 // 添加到结果列表
+				 stackingAndLoadingVehiclesList.add(stackingAndLoadingVehicles);
+
+				 // 将groupBilletBasicInfo的所有属性映射到RollClubCommon并添加到列表
+				 groupBilletBasicInfo.forEach(billet -> {
+					 RollClubCommon rollClubCommon = new RollClubCommon();
+					 BeanUtils.copyProperties(billet, rollClubCommon);
+					 rollClubCommon.setCcmNo(String.valueOf(billet.getCcmNo()));
+					 rollClubCommon.setAssemblyNumber(entry.getKey());
+					 rollClubCommonList.add(rollClubCommon);
+				 });
+			 }
+		 });
+
+		 loadingParams.setStackingAndLoadingVehiclesList(stackingAndLoadingVehiclesList);
+		 loadingParams.setRollClubCommonList(rollClubCommonList);
+
+		 log.info(">>>>>>>>>>>>B端操作工-新增堆垛参数集:"+ JSON.toJSON(loadingParams));
+
+		 JSONObject jsonObject = stackingAndLoadingVehiclesService.addStackInfo(loadingParams);
+		 if (jsonObject.containsKey("fail")){
+			 return Result.OK((String) jsonObject.get("fail"));
+		 }
+		 return Result.OK((String) jsonObject.get("success"));
+	 }
+
+
      @ApiOperation(value="钢坯-垛位装车", notes="钢坯-垛位装车")
      @PostMapping(value = "/loading")
      public Result<?> loading(@RequestBody LoadingParams loadingParams){

+ 13 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/stackingAndLoadingVehicles/vo/StackingAddParams.java

@@ -0,0 +1,13 @@
+package org.jeecg.modules.billet.stackingAndLoadingVehicles.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class StackingAddParams {
+    private String ccmNo;
+    private String heatNo;
+    private String billetHotsendTypeConfigId;
+    private List<String> stackingAndLoadingVehiclesIds;
+}

+ 3 - 3
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/controller/StorageBillController.java

@@ -2045,12 +2045,12 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 					.collect(Collectors.toList());  // 收集结果到新列表
 
 			// 按assemblyNumber分组,并检查每组数量是否都为4
-			boolean allGroupsSizeIsFour = notUsedBilletBasicInfoList.stream()
+			boolean hasAnyGroupSizeFour = notUsedBilletBasicInfoList.stream()
 					.collect(Collectors.groupingBy(BilletBasicInfo::getAssemblyNumber, Collectors.counting()))
 					.values()
 					.stream()
-					.allMatch(count -> count == 4);
-			heatsActualsInfo.setOperateStatus(allGroupsSizeIsFour);
+					.anyMatch(count -> count == 4);  // 使用anyMatch检查是否存在数量为4的组
+			heatsActualsInfo.setOperateStatus(hasAnyGroupSizeFour);
 
 			heatsActualsInfoList.add(heatsActualsInfo);
 		});