Browse Source

标签拆分大site

master
常熟吴彦祖 2 weeks ago
parent
commit
9c138595bd
  1. 8
      src/main/java/com/gaotao/modules/factory/dao/SiteMapper.java
  2. 17
      src/main/java/com/gaotao/modules/handlingunit/controller/PdaLabelController.java
  3. 9
      src/main/java/com/gaotao/modules/handlingunit/service/HandlingUnitService.java
  4. 46
      src/main/java/com/gaotao/modules/handlingunit/service/impl/HandlingUnitServiceImpl.java
  5. 9
      src/main/resources/mapper/factory/SiteMapper.xml

8
src/main/java/com/gaotao/modules/factory/dao/SiteMapper.java

@ -122,4 +122,12 @@ public interface SiteMapper extends BaseMapper<Site> {
* @return 子site数量
*/
int countSubSiteBySiteId(@Param("siteId") String siteId);
/**
* @author rqrq
* @Description 按登录大工厂取出 site_sub 中全部小工厂。标签 handling_unit.site 记的是小工厂,不能拿大工厂直接等值匹配。- rqrq
* @param siteId 登录大工厂,对应 site_sub.siteid - rqrq
* @return 小工厂编码列表;未配置时返回空列表,由调用方决定是否退回大工厂本身 - rqrq
*/
List<String> listSubSiteIds(@Param("siteId") String siteId);
}

17
src/main/java/com/gaotao/modules/handlingunit/controller/PdaLabelController.java

