From 8b6e489712ef0cbe2f8bf8f9dc8541e6e86bbf82 Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Fri, 14 Nov 2025 11:24:17 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B2=BE=E5=BA=A6=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/IssureNotifyController.java | 15 +++++ .../notify/mapper/IssureNotifyMapper.java | 1 + .../notify/service/IssureNotifyService.java | 5 ++ .../service/impl/IssureNotifyServiceImpl.java | 57 +++++++++++++++++-- ...lidateInventoryPartInStockServiceImpl.java | 26 ++++++++- .../mapper/notify/IssureNotifyMapper.xml | 8 +++ 6 files changed, 107 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gaotao/modules/notify/controller/IssureNotifyController.java b/src/main/java/com/gaotao/modules/notify/controller/IssureNotifyController.java index 8b3aa755..8b239d97 100644 --- a/src/main/java/com/gaotao/modules/notify/controller/IssureNotifyController.java +++ b/src/main/java/com/gaotao/modules/notify/controller/IssureNotifyController.java @@ -371,4 +371,19 @@ public class IssureNotifyController { return R.error("操作失败"); } + + /**-----------------------------------------无订单时的接口---------------------------------------------------------*/ + @PostMapping(value="/getUserNoOrderNotifyNo") + @ResponseBody + public R getUserNoOrderNotifyNo(@RequestBody SOIssueNotifyHeaderData data) { + SOIssueNotifyHeaderData row = issureNotifyService.getUserNoOrderNotifyNo(data); + return R.ok().put("row", row); + } + + @PostMapping(value="/createNoOrderNotify") + @ResponseBody + public R createNoOrderNotify(@RequestBody SOIssueNotifyHeaderData data) throws ParseException { + issureNotifyService.createNoOrderNotify(data); + return R.ok(); + } } diff --git a/src/main/java/com/gaotao/modules/notify/mapper/IssureNotifyMapper.java b/src/main/java/com/gaotao/modules/notify/mapper/IssureNotifyMapper.java index 048f34ab..09e6fd3c 100644 --- a/src/main/java/com/gaotao/modules/notify/mapper/IssureNotifyMapper.java +++ b/src/main/java/com/gaotao/modules/notify/mapper/IssureNotifyMapper.java @@ -154,4 +154,5 @@ public interface IssureNotifyMapper extends BaseMapper { int batchSaveSOIssueNotifyOrderMaterialList(@Param("childList") List childList); + SOIssueNotifyHeaderData getUserNoOrderNotifyNo(SOIssueNotifyHeaderData data); } diff --git a/src/main/java/com/gaotao/modules/notify/service/IssureNotifyService.java b/src/main/java/com/gaotao/modules/notify/service/IssureNotifyService.java index 889b9a83..0110e607 100644 --- a/src/main/java/com/gaotao/modules/notify/service/IssureNotifyService.java +++ b/src/main/java/com/gaotao/modules/notify/service/IssureNotifyService.java @@ -164,4 +164,9 @@ public interface IssureNotifyService { void cancelIssueNotify(SOIssueNotifyHeaderData data); String saveNewSoIssueNotify(NewSoIssueNotifyDto data) throws Exception; + + /**---------------------------------------------无订单时的接口-------------------------------------------------*/ + SOIssueNotifyHeaderData getUserNoOrderNotifyNo(SOIssueNotifyHeaderData data); + + void createNoOrderNotify(SOIssueNotifyHeaderData data); } diff --git a/src/main/java/com/gaotao/modules/notify/service/impl/IssureNotifyServiceImpl.java b/src/main/java/com/gaotao/modules/notify/service/impl/IssureNotifyServiceImpl.java index 86338c18..a433da94 100644 --- a/src/main/java/com/gaotao/modules/notify/service/impl/IssureNotifyServiceImpl.java +++ b/src/main/java/com/gaotao/modules/notify/service/impl/IssureNotifyServiceImpl.java @@ -724,7 +724,7 @@ public class IssureNotifyServiceImpl implements IssureNotifyService { parentList.add(parent); // 2.3 遍历分组内的 dto,按 lineItemNo 生成子对象(SOIssueNotifyOrderMaterialList) - List children = buildChildren(data.getNotifyNo(),data.getSite(),groupDtos, nextItem); + List children = buildChildren(data.getNotifyNo(),data.getSite(),groupDtos, nextItem,parent.getOrderType()); childList.addAll(children); num++; @@ -779,14 +779,22 @@ public class IssureNotifyServiceImpl implements IssureNotifyService { parent.setFgPartNo(firstDto.getPartNo()); parent.setNeedDate(firstDto.getNeedDate()); parent.setTransportFlag("N"); - parent.setOrderType("shoporder"); + if(firstDto.getPartNo() != null){ + if(firstDto.getPartNo().startsWith("3") || firstDto.getPartNo().startsWith("7")){ + parent.setOrderType("slittingorder"); + }else{ + parent.setOrderType("shoporder"); + } + }else{ + parent.setOrderType("shoporder"); + } return parent; } /** * 构建子对象列表(SOIssueNotifyOrderMaterialList),关联父对象的 itemNo */ - private static List buildChildren(String notifyNo,String site,List groupDtos, BigDecimal parentItemNo) { + private static List buildChildren(String notifyNo,String site,List groupDtos, BigDecimal parentItemNo,String parentType) { return groupDtos.stream() .map(dto -> { SOIssueNotifyOrderMaterialList child = new SOIssueNotifyOrderMaterialList(); @@ -802,11 +810,52 @@ public class IssureNotifyServiceImpl implements IssureNotifyService { child.setQtyToIssueOriginal(dto.getApplyQty()); } child.setIssueType("BOM物料"); - child.setOrderType("shoporder"); + if(StringUtils.isNotBlank(parentType)){ + child.setOrderType(parentType); + }else{ + child.setOrderType("shoporder"); + } return child; }) // 按 lineItemNo 排序(可选,确保子项顺序) .sorted(Comparator.comparing(SOIssueNotifyOrderMaterialList::getBOMItemNo)) .collect(Collectors.toList()); } + + /**---------------------------------------------无订单时的接口-------------------------------------------------*/ + + @Override + public SOIssueNotifyHeaderData getUserNoOrderNotifyNo(SOIssueNotifyHeaderData data) { + SOIssueNotifyHeaderData header = issureNotifyMapper.getUserNoOrderNotifyNo(data); + return header; + } + + @Override + @Transactional + public void createNoOrderNotify(SOIssueNotifyHeaderData data) { + SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); + String transType = "NOSI"; + // 获取流水号,出错不回滚 + TransNoControl transNo = transNoService.getTransNo(data.getSite(),transType,8); + data.setNotifyNo(transNo.getNewTransNo()); + data.setNotifyDate(new Date()); + data.setUsername(currentUser.getUsername()); + data.setEnteredDate(new Date()); + data.setReceiver(""); + data.setDepartmentId(""); + data.setRemark(data.getRemark()); + data.setCreditFlag("N"); + data.setIssueFlag("N"); + data.setIssueResult(""); + data.setStatus("UNISSUE"); + data.setHaveIssueRecordFlag("N"); + data.setCalcFlag("N"); + data.setNeedApproveFlag("N"); + data.setApprovedFlag("N"); + data.setOutWorkOrderFlag(data.getOutWorkOrderFlag()); + data.setProjectId(""); + data.setOrderType("otherOrder"); + data.setPushWcsFlag("未推送"); + issureNotifyMapper.insert(data); + } } diff --git a/src/main/java/com/gaotao/modules/trans/service/impl/ValidateInventoryPartInStockServiceImpl.java b/src/main/java/com/gaotao/modules/trans/service/impl/ValidateInventoryPartInStockServiceImpl.java index 377952f1..05fabc63 100644 --- a/src/main/java/com/gaotao/modules/trans/service/impl/ValidateInventoryPartInStockServiceImpl.java +++ b/src/main/java/com/gaotao/modules/trans/service/impl/ValidateInventoryPartInStockServiceImpl.java @@ -11,10 +11,12 @@ import com.gaotao.modules.trans.entity.TransCommonSubDto; import com.gaotao.modules.trans.entity.TransDetail; import com.gaotao.modules.trans.entity.TransDetailSub; import com.gaotao.modules.trans.service.ValidateInventoryPartInStockService; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -76,10 +78,32 @@ public class ValidateInventoryPartInStockServiceImpl implements ValidateInventor && vo.getLocationNo().equals(key.get(3)) && vo.getWaivDevRejNo().equals(key.get(4)) ){ - if(!"N".equals(vo.getFreezeFlagDb()) || (new BigDecimal(vo.getQtyOnhand()).subtract(new BigDecimal(vo.getQtyReserved())).compareTo(new BigDecimal(totalQty)))< 0){ + // 1. 处理 qtyOnhand(String类型,空值默认0) + String onhandStr = vo.getQtyOnhand(); + BigDecimal qtyOnhand = StringUtils.isBlank(onhandStr) + ? BigDecimal.ZERO + : new BigDecimal(onhandStr); // String转BigDecimal,无精度损失 + + // 2. 处理 qtyReserved(假设也是String类型,同理空值默认0) + String reservedStr = vo.getQtyReserved(); + BigDecimal qtyReserved = StringUtils.isBlank(reservedStr) + ? BigDecimal.ZERO + : new BigDecimal(reservedStr); + BigDecimal availableQty = qtyOnhand.subtract(qtyReserved); + + // 2. 统一设置精度(如保留4位小数,四舍五入) + BigDecimal availableQtyScaled = availableQty.setScale(4, RoundingMode.HALF_UP); + BigDecimal totalQtyScaled = BigDecimal.valueOf(totalQty).setScale(4, RoundingMode.HALF_UP); + + // 3. 用统一精度后的值比较 + if (!"N".equals(vo.getFreezeFlagDb()) || availableQtyScaled.compareTo(totalQtyScaled) < 0) { flag = true; break; } + /*if(!"N".equals(vo.getFreezeFlagDb()) || (new BigDecimal(vo.getQtyOnhand()).subtract(new BigDecimal(vo.getQtyReserved())).compareTo(new BigDecimal(totalQty)))< 0){ + flag = true; + break; + }*/ } } diff --git a/src/main/resources/mapper/notify/IssureNotifyMapper.xml b/src/main/resources/mapper/notify/IssureNotifyMapper.xml index bd702e0c..398ab3b7 100644 --- a/src/main/resources/mapper/notify/IssureNotifyMapper.xml +++ b/src/main/resources/mapper/notify/IssureNotifyMapper.xml @@ -412,5 +412,13 @@ record_version,out_work_order_flag,project_id,order_type,auth_rule_id,bu) (#{item.notifyNo},#{item.site},#{item.itemNo},#{item.bOMItemNo},#{item.componentPartNo},#{item.qtyToIssue,jdbcType=DECIMAL},#{item.qtyToIssueOriginal,jdbcType=DECIMAL},#{item.issueType},rtrim(#{item.remark}),#{item.orderType}) + \ No newline at end of file