diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnIssureNotifyController.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnIssureNotifyController.java index 58fad542..1123df1c 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnIssureNotifyController.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/controller/HaiAnIssureNotifyController.java @@ -15,6 +15,8 @@ import com.gaotao.modules.autoWareHourceHaian.entity.dto.HaiAnNoOrderMaterialAll import com.gaotao.modules.autoWareHourceHaian.entity.dto.HaiAnNoOrderNotifyDto; import com.gaotao.modules.autoWareHourceHaian.entity.dto.HaiAnNewSoIssueNotifyDto; import com.gaotao.modules.customer.entity.dto.ShipmentIssueDto; +import com.gaotao.modules.factory.entity.PartAttribute; +import com.gaotao.modules.factory.entity.dto.NoOrderPartAttributeDto; import com.gaotao.modules.autoWareHourceHaian.entity.vo.HaiAnSOIssueNotifyOrderList; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnIssureNotifyService; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnSOIssueNotifyOrderMaterialListAllocService; @@ -230,6 +232,16 @@ public class HaiAnIssureNotifyController { return R.ok().put("rows", rows); } + /** + * @author rqrq + * @Description 海安无订单录入料号:没有属性时先看标签,有标签才补默认属性,都没有则由服务报错 - rqrq + */ + @PostMapping(value = "/queryNoOrderPartAttribute") + public R haiAnQueryNoOrderPartAttribute(@RequestBody NoOrderPartAttributeDto data) { + PartAttribute row = haiAnIssureNotifyService.haiAnQueryNoOrderPartAttribute(data); + return R.ok().put("rows", row); + } + /** * @author rqrq * @Description 查询海安无单物料明细并补全立库属性字段,便于前端直接展示可用库存语义 - rqrq diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnIssureNotifyMapper.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnIssureNotifyMapper.java index 8e2c000c..b027fffb 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnIssureNotifyMapper.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnIssureNotifyMapper.java @@ -84,4 +84,13 @@ public interface HaiAnIssureNotifyMapper { HaiAnSOIssueNotifyHeaderData haiAnGetNotifyHeader(@Param("site") String site, @Param("notifyNo") String notifyNo); int haiAnCancelNoOrderIssueNotify(@Param("site") String site, @Param("notifyNo") String notifyNo); + + /** + * @author rqrq + * @Description 判断标签表是否已有该小site+料号,供海安无订单补默认属性前确认,不要求在库 - rqrq + * @param site 标签所属小site,对应handling_unit.site - rqrq + * @param partNo 物料编码,对应handling_unit.part_no - rqrq + * @return 1=至少有一条标签,0=没有标签 - rqrq + */ + int countHandlingUnitBySiteAndPart(@Param("site") String site, @Param("partNo") String partNo); } diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnIssureNotifyService.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnIssureNotifyService.java index 6cc11256..3182ea3c 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnIssureNotifyService.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnIssureNotifyService.java @@ -10,6 +10,8 @@ import com.gaotao.modules.autoWareHourceHaian.entity.dto.HaiAnNoOrderNotifyDto; import com.gaotao.modules.autoWareHourceHaian.entity.dto.HaiAnNewSoIssueNotifyDto; import com.gaotao.modules.autoWareHourceHaian.entity.vo.HaiAnSOIssueNotifyOrderList; import com.gaotao.modules.customer.entity.dto.ShipmentIssueDto; +import com.gaotao.modules.factory.entity.PartAttribute; +import com.gaotao.modules.factory.entity.dto.NoOrderPartAttributeDto; import java.util.List; @@ -45,6 +47,14 @@ public interface HaiAnIssureNotifyService { List haiAnGetNoOrderMaterialList(HaiAnSOIssueNotifyOrderMaterialListData data); + /** + * @author rqrq + * @Description 海安无订单按小site+料号取物料属性;没有属性时仅在标签表已有该料时补默认属性,否则报错 - rqrq + * @param queryDto site为弹窗选中的小site,componentPartNo为录入料号 - rqrq + * @return 已有或刚补建的物料属性,含是否进立库和可用库存 - rqrq + */ + PartAttribute haiAnQueryNoOrderPartAttribute(NoOrderPartAttributeDto queryDto); + void haiAnSaveNoOrderMaterialDetail(List data); PageUtils haiAnSearchNoOrderNotifyHeader(ShipmentIssueDto data); diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnIssureNotifyServiceImpl.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnIssureNotifyServiceImpl.java index dad8e14c..1e03fd75 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnIssureNotifyServiceImpl.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnIssureNotifyServiceImpl.java @@ -3,7 +3,9 @@ package com.gaotao.modules.autoWareHourceHaian.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gaotao.common.utils.PageUtils; +import com.gaotao.common.utils.PartAttributeUtil; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnIssueDestinationResolver; +import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnSiteStaticData; import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnSOIssueNotifyHeaderData; import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnSOIssueNotifyOrderListData; import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnSOIssueNotifyOrderMaterialListAllocData; @@ -16,6 +18,9 @@ import com.gaotao.modules.autoWareHourceHaian.entity.dto.HaiAnShoporderAndMateri import com.gaotao.modules.autoWareHourceHaian.entity.vo.HaiAnSOIssueNotifyOrderList; import com.gaotao.modules.autoWareHourceHaian.entity.vo.HaiAnSOIssueNotifyOrderMaterialList; import com.gaotao.modules.customer.entity.dto.ShipmentIssueDto; +import com.gaotao.modules.factory.dao.PartAttributeMapper; +import com.gaotao.modules.factory.entity.PartAttribute; +import com.gaotao.modules.factory.entity.dto.NoOrderPartAttributeDto; import com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnIssureNotifyMapper; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnIssureNotifyService; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnSOIssueNotifyOrderMaterialListAllocService; @@ -31,6 +36,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.LinkedHashMap; @@ -59,6 +65,12 @@ public class HaiAnIssureNotifyServiceImpl implements HaiAnIssureNotifyService { @Autowired private TransNoControlService transNoService; + @Autowired + private PartAttributeMapper partAttributeMapper; + + @Autowired + private PartAttributeUtil partAttributeUtil; + /** * @author rqrq * @Description 查询当前用户未下达海安申请单,保持主单仅按site维度检索 - rqrq @@ -443,6 +455,47 @@ public class HaiAnIssureNotifyServiceImpl implements HaiAnIssureNotifyService { return haiAnIssureNotifyMapper.haiAnGetNoOrderMaterialList(data); } + /** + * @author rqrq + * @Description 海安无订单录入料号时取属性。已有属性直接返回;没有属性时先查标签表,有标签才按料号规则补默认属性,标签也没有则中断添加 - rqrq + */ + @Override + public PartAttribute haiAnQueryNoOrderPartAttribute(NoOrderPartAttributeDto queryDto) { + if (queryDto == null) { + throw new RuntimeException("请求缺少物料查询条件,无法添加海安无订单物料"); + } + // 属性表和标签表都按弹窗选中的小site定位,缺失site不能拿登录态兜底 - rqrq + validateSite(queryDto.getSite()); + if (StringUtils.isBlank(queryDto.getComponentPartNo())) { + throw new RuntimeException("请求缺少物料号,无法添加海安无订单物料"); + } + String site = queryDto.getSite().trim(); + String partNo = queryDto.getComponentPartNo().trim(); + if (!HaiAnSiteStaticData.isHaianLabelSite(site)) { + throw new RuntimeException("当前站点不是海安站点,不能补海安无订单物料属性"); + } + queryDto.setSite(site); + queryDto.setComponentPartNo(partNo); + + // 先查已有属性;查到就不再插入,避免覆盖人工维护的进立库、机械手等设置 - rqrq + PartAttribute partAttribute = partAttributeMapper.queryPartAttributeData(queryDto); + if (partAttribute == null) { + // 没有属性时只认handling_unit是否已有该小site+料号;没有标签则报错,不凭空建属性 - rqrq + int labelCount = haiAnIssureNotifyMapper.countHandlingUnitBySiteAndPart(site, partNo); + if (labelCount <= 0) { + throw new RuntimeException("物料" + partNo + "没有物料属性,标签表也没有该物料,不能添加"); + } + // 有标签时与生产订单、发货单使用同一套默认值:20/301开头或DF结尾不进立库,其余进立库,机械手、HU、常用默认Y - rqrq + partAttribute = partAttributeUtil.autoCreatePartAttribute(site, partNo); + if (partAttribute == null || StringUtils.isBlank(partAttribute.getPartNo())) { + throw new RuntimeException("物料" + partNo + "标签已存在,但补默认物料属性失败"); + } + } + // 回填是否进立库和海安可用库存;此时属性已存在或刚写入,不会再插入第二条 - rqrq + partAttributeUtil.fillIsInWhFor54(Collections.singletonList(partAttribute), HaiAnSiteStaticData.HAIAN_SITE); + return partAttribute; + } + /** * @author rqrq * @Description 保存海安无单物料明细:先删旧明细再重建,subsite缺失时回查父行补齐 - rqrq diff --git a/src/main/resources/mapper/autoWareHourceHaian/HaiAnIssureNotifyMapper.xml b/src/main/resources/mapper/autoWareHourceHaian/HaiAnIssureNotifyMapper.xml index ef814ac3..2eb30e91 100644 --- a/src/main/resources/mapper/autoWareHourceHaian/HaiAnIssureNotifyMapper.xml +++ b/src/main/resources/mapper/autoWareHourceHaian/HaiAnIssureNotifyMapper.xml @@ -552,4 +552,14 @@ AND notify_no = #{notifyNo} + + +