package com.chinaztt.mes.quality.utils;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.util.BooleanUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.chinaztt.ifs.api.feign.IfsFeignClient;
|
import com.chinaztt.mes.basic.entity.Location;
|
import com.chinaztt.mes.basic.entity.Part;
|
import com.chinaztt.mes.basic.entity.WorkstationLocation;
|
import com.chinaztt.mes.basic.mapper.LocationMapper;
|
import com.chinaztt.mes.basic.mapper.PartMapper;
|
import com.chinaztt.mes.basic.mapper.WorkstationLocationMapper;
|
import com.chinaztt.mes.quality.dto.*;
|
import com.chinaztt.mes.quality.entity.*;
|
import com.chinaztt.mes.quality.mapper.ApplyPartMapper;
|
import com.chinaztt.mes.quality.mapper.FinishedProdInspQtyChangeEventMapper;
|
import com.chinaztt.mes.quality.mapper.QualityMainIfsReportMapper;
|
import com.chinaztt.mes.quality.mapper.ReportMapper;
|
import com.chinaztt.mes.quality.service.impl.ApplyPartServiceImpl;
|
import com.chinaztt.mes.warehouse.dto.StockDTO;
|
import com.chinaztt.mes.warehouse.entity.Stock;
|
import com.chinaztt.mes.warehouse.service.StockService;
|
import com.chinaztt.ztt.admin.api.feign.RemoteParamService;
|
import com.chinaztt.ztt.common.core.constant.SecurityConstants;
|
import com.chinaztt.ztt.common.core.util.R;
|
import com.google.gson.Gson;
|
import lombok.AllArgsConstructor;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @Description : 质量模块对接ifs工具类
|
* @ClassName : QualityModuleDockIfsUtils
|
* @Author : sll
|
* @Date: 2022-07-20 17:35
|
*/
|
@Service
|
@AllArgsConstructor
|
public class QualityModuleDockIfsUtils{
|
public static final String SHOP_ORDER_REC = "01";//车间订单接收
|
public static final String SHOP_ORDER_CANCEL_REC = "02";//车间订单取消接收
|
public static final String REPORT_OPERATION = "03";//工序报工
|
public static final String CANCEL_REPORT_OPERATION = "04";//取消工序报工
|
public static final String SCRAP_OPERATION = "05";//工序报废
|
public static final String CANCEL_SCRAP_OPERATION = "06";//取消工序报废
|
public static final String MOVE_PART = "07";//库存件移库
|
public static final String CANCEL_MOVE_PART = "08";//取消库存件移库
|
public static final String MOVE_PART_REPLACE = "09";//库存件移库替换
|
public static final String CANCEL_MOVE_PART_REPLACE = "10";//取消库存件移库替换
|
public static final String SCRAP_ISSUANCE = "11";//报废发放
|
public static final String CANCEL_SCRAP_ISSUANCE = "12";//取消报废发放
|
public static final String MOVE_PART_REPLACE_NO_OUTPUT = "13";// 非产出库存件移库替换
|
public static final String CANCEL_MOVE_PART_REPLACE_NO_OUTPUT = "14";// 取消非产出库存件移库替换
|
public static final String MOVE_PART_NO_OUTPUT = "15";// 非产出库存件移库
|
public static final String CANCEL_MOVE_PART_NO_OUTPUT = "16";// 取消非产出库存件移库
|
public static final String SHOP_ORDER_REC_V2 = "17";//车间订单接收V2
|
public static final String SHOP_ORDER_CANCEL_REC_V2 = "18";//车间订单取消接收V2
|
public static final String MOVE_PART_V2 = "19";//库存件移库V2
|
public static final String CANCEL_MOVE_PART_V2 = "20";//取消库存件移库V2
|
|
public static final String CONTRACT = "IFS_DOMAIN";
|
|
private ApplyPartMapper applyPartMapper;
|
private ReportMapper reportMapper;
|
private WorkstationLocationMapper workstationLocationMapper;
|
private LocationMapper locationMapper;
|
private ReportUtils reportUtils;
|
private PartMapper partMapper;
|
private QualityMainIfsReportMapper qualityMainIfsReportMapper;
|
private FinishedProdInspQtyChangeEventMapper finishedProdInspQtyChangeEventMapper;
|
private IfsFeignClient ifsFeignClient;
|
private RemoteParamService remoteParamService;
|
private StockService stockService;
|
|
|
/**
|
* 根据检测汇报id对接ifs
|
* @param reportId 检测汇报主表id
|
* @param businessCode 业务类型码
|
* @param isNeedFinishApply 是否需要成品检处理
|
*/
|
public void dockIfsByReportId(Long reportId,String businessCode, Boolean isNeedFinishApply){
|
//根据检测汇报主表id获取汇报材料明细
|
List<ApplyPart> applyPartList = applyPartMapper.selectListByReportId(reportId);
|
if(CollectionUtils.isEmpty(applyPartList)){
|
return;//没有需要待处理的数据
|
}
|
|
switch(businessCode){
|
case SHOP_ORDER_REC:
|
ifsShopOrderRec(applyPartList,businessCode,isNeedFinishApply);
|
break;
|
case SHOP_ORDER_CANCEL_REC:
|
ifsShopOrderCancelRec(applyPartList,businessCode,isNeedFinishApply);
|
break;
|
case REPORT_OPERATION:
|
ifsOperationReport(applyPartList,businessCode,reportId);
|
break;
|
case CANCEL_REPORT_OPERATION:
|
ifsOperationCancelReport(applyPartList,businessCode,reportId);
|
break;
|
case SCRAP_OPERATION:
|
ifsOperationScrap(applyPartList,businessCode);
|
break;
|
case CANCEL_SCRAP_OPERATION:
|
ifsOperationCancelScrap(applyPartList,businessCode);
|
break;
|
case MOVE_PART:
|
ifsMovePart(applyPartList,businessCode);
|
break;
|
case CANCEL_MOVE_PART:
|
ifsCancelMovePart(applyPartList,businessCode);
|
break;
|
case MOVE_PART_REPLACE:
|
ifsMovePartReplace(applyPartList,businessCode,isNeedFinishApply);
|
break;
|
case CANCEL_MOVE_PART_REPLACE:
|
ifsCancelMovePartReplace(applyPartList,businessCode,isNeedFinishApply);
|
break;
|
case SCRAP_ISSUANCE:
|
ifsScrapIssuance(applyPartList,businessCode);
|
break;
|
case CANCEL_SCRAP_ISSUANCE:
|
ifsCancelScrapIssuance(applyPartList,businessCode);
|
break;
|
case MOVE_PART_REPLACE_NO_OUTPUT:
|
ifsMovePartReplaceNoOutput(applyPartList,businessCode);
|
break;
|
case CANCEL_MOVE_PART_REPLACE_NO_OUTPUT:
|
ifsCancelMovePartReplaceNoOutput(applyPartList,businessCode);
|
break;
|
case MOVE_PART_NO_OUTPUT:
|
ifsMovePartNoOutput(applyPartList,businessCode);
|
break;
|
case CANCEL_MOVE_PART_NO_OUTPUT:
|
ifsCancelMovePartNoOutput(applyPartList,businessCode);
|
break;
|
case SHOP_ORDER_REC_V2:
|
ifsShopOrderRecV2(applyPartList,businessCode,isNeedFinishApply);
|
break;
|
case SHOP_ORDER_CANCEL_REC_V2:
|
ifsShopOrderCancelRecV2(applyPartList,businessCode,isNeedFinishApply);
|
break;
|
case MOVE_PART_V2:
|
ifsMovePartV2(applyPartList,businessCode);
|
break;
|
case CANCEL_MOVE_PART_V2:
|
ifsCancelMovePartV2(applyPartList,businessCode);
|
break;
|
default:
|
throw new RuntimeException("根据检测汇报id对接ifs->业务类别码=" + businessCode + "->非法");
|
}
|
}
|
|
private void ifsShopOrderRecV2(List<ApplyPart> applyPartList, String businessCode, Boolean isNeedFinishApply) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs车间订单接收的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if(reportUtils.getDockingIfsConditionV2(applyPart.getSystemNo(),applyPart.getId()).getIsShopOrderRec() && !isNeedFinishApply){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
|
ifsShopOrderRecOrCancelRecRealizeCell(applyPartList_ifs,businessCode,isNeedFinishApply);
|
}
|
|
private void ifsShopOrderCancelRecV2(List<ApplyPart> applyPartList, String businessCode, Boolean isNeedFinishApply) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs车间订单取消接收的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if(reportUtils.getDockingIfsConditionV2(applyPart.getSystemNo(),applyPart.getId()).getIsShopOrderCancelRec() && !isNeedFinishApply && "IMPORT_SO_RECEIVE_STD".equals(applyPart.getSyncIfsType())){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
|
ifsShopOrderRecOrCancelRecRealizeCell(applyPartList_ifs,businessCode,isNeedFinishApply);
|
}
|
|
private void ifsMovePartNoOutput(List<ApplyPart> applyPartList, String businessCode) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
// 判断是否为工序库存
|
Stock stock = stockService.getById(applyPart.getStockId());
|
if(!stock.getOperationStockStatus()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;//没有需要待处理的数据
|
}
|
ifsMovePartRealizeCellV2(applyPartList_ifs,businessCode);
|
}
|
|
private void ifsCancelMovePartNoOutput(List<ApplyPart> applyPartList, String businessCode) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
// 判断是否为工序库存
|
Stock stock = stockService.getById(applyPart.getStockId());
|
if(!stock.getOperationStockStatus()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;//没有需要待处理的数据
|
}
|
ifsMovePartRealizeCellV2(applyPartList_ifs,businessCode);
|
}
|
|
private void ifsMovePartReplaceNoOutput(List<ApplyPart> applyPartList, String businessCode) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
// 判断是否为工序库存
|
Stock stock = stockService.getById(applyPart.getStockId());
|
if(!stock.getOperationStockStatus()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;//没有需要待处理的数据
|
}
|
ifsReplaceReportRealizeCell(applyPartList_ifs,businessCode);
|
}
|
|
private void ifsCancelMovePartReplaceNoOutput(List<ApplyPart> applyPartList, String businessCode) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
// 判断是否为工序库存
|
Stock stock = stockService.getById(applyPart.getStockId());
|
if(!stock.getOperationStockStatus()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;//没有需要待处理的数据
|
}
|
ifsReplaceReportRealizeCell(applyPartList_ifs,businessCode);
|
}
|
|
private void ifsScrapIssuance(List<ApplyPart> applyPartList, String businessCode) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if (applyPart.getSourceLocationId() != null) {
|
Stock stock = stockService.getById(applyPart.getStockId());
|
if (!stock.getOperationStockStatus()) {
|
applyPartList_ifs.add(applyPart);
|
}
|
} else {
|
List<Boolean> operationStockStatus = this.applyPartMapper.selectStockOperationStatus(applyPart.getSystemNo());
|
if (CollectionUtil.isNotEmpty(operationStockStatus) && BooleanUtil.isTrue(operationStockStatus.get(0))) {
|
continue;
|
}
|
//1.根据系统号判断产出记录是否已同步ifs,是则继续
|
DockingIfsConditionActiveDTO dockingIfsConditionActiveDTO = reportMapper.getDockingIfsConditionActive(applyPart.getId());
|
if(dockingIfsConditionActiveDTO != null && dockingIfsConditionActiveDTO.getProdOutIfsSync()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
}
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;//没有需要待处理的数据
|
}
|
ifsScrapIssuanceRealizeCell(applyPartList_ifs,businessCode);
|
}
|
|
private void ifsCancelScrapIssuance(List<ApplyPart> applyPartList, String businessCode) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if (applyPart.getSourceLocationId() != null) {
|
Stock stock = stockService.getById(applyPart.getStockId());
|
if (!stock.getOperationStockStatus()) {
|
applyPartList_ifs.add(applyPart);
|
}
|
} else {
|
List<Boolean> operationStockStatus = this.applyPartMapper.selectStockOperationStatus(applyPart.getSystemNo());
|
if (CollectionUtil.isNotEmpty(operationStockStatus) && BooleanUtil.isTrue(operationStockStatus.get(0))) {
|
continue;
|
}
|
//1.根据系统号判断产出记录是否已同步ifs,是则继续
|
DockingIfsConditionActiveDTO dockingIfsConditionActiveDTO = reportMapper.getDockingIfsConditionActive(applyPart.getId());
|
if(dockingIfsConditionActiveDTO != null && dockingIfsConditionActiveDTO.getProdOutIfsSync() && !"IMPORT_SO_RECEIVE_STD".equals(applyPart.getSyncIfsType())){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
}
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;//没有需要待处理的数据
|
}
|
ifsScrapIssuanceRealizeCell(applyPartList_ifs,businessCode);
|
}
|
|
private void ifsScrapIssuanceRealizeCell(List<ApplyPart> applyPartList_ifs, String businessCode) {
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;
|
}
|
|
if(!businessCode.equals(SCRAP_ISSUANCE) && !businessCode.equals(CANCEL_SCRAP_ISSUANCE)){
|
throw new RuntimeException("库存调整单报废数量发放/取消库存调整单报废数量发放实现单元不接受业务类型码=" + businessCode);
|
}
|
|
List<StockDTO> stocks = new ArrayList<>();
|
for (ApplyPart applyPart : applyPartList_ifs) {
|
Report report = this.reportMapper.selectById(applyPart.getReportId());
|
//待检成品库
|
Long toQualifiedLocationId =
|
workstationLocationMapper.selectFinishToQualifiedLocationIdBySystemNo(applyPart.getSystemNo());
|
Location releaseLocation = locationMapper.selectById(toQualifiedLocationId);
|
if (applyPart.getSourceLocationId() != null) {
|
releaseLocation = locationMapper.selectById(applyPart.getSourceLocationId());
|
} else {
|
if (!report.getReportType().equals(Apply.PRODUCT_APPLY)) {
|
Long inspectionLocationId = workstationLocationMapper.selectBySystemNo(applyPart.getSystemNo(), WorkstationLocation.INSPECTION_LOCATION);//产出待检库位
|
releaseLocation = locationMapper.selectById(inspectionLocationId);
|
}
|
}
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
StockDTO stockDTO = new StockDTO();
|
stockDTO.setPartId(applyPart.getPartId());
|
stockDTO.setLocationId(releaseLocation.getId());
|
stockDTO.setLocationNo(releaseLocation.getIfsLocation());
|
stockDTO.setPartBatchNo(applyPart.getLotBatchNo());
|
if (applyPart.getSourceLocationId() != null) {
|
Stock stock = stockService.getById(applyPart.getStockId());
|
stockDTO.setIfsBatchNo(stock.getIfsBatchNo());
|
} else {
|
stockDTO.setIfsBatchNo(submitReportDTO.getIfsBatchNo());
|
}
|
stockDTO.setManualInput(true);
|
stockDTO.setAvailableStockQuantityMove(submitReportDTO.getScrapArrived());
|
if (businessCode.equals(SCRAP_ISSUANCE)) {
|
stockDTO.setAdjustType("Issue");
|
stockDTO.setAdjustMemo("库存发放");
|
} else {
|
stockDTO.setAdjustType("Receive");
|
stockDTO.setAdjustMemo("库存接收");
|
}
|
stocks.add(stockDTO);
|
}
|
if (businessCode.equals(SCRAP_ISSUANCE)) {
|
stockService.inventAdjustForRfcable(stocks, "Issue", "R04");
|
} else {
|
stockService.inventAdjustForRfcable(stocks, "Receive", "R01");
|
}
|
}
|
|
private void ifsMovePartV2(List<ApplyPart> applyPartList, String businessCode) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
//1.根据系统号判断产出记录是否已同步ifs,是则继续
|
//2.判断成品检合格数量改变事件记录表是否存在记录,不存在则继续
|
DockingIfsConditionActiveDTO dockingIfsConditionActiveDTO = reportMapper.getDockingIfsConditionActive(applyPart.getId());
|
|
// 如果是单独做成品检,不做库存件移库
|
List<String> rules = applyPartMapper.selectTestRulesBySystemNo(applyPart.getSystemNo());
|
if (rules.size() == 1 && dockingIfsConditionActiveDTO.getReportType().equals(Apply.PRODUCT_APPLY)) {
|
continue;
|
}
|
|
if(dockingIfsConditionActiveDTO != null && dockingIfsConditionActiveDTO.getProdOutIfsSync()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
|
ifsMovePartRealizeCellV2(applyPartList_ifs,businessCode);
|
}
|
|
private void ifsCancelMovePartV2(List<ApplyPart> applyPartList, String businessCode) {
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs取消库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
//1.根据系统号判断产出记录是否已同步ifs,是则继续
|
//2.判断成品检合格数量改变事件记录表是否存在记录,不存在则继续
|
DockingIfsConditionActiveDTO dockingIfsConditionActiveDTO = reportMapper.getDockingIfsConditionActive(applyPart.getId());
|
|
// 如果是单独做成品检,不做库存件移库
|
List<String> rules = applyPartMapper.selectTestRulesBySystemNo(applyPart.getSystemNo());
|
if (rules.size() == 1 && dockingIfsConditionActiveDTO.getReportType().equals(Apply.PRODUCT_APPLY)) {
|
continue;
|
}
|
|
if(dockingIfsConditionActiveDTO != null && dockingIfsConditionActiveDTO.getProdOutIfsSync() && "IMPORT_MOVE_PART_STD".equals(applyPart.getSyncIfsType())){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
|
ifsMovePartRealizeCellV2(applyPartList_ifs,businessCode);
|
}
|
|
|
private void ifsMovePartReplace(List<ApplyPart> applyPartList, String businessCode, Boolean isNeedFinishApply) {
|
List<ApplyPart> replacePartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
List<Boolean> operationStockStatus = applyPartMapper.selectStockOperationStatus(applyPart.getSystemNo());
|
if (CollectionUtil.isNotEmpty(operationStockStatus) && BooleanUtil.isTrue(operationStockStatus.get(0))) {
|
continue;
|
}
|
//1.根据系统号判断产出记录是否已同步ifs,是则继续
|
DockingIfsConditionActiveDTO dockingIfsConditionActiveDTO = reportMapper.getDockingIfsConditionActive(applyPart.getId());
|
if(dockingIfsConditionActiveDTO != null && dockingIfsConditionActiveDTO.getProdOutIfsSync()){
|
replacePartList_ifs.add(applyPart);
|
} else if (reportUtils.getDockingIfsConditionV2(applyPart.getSystemNo(),applyPart.getId()).getIsShopOrderRec() && !isNeedFinishApply) {
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
//对接ifs
|
if (CollectionUtils.isNotEmpty(replacePartList_ifs)) {
|
ifsReplaceReportRealizeCell(replacePartList_ifs,businessCode);
|
}
|
if(CollectionUtils.isNotEmpty(applyPartList_ifs)){
|
ifsShopOrderRecOrCancelRecRealizeCell(applyPartList_ifs,businessCode,isNeedFinishApply);
|
}
|
}
|
|
private void ifsCancelMovePartReplace(List<ApplyPart> applyPartList, String businessCode, Boolean isNeedFinishApply) {
|
List<ApplyPart> replacePartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
List<Boolean> operationStockStatus = applyPartMapper.selectStockOperationStatus(applyPart.getSystemNo());
|
if (CollectionUtil.isNotEmpty(operationStockStatus) && BooleanUtil.isTrue(operationStockStatus.get(0))) {
|
continue;
|
}
|
//1.根据系统号判断产出记录是否已同步ifs,是则继续
|
DockingIfsConditionActiveDTO dockingIfsConditionActiveDTO = reportMapper.getDockingIfsConditionActive(applyPart.getId());
|
if(dockingIfsConditionActiveDTO != null && dockingIfsConditionActiveDTO.getProdOutIfsSync() && "INVENT_ADJUST_FOR_STD".equals(applyPart.getSyncIfsType())){
|
replacePartList_ifs.add(applyPart);
|
} else if (reportUtils.getDockingIfsConditionV2(applyPart.getSystemNo(),applyPart.getId()).getIsShopOrderCancelRec() && !isNeedFinishApply && "IMPORT_SO_RECEIVE_STD".equals(applyPart.getSyncIfsType())) {
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
if (CollectionUtils.isNotEmpty(replacePartList_ifs)) {
|
ifsReplaceReportRealizeCell(replacePartList_ifs,businessCode);
|
}
|
if (CollectionUtils.isNotEmpty(applyPartList_ifs)) {
|
ifsShopOrderRecOrCancelRecRealizeCell(applyPartList_ifs,businessCode,isNeedFinishApply);
|
}
|
}
|
|
private void ifsReplaceReportRealizeCell(List<ApplyPart> applyPartList_ifs, String businessCode) {
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;
|
}
|
|
if(!businessCode.equals(MOVE_PART_REPLACE) && !businessCode.equals(CANCEL_MOVE_PART_REPLACE)
|
&& !businessCode.equals(MOVE_PART_REPLACE_NO_OUTPUT) && !businessCode.equals(CANCEL_MOVE_PART_REPLACE_NO_OUTPUT)){
|
throw new RuntimeException("库存调整单接收/库存调整单接收实现单元不接受业务类型码=" + businessCode);
|
}
|
|
// 更新同步类型
|
applyPartMapper.update(null, Wrappers.<ApplyPart>lambdaUpdate()
|
.set(ApplyPart::getSyncIfsType, "INVENT_ADJUST_FOR_STD")
|
.in(ApplyPart::getId, applyPartList_ifs.stream().map(ApplyPart::getId).collect(Collectors.toList())));
|
|
List<StockDTO> stocks = new ArrayList<>();
|
for (ApplyPart applyPart : applyPartList_ifs) {
|
Report report = this.reportMapper.selectById(applyPart.getReportId());
|
//待检成品库
|
Long toQualifiedLocationId =
|
workstationLocationMapper.selectFinishToQualifiedLocationIdBySystemNo(applyPart.getSystemNo());
|
Location releaseLocation = locationMapper.selectById(toQualifiedLocationId);
|
// 源库位不为空,则取源库位
|
if (applyPart.getSourceLocationId() != null) {
|
releaseLocation = locationMapper.selectById(applyPart.getSourceLocationId());
|
} else {
|
if (!report.getReportType().equals(Apply.PRODUCT_APPLY)) {
|
Long inspectionLocationId = workstationLocationMapper.selectBySystemNo(applyPart.getSystemNo(), WorkstationLocation.INSPECTION_LOCATION);//产出待检库位
|
releaseLocation = locationMapper.selectById(inspectionLocationId);
|
}
|
}
|
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
StockDTO stockDTO = new StockDTO();
|
stockDTO.setPartId(applyPart.getPartId());
|
stockDTO.setLocationId(releaseLocation.getId());
|
stockDTO.setLocationNo(releaseLocation.getIfsLocation());
|
stockDTO.setPartBatchNo(applyPart.getLotBatchNo());
|
if (applyPart.getSourceLocationId() != null) {
|
Stock stock = stockService.getById(applyPart.getStockId());
|
stockDTO.setIfsBatchNo(stock.getIfsBatchNo());
|
} else {
|
stockDTO.setIfsBatchNo(submitReportDTO.getIfsBatchNo());
|
}
|
stockDTO.setManualInput(true);
|
stockDTO.setAvailableStockQuantityMove(submitReportDTO.getTotalLength());
|
if (businessCode.equals(MOVE_PART_REPLACE) || businessCode.equals(MOVE_PART_REPLACE_NO_OUTPUT)) {
|
stockDTO.setAdjustType("Issue");
|
stockDTO.setAdjustMemo("库存发放");
|
} else {
|
stockDTO.setAdjustType("Receive");
|
stockDTO.setAdjustMemo("库存接收");
|
}
|
|
stocks.add(stockDTO);
|
}
|
|
List<StockDTO> receptionStocks = new ArrayList<>();
|
for (ApplyPart applyPart : applyPartList_ifs) {
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
|
if (new BigDecimal(applyPart.getQtyArrived()).compareTo(BigDecimal.ZERO) > 0) {
|
Location qualifiedLocation = locationMapper.selectById(workstationLocationMapper.selectQualifiedLocationIdBySystemNo(applyPart.getSystemNo()));//合格品库位
|
if (applyPart.getSourceLocationId() != null) {
|
qualifiedLocation = locationMapper.selectById(applyPart.getTargetQualifiedLocationId());
|
}
|
if (qualifiedLocation == null) {
|
throw new RuntimeException("系统号=" + applyPart.getSystemNo() + "的合格品库位不存在");
|
}
|
|
// 接收合格品
|
StockDTO stockDTO = new StockDTO();
|
stockDTO.setPartId(applyPart.getReplacePartId());
|
stockDTO.setLocationId(qualifiedLocation.getId());
|
stockDTO.setLocationNo(qualifiedLocation.getIfsLocation());
|
stockDTO.setPartBatchNo(applyPart.getLotBatchNo());
|
if (applyPart.getSourceLocationId() != null) {
|
Stock stock = stockService.getById(applyPart.getStockId());
|
stockDTO.setIfsBatchNo(stock.getIfsBatchNo());
|
} else {
|
stockDTO.setIfsBatchNo(submitReportDTO.getIfsBatchNo());
|
}
|
stockDTO.setManualInput(true);
|
stockDTO.setAvailableStockQuantityMove(new BigDecimal(applyPart.getQtyArrived()));
|
|
if (businessCode.equals(MOVE_PART_REPLACE) || businessCode.equals(MOVE_PART_REPLACE_NO_OUTPUT)) {
|
stockDTO.setAdjustType("Receive");
|
stockDTO.setAdjustMemo("库存接收");
|
} else {
|
stockDTO.setAdjustType("Issue");
|
stockDTO.setAdjustMemo("库存发放");
|
}
|
stocks.add(stockDTO);
|
}
|
|
if (new BigDecimal(applyPart.getUnqualifiedArrived()).compareTo(BigDecimal.ZERO) > 0) {
|
Location disQualifiedLocation = locationMapper.selectById(workstationLocationMapper.selectBySystemNo(applyPart.getSystemNo(), WorkstationLocation.DISQUALIFIED_LOCATION));//不合格品库位
|
if (applyPart.getSourceLocationId() != null) {
|
disQualifiedLocation = locationMapper.selectById(applyPart.getTargetUnqualifiedLocationId());
|
}
|
|
if (disQualifiedLocation == null) {
|
throw new RuntimeException("系统号=" + applyPart.getSystemNo() + "的不合格品库位不存在");
|
}
|
|
// 接收不合格品
|
StockDTO stockDTO = new StockDTO();
|
stockDTO.setPartId(applyPart.getReplacePartId());
|
stockDTO.setLocationId(disQualifiedLocation.getId());
|
stockDTO.setLocationNo(disQualifiedLocation.getIfsLocation());
|
stockDTO.setPartBatchNo(applyPart.getLotBatchNo());
|
if (applyPart.getSourceLocationId() != null) {
|
Stock stock = stockService.getById(applyPart.getStockId());
|
stockDTO.setIfsBatchNo(stock.getIfsBatchNo());
|
} else {
|
stockDTO.setIfsBatchNo(submitReportDTO.getIfsBatchNo());
|
}
|
stockDTO.setManualInput(true);
|
stockDTO.setAvailableStockQuantityMove(new BigDecimal(applyPart.getUnqualifiedArrived()));
|
|
if (businessCode.equals(MOVE_PART_REPLACE) || businessCode.equals(MOVE_PART_REPLACE_NO_OUTPUT)) {
|
stockDTO.setAdjustType("Receive");
|
stockDTO.setAdjustMemo("库存接收");
|
} else {
|
stockDTO.setAdjustType("Issue");
|
stockDTO.setAdjustMemo("库存发放");
|
}
|
stocks.add(stockDTO);
|
}
|
}
|
stockService.inventAdjustForRfcable(stocks, "", "R01");
|
}
|
|
|
/**
|
* 根据检测汇报材料对接ifs——库存件移库
|
* @param applyPartList 检测汇报材料
|
* @param businessCode 业务类型码
|
*/
|
private void ifsMovePart(List<ApplyPart> applyPartList,String businessCode){
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
//1.根据系统号判断产出记录是否已同步ifs,是则继续
|
//2.判断成品检合格数量改变事件记录表是否存在记录,不存在则继续
|
DockingIfsConditionActiveDTO dockingIfsConditionActiveDTO = reportMapper.getDockingIfsConditionActive(applyPart.getId());
|
|
// 如果是单独做成品检,不做库存件移库
|
List<String> rules = applyPartMapper.selectTestRulesBySystemNo(applyPart.getSystemNo());
|
if (rules.size() == 1 && dockingIfsConditionActiveDTO.getReportType().equals(Apply.PRODUCT_APPLY)) {
|
continue;
|
}
|
|
if(dockingIfsConditionActiveDTO != null && dockingIfsConditionActiveDTO.getProdOutIfsSync()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
|
ifsMovePartRealizeCellV2(applyPartList_ifs,businessCode);
|
}
|
|
/**
|
* 根据检测汇报材料对接ifs——取消库存件移库
|
* @param applyPartList 检测汇报材料
|
* @param businessCode 业务类型码
|
*/
|
private void ifsCancelMovePart(List<ApplyPart> applyPartList,String businessCode){
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs取消库存件移库的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
//1.根据系统号判断产出记录是否已同步ifs,是则继续
|
//2.判断成品检合格数量改变事件记录表是否存在记录,不存在则继续
|
DockingIfsConditionActiveDTO dockingIfsConditionActiveDTO = reportMapper.getDockingIfsConditionActive(applyPart.getId());
|
|
// 如果是单独做成品检,不做库存件移库
|
List<String> rules = applyPartMapper.selectTestRulesBySystemNo(applyPart.getSystemNo());
|
if (rules.size() == 1 && dockingIfsConditionActiveDTO.getReportType().equals(Apply.PRODUCT_APPLY)) {
|
continue;
|
}
|
|
if(dockingIfsConditionActiveDTO != null && dockingIfsConditionActiveDTO.getProdOutIfsSync()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
|
ifsMovePartRealizeCellV2(applyPartList_ifs,businessCode);
|
}
|
|
/**
|
* 库存件移库/取消移库实现单元
|
* @param applyPartList_ifs 待处理的检测汇报材料
|
* @param businessCode 业务类型码
|
*/
|
private void ifsMovePartRealizeCell(List<ApplyPart> applyPartList_ifs,String businessCode){
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;
|
}
|
|
if(!businessCode.equals(MOVE_PART) && !businessCode.equals(CANCEL_MOVE_PART)){
|
throw new RuntimeException("库存件移库/取消库存件移库实现单元不接受业务类型码=" + businessCode);
|
}
|
|
String dir = "";
|
if(businessCode.equals(MOVE_PART)){
|
//正向操作
|
dir = ApplyPartServiceImpl.MOVELIBRARY;
|
}else{
|
//逆向操作
|
dir = ApplyPartServiceImpl.UNMOVELIBRARY;
|
}
|
|
IfsMoveLibraryDTO ifsMoveLibraryDTO = new IfsMoveLibraryDTO();
|
List<IfsMoveLibraryDTO.DataBean> dataBeanList = new ArrayList<>();//批量标识
|
|
String contract = remoteParamService.getByKey(CONTRACT, SecurityConstants.FROM_IN).getData();//从系统参数中获取ifs域
|
|
for(ApplyPart applyPart : applyPartList_ifs){
|
//根据系统唯一编号查出零件id
|
Long partId = applyPartMapper.selectPartIdBySystemNo(applyPart.getSystemNo());
|
//根据产出系统唯一编号查出对应工作站的库位
|
Long disqualifiedLocationId = workstationLocationMapper.selectBySystemNo(applyPart.getSystemNo(), WorkstationLocation.DISQUALIFIED_LOCATION);//产出不合格品库位
|
//待检成品库
|
Long toQualifiedLocationId =
|
workstationLocationMapper.selectFinishToQualifiedLocationIdBySystemNo(applyPart.getSystemNo());
|
//合格库位取工单中库位(一个工作站可能会配置多个合格品库位)
|
Long qualifiedLocationId =
|
workstationLocationMapper.selectQualifiedLocationIdBySystemNo(applyPart.getSystemNo());//合格品库位
|
//根据库位id获取ifs库位编号
|
String hgLocation = locationMapper.selectById(qualifiedLocationId).getIfsLocation();
|
String toQualifiedLocation = locationMapper.selectById(toQualifiedLocationId).getIfsLocation();
|
String unhgLocation = locationMapper.selectById(disqualifiedLocationId).getIfsLocation();
|
//判断合格数量是否变更
|
BigDecimal qtyChange = BigDecimal.ZERO;
|
if (null != toQualifiedLocationId) {
|
qtyChange = reportUtils.getQtyArrivedChange(partId,toQualifiedLocationId,applyPart.getSystemNo(),
|
applyPart.getLotBatchNo(),new BigDecimal(applyPart.getQtyArrived()),dir,applyPart.getReportId(),applyPart.getId());
|
}else{
|
qtyChange = reportUtils.getQtyArrivedChange(partId,qualifiedLocationId,applyPart.getSystemNo(),applyPart.getLotBatchNo(),new BigDecimal(applyPart.getQtyArrived()),dir,applyPart.getReportId(),applyPart.getId());
|
}
|
List<Boolean> operationStockStatus = applyPartMapper.selectStockOperationStatus(applyPart.getSystemNo());
|
// 如果是工序库存,不进行IFS移库
|
if (CollectionUtil.isNotEmpty(operationStockStatus) && BooleanUtil.isTrue(operationStockStatus.get(0))) {
|
continue;
|
}
|
switch(qtyChange.compareTo(BigDecimal.ZERO)){
|
case 0:
|
// 已配置成品待检库,合格数量没有变更,说明待检成品库的数量都为合格数量,都需移到合格库位
|
if (null != toQualifiedLocationId) {
|
IfsMoveLibraryDTO.DataBean batchInfo = new IfsMoveLibraryDTO.DataBean();
|
batchInfo.setPART_NO(applyPart.getPartNo());//零件号
|
batchInfo.setMOVE_QTY(Double.parseDouble(applyPart.getQtyArrived()));//移库数量
|
if (StringUtils.equals(businessCode, MOVE_PART)) {
|
batchInfo.setLOCATION_NO(toQualifiedLocation);
|
batchInfo.setTO_LOCATION_NO(hgLocation);
|
}else {
|
batchInfo.setLOCATION_NO(hgLocation);
|
batchInfo.setTO_LOCATION_NO(toQualifiedLocation);
|
}
|
batchInfo.setTO_CONTRACT(contract);//目标域
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
batchInfo.setSERIAL_NO(submitReportDTO.getIfsSequenceNo());//序列号
|
batchInfo.setENG_CHG_LEVEL(submitReportDTO.getEngChgLevel());//版本号
|
Part part = partMapper.selectById(applyPart.getPartId());
|
batchInfo.setLOT_BATCH_NO(submitReportDTO.getIfsBatchNo());//ifs批次号
|
//判断是否启用批次管理
|
if (part.getLotTrackingIfs() != null && part.getLotTrackingIfs()) {
|
batchInfo.setWAIV_DEV_REJ_NO(submitReportDTO.getOutBatchNo());//mes的批次号作为ifs的wdr号
|
} else {
|
batchInfo.setWAIV_DEV_REJ_NO("*");//wdr号
|
}
|
// 因为现在多个 mes库位可能对应一个 ifs库位 所以 执行移库操作之前需要判断一下库位是否相同
|
// xcg 20230413
|
if (!StrUtil.equals(batchInfo.getLOCATION_NO(), batchInfo.getTO_LOCATION_NO())) {
|
dataBeanList.add(batchInfo);
|
}
|
}
|
break;
|
case 1:
|
//合格数量变少
|
//将变更的数量有合格品库位移至不合格品库位
|
case -1:
|
// 存在成品待检库位,qtyArrived为合格数量,需从待检库位移到合格库位;变更数量为不合格数量,需从待检成品库位移到不合格库位
|
if (null != toQualifiedLocationId) {
|
// 处理合格数量移库,待检成品库->合格库
|
IfsMoveLibraryDTO.DataBean batchInfo = new IfsMoveLibraryDTO.DataBean();
|
batchInfo.setPART_NO(applyPart.getPartNo());//零件号
|
//batchInfo.setLOT_BATCH_NO(applyPart.getLotBatchNo());//批次号
|
batchInfo.setMOVE_QTY(Double.parseDouble(applyPart.getQtyArrived()));//移库数量
|
if(businessCode.equals(MOVE_PART)){
|
batchInfo.setLOCATION_NO(toQualifiedLocation);//待检成品库位
|
batchInfo.setTO_LOCATION_NO(hgLocation);//不合格品库位
|
}else{
|
batchInfo.setLOCATION_NO(hgLocation);//不合格品库位
|
batchInfo.setTO_LOCATION_NO(toQualifiedLocation);//待检成品库位
|
}
|
batchInfo.setTO_CONTRACT(contract);//目标域
|
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
|
batchInfo.setSERIAL_NO(submitReportDTO.getIfsSequenceNo());//序列号
|
batchInfo.setENG_CHG_LEVEL(submitReportDTO.getEngChgLevel());//版本号
|
Part part = partMapper.selectById(applyPart.getPartId());
|
batchInfo.setLOT_BATCH_NO(submitReportDTO.getIfsBatchNo());//ifs批次号
|
//判断是否启用批次管理
|
if (part.getLotTrackingIfs() != null && part.getLotTrackingIfs()) {
|
batchInfo.setWAIV_DEV_REJ_NO(submitReportDTO.getOutBatchNo());//mes的批次号作为ifs的wdr号
|
} else {
|
batchInfo.setWAIV_DEV_REJ_NO("*");//wdr号
|
}
|
// 如果合格数量为0,不需要移库
|
if (batchInfo.getMOVE_QTY() != 0) {
|
dataBeanList.add(batchInfo);
|
}
|
}
|
//合格数量变多
|
//将变更的数量由合格品库位移至不合格品库位
|
//ifs库存件移库支持负数
|
// 处理变更数量,就是不合格数量
|
IfsMoveLibraryDTO.DataBean batchInfo = new IfsMoveLibraryDTO.DataBean();
|
batchInfo.setPART_NO(applyPart.getPartNo());//零件号
|
//batchInfo.setLOT_BATCH_NO(applyPart.getLotBatchNo());//批次号
|
batchInfo.setMOVE_QTY(Double.valueOf(qtyChange + ""));//移库数量
|
if(businessCode.equals(MOVE_PART)){
|
batchInfo.setLOCATION_NO(null != toQualifiedLocation ? toQualifiedLocation : hgLocation);//合格品库位
|
batchInfo.setTO_LOCATION_NO(unhgLocation);//不合格品库位
|
}else{
|
batchInfo.setLOCATION_NO(unhgLocation);//不合格品库位
|
batchInfo.setTO_LOCATION_NO(null != toQualifiedLocation ? toQualifiedLocation : hgLocation);//合格品库位
|
}
|
batchInfo.setTO_CONTRACT(contract);//目标域
|
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
|
batchInfo.setSERIAL_NO(submitReportDTO.getIfsSequenceNo());//序列号
|
batchInfo.setENG_CHG_LEVEL(submitReportDTO.getEngChgLevel());//版本号
|
Part part = partMapper.selectById(applyPart.getPartId());
|
batchInfo.setLOT_BATCH_NO(submitReportDTO.getIfsBatchNo());//ifs批次号
|
//判断是否启用批次管理
|
if (part.getLotTrackingIfs() != null && part.getLotTrackingIfs()) {
|
batchInfo.setWAIV_DEV_REJ_NO(submitReportDTO.getOutBatchNo());//mes的批次号作为ifs的wdr号
|
} else {
|
batchInfo.setWAIV_DEV_REJ_NO("*");//wdr号
|
}
|
// 因为现在多个 mes库位可能对应一个 ifs库位 所以 执行移库操作之前需要判断一下库位是否相同
|
// xcg 20230413
|
if (!StrUtil.equals(batchInfo.getLOCATION_NO(), batchInfo.getTO_LOCATION_NO())) {
|
dataBeanList.add(batchInfo);
|
}
|
break;
|
default:
|
break;
|
}
|
}
|
|
if(CollectionUtils.isEmpty(dataBeanList)){
|
return;
|
}
|
ifsMoveLibraryDTO.setBATCH_INFO(dataBeanList);
|
Gson gson = new Gson();
|
String jsonstr = gson.toJson(ifsMoveLibraryDTO);
|
JSONObject jsonObject = JSONObject.parseObject(jsonstr);//解决序列化时自动将大写转小写问题
|
|
R res = ifsFeignClient.importMovePartStd(jsonObject,true);
|
if(res.getCode() != 0){
|
throw new RuntimeException("ifs库存件移库失败;erromsg:" + res.getMsg());
|
}
|
|
|
}
|
|
/**
|
* 库存件移库/取消移库实现单元
|
* @param applyPartList_ifs 待处理的检测汇报材料
|
* @param businessCode 业务类型码
|
*/
|
private void ifsMovePartRealizeCellV2(List<ApplyPart> applyPartList_ifs,String businessCode){
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;
|
}
|
|
if(!businessCode.equals(MOVE_PART) && !businessCode.equals(CANCEL_MOVE_PART)
|
&& !businessCode.equals(MOVE_PART_NO_OUTPUT) && !businessCode.equals(CANCEL_MOVE_PART_NO_OUTPUT)
|
&& !businessCode.equals(MOVE_PART_V2) && !businessCode.equals(CANCEL_MOVE_PART_V2)) {
|
throw new RuntimeException("库存件移库/取消库存件移库实现单元不接受业务类型码=" + businessCode);
|
}
|
|
String dir = "";
|
if(businessCode.equals(MOVE_PART) || businessCode.equals(MOVE_PART_NO_OUTPUT) || businessCode.equals(MOVE_PART_V2)) {
|
//正向操作
|
dir = ApplyPartServiceImpl.MOVELIBRARY;
|
} else {
|
//逆向操作
|
dir = ApplyPartServiceImpl.UNMOVELIBRARY;
|
}
|
|
// 更新同步类型
|
applyPartMapper.update(null, Wrappers.<ApplyPart>lambdaUpdate()
|
.set(ApplyPart::getSyncIfsType, "IMPORT_MOVE_PART_STD")
|
.in(ApplyPart::getId, applyPartList_ifs.stream().map(ApplyPart::getId).collect(Collectors.toList())));
|
|
IfsMoveLibraryDTO ifsMoveLibraryDTO = new IfsMoveLibraryDTO();
|
List<IfsMoveLibraryDTO.DataBean> dataBeanList = new ArrayList<>();//批量标识
|
|
String contract = remoteParamService.getByKey(CONTRACT, SecurityConstants.FROM_IN).getData();//从系统参数中获取ifs域
|
|
for(ApplyPart applyPart : applyPartList_ifs){
|
//根据产出系统唯一编号查出对应工作站的库位
|
Long disqualifiedLocationId = workstationLocationMapper.selectBySystemNo(applyPart.getSystemNo(), WorkstationLocation.DISQUALIFIED_LOCATION);//产出不合格品库位
|
//待检成品库
|
Long toQualifiedLocationId =
|
workstationLocationMapper.selectFinishToQualifiedLocationIdBySystemNo(applyPart.getSystemNo());
|
//合格库位取工单中库位(一个工作站可能会配置多个合格品库位)
|
Long qualifiedLocationId =
|
workstationLocationMapper.selectQualifiedLocationIdBySystemNo(applyPart.getSystemNo());//合格品库位
|
if (applyPart.getSourceLocationId() != null) {
|
toQualifiedLocationId = applyPart.getSourceLocationId();
|
qualifiedLocationId = applyPart.getTargetQualifiedLocationId();
|
disqualifiedLocationId = applyPart.getTargetUnqualifiedLocationId();
|
}
|
//根据库位id获取ifs库位编号
|
String hgLocation = qualifiedLocationId == null ? null : locationMapper.selectById(qualifiedLocationId).getIfsLocation();
|
String toQualifiedLocation = locationMapper.selectById(toQualifiedLocationId).getIfsLocation();
|
String unhgLocation = disqualifiedLocationId == null ? null : locationMapper.selectById(disqualifiedLocationId).getIfsLocation();
|
|
List<Boolean> operationStockStatus = applyPartMapper.selectStockOperationStatus(applyPart.getSystemNo());
|
// 如果是工序库存,不进行IFS移库
|
if (CollectionUtil.isNotEmpty(operationStockStatus) && BooleanUtil.isTrue(operationStockStatus.get(0))) {
|
continue;
|
}
|
|
// 已配置成品待检库,合格数量没有变更,说明待检成品库的数量都为合格数量,都需移到合格库位
|
if (new BigDecimal(applyPart.getQtyArrived()).compareTo(BigDecimal.ZERO) > 0) {
|
if (applyPart.getSourceLocationId() != null) {
|
toQualifiedLocation = locationMapper.selectById(applyPart.getSourceLocationId()).getIfsLocation();
|
hgLocation = locationMapper.selectById(applyPart.getTargetQualifiedLocationId()).getIfsLocation();
|
}
|
IfsMoveLibraryDTO.DataBean batchInfo = new IfsMoveLibraryDTO.DataBean();
|
batchInfo.setPART_NO(applyPart.getPartNo());//零件号
|
batchInfo.setMOVE_QTY(Double.parseDouble(applyPart.getQtyArrived()));//移库数量
|
if (StringUtils.equals(dir, ApplyPartServiceImpl.MOVELIBRARY)) {
|
batchInfo.setLOCATION_NO(toQualifiedLocation);
|
batchInfo.setTO_LOCATION_NO(hgLocation);
|
}else {
|
batchInfo.setLOCATION_NO(hgLocation);
|
batchInfo.setTO_LOCATION_NO(toQualifiedLocation);
|
}
|
batchInfo.setTO_CONTRACT(contract);//目标域
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
if (applyPart.getSourceLocationId() != null) {
|
Stock stock = stockService.getById(applyPart.getStockId());
|
submitReportDTO = new SubmitReportDTO();
|
submitReportDTO.setOutBatchNo(stock.getPartBatchNo());
|
submitReportDTO.setIfsBatchNo(stock.getIfsBatchNo());
|
} else {
|
batchInfo.setSERIAL_NO(submitReportDTO.getIfsSequenceNo());//序列号
|
batchInfo.setENG_CHG_LEVEL(submitReportDTO.getEngChgLevel());//版本号
|
}
|
|
Part part = partMapper.selectById(applyPart.getPartId());
|
batchInfo.setLOT_BATCH_NO(submitReportDTO.getIfsBatchNo());//ifs批次号
|
//判断是否启用批次管理
|
if (part.getLotTrackingIfs() != null && part.getLotTrackingIfs()) {
|
batchInfo.setWAIV_DEV_REJ_NO(submitReportDTO.getOutBatchNo());//mes的批次号作为ifs的wdr号
|
} else {
|
batchInfo.setWAIV_DEV_REJ_NO("*");//wdr号
|
}
|
if (!StrUtil.equals(batchInfo.getLOCATION_NO(), batchInfo.getTO_LOCATION_NO())) {
|
dataBeanList.add(batchInfo);
|
}
|
}
|
|
if (new BigDecimal(applyPart.getUnqualifiedArrived()).compareTo(BigDecimal.ZERO) > 0) {
|
if (applyPart.getSourceLocationId() != null) {
|
toQualifiedLocation = locationMapper.selectById(applyPart.getSourceLocationId()).getIfsLocation();
|
unhgLocation = locationMapper.selectById(applyPart.getTargetUnqualifiedLocationId()).getIfsLocation();
|
}
|
IfsMoveLibraryDTO.DataBean batchInfo = new IfsMoveLibraryDTO.DataBean();
|
batchInfo.setPART_NO(applyPart.getPartNo());//零件号
|
batchInfo.setMOVE_QTY(Double.parseDouble(applyPart.getUnqualifiedArrived()));//移库数量
|
if (StringUtils.equals(dir, ApplyPartServiceImpl.MOVELIBRARY)) {
|
batchInfo.setLOCATION_NO(toQualifiedLocation);
|
batchInfo.setTO_LOCATION_NO(unhgLocation);
|
}else {
|
batchInfo.setLOCATION_NO(unhgLocation);
|
batchInfo.setTO_LOCATION_NO(toQualifiedLocation);
|
}
|
batchInfo.setTO_CONTRACT(contract);//目标域
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
if (applyPart.getSourceLocationId() != null) {
|
Stock stock = stockService.getById(applyPart.getStockId());
|
submitReportDTO = new SubmitReportDTO();
|
submitReportDTO.setOutBatchNo(stock.getPartBatchNo());
|
submitReportDTO.setIfsBatchNo(stock.getIfsBatchNo());
|
} else {
|
batchInfo.setSERIAL_NO(submitReportDTO.getIfsSequenceNo());//序列号
|
batchInfo.setENG_CHG_LEVEL(submitReportDTO.getEngChgLevel());//版本号
|
}
|
|
Part part = partMapper.selectById(applyPart.getPartId());
|
batchInfo.setLOT_BATCH_NO(submitReportDTO.getIfsBatchNo());//ifs批次号
|
//判断是否启用批次管理
|
if (part.getLotTrackingIfs() != null && part.getLotTrackingIfs()) {
|
batchInfo.setWAIV_DEV_REJ_NO(submitReportDTO.getOutBatchNo());//mes的批次号作为ifs的wdr号
|
} else {
|
batchInfo.setWAIV_DEV_REJ_NO("*");//wdr号
|
}
|
// 因为现在多个 mes库位可能对应一个 ifs库位 所以 执行移库操作之前需要判断一下库位是否相同
|
// xcg 20230413
|
if (!StrUtil.equals(batchInfo.getLOCATION_NO(), batchInfo.getTO_LOCATION_NO())) {
|
dataBeanList.add(batchInfo);
|
}
|
|
}
|
}
|
if(CollectionUtils.isEmpty(dataBeanList)){
|
return;
|
}
|
ifsMoveLibraryDTO.setBATCH_INFO(dataBeanList);
|
Gson gson = new Gson();
|
String jsonstr = gson.toJson(ifsMoveLibraryDTO);
|
JSONObject jsonObject = JSONObject.parseObject(jsonstr);//解决序列化时自动将大写转小写问题
|
|
R res = ifsFeignClient.importMovePartStd(jsonObject,true);
|
if(res.getCode() != 0){
|
throw new RuntimeException("ifs库存件移库失败;erromsg:" + res.getMsg());
|
}
|
}
|
|
|
/**
|
* 根据检测汇报材料对接ifs——车间订单接收
|
* @param applyPartList 检测汇报材料
|
* @param businessCode 业务类型码
|
*/
|
private void ifsShopOrderRec(List<ApplyPart> applyPartList,String businessCode,Boolean isNeedFinishApply){
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs车间订单接收的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if(reportUtils.getDockingIfsCondition(applyPart.getSystemNo(),applyPart.getId()).getIsShopOrderRec()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
|
ifsShopOrderRecOrCancelRecRealizeCell(applyPartList_ifs,businessCode,isNeedFinishApply);
|
|
}
|
|
|
/**
|
* 根据检测汇报材料对接ifs——车间订单取消接收
|
* @param applyPartList 检测汇报材料
|
* @param businessCode 业务类型码
|
*/
|
private void ifsShopOrderCancelRec(List<ApplyPart> applyPartList,String businessCode,Boolean isNeedFinishApply){
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs车间订单取消接收的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if(reportUtils.getDockingIfsCondition(applyPart.getSystemNo(),applyPart.getId()).getIsShopOrderCancelRec()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
|
ifsShopOrderRecOrCancelRecRealizeCell(applyPartList_ifs,businessCode,isNeedFinishApply);
|
|
}
|
|
/**
|
* 车间订单接收/取消接收实现单元
|
* @param applyPartList_ifs 待处理的检测汇报材料
|
* @param businessCode 业务类型码
|
*/
|
private void ifsShopOrderRecOrCancelRecRealizeCell(List<ApplyPart> applyPartList_ifs,String businessCode,Boolean isNeedFinishApply){
|
if(CollectionUtils.isEmpty(applyPartList_ifs)){
|
return;
|
}
|
|
if(!businessCode.equals(SHOP_ORDER_REC) && !businessCode.equals(SHOP_ORDER_CANCEL_REC)
|
&& !businessCode.equals(SHOP_ORDER_REC_V2) && !businessCode.equals(SHOP_ORDER_CANCEL_REC_V2)
|
&& !businessCode.equals(MOVE_PART_REPLACE) && !businessCode.equals(CANCEL_MOVE_PART_REPLACE)) {
|
throw new RuntimeException("车间订单接收/取消接收实现单元不接受业务类型码=" + businessCode);
|
}
|
|
// 更新同步类型
|
applyPartMapper.update(null, Wrappers.<ApplyPart>lambdaUpdate()
|
.set(ApplyPart::getSyncIfsType, "IMPORT_SO_RECEIVE_STD")
|
.in(ApplyPart::getId, applyPartList_ifs.stream().map(ApplyPart::getId).collect(Collectors.toList())));
|
|
//接收合格
|
List<ApplyPart> applyPartList_ifs_qualified = applyPartList_ifs.stream().filter(o -> new BigDecimal(o.getQtyArrived()).compareTo(BigDecimal.ZERO) == 1).collect(Collectors.toList());
|
//接收不合格
|
List<ApplyPart> applyPartList_ifs_unQualified = applyPartList_ifs.stream().filter(o -> new BigDecimal(o.getUnqualifiedArrived()).compareTo(BigDecimal.ZERO) == 1).collect(Collectors.toList());
|
|
IfsShopOrderDTO ifsShopOrderDTO = new IfsShopOrderDTO();
|
ifsShopOrderDTO.setRECORD_ID(UUID.randomUUID().toString().replace("-", ""));
|
List<IfsShopOrderDTO.DataBean> dataBeanList = new ArrayList<>();//批量标识
|
|
for(ApplyPart applyPart : applyPartList_ifs_qualified){
|
|
//合格品库位(取工单中库位)
|
Long qualifiedLocationId =
|
workstationLocationMapper.selectFinishToQualifiedLocationIdBySystemNo(applyPart.getSystemNo());
|
if (!isNeedFinishApply) {
|
qualifiedLocationId = workstationLocationMapper.selectQualifiedLocationIdBySystemNo(applyPart.getSystemNo());
|
}
|
//通过库位id转获取ifs库位号
|
String ifsqualifiedLocationNo = locationMapper.selectById(qualifiedLocationId).getIfsLocation();
|
|
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
IfsShopOrderDTO.DataBean batchInfo = new IfsShopOrderDTO.DataBean();
|
batchInfo.setORDER_NO(submitReportDTO.getIfsOrderNo());//车间订单号
|
batchInfo.setRELEASE_NO(submitReportDTO.getIfsReleaseNo());//下达号
|
batchInfo.setSEQUENCE_NO(submitReportDTO.getIfsSequenceNo());//序列号
|
Part part;
|
if (applyPart.getReplacePartId() != null) {
|
part = partMapper.selectById(applyPart.getReplacePartId());
|
batchInfo.setPART_NO(applyPart.getReplacePartNo());//零件号
|
} else {
|
part = partMapper.selectById(applyPart.getPartId());
|
batchInfo.setPART_NO(submitReportDTO.getPartNo());//零件号
|
}
|
//判断是否启用批次管理
|
if (part.getLotTrackingIfs() != null && part.getLotTrackingIfs()) {
|
batchInfo.setWAIV_DEV_REJ_NO(submitReportDTO.getOutBatchNo());
|
} else {
|
batchInfo.setWAIV_DEV_REJ_NO("*");
|
}
|
batchInfo.setENG_CHG_LEVEL(part.getEngChgLevel());
|
batchInfo.setLOT_BATCH_NO(submitReportDTO.getIfsBatchNo());//批次号
|
batchInfo.setQUANTITY(Double.valueOf(applyPart.getQtyArrived()));//接收数量(合格)
|
batchInfo.setLOCATION_NO(ifsqualifiedLocationNo);
|
batchInfo.setSHIFT_DATE(submitReportDTO.getNowDutyDate());//班次日期
|
if("早".equals(submitReportDTO.getShiftName().substring(0,1))){
|
batchInfo.setSHIFT_TYPE("白");
|
}else if("夜".equals(submitReportDTO.getShiftName().substring(0,1))) {
|
batchInfo.setSHIFT_TYPE("夜");
|
}
|
batchInfo.setOUT_SYS_LOT_BAT_NO(submitReportDTO.getOutBatchNo());//SN号
|
dataBeanList.add(batchInfo);
|
//更新产出已同步/未同步ifs
|
if(businessCode.equals(SHOP_ORDER_REC) || businessCode.equals(SHOP_ORDER_REC_V2) || businessCode.equals(MOVE_PART_REPLACE)){
|
reportMapper.updateProductOutIsSynIfs(applyPart.getSystemNo(),true);
|
}else{
|
reportMapper.updateProductOutIsSynIfs(applyPart.getSystemNo(),false);
|
}
|
|
}
|
|
for(ApplyPart applyPart : applyPartList_ifs_unQualified){
|
//产出不合格品库位
|
Long disqualifiedLocationId = workstationLocationMapper.selectBySystemNo(applyPart.getSystemNo(), WorkstationLocation.DISQUALIFIED_LOCATION);
|
//通过库位id转获取ifs库位号
|
String ifsDisqualifiedLocationNo = locationMapper.selectById(disqualifiedLocationId).getIfsLocation();
|
|
|
SubmitReportDTO submitReportDTO = reportMapper.getManufacturingOrderInfo(applyPart.getId());
|
IfsShopOrderDTO.DataBean batchInfo = new IfsShopOrderDTO.DataBean();
|
batchInfo.setORDER_NO(submitReportDTO.getIfsOrderNo());//车间订单号
|
batchInfo.setRELEASE_NO(submitReportDTO.getIfsReleaseNo());//下达号
|
batchInfo.setSEQUENCE_NO(submitReportDTO.getIfsSequenceNo());//序列号
|
Part part;
|
if (applyPart.getReplacePartId() != null) {
|
part = partMapper.selectById(applyPart.getReplacePartId());
|
batchInfo.setPART_NO(applyPart.getReplacePartNo());//零件号
|
} else {
|
part = partMapper.selectById(applyPart.getPartId());
|
batchInfo.setPART_NO(submitReportDTO.getPartNo());//零件号
|
}
|
//判断是否启用批次管理
|
if (part.getLotTrackingIfs() != null && part.getLotTrackingIfs()) {
|
batchInfo.setWAIV_DEV_REJ_NO(submitReportDTO.getOutBatchNo());
|
} else {
|
batchInfo.setWAIV_DEV_REJ_NO("*");
|
}
|
batchInfo.setENG_CHG_LEVEL(part.getEngChgLevel());
|
batchInfo.setLOT_BATCH_NO(submitReportDTO.getIfsBatchNo());//批次号
|
batchInfo.setQUANTITY(Double.valueOf(applyPart.getUnqualifiedArrived()));//接收数量(不合格)
|
batchInfo.setLOCATION_NO(ifsDisqualifiedLocationNo);
|
batchInfo.setSHIFT_DATE(submitReportDTO.getNowDutyDate());//班次日期
|
if("早".equals(submitReportDTO.getShiftName().substring(0,1))){
|
batchInfo.setSHIFT_TYPE("白");
|
}else if("夜".equals(submitReportDTO.getShiftName().substring(0,1))) {
|
batchInfo.setSHIFT_TYPE("夜");
|
}
|
batchInfo.setOUT_SYS_LOT_BAT_NO(submitReportDTO.getOutBatchNo());//SN号
|
dataBeanList.add(batchInfo);
|
//更新产出已同步/未同步ifs
|
if(businessCode.equals(SHOP_ORDER_REC)|| businessCode.equals(SHOP_ORDER_REC_V2) || businessCode.equals(MOVE_PART_REPLACE)){
|
reportMapper.updateProductOutIsSynIfs(applyPart.getSystemNo(),true);
|
} else {
|
reportMapper.updateProductOutIsSynIfs(applyPart.getSystemNo(),false);
|
}
|
}
|
if(CollectionUtils.isEmpty(dataBeanList)){
|
return;
|
}
|
ifsShopOrderDTO.setBATCH_INFO(dataBeanList);
|
Gson gson = new Gson();
|
String jsonstr = gson.toJson(ifsShopOrderDTO);
|
JSONObject jsonObject = JSONObject.parseObject(jsonstr);//解决序列化时自动将大写转小写问题
|
|
//批量接收/取消接收
|
R res;
|
if(businessCode.equals(SHOP_ORDER_REC) || businessCode.equals(SHOP_ORDER_REC_V2) || businessCode.equals(MOVE_PART_REPLACE)){
|
res = ifsFeignClient.importSoReceiveStd(jsonObject,true);
|
}else{
|
res = ifsFeignClient.importSoUnReceiveStd(jsonObject,true);
|
}
|
|
if(res.getCode() != 0){
|
if(businessCode.equals(SHOP_ORDER_REC) || businessCode.equals(SHOP_ORDER_REC_V2) || businessCode.equals(MOVE_PART_REPLACE)){
|
throw new RuntimeException("IFS车间订单接收失败->" + res.getMsg());
|
}else{
|
throw new RuntimeException("IFS车间订单取消接收失败->" + res.getMsg());
|
}
|
}
|
}
|
|
/**
|
* 对接ifs——工序报工
|
* @param applyPartList 检测汇报材料
|
* @param businessCode 业务类型码
|
* @param reportId 检测汇报id
|
*/
|
private void ifsOperationReport(List<ApplyPart> applyPartList,String businessCode,Long reportId){
|
//报产出数量,与合格与否没有关系
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs车间订单取消接收的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if(reportUtils.getDockingIfsCondition(applyPart.getSystemNo(),applyPart.getId()).getIsReportOperation()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
//获取待处理的产出系统号
|
Set<String> systemNoList = applyPartList_ifs.stream().map(o -> o.getSystemNo()).collect(Collectors.toSet());
|
ifsOperationReportOrCancelReportRealizeCell(systemNoList,businessCode,reportId);
|
}
|
|
/**
|
* 对接ifs——取消工序报工
|
* @param applyPartList 检测汇报材料
|
* @param businessCode 业务类型码
|
* @param reportId 检测汇报id
|
*/
|
private void ifsOperationCancelReport(List<ApplyPart> applyPartList,String businessCode,Long reportId){
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs车间订单取消接收的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if(reportUtils.getDockingIfsCondition(applyPart.getSystemNo(),applyPart.getId()).getIsCancelReportOperation()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
//获取待处理的产出系统号
|
Set<String> systemNoList = applyPartList_ifs.stream().map(o -> o.getSystemNo()).collect(Collectors.toSet());
|
ifsOperationReportOrCancelReportRealizeCell(systemNoList,businessCode,reportId);
|
}
|
|
private void ifsOperationReportOrCancelReportRealizeCell(Set<String> systemNoList,String businessCode,Long reportId){
|
if(CollectionUtils.isEmpty(systemNoList)){
|
return;
|
}
|
if(!businessCode.equals(REPORT_OPERATION) && !businessCode.equals(CANCEL_REPORT_OPERATION)){
|
throw new RuntimeException("工序报工/取消工序报工实现单元不接受业务类型码=" + businessCode);
|
}
|
IfsOperationReportDTO ifsOperationReportDTO = new IfsOperationReportDTO();
|
if(businessCode.equals(REPORT_OPERATION)){
|
ifsOperationReportDTO.setSYSMODEL("检测汇报工序报工");
|
}else if(businessCode.equals(CANCEL_REPORT_OPERATION)){
|
ifsOperationReportDTO.setSYSMODEL("检测汇报取消工序报工");
|
}
|
|
List<IfsOperationReportDTO.DataBean> dataBeanList = new ArrayList<>();//批量标识
|
if(businessCode.equals(CANCEL_REPORT_OPERATION)){
|
//通过ifs事务id进行取消工序报工
|
List<QualityMainIfsReport> qualityMainIfsReportList = qualityMainIfsReportMapper.getQualityMainIfsReportListByReportId(reportId);
|
if(CollectionUtils.isNotEmpty(qualityMainIfsReportList)){
|
for(QualityMainIfsReport qualityMainIfsReport : qualityMainIfsReportList){
|
if(false){//报工人工、报工工序事务id存行,不存列,万一有可能不对称
|
if(null != qualityMainIfsReport.getIfsOpfeedId()){
|
IfsOperationReportDTO.DataBean dataBean = new IfsOperationReportDTO.DataBean();
|
dataBean.setTRANSACTION_ID(qualityMainIfsReport.getIfsOpfeedId());
|
dataBeanList.add(dataBean);
|
}
|
|
if(null != qualityMainIfsReport.getIfsLaborId()){
|
IfsOperationReportDTO.DataBean dataBean1 = new IfsOperationReportDTO.DataBean();
|
dataBean1.setTRANSACTION_ID(qualityMainIfsReport.getIfsLaborId());
|
dataBeanList.add(dataBean1);
|
}
|
}
|
|
if(null != qualityMainIfsReport.getTransactionId()){
|
IfsOperationReportDTO.DataBean dataBean = new IfsOperationReportDTO.DataBean();
|
dataBean.setTRANSACTION_ID(qualityMainIfsReport.getTransactionId());
|
dataBeanList.add(dataBean);
|
}
|
}
|
}
|
}else{
|
//工序报工
|
int offset = 1000;
|
for(String systemNo : systemNoList){
|
//提示:将system_no转成批次号,方便对批次号分组汇总产量进行工序报工(工序报工不管合格与否,所以不能取汇报材料中的数量)
|
IfsOperationReportDTO.DataBean dataBean_tmp = reportMapper.getIfsOperationReportDTOBeanBySystemNo(systemNo);
|
if(dataBean_tmp != null && dataBean_tmp.getMO_ID() != null){
|
//通过制造订单id获取所有ifs工序号
|
List<Integer> operationNoList = reportMapper.getIfsOperationReportAllOperationNo(dataBean_tmp.getMO_ID());
|
if(CollectionUtils.isNotEmpty(operationNoList)){
|
for(Integer i : operationNoList){
|
IfsOperationReportDTO.DataBean dataBean = new IfsOperationReportDTO.DataBean();
|
dataBean.setORDER_NO(dataBean_tmp.getORDER_NO());
|
dataBean.setRELEASE_NO(dataBean_tmp.getRELEASE_NO());
|
dataBean.setSEQUENCE_NO(dataBean_tmp.getSEQUENCE_NO());
|
dataBean.setOPERATION_NO(i);
|
dataBean.setREPORTED_QTY(dataBean_tmp.getREPORTED_QTY());
|
dataBean.setMesParams("{\"qualityReportId\":" + reportId + "}");
|
dataBean.setMES_REPORT_ID(i + offset);//增加偏移量,保证每次的id不一样
|
dataBeanList.add(dataBean);
|
}
|
}
|
}
|
++offset;
|
}
|
}
|
|
if(CollectionUtils.isEmpty(dataBeanList)){
|
return;
|
}
|
ifsOperationReportDTO.setBATCH_INFO(dataBeanList);
|
Gson gson = new Gson();
|
JSONObject jsonObject = JSONObject.parseObject(gson.toJson(ifsOperationReportDTO));//解决序列化时自动将大写转小写问题
|
|
R res;
|
if(businessCode.equals(REPORT_OPERATION)){
|
res = ifsFeignClient.importSoOperReportStd(jsonObject, true);
|
}else{
|
res = ifsFeignClient.importSoOperUnreportStd(jsonObject,true);
|
}
|
|
if(res.getCode() == 0){
|
if(businessCode.equals(REPORT_OPERATION)){
|
JSONObject data = (JSONObject) JSON.toJSON(res.getData());
|
try{
|
if(data.getJSONArray("LIST_INFO").isEmpty()){
|
return;//ifs关闭后避免报错(ifs开关处于关闭状态才会返回LIST_INFO节点)
|
}
|
}catch(Exception e){
|
;//说明没有LIST_INFO节点,即ifs开关处于打开状态
|
}
|
|
if (!data.getString("OPERATION_TYPE").equals("1")) {
|
throw new RuntimeException("ifs工序报工失败->" + data.getString("ErrorMsg"));
|
}else{
|
// 保存ifs工序报告id和人工id,用于取消
|
JSONArray reportInfosList = data.getJSONArray("REPORT_INFOS");
|
for (int i = 0; i < reportInfosList.size(); i++) {
|
JSONArray reportInfo = reportInfosList.getJSONObject(i).getJSONArray("REPORT_INFO");
|
if (CollectionUtil.isNotEmpty(reportInfo)) {
|
Long ifsOpfeedId = null;//ifs报告工序id
|
Long ifsLaborId = null;//ifs报告人工id
|
Map<Long,String> transactionMap = new HashMap<>();
|
for (int j = 0; j < reportInfo.size(); j++) {
|
if (reportInfo.getJSONObject(j).getString("TRANSACTION_CODE").equals("OPFEED")) {
|
//ifsOpfeedId = reportInfo.getJSONObject(j).getLongValue("TRANSACTION_ID");
|
transactionMap.put(reportInfo.getJSONObject(j).getLongValue("TRANSACTION_ID"),"OPFEED");
|
} else if(reportInfo.getJSONObject(j).getString("TRANSACTION_CODE").equals("LABOR_RPT")){
|
//ifsLaborId = reportInfo.getJSONObject(j).getLongValue("TRANSACTION_ID");
|
transactionMap.put(reportInfo.getJSONObject(j).getLongValue("TRANSACTION_ID"),"LABOR_RPT");
|
}
|
}
|
for(Map.Entry<Long,String> vo : transactionMap.entrySet()){
|
QualityMainIfsReport qualityMainIfsReport = new QualityMainIfsReport();
|
qualityMainIfsReport.setQualityReportId(reportId);//检测汇报id
|
//qualityMainIfsReport.setIfsOpfeedId(ifsOpfeedId);
|
//qualityMainIfsReport.setIfsLaborId(ifsLaborId);
|
qualityMainIfsReport.setTransactionId(vo.getKey());//事务id
|
qualityMainIfsReport.setTransactionCode(vo.getValue());//事务类别
|
qualityMainIfsReportMapper.insert(qualityMainIfsReport);
|
}
|
}
|
}
|
}
|
}else{
|
//取消成功后删除检测汇报对接ifs工序报工回应对照表
|
qualityMainIfsReportMapper.delRecordsByReportId(reportId);
|
}
|
}else{
|
if(businessCode.equals(REPORT_OPERATION)){
|
throw new RuntimeException("IFS工序报工失败->" + res.getMsg());
|
}else{
|
throw new RuntimeException("IFS取消工序报工失败->" + res.getMsg());
|
}
|
}
|
}
|
|
|
/**
|
* 对接ifs——工序报废/取消报废
|
* @param applyPartList 检测汇报材料
|
* @param businessCode 业务类型码
|
*/
|
private void ifsOperationScrap(List<ApplyPart> applyPartList,String businessCode){
|
//报废数量从产出明细中获取,报废数量单独存在产出表中,需要根据批次号进行累加求和
|
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs工序报废的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if(reportUtils.getDockingIfsCondition(applyPart.getSystemNo(),applyPart.getId()).getIsReportOperation()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
//获取待处理的产出批次号
|
Set<String> lotBatchNoList = applyPartList_ifs.stream().map(o -> o.getLotBatchNo()).collect(Collectors.toSet());
|
|
ifsOperationScrapOrCancelScrapRealizeCell(lotBatchNoList,businessCode);
|
}
|
|
/**
|
* 对接ifs——取消工序报废
|
* @param applyPartList 检测汇报材料
|
* @param businessCode 业务类型码
|
*/
|
private void ifsOperationCancelScrap(List<ApplyPart> applyPartList,String businessCode){
|
//报废数量从产出明细中获取,报废数量单独存在产出表中,需要根据批次号进行累加求和
|
|
List<ApplyPart> applyPartList_ifs = new ArrayList<>();//需要对接ifs工序报废的汇报材料
|
for(ApplyPart applyPart : applyPartList){
|
if(reportUtils.getDockingIfsCondition(applyPart.getSystemNo(),applyPart.getId()).getIsCancelReportOperation()){
|
applyPartList_ifs.add(applyPart);
|
}
|
}
|
//获取待处理的产出批次号
|
Set<String> lotBatchNoList = applyPartList_ifs.stream().map(o -> o.getLotBatchNo()).collect(Collectors.toSet());
|
|
ifsOperationScrapOrCancelScrapRealizeCell(lotBatchNoList,businessCode);
|
}
|
|
/**
|
* 工序报废/取消报废实现单元
|
* @param lotBatchNoList 待处理的产出批次号
|
* @param businessCode 业务类型码
|
*/
|
private void ifsOperationScrapOrCancelScrapRealizeCell(Set<String> lotBatchNoList,String businessCode){
|
if(CollectionUtils.isEmpty(lotBatchNoList)){
|
return;
|
}
|
|
if(!businessCode.equals(SCRAP_OPERATION) && !businessCode.equals(CANCEL_SCRAP_OPERATION)){
|
throw new RuntimeException("工序报废/取消报废实现单元不接受业务类型码=" + businessCode);
|
}
|
|
IfsOperationScrapDTO ifsOperationScrapDTO = new IfsOperationScrapDTO();
|
|
if(businessCode.equals(SCRAP_OPERATION)){
|
ifsOperationScrapDTO.setSYSMODEL("检测汇报工序报废");
|
}else if(businessCode.equals(CANCEL_SCRAP_OPERATION)){
|
ifsOperationScrapDTO.setSYSMODEL("检测汇报取消工序报废");
|
}
|
|
List<IfsOperationScrapDTO.DataBean> dataBeanList = new ArrayList<>();//批量标识
|
|
for(String lotBatchNo : lotBatchNoList){
|
IfsOperationScrapDTO.DataBean dataBean = reportMapper.getIfsOperationScrapDTODataBeanByBatchNo(lotBatchNo);
|
if(dataBean != null){
|
dataBeanList.add(dataBean);
|
}
|
}
|
if(CollectionUtils.isEmpty(dataBeanList)){
|
return;//没有报废
|
}
|
ifsOperationScrapDTO.setBATCH_INFO(dataBeanList);
|
Gson gson = new Gson();
|
JSONObject jsonObject = JSONObject.parseObject(gson.toJson(ifsOperationScrapDTO));//解决序列化时自动将大写转小写问题
|
R res;
|
if(businessCode.equals(SCRAP_OPERATION)){
|
res = ifsFeignClient.importSoOperScrapStd(jsonObject, true);
|
}else{
|
res = ifsFeignClient.importSoOperUnscrapStd(jsonObject,true);
|
}
|
|
if(res.getCode() != 0){
|
if(businessCode.equals(SCRAP_OPERATION)){
|
throw new RuntimeException("IFS工序报废失败->" + res.getMsg());
|
}else{
|
throw new RuntimeException("IFS取消工序报废失败->" + res.getMsg());
|
}
|
}
|
}
|
}
|