Przeglądaj źródła

当班炉号变更01

qiangxuan 3 dni temu
rodzic
commit
c878943994

+ 10 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/controller/BilletHotsendBaseController.java

@@ -554,4 +554,14 @@ public class BilletHotsendBaseController extends JeecgController<BilletHotsend,
             throw new RuntimeException(e);
         }
     }
+
+    @ApiOperation(value = "指定数量更换炉号", notes = "指定数量更换炉号")
+    @PostMapping(value = "/changeHeatNo")
+    public Result<?> changeHeatNumberHandle(@RequestBody ChangeHeatVo changeHeatVo) {
+        JSONObject jsonObject = billetHotsendBaseService.changeHeatNumberHandle(changeHeatVo);
+        if (jsonObject.containsKey("fail")) {
+            return Result.OK((String) jsonObject.get("fail"));
+        }
+        return Result.OK((String) jsonObject.get("success"));
+    }
 }

+ 12 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/entity/ChangeHeatVo.java

@@ -0,0 +1,12 @@
+package org.jeecg.modules.billet.billetHotsend.entity;
+
+import lombok.Data;
+
+@Data
+public class ChangeHeatVo {
+    private String ccmNo;// 铸机号
+    private String originalHeatNo;// 原炉号 1234
+    private String changeHeatNo;// 换炉号 2582
+    private Integer number;// 数量 3
+    private Integer changeType;// 棒一:1 或其他:2
+}

+ 3 - 4
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/service/IBilletHotsendBaseService.java

@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.actualControl.billetActual.billetActual.entity.BilletBasicInfoAdd;
 import org.jeecg.modules.billet.billetHotsend.dto.CcmNoSizeDTO;
 import org.jeecg.modules.billet.billetHotsend.dto.StrandNoSizeDTO;
-import org.jeecg.modules.billet.billetHotsend.entity.BilletBasicInfoDetails;
-import org.jeecg.modules.billet.billetHotsend.entity.BilletHotsend;
-import org.jeecg.modules.billet.billetHotsend.entity.BilletHotsendDetailsVo;
-import org.jeecg.modules.billet.billetHotsend.entity.FurnaceChangeData;
+import org.jeecg.modules.billet.billetHotsend.entity.*;
 import org.jeecg.modules.billet.billetHotsendConfig.entity.BilletHotsendTypeConfig;
 import org.jeecg.modules.billet.storageBill.entity.StorageBill;
 
@@ -46,4 +43,6 @@ public interface IBilletHotsendBaseService extends IService<BilletHotsend> {
     void pushCcmNoSize(CcmNoSizeDTO dto);
 
     String addBilletBasicHandle(BilletBasicInfoAdd billetBasicInfoAdd);
+
+    JSONObject changeHeatNumberHandle(ChangeHeatVo changeHeatVo);
 }

+ 323 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/service/impl/BilletHotsendBaseServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.common.util.oConvertUtils;
@@ -2026,4 +2027,326 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 		);
 		return assembly_number;
 	}
