This commit is contained in:
2026-04-27 14:38:26 +08:00
4 changed files with 112 additions and 4 deletions

View File

@@ -21,6 +21,7 @@ import com.klp.aps.domain.vo.ApsPlanDetailVo;
import com.klp.aps.domain.bo.ApsPlanDetailBo;
import com.klp.aps.service.IApsPlanDetailService;
import com.klp.common.core.page.TableDataInfo;
import com.klp.domain.vo.WmsMaterialCoilVo;
/**
* 排产单明细
@@ -96,4 +97,11 @@ public class ApsPlanDetailController extends BaseController {
@PathVariable Long[] planDetailIds) {
return toAjax(iApsPlanDetailService.deleteWithValidByIds(Arrays.asList(planDetailIds), true));
}
// 根据排产单ID查询排产日期以及明细绑定的orderId,再根据这个orderId和排查时间查询返回钢卷
@GetMapping("/coils/{planSheetId}")
public R<List<WmsMaterialCoilVo>> getCoilsByPlanSheetId(@NotNull(message = "排产单ID不能为空")
@PathVariable Long planSheetId) {
return R.ok(iApsPlanDetailService.queryCoilsByPlanSheetId(planSheetId));
}
}

View File

@@ -8,6 +8,8 @@ import com.klp.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
import com.klp.domain.vo.WmsMaterialCoilVo;
/**
* 排产单明细Service接口
*
@@ -55,4 +57,12 @@ public interface IApsPlanDetailService {
* 根据排产单ID删除明细
*/
int deleteByPlanSheetIds(Collection<Long> planSheetIds);
/**
* 根据排产单ID查询关联的钢卷列表根据计划日期筛选钢卷创建时间
*
* @param planSheetId 排产单ID
* @return 钢卷列表
*/
List<WmsMaterialCoilVo> queryCoilsByPlanSheetId(Long planSheetId);
}

View File

@@ -8,17 +8,24 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import com.klp.domain.WmsCoilContractRel;
import com.klp.domain.vo.WmsMaterialCoilVo;
import com.klp.domain.vo.WmsCoilContractRelVo;
import com.klp.domain.bo.WmsMaterialCoilBo;
import com.klp.mapper.WmsCoilContractRelMapper;
import com.klp.service.IWmsMaterialCoilService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.aps.domain.bo.ApsPlanDetailBo;
import com.klp.aps.domain.vo.ApsPlanDetailVo;
import com.klp.aps.domain.vo.ApsPlanSheetVo;
import com.klp.aps.domain.entity.ApsPlanDetail;
import com.klp.aps.mapper.ApsPlanDetailMapper;
import com.klp.aps.mapper.ApsPlanSheetMapper;
import com.klp.aps.service.IApsPlanDetailService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
import java.util.stream.Collectors;
/**
* 排产单明细Service业务层处理
@@ -31,6 +38,9 @@ import java.util.Collection;
public class ApsPlanDetailServiceImpl implements IApsPlanDetailService {
private final ApsPlanDetailMapper baseMapper;
private final ApsPlanSheetMapper planSheetMapper;
private final WmsCoilContractRelMapper coilContractRelMapper;
private final IWmsMaterialCoilService materialCoilService;
/**
* 查询排产单明细
@@ -207,4 +217,84 @@ public class ApsPlanDetailServiceImpl implements IApsPlanDetailService {
public int deleteByPlanSheetIds(Collection<Long> planSheetIds) {
return baseMapper.deleteByPlanSheetIds(planSheetIds);
}
@Override
public List<WmsMaterialCoilVo> queryCoilsByPlanSheetId(Long planSheetId) {
if (planSheetId == null) {
return Collections.emptyList();
}
ApsPlanSheetVo planSheet = planSheetMapper.selectVoById(planSheetId);
if (planSheet == null || planSheet.getPlanDate() == null) {
return Collections.emptyList();
}
Date planDate = planSheet.getPlanDate();
LambdaQueryWrapper<ApsPlanDetail> detailQw = Wrappers.lambdaQuery();
detailQw.eq(ApsPlanDetail::getPlanSheetId, planSheetId);
detailQw.eq(ApsPlanDetail::getDelFlag, 0);
List<ApsPlanDetailVo> details = baseMapper.selectVoList(detailQw);
List<Long> orderIds = details.stream()
.map(ApsPlanDetailVo::getOrderId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
if (orderIds.isEmpty()) {
return Collections.emptyList();
}
LambdaQueryWrapper<WmsCoilContractRel> relQw = Wrappers.lambdaQuery();
relQw.in(WmsCoilContractRel::getContractId, orderIds);
relQw.eq(WmsCoilContractRel::getDelFlag, 0);
List<WmsCoilContractRelVo> coilRels = coilContractRelMapper.selectVoList(relQw);
Map<Long, List<Long>> coilIdMap = coilRels.stream()
.filter(rel -> rel.getContractId() != null && rel.getCoilId() != null)
.collect(Collectors.groupingBy(
WmsCoilContractRelVo::getContractId,
Collectors.mapping(WmsCoilContractRelVo::getCoilId, Collectors.toList())
));
Set<Long> allCoilIds = coilIdMap.values().stream()
.flatMap(List::stream)
.collect(Collectors.toSet());
if (allCoilIds.isEmpty()) {
return Collections.emptyList();
}
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
coilBo.setCoilIds(allCoilIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
coilBo.setByCreateTimeStart(getStartOfDay(planDate));
coilBo.setByCreateTimeEnd(getEndOfDay(planDate));
return materialCoilService.queryList(coilBo);
}
private Date getStartOfDay(Date date) {
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
private Date getEndOfDay(Date date) {
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTime();
}
}

View File

@@ -283,7 +283,7 @@ public class ApsPlanSheetServiceImpl implements IApsPlanSheetService {
// ================== 【核心前7列自动合并】 ==================
int dataEndRow = r - 1;
if (dataStartRow <= dataEndRow) {
if (dataStartRow <= dataEndRow && dataEndRow > dataStartRow) {
for (int col = 0; col < 7; col++) { // 0~6 共7列
CellRangeAddress region = new CellRangeAddress(
dataStartRow,