|
|
|
@ -24,6 +24,7 @@ import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Comparator; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.LinkedHashMap; |
|
|
|
import java.util.List; |
|
|
|
@ -182,13 +183,19 @@ public class ErfExpIssueServiceImpl implements ErfExpIssueService { |
|
|
|
throw new XJException(String.format("试验单[%s]物料[%s]的本次领料数量超过可申请数量(%s)", |
|
|
|
dbItem.getApplyNo(), resolvePartText(dbItem), formatQty(availableQty))); |
|
|
|
} |
|
|
|
if (inputItem.getNeedDate() == null) { |
|
|
|
throw new XJException(String.format("试验单[%s]物料[%s]的要求发料时间不能为空", |
|
|
|
dbItem.getApplyNo(), resolvePartText(dbItem))); |
|
|
|
} |
|
|
|
|
|
|
|
issueQtyMap.put(rawMaterialId, issueQty); |
|
|
|
dbItem.setNeedDate(inputItem.getNeedDate()); |
|
|
|
validatedMaterialList.add(dbItem); |
|
|
|
} |
|
|
|
|
|
|
|
Date planIssueDate = resolvePlanIssueDate(data, validatedMaterialList); |
|
|
|
String finalUserName = StringUtils.hasText(userName) ? userName : "system"; |
|
|
|
String notifyNo = createErfNotifyNo(site, finalUserName, data.getRemark()); |
|
|
|
String notifyNo = createErfNotifyNo(site, finalUserName, data.getRemark(), planIssueDate); |
|
|
|
|
|
|
|
int createdOrderCount = 0; |
|
|
|
int createdMaterialCount = 0; |
|
|
|
@ -235,7 +242,7 @@ public class ErfExpIssueServiceImpl implements ErfExpIssueService { |
|
|
|
* 2. 写入OrderType类型标记 |
|
|
|
* 3. 默认状态设为已下达 |
|
|
|
*/ |
|
|
|
private String createErfNotifyNo(String site, String userName, String remark) { |
|
|
|
private String createErfNotifyNo(String site, String userName, String remark, Date planIssueDate) { |
|
|
|
SOIssueNotifyHeaderData createData = new SOIssueNotifyHeaderData(); |
|
|
|
createData.setSite(site); |
|
|
|
createData.setUserName(userName); |
|
|
|
@ -262,7 +269,8 @@ public class ErfExpIssueServiceImpl implements ErfExpIssueService { |
|
|
|
SOIssueNotifyHeaderData xiadaData = new SOIssueNotifyHeaderData(); |
|
|
|
xiadaData.setSite(site); |
|
|
|
xiadaData.setNotifyNo(notifyNo); |
|
|
|
xiadaData.setPlanIssueDate(new Date()); |
|
|
|
// 主表计划发料时间与明细要求发料时间对齐,默认取明细最早时间 |
|
|
|
xiadaData.setPlanIssueDate(planIssueDate == null ? new Date() : planIssueDate); |
|
|
|
xiadaData.setRemark(StringUtils.hasText(remark) ? remark : ERF_NOTIFY_DEFAULT_REMARK); |
|
|
|
issureNotifyService.xiadaNotifyHeader(xiadaData); |
|
|
|
return notifyNo; |
|
|
|
@ -342,12 +350,32 @@ public class ErfExpIssueServiceImpl implements ErfExpIssueService { |
|
|
|
|
|
|
|
|
|
|
|
private Date resolveNeedDate(ErfExpIssueMaterialData materialItem) { |
|
|
|
if (materialItem != null && materialItem.getNeedDate() != null) { |
|
|
|
return materialItem.getNeedDate(); |
|
|
|
} |
|
|
|
if (materialItem != null && materialItem.getScheduledDate() != null) { |
|
|
|
return materialItem.getScheduledDate(); |
|
|
|
} |
|
|
|
return new Date(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 主表 PlanIssueDate:前端显式传入优先,否则取明细最早要求发料时间 |
|
|
|
*/ |
|
|
|
private Date resolvePlanIssueDate(ErfExpIssueData data, List<ErfExpIssueMaterialData> materialList) { |
|
|
|
if (data != null && data.getPlanIssueDate() != null) { |
|
|
|
return data.getPlanIssueDate(); |
|
|
|
} |
|
|
|
if (CollectionUtils.isEmpty(materialList)) { |
|
|
|
return new Date(); |
|
|
|
} |
|
|
|
return materialList.stream() |
|
|
|
.map(ErfExpIssueMaterialData::getNeedDate) |
|
|
|
.filter(needDate -> needDate != null) |
|
|
|
.min(Comparator.naturalOrder()) |
|
|
|
.orElse(new Date()); |
|
|
|
} |
|
|
|
|
|
|
|
private String buildMaterialRemark(ErfExpIssueMaterialData item) { |
|
|
|
if (item == null) { |
|
|
|
return "ERF试验单领料"; |
|
|
|
|