+
+
+	@Override
+	@Transactional
+	public JSONObject changeHeatNumberHandle(ChangeHeatVo changeHeatVo) {
+		JSONObject result = new JSONObject();
+
+		String classShiftGroup = String.format("class:shift:group:%s", changeHeatVo.getCcmNo()); // 班组
+		String classShift = String.format("class:shift:%s", changeHeatVo.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)) : "";
+
+		// 处理直轧棒一数据
+		if (changeHeatVo.getChangeType() == 1){
+			// 根据铸机、炉号、班组、班别 查询钢坯实绩明细信息
+			List<BilletBasicInfo> originalBilletBasicInfoList = queryBilletBasicInfoRollClubOneList(changeHeatVo.getCcmNo(), changeHeatVo.getOriginalHeatNo(), shift, shiftGroup);
+			if (oConvertUtils.listIsEmpty(originalBilletBasicInfoList)){
+				result.put("fail", "直轧热送-原炉号钢坯实绩不存在,操作失败!");
+				return result;
+			}
+
+			// 根据铸机、炉号、班组、班别 查询钢坯实绩明细信息
+			List<BilletBasicInfo> changeBilletBasicInfoList = queryBilletBasicInfoRollClubOneList(changeHeatVo.getCcmNo(), changeHeatVo.getChangeHeatNo(), shift, shiftGroup);
+			if (oConvertUtils.listIsEmpty(changeBilletBasicInfoList)){
+				result.put("fail", "直轧热送-变更炉号钢坯实绩不存在,操作失败!");
+				return result;
+			}
+
+			// 源炉号数据如果小于更换的数量返回
+			if (originalBilletBasicInfoList.size() < changeHeatVo.getNumber() || changeBilletBasicInfoList.size() < changeHeatVo.getNumber()){
+				result.put("fail", "直轧热送-原炉号、变更炉号钢坯实绩数据不足,操作失败!");
+				return result;
+			}
+
+			List<BilletBasicInfo> finalOriginalBilletBasicInfoList = originalBilletBasicInfoList.subList(0, changeHeatVo.getNumber());
+			List<BilletBasicInfo> finalChangeBilletBasicInfoList = changeBilletBasicInfoList.subList(0, changeHeatVo.getNumber());
+			// 钢坯实绩、炉次实绩、炉次传递单统一公共处理
+			commonBilletChangeHandle(finalOriginalBilletBasicInfoList, finalChangeBilletBasicInfoList, changeHeatVo, shift, shiftGroup);
+			// 棒一统一公共处理
+			commonBilletRollClubOneHandle(finalOriginalBilletBasicInfoList, finalChangeBilletBasicInfoList, changeHeatVo, shift, shiftGroup);
+		}else {
+			int number = changeHeatVo.getNumber();
+			// 校验是否为4的倍数
+			if (number == 0 || number % 4 != 0) {
+				result.put("fail", "变更数量必须是4的倍数,操作失败!");
+				return result;
+			}
+			/**
+			 * 处理热装变更炉号数据 根据铸机、炉号、班组、班别 查询钢坯实绩明细信息
+			 */
+			List<BilletBasicInfo> originalBilletBasicInfoList = queryBilletBasicInfoList(changeHeatVo.getCcmNo(), changeHeatVo.getOriginalHeatNo(), shift, shiftGroup);
+			if (oConvertUtils.listIsEmpty(originalBilletBasicInfoList)){
+				result.put("fail", "热装-原炉号钢坯实绩不存在,操作失败!");
+				return result;
+			}
+
+			// 根据铸机、炉号、班组、班别 查询钢坯实绩明细信息
+			List<BilletBasicInfo> changeBilletBasicInfoList = queryBilletBasicInfoList(changeHeatVo.getCcmNo(), changeHeatVo.getChangeHeatNo(), shift, shiftGroup);
+			if (oConvertUtils.listIsEmpty(changeBilletBasicInfoList)){
+				result.put("fail", "热装-变更炉号钢坯实绩不存在,操作失败!");
+				return result;
+			}
+
+			// 源炉号数据如果小于更换的数量返回
+			if (originalBilletBasicInfoList.size() < changeHeatVo.getNumber() || changeBilletBasicInfoList.size() < changeHeatVo.getNumber()){
+				result.put("fail", "热装-原炉号、变更炉号钢坯实绩数据不足,操作失败!");
+				return result;
+			}
+
+			List<BilletBasicInfo> finalOriginalBilletBasicInfoList = originalBilletBasicInfoList.subList(0, changeHeatVo.getNumber());
+			List<BilletBasicInfo> finalChangeBilletBasicInfoList = changeBilletBasicInfoList.subList(0, changeHeatVo.getNumber());
+			boolean allOriginalBilletNull = finalOriginalBilletBasicInfoList.stream()
+					.allMatch(info -> info.getBelongTable() == null);
+			boolean allChangeBilletNull = finalChangeBilletBasicInfoList.stream()
+					.allMatch(info -> info.getBelongTable() == null);
+			if (allOriginalBilletNull && allChangeBilletNull) {
+				// 无需处理,棒二、棒三、上若、付跨、装运单、主表和明细表
+			}else if (allOriginalBilletNull && !allChangeBilletNull) {
+
+			}else if (!allOriginalBilletNull && allChangeBilletNull) {
+
+			}else if (!allOriginalBilletNull && !allChangeBilletNull) {
+				// 需要处理,棒二、棒三、上若、付跨、装运单、主表和明细表
+			}
+		}
+
+		result.put("success", "炉号变更,操作成功!");
+		return result;
+	}
+
+	/**
+	 * 棒一统一公共处理
+	 * @param originalBilletBasicInfoList
+	 * @param changeBilletBasicInfoList
+	 * @param changeHeatVo
+	 * @param shift
+	 * @param shiftGroup
+	 */
+	private void commonBilletRollClubOneHandle(List<BilletBasicInfo> originalBilletBasicInfoList, List<BilletBasicInfo> changeBilletBasicInfoList,
+											   ChangeHeatVo changeHeatVo, String shift, String shiftGroup) {
+
+		// 所有变更炉号的总重量
+		double changeTotalWeight = originalBilletBasicInfoList.stream().mapToDouble(BilletBasicInfo::getBilletWeight).sum();
+		// 所有原始炉号的总重量
+		double originalTotalWeight = changeBilletBasicInfoList.stream().mapToDouble(BilletBasicInfo::getBilletWeight).sum();
+		// 棒一 主表
+		RollClubOne originalRollClubOne = getRollClubOne(changeHeatVo.getOriginalHeatNo(), changeHeatVo.getCcmNo(), shift, shiftGroup);
+		if (originalRollClubOne == null) {
+			throw new RuntimeException("原棒一主表为空,操作失败!");
+		}
+		originalRollClubOne.setAmountTotal(originalRollClubOne.getAmountTotal() + changeHeatVo.getNumber());
+		originalRollClubOne.setBlankOutput(originalRollClubOne.getBlankOutput() + changeTotalWeight);
+		rollClubOneService.updateById(originalRollClubOne);
+
+		RollClubOne changeRollClubOne = getRollClubOne(changeHeatVo.getChangeHeatNo(), changeHeatVo.getCcmNo(), shift, shiftGroup);
+		if (changeRollClubOne == null) {
+			throw new RuntimeException("变更棒一主表为空,操作失败!");
+		}
+		changeRollClubOne.setAmountTotal(changeRollClubOne.getAmountTotal() - changeHeatVo.getNumber());
+		changeRollClubOne.setBlankOutput(changeRollClubOne.getBlankOutput() - originalTotalWeight);
+		rollClubOneService.updateById(changeRollClubOne);
+
+		List<String> originalBilletNos = originalBilletBasicInfoList.stream().map(BilletBasicInfo::getBilletNo).collect(Collectors.toList());
+		// 棒一明细
+		List<RollClubOneDetails> originalRollClubOneDetailsList = getRollClubOneDetailsList(changeHeatVo.getOriginalHeatNo(), changeHeatVo.getCcmNo(), shift, shiftGroup, originalBilletNos);
+		if (oConvertUtils.listIsEmpty(originalRollClubOneDetailsList)) {
+			throw new RuntimeException("原棒一明细为空,操作失败!");
+		}
+		for (RollClubOneDetails originalRollClubOneDetails : originalRollClubOneDetailsList){
+			originalRollClubOneDetails.setHeatNo(changeHeatVo.getChangeHeatNo());
+			originalRollClubOneDetails.setUpdateTime(new Date());
+		}
+		rollClubOneDetailsService.updateBatchById(originalRollClubOneDetailsList);
+
+		List<String> changeBilletNos = changeBilletBasicInfoList.stream().map(BilletBasicInfo::getBilletNo).collect(Collectors.toList());
+		List<RollClubOneDetails> changeRollClubOneDetailsList = getRollClubOneDetailsList(changeHeatVo.getChangeHeatNo(), changeHeatVo.getCcmNo(), shift, shiftGroup, changeBilletNos);
+		if (oConvertUtils.listIsEmpty(changeRollClubOneDetailsList)) {
+			throw new RuntimeException("变更棒一明细为空,操作失败!");
+		}
+		for (RollClubOneDetails changeRollClubOneDetails : changeRollClubOneDetailsList){
+			changeRollClubOneDetails.setHeatNo(changeHeatVo.getOriginalHeatNo());
+			changeRollClubOneDetails.setUpdateTime(new Date());
+		}
+		rollClubOneDetailsService.updateBatchById(changeRollClubOneDetailsList);
+
+	}
+
+	/**
+	 * 钢坯实绩、炉次实绩、炉次传递单统一公共处理
+	 * @param originalBilletBasicInfoList
+	 * @param changeBilletBasicInfoList
+	 * @param changeHeatVo
+	 * @param shift
+	 * @param shiftGroup
+	 */
+	private void commonBilletChangeHandle(List<BilletBasicInfo> originalBilletBasicInfoList ,List<BilletBasicInfo> changeBilletBasicInfoList ,
+										  ChangeHeatVo changeHeatVo, String shift, String shiftGroup) {
+
+		/**
+		 * 原炉号处理 根据changeHeatVo.getNumber() 的数量,获取billetBasicInfoList对应的条数
+		 */
+		List<String> originalBilletNos = originalBilletBasicInfoList.stream().map(BilletBasicInfo::getBilletNo).distinct().collect(Collectors.toList());
+		log.info("原炉号********:{}",  JSON.toJSON(originalBilletNos));
+		for (BilletBasicInfo billetBasicInfo : originalBilletBasicInfoList) {
+			billetBasicInfo.setHeatNo(changeHeatVo.getChangeHeatNo());
+			billetBasicInfo.setUpdateTime(new Date());
+		}
+		// 更新钢坯实绩
+		billetBasicInfoService.updateBatchById(originalBilletBasicInfoList);
+
+		/**
+		 * 变更炉号处理 根据changeHeatVo.getNumber() 的数量,获取billetBasicInfoList对应的条数
+		 */
+		List<String> changeBilletNos = changeBilletBasicInfoList.stream().map(BilletBasicInfo::getBilletNo).distinct().collect(Collectors.toList());
+		log.info("变更炉号********:{}", JSON.toJSON(changeBilletNos));
+		for (BilletBasicInfo billetBasicInfo : changeBilletBasicInfoList) {
+			billetBasicInfo.setHeatNo(changeHeatVo.getOriginalHeatNo());
+			billetBasicInfo.setUpdateTime(new Date());
+		}
+		// 更新钢坯实绩
+		billetBasicInfoService.updateBatchById(changeBilletBasicInfoList);
+
+		// 所有变更炉号的总重量
+		double changeTotalWeight = originalBilletBasicInfoList.stream().mapToDouble(BilletBasicInfo::getBilletWeight).sum();
+		// 所有原始炉号的总重量
+		double originalTotalWeight = changeBilletBasicInfoList.stream().mapToDouble(BilletBasicInfo::getBilletWeight).sum();
+
+		// 原炉次实绩处理
+		HeatsActuals originalHeatsActuals = getHeatsActuals(changeHeatVo.getOriginalHeatNo(), changeHeatVo.getCcmNo(), shift, shiftGroup);
+		if (originalHeatsActuals == null) {
+			throw new RuntimeException("原炉次实绩为空,操作失败!");
+		}
+		// 更新炉次实绩数量和对应的重量
+		if (originalHeatsActuals.getBilletSum() != 0){
+			originalHeatsActuals.setBilletSum(originalHeatsActuals.getBilletSum() + changeHeatVo.getNumber());
+		}
+		originalHeatsActuals.setBlankOutput(originalHeatsActuals.getBlankOutput() + changeTotalWeight);
+		heatsActualsService.updateById(originalHeatsActuals);
+
+		// 变更炉次实绩处理 处理变更炉次实绩(减少钢坯)
+		HeatsActuals changeHeatsActuals = getHeatsActuals(changeHeatVo.getChangeHeatNo(), changeHeatVo.getCcmNo(), shift, shiftGroup);
+		if (changeHeatsActuals == null) {
+			throw new RuntimeException("变更炉次实绩为空,操作失败!");
+		}
+		// 更新炉次实绩数量和对应的重量
+		if (changeHeatsActuals.getBilletSum() != 0 && changeHeatsActuals.getBilletSum() > changeHeatVo.getNumber()){
+			changeHeatsActuals.setBilletSum(changeHeatsActuals.getBilletSum() - changeHeatVo.getNumber());
+		}
+		changeHeatsActuals.setBlankOutput(changeHeatsActuals.getBlankOutput() - originalTotalWeight);
+		heatsActualsService.updateById(changeHeatsActuals);
+
+		//  原炉次传递单
+		BilletHotsend originalBilletHotsend = getBilletHotsend(changeHeatVo.getOriginalHeatNo(), changeHeatVo.getCcmNo(), shift, shiftGroup);
+		if (originalBilletHotsend == null){
+			throw new RuntimeException("原炉次传递单为空,操作失败!");
+		}
+		originalBilletHotsend.setRollcluboneNum(originalBilletHotsend.getRollcluboneNum() + changeHeatVo.getNumber());
+		originalBilletHotsend.setAmountTotal(originalBilletHotsend.getAmountTotal() + changeHeatVo.getNumber());
+		originalBilletHotsend.setBlankOutput(originalBilletHotsend.getBlankOutput() + changeTotalWeight);
+		baseMapper.updateById(originalBilletHotsend);
+
+		BilletHotsend changeBilletHotsend = getBilletHotsend(changeHeatVo.getChangeHeatNo(), changeHeatVo.getCcmNo(), shift, shiftGroup);
+		if (changeBilletHotsend == null) {
+			throw new RuntimeException("变更炉次传递单为空,操作失败!");
+		}
+		changeBilletHotsend.setRollcluboneNum(changeBilletHotsend.getRollcluboneNum() - changeHeatVo.getNumber());
+		changeBilletHotsend.setAmountTotal(changeBilletHotsend.getAmountTotal() - changeHeatVo.getNumber());
+		changeBilletHotsend.setBlankOutput(changeBilletHotsend.getBlankOutput() - originalTotalWeight);
+		baseMapper.updateById(changeBilletHotsend);
+	}
+
+	/**
+	 * 查询去棒一的钢坯实绩 信息
+	 * @param ccmNo
+	 * @param heatNo
+	 * @param shift
+	 * @param shiftGroup
+	 * @return
+	 */
+	private List<BilletBasicInfo> queryBilletBasicInfoRollClubOneList(String ccmNo, String heatNo, String shift, String shiftGroup) {
+
+		return billetBasicInfoService.list(new LambdaQueryWrapper<BilletBasicInfo>()
+				.eq(BilletBasicInfo::getCcmNo, ccmNo)
+				.eq(BilletBasicInfo::getHeatNo, heatNo)
+				.eq(BilletBasicInfo::getShift, shift)
+				.eq(BilletBasicInfo::getShiftGroup, shiftGroup)
+				.eq(BilletBasicInfo::getBelongTable, "roll_club_one"));
+	}
+
+
+	/**
+	 * 查询热装的钢坯实绩 信息
+	 * 确保没有目的地钢坯排在最前面
+	 *
+	 * @param ccmNo
+	 * @param heatNo
+	 * @param shift
+	 * @param shiftGroup
+	 * @return
+	 */
+	private List<BilletBasicInfo> queryBilletBasicInfoList(String ccmNo, String heatNo, String shift, String shiftGroup) {
+
+		return billetBasicInfoService.list(new LambdaQueryWrapper<BilletBasicInfo>()
+				.eq(BilletBasicInfo::getCcmNo, ccmNo)
+				.eq(BilletBasicInfo::getHeatNo, heatNo)
+				.eq(BilletBasicInfo::getShift, shift)
+				.eq(BilletBasicInfo::getShiftGroup, shiftGroup)
+				.orderByAsc(BilletBasicInfo::getBelongTable));
+	}
+
+
+	// 提取查询炉次实绩的公共方法
+	private HeatsActuals getHeatsActuals(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return heatsActualsService.getOne(
+				new LambdaQueryWrapper<HeatsActuals>()
+						.eq(HeatsActuals::getHeatsCode, heatNo)
+						.eq(HeatsActuals::getCasterCode, ccmNo)
+						.eq(HeatsActuals::getShift, shift)
+						.eq(HeatsActuals::getShiftGroup, shiftGroup)
+						.orderByDesc(HeatsActuals::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+
+	// 提取查询炉次传递单的公共方法
+	private BilletHotsend getBilletHotsend(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return baseMapper.selectOne(
+				new LambdaQueryWrapper<BilletHotsend>()
+						.eq(BilletHotsend::getHeatNo, heatNo)
+						.eq(BilletHotsend::getCcmNo, ccmNo)
+						.eq(BilletHotsend::getShift, shift)
+						.eq(BilletHotsend::getShiftGroup, shiftGroup)
+						.orderByDesc(BilletHotsend::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+
+	// 提取查询棒一主表的公共方法
+	private RollClubOne getRollClubOne(String heatNo, String ccmNo, String shift, String shiftGroup) {
+		return rollClubOneService.getOne(
+				new LambdaQueryWrapper<RollClubOne>()
+						.eq(RollClubOne::getHeatNo, heatNo)
+						.eq(RollClubOne::getCcmNo, ccmNo)
+						.eq(RollClubOne::getShift, shift)
+						.eq(RollClubOne::getShiftGroup, shiftGroup)
+						.orderByDesc(RollClubOne::getCreateTime)
+						.last("LIMIT 1")
+		);
+	}
+
+	// 提取查询棒一明细表的公共方法
+	private List<RollClubOneDetails> getRollClubOneDetailsList(String heatNo, String ccmNo, String shift, String shiftGroup, List<String> billetNos) {
+		return rollClubOneDetailsService.list(
+				new LambdaQueryWrapper<RollClubOneDetails>()
+						.eq(RollClubOneDetails::getHeatNo, heatNo)
+						.eq(RollClubOneDetails::getCcmNo, ccmNo)
+						.eq(RollClubOneDetails::getShift, shift)
+						.eq(RollClubOneDetails::getShiftGroup, shiftGroup)
+						.in(RollClubOneDetails::getBilletNo, billetNos)
+						.orderByDesc(RollClubOneDetails::getCreateTime)
+		);
+	}
 }