|
|
@ -4,6 +4,7 @@ import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnNoOrderAvailableLabelQ |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnNoOrderAvailableLabelResult; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnNoOrderAvailableLabelResult; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnNoOrderMaterialAllocListQueryData; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnNoOrderMaterialAllocListQueryData; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnNoOrderMaterialAllocListResult; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnNoOrderMaterialAllocListResult; |
|
|
|
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnSOIssueNotifyHeaderData; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnSOIssueNotifyOrderMaterialListAllocData; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnSOIssueNotifyOrderMaterialListAllocData; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnSOIssueNotifyOrderMaterialListData; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.HaiAnSOIssueNotifyOrderMaterialListData; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.dto.HaiAnNoOrderMaterialAllocRequestData; |
|
|
import com.gaotao.modules.autoWareHourceHaian.entity.dto.HaiAnNoOrderMaterialAllocRequestData; |
|
|
@ -54,14 +55,20 @@ public class HaiAnSOIssueNotifyOrderMaterialListAllocServiceImpl implements HaiA |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
public void saveAllocList(HaiAnNoOrderMaterialAllocRequestData requestData) { |
|
|
public void saveAllocList(HaiAnNoOrderMaterialAllocRequestData requestData) { |
|
|
validateRequestKey(requestData); |
|
|
validateRequestKey(requestData); |
|
|
|
|
|
// 保存前先按site+notifyNo读主单状态;未下达(UNISSUE)禁止改指定,避免未正式下达就锁定标签/批次 - rqrq |
|
|
|
|
|
validateIssuedHeader(requestData); |
|
|
|
|
|
// 校验材料行仍存在:入参site+notifyNo+itemNo+BOMItemNo;找不到则拒绝保存,避免写孤儿指定记录 - rqrq |
|
|
validateExistingMaterial(requestData); |
|
|
validateExistingMaterial(requestData); |
|
|
List<HaiAnSOIssueNotifyOrderMaterialListAllocData> incoming = requestData.getAllocList(); |
|
|
List<HaiAnSOIssueNotifyOrderMaterialListAllocData> incoming = requestData.getAllocList(); |
|
|
if (incoming == null) { |
|
|
if (incoming == null) { |
|
|
incoming = new ArrayList<>(); |
|
|
incoming = new ArrayList<>(); |
|
|
} |
|
|
} |
|
|
|
|
|
// 规范化指定行并按页面顺序生成allocSeq;校验失败抛异常,后续删插不会执行 - rqrq |
|
|
List<HaiAnSOIssueNotifyOrderMaterialListAllocData> normalized = normalizeAllocList(requestData, incoming); |
|
|
List<HaiAnSOIssueNotifyOrderMaterialListAllocData> normalized = normalizeAllocList(requestData, incoming); |
|
|
|
|
|
// 先删后插保证全量重存幂等:按物料行键删除旧指定,失败则整单回滚 - rqrq |
|
|
allocMapper.deleteAllocList(requestData.getSite(), requestData.getNotifyNo(), requestData.getItemNo(), requestData.getBOMItemNo()); |
|
|
allocMapper.deleteAllocList(requestData.getSite(), requestData.getNotifyNo(), requestData.getItemNo(), requestData.getBOMItemNo()); |
|
|
if (!normalized.isEmpty()) { |
|
|
if (!normalized.isEmpty()) { |
|
|
|
|
|
// 按当前页面顺序插入新指定行;插入失败回滚,前端弹窗保留可改 - rqrq |
|
|
allocMapper.insertAllocList(normalized); |
|
|
allocMapper.insertAllocList(normalized); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -140,12 +147,31 @@ public class HaiAnSOIssueNotifyOrderMaterialListAllocServiceImpl implements HaiA |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* @author rqrq |
|
|
|
|
|
* @Description 校验申请单已下达:仅status=ISSUE允许保存指定物料;UNISSUE/CLOSED等一律拒绝,避免未下达锁定库存 - rqrq |
|
|
|
|
|
* @param requestData 含site+notifyNo的指定保存请求;查询失败或状态不符时抛异常,事务回滚且不写alloc表 - rqrq |
|
|
|
|
|
*/ |
|
|
|
|
|
private void validateIssuedHeader(HaiAnNoOrderMaterialAllocRequestData requestData) { |
|
|
|
|
|
// 调用海安主单查询:入参site+notifyNo定位当前申请单;查不到则视为单据已删,不能继续指定 - rqrq |
|
|
|
|
|
HaiAnSOIssueNotifyHeaderData header = issueNotifyMapper.haiAnGetNotifyHeader( |
|
|
|
|
|
requestData.getSite(), requestData.getNotifyNo()); |
|
|
|
|
|
if (header == null) { |
|
|
|
|
|
throw new RuntimeException("申请单不存在,无法保存指定物料"); |
|
|
|
|
|
} |
|
|
|
|
|
String status = StringUtils.defaultString(header.getStatus()).trim(); |
|
|
|
|
|
if (!"ISSUE".equalsIgnoreCase(status)) { |
|
|
|
|
|
throw new RuntimeException("未下达申请单不允许指定物料"); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private void validateExistingMaterial(HaiAnNoOrderMaterialAllocRequestData requestData) { |
|
|
private void validateExistingMaterial(HaiAnNoOrderMaterialAllocRequestData requestData) { |
|
|
HaiAnSOIssueNotifyOrderMaterialListData query = new HaiAnSOIssueNotifyOrderMaterialListData(); |
|
|
HaiAnSOIssueNotifyOrderMaterialListData query = new HaiAnSOIssueNotifyOrderMaterialListData(); |
|
|
query.setSite(requestData.getSite()); |
|
|
query.setSite(requestData.getSite()); |
|
|
query.setNotifyNo(requestData.getNotifyNo()); |
|
|
query.setNotifyNo(requestData.getNotifyNo()); |
|
|
query.setItemNo(requestData.getItemNo()); |
|
|
query.setItemNo(requestData.getItemNo()); |
|
|
query.setBOMItemNo(requestData.getBOMItemNo()); |
|
|
query.setBOMItemNo(requestData.getBOMItemNo()); |
|
|
|
|
|
// 调用海安材料明细查询确认当前BOM行仍在申请单内;查不到则指定无法落库 - rqrq |
|
|
List<HaiAnSOIssueNotifyOrderMaterialListData> materialRows = issueNotifyMapper.haiAnGetNoOrderMaterialList(query); |
|
|
List<HaiAnSOIssueNotifyOrderMaterialListData> materialRows = issueNotifyMapper.haiAnGetNoOrderMaterialList(query); |
|
|
if (materialRows == null || materialRows.isEmpty()) { |
|
|
if (materialRows == null || materialRows.isEmpty()) { |
|
|
throw new RuntimeException("当前物料行不存在或已被删除"); |
|
|
throw new RuntimeException("当前物料行不存在或已被删除"); |
|
|
|