@ -62,29 +62,22 @@ public class PdaLabelController extends AbstractController {
@PostMapping("query")
public R queryLabelInfo(@RequestBody Map<String, Object> params) {
try {
String site = (String) params.get("site");
String labelCode = (String) params.get("labelCode");
String site = params == null ? null : (String) params.get("site");
String labelCode = params == null ? null : (String) params.get("labelCode");
log.info("=== 开始查询标签信息 ===");
//log.info("工厂: {}, 标签编码: {}", site, labelCode);
// 参数验证
if (site == null || site.trim().isEmpty()) {
return R.error("工厂编码不能为空");
}
if (labelCode == null || labelCode.trim().isEmpty()) {
return R.error("标签编码不能为空");
}
// 查询HandlingUnit信息
HandlingUnit handlingUnit = handlingUnitService.lambdaQuery()
.eq(HandlingUnit::getSite, site.trim())
.eq(HandlingUnit::getUnitId, labelCode.trim())
.one();
// 按登录大工厂展开小工厂后查标签。查无返回 null;多小工厂重复时由服务抛出明确异常。- rqrq
HandlingUnit handlingUnit = handlingUnitService.queryPdaLabelByBigSite(site, labelCode);
if (handlingUnit == null) {
log.warn("标签不存在: labelCode={}", labelCode);
log.warn("标签不存在: site={}, labelCode={}", site, labelCode);
return R.error("标签不存在");
}
// 查询只回显真实X/N/Y/Q状态;拆分、发料等写操作各自执行状态准入,Q不会因查询被使用。- rqrq

9
src/main/java/com/gaotao/modules/handlingunit/service/HandlingUnitService.java

@ -30,6 +30,15 @@ public interface HandlingUnitService extends IService<HandlingUnit> {
/** 取消预定扫码:保持原标签查询及库存状态判断,仅追加公共栈板绑定校验,不用于拆标签 - rqrq */
HandlingUnit scanLabelForCancelReserve(String site, String unitId);
/**
* @author rqrq
* @Description PDA标签查询:请求 site 是登录大工厂,先取 site_sub 全部小工厂,再按标签号查询。查无返回 null;同一标签落在多个小工厂时抛异常。- rqrq
* @param bigSite 登录大工厂,不能用标签上的小工厂代替 - rqrq
* @param unitId 标签号 - rqrq
* @return 唯一标签;不存在返回 null - rqrq
*/
HandlingUnit queryPdaLabelByBigSite(String bigSite, String unitId);
/**
* 对外接口:扫描处理单元标签
*/

46
src/main/java/com/gaotao/modules/handlingunit/service/impl/HandlingUnitServiceImpl.java

@ -20,6 +20,7 @@ import com.gaotao.modules.trans.service.ValidateInventoryPartInStockService;
import com.gaotao.modules.warehouse.entity.InventoryStock;
import com.gaotao.modules.warehouse.service.InventoryStockService;
import com.gaotao.modules.base.entity.PartData;
import com.gaotao.modules.factory.dao.SiteMapper;
import com.gaotao.modules.handlingunit.service.HandlingUnitService;
import com.gaotao.modules.warehouse.service.WmsAvailabilityControlIdService;
import org.apache.commons.lang3.StringUtils;
@ -32,6 +33,7 @@ import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.UUID;
@ -49,6 +51,9 @@ public class HandlingUnitServiceImpl extends ServiceImpl<HandlingUnitMapper, Han
@Autowired
private WmsAvailabilityControlIdService wmsAvailabilityControlIdService;
@Autowired
private SiteMapper siteMapper;
@Autowired
private ValidateInventoryPartInStockService validateInventoryPartInStockService;
@Override
@ -92,6 +97,47 @@ public class HandlingUnitServiceImpl extends ServiceImpl<HandlingUnitMapper, Han
return unit;
}
/**
* @author rqrq
* @Description PDA标签查询。请求 site 是登录大工厂,标签 handling_unit.site 是小工厂。先取 site_sub 全部小工厂,再按标签号限定在这些小工厂内。未配置小工厂时退回大工厂本身,避免其它工厂查空。同一标签落在多个小工厂时不猜测返回。- rqrq
*/
@Override
public HandlingUnit queryPdaLabelByBigSite(String bigSite, String unitId) {
if (StringUtils.isBlank(bigSite)) {
throw new XJException("工厂编码不能为空");
}
if (StringUtils.isBlank(unitId)) {
throw new XJException("标签编码不能为空");
}
String site = bigSite.trim();
String code = unitId.trim();
// 按大工厂取小工厂清单。54 会得到 54/54A/54B/54C;查询失败则中断,避免漏掉小工厂后误报标签不存在。- rqrq
List<String> configuredSubSites = siteMapper.listSubSiteIds(site);
LinkedHashSet<String> siteScope = new LinkedHashSet<String>();
if (configuredSubSites != null) {
for (String subSite : configuredSubSites) {
if (StringUtils.isNotBlank(subSite)) {
siteScope.add(subSite.trim());
}
}
}
if (siteScope.isEmpty()) {
siteScope.add(site);
}
// 标签号加小工厂范围查询。多条时不能任取一条,否则打印和拆分会用错工厂。- rqrq
List<HandlingUnit> handlingUnits = this.lambdaQuery()
.in(HandlingUnit::getSite, siteScope)
.eq(HandlingUnit::getUnitId, code)
.list();
if (handlingUnits == null || handlingUnits.isEmpty()) {
return null;
}
if (handlingUnits.size() > 1) {
throw new XJException("同一标签编码在多个小工厂存在,无法确定");
}
return handlingUnits.get(0);
}
@Override
public HandlingUnit getHandlingUnit(String site, String unitId) {
return baseMapper.selectByUnitIdNoLock(unitId);

9
src/main/resources/mapper/factory/SiteMapper.xml

@ -291,6 +291,15 @@
AND subsiteid = #{subSiteId}
</delete>
<!-- rqrq - 按大工厂取出全部小工厂。结果用于标签查询范围,不使用 NOLOCK,避免读到未提交映射后查错账套 -->
<select id="listSubSiteIds" resultType="java.lang.String">
SELECT LTRIM(RTRIM(ss.subsiteid))
FROM site_sub ss
WHERE ss.siteid = #{siteId}
AND ss.subsiteid IS NOT NULL
AND LTRIM(RTRIM(ss.subsiteid)) &lt;&gt; ''
</select>
<!-- 统计工厂下子site数量 -->
<select id="countSubSiteBySiteId" resultType="int">
SELECT COUNT(1)

Loading…
Cancel
Save