Browse Source

拆分限制

master
常熟吴彦祖 6 days ago
parent
commit
e7ae9cf052
  1. 22
      src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnLabelQueryController.java
  2. 25
      src/main/java/com/gaotao/modules/autoWareHourceHaian/entity/HaiAnLabelQuerySplitCheckData.java
  3. 8
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnPdaLabelSplitService.java
  4. 42
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaLabelSplitServiceImpl.java

22
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();
}
}

25
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;
}

8
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);
}

42
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

Loading…
Cancel
Save