diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnLabelQueryController.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnLabelQueryController.java index ade1758a..00211f11 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnLabelQueryController.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnLabelQueryController.java @@ -2,7 +2,9 @@ package com.gaotao.modules.autoWareHourceHaian.controller; import com.gaotao.common.utils.PageUtils; import com.gaotao.common.utils.R; +import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnLabelQuerySplitCheckData; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnLabelQueryService; +import com.gaotao.modules.autoWareHourceHaian.service.HaiAnPdaLabelSplitService; import com.gaotao.modules.handlingunit.entity.dto.HandlingUnitDto; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -22,6 +24,9 @@ public class HaiAnLabelQueryController { @Autowired private HaiAnLabelQueryService haiAnLabelQueryService; + @Autowired + private HaiAnPdaLabelSplitService haiAnPdaLabelSplitService; + /** * @author rqrq * @Description 分页查询海安标签位置列表,site必填用于主厂和子站点汇总过滤 - rqrq @@ -37,4 +42,21 @@ public class HaiAnLabelQueryController { PageUtils page = haiAnLabelQueryService.getHandlingUnitLabelListLocation(data); return R.ok().put("page", page); } + + /** + * @author rqrq + * @Description 标签查询点击拆分前的门禁。命中54子工厂且标签仍在立库区域A01托盘上时抛错,页面不打开拆分弹窗。人工分拣不调用本接口。 - rqrq + * @param data 标签自身工厂和标签号 - rqrq + * @return 允许拆分时返回成功;拒绝时由异常返回业务错误 - rqrq + */ + @PostMapping("/checkLabelQuerySplit") + public R checkLabelQuerySplit(@RequestBody HaiAnLabelQuerySplitCheckData data) { + // 空请求无法判断标签工厂,直接失败,避免漏校验后打开拆分弹窗 - rqrq + if (data == null || StringUtils.isBlank(data.getSite()) || StringUtils.isBlank(data.getUnitId())) { + return R.error("标签工厂和标签号不能为空"); + } + // 调用立库在盘门禁:入参是标签自身工厂和标签号;命中A01在盘会抛出业务错误,未命中则允许继续拆分 - rqrq + haiAnPdaLabelSplitService.assertLabelQuerySplitAllowed(data.getSite(), data.getUnitId()); + return R.ok(); + } } diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnLabelQuerySplitCheckData.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnLabelQuerySplitCheckData.java new file mode 100644 index 00000000..21b6f6cd --- /dev/null +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnLabelQuerySplitCheckData.java @@ -0,0 +1,25 @@ +package com.gaotao.modules.autoWareHourceHaian.entity; + +import lombok.Data; +import org.apache.ibatis.type.Alias; + +/** + * @author rqrq + * @Description 标签查询拆分门禁入参。只给标签查询页点击拆分使用,人工分拣拆分不传本对象。不落库。 - rqrq + */ +@Data +@Alias("HaiAnLabelQuerySplitCheckData") +public class HaiAnLabelQuerySplitCheckData { + + /** + * 标签自身工厂,来源 handling_unit.site,通常是 54 的小工厂(54/54A/54B/54C)。 + * 后端用它核对 site_sub 是否属于大工厂 54,不能用登录态 site 代替。不落库。 - rqrq + */ + private String site; + + /** + * 标签号,来源 handling_unit.unit_id,对应 haian_pallet_detail.serial_no。 + * 标签查询用它判断标签是否还在托盘上。不落库。 - rqrq + */ + private String unitId; +} diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnPdaLabelSplitService.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnPdaLabelSplitService.java index 6a6156cd..4e8ac244 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnPdaLabelSplitService.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnPdaLabelSplitService.java @@ -16,4 +16,12 @@ public interface HaiAnPdaLabelSplitService { * @param remainQty 拆分后原标签剩余数量,必须与handling_unit.qty一致 - rqrq */ void syncPalletDetailQtyAfterSplit(String labelSite, String serialNo, BigDecimal remainQty); + + /** + * @author rqrq + * @Description 标签查询拆分门禁:标签工厂属于54子工厂、标签仍在海安托盘、且托盘区域为立库A01时拒绝。其它工厂、已离盘、立库区域以外放行。人工分拣不调用本方法。 - rqrq + * @param labelSite 标签自身工厂 handling_unit.site,缺失直接报错 - rqrq + * @param unitId 标签号,对应栈板明细 serial_no,缺失直接报错 - rqrq + */ + void assertLabelQuerySplitAllowed(String labelSite, String unitId); } diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaLabelSplitServiceImpl.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaLabelSplitServiceImpl.java index 990c067a..f6ab680d 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaLabelSplitServiceImpl.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaLabelSplitServiceImpl.java @@ -2,8 +2,10 @@ package com.gaotao.modules.autoWareHourceHaian.service.impl; import com.gaotao.common.exception.XJException; import com.gaotao.modules.autoWareHourceHaian.entity.pda.HaiAnPalletDetailRow; +import com.gaotao.modules.autoWareHourceHaian.entity.pda.HaiAnPalletInfoResult; import com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnPdaAutoWarehouseMapper; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnPdaLabelSplitService; +import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnAreaStaticData; import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnSiteStaticData; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -59,6 +61,46 @@ public class HaiAnPdaLabelSplitServiceImpl implements HaiAnPdaLabelSplitService parentSite, palletDetail.getPalletId(), serialNo, remainQty); } + /** + * @author rqrq + * @Description 标签查询点击拆分前的立库在盘拦截。只拒绝“54子工厂 + 仍在托盘 + 托盘区域A01”;不改库存、不改栈板。人工分拣拆分不走这里。 - rqrq + * @param labelSite 标签自身工厂,必须由请求传入 - rqrq + * @param unitId 被拆分标签号 - rqrq + */ + @Override + public void assertLabelQuerySplitAllowed(String labelSite, String unitId) { + if (!StringUtils.hasText(labelSite)) { + throw new XJException("工厂编码不能为空"); + } + if (!StringUtils.hasText(unitId)) { + throw new XJException("标签编码不能为空"); + } + String subSite = labelSite.trim(); + String serialNo = unitId.trim(); + + // 按大工厂54核对标签工厂是否其子工厂。不属于54时本规则不生效,标签查询维持原拆分。查映射失败会抛出,避免把立库标签误放行。 - rqrq + Integer mappingCount = haiAnPdaAutoWarehouseMapper.countSiteSubMapping(HaiAnSiteStaticData.HAIAN_SITE, subSite); + if (mappingCount == null || mappingCount <= 0) { + return; + } + + // 按海安大site和标签号查栈板明细。没有明细表示标签已不在托盘上,允许从标签查询拆分。 - rqrq + HaiAnPalletDetailRow palletDetail = haiAnPdaAutoWarehouseMapper.findPalletByLabel(HaiAnSiteStaticData.HAIAN_SITE, serialNo); + if (palletDetail == null || !StringUtils.hasText(palletDetail.getPalletId())) { + return; + } + + // 查未删除托盘主档的业务区域。主档缺失时不能认定仍在立库,不拦截;区域不是A01时允许拆分。 - rqrq + HaiAnPalletInfoResult palletInfo = haiAnPdaAutoWarehouseMapper.getPalletInfo( + HaiAnSiteStaticData.HAIAN_SITE, palletDetail.getPalletId().trim()); + if (palletInfo == null || !StringUtils.hasText(palletInfo.getArea())) { + return; + } + if (HaiAnAreaStaticData.STOCK_AREA.equals(palletInfo.getArea().trim())) { + throw new XJException("只有立库区域以外的标签可以从这里拆分"); + } + } + /** * @author rqrq * @Description 把标签site解析为海安大site:54直接用;54A/54B走site_sub反查;映射缺失回退54避免误伤非海安数据。 - rqrq