feat(inventory): 添加退料入库质检功能
- 集成QMS服务用于质检申请推送 - 在退料入库流程中添加质检状态字段和验证逻辑 - 实现质检状态过滤和业务规则校验 - 新增质检申请接口和推送质检方法 - 更新退料入库项目实体添加质检状态属性
This commit is contained in:
parent
ffb052e79c
commit
f8329b7c4e
|
|
@ -11,6 +11,7 @@ import com.nflg.wms.admin.pojo.request.NoScanningRequest;
|
||||||
import com.nflg.wms.admin.repository.InMaterialScanRecordRespository;
|
import com.nflg.wms.admin.repository.InMaterialScanRecordRespository;
|
||||||
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
|
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
|
||||||
import com.nflg.wms.admin.service.NoScanningBaseControllerService;
|
import com.nflg.wms.admin.service.NoScanningBaseControllerService;
|
||||||
|
import com.nflg.wms.admin.service.QmsService;
|
||||||
import com.nflg.wms.admin.service.SapService;
|
import com.nflg.wms.admin.service.SapService;
|
||||||
import com.nflg.wms.admin.util.*;
|
import com.nflg.wms.admin.util.*;
|
||||||
import com.nflg.wms.common.constant.BarCodeProcessStage;
|
import com.nflg.wms.common.constant.BarCodeProcessStage;
|
||||||
|
|
@ -96,6 +97,9 @@ public class InCostCenterBackController extends BaseController {
|
||||||
@Resource
|
@Resource
|
||||||
private NoScanningBaseControllerService noScanningBaseControllerService;
|
private NoScanningBaseControllerService noScanningBaseControllerService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private QmsService qmsService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询SAP领料订单数据
|
* 查询SAP领料订单数据
|
||||||
*/
|
*/
|
||||||
|
|
@ -128,8 +132,10 @@ public class InCostCenterBackController extends BaseController {
|
||||||
inCostcenterBackService.save(order);
|
inCostcenterBackService.save(order);
|
||||||
items.forEach(item -> {
|
items.forEach(item -> {
|
||||||
WmsInCostcenterBackItem data = Convert.convert(WmsInCostcenterBackItem.class, item);
|
WmsInCostcenterBackItem data = Convert.convert(WmsInCostcenterBackItem.class, item);
|
||||||
|
data.setId(IdUtil.getSnowflakeNextId());
|
||||||
data.setLeft(data.getNum());
|
data.setLeft(data.getNum());
|
||||||
data.setOrderId(order.getId());
|
data.setOrderId(order.getId());
|
||||||
|
pushInspection(data);
|
||||||
inCostcenterBackItemService.save(data);
|
inCostcenterBackItemService.save(data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -185,7 +191,7 @@ public class InCostCenterBackController extends BaseController {
|
||||||
.setRsnum(order.getRsnum())
|
.setRsnum(order.getRsnum())
|
||||||
.setFactoryNo(order.getWerks())
|
.setFactoryNo(order.getWerks())
|
||||||
.setItems(datas.stream()
|
.setItems(datas.stream()
|
||||||
.filter(item -> item.getLeft().compareTo(BigDecimal.ZERO) > 0)
|
.filter(item -> item.getInspectionStatus() == 1 && item.getLeft().compareTo(BigDecimal.ZERO) > 0)
|
||||||
.map(item -> {
|
.map(item -> {
|
||||||
OutProduceItemVO vo = new OutProduceItemVO()
|
OutProduceItemVO vo = new OutProduceItemVO()
|
||||||
.setId(item.getId())
|
.setId(item.getId())
|
||||||
|
|
@ -221,7 +227,7 @@ public class InCostCenterBackController extends BaseController {
|
||||||
List<WmsInCostcenterBackItem> items = inCostcenterBackItemService.lambdaQuery()
|
List<WmsInCostcenterBackItem> items = inCostcenterBackItemService.lambdaQuery()
|
||||||
.eq(WmsInCostcenterBackItem::getOrderId, order.getId())
|
.eq(WmsInCostcenterBackItem::getOrderId, order.getId())
|
||||||
.list();
|
.list();
|
||||||
items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0);
|
items.removeIf(item -> item.getInspectionStatus() != 1 && item.getLeft().compareTo(BigDecimal.ZERO) <= 0);
|
||||||
return ApiResult.success(
|
return ApiResult.success(
|
||||||
items.stream()
|
items.stream()
|
||||||
.map(item -> new NoScanItemVO()
|
.map(item -> new NoScanItemVO()
|
||||||
|
|
@ -280,6 +286,8 @@ public class InCostCenterBackController extends BaseController {
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效:" + ri.getOrderItemId());
|
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效:" + ri.getOrderItemId());
|
||||||
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) <= 0)
|
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) <= 0)
|
||||||
.throwMessage("物料" + item.getMatnr() + "已全部入库");
|
.throwMessage("物料" + item.getMatnr() + "已全部入库");
|
||||||
|
VUtil.trueThrowBusinessError(item.getInspectionStatus() != 1)
|
||||||
|
.throwMessage("物料" + item.getMatnr() + "质检未通过");
|
||||||
BigDecimal num = ri.getDatas().stream()
|
BigDecimal num = ri.getDatas().stream()
|
||||||
.map(NoScanningItemDataRequest::getNum)
|
.map(NoScanningItemDataRequest::getNum)
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
@ -376,6 +384,8 @@ public class InCostCenterBackController extends BaseController {
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效:" + it.getItemId());
|
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效:" + it.getItemId());
|
||||||
|
VUtil.trueThrowBusinessError(item.getInspectionStatus() != 1)
|
||||||
|
.throwMessage("物料" + item.getMatnr() + "质检未通过");
|
||||||
WmsInCostcenterBackTicketItem ti = new WmsInCostcenterBackTicketItem()
|
WmsInCostcenterBackTicketItem ti = new WmsInCostcenterBackTicketItem()
|
||||||
.setId(IdUtil.getSnowflakeNextId())
|
.setId(IdUtil.getSnowflakeNextId())
|
||||||
.setTicketId(ticket.getId())
|
.setTicketId(ticket.getId())
|
||||||
|
|
@ -649,4 +659,34 @@ public class InCostCenterBackController extends BaseController {
|
||||||
headers.setContentLength(zipBytes.length);
|
headers.setContentLength(zipBytes.length);
|
||||||
return new ResponseEntity<>(zipBytes, headers, HttpStatus.OK);
|
return new ResponseEntity<>(zipBytes, headers, HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 推送质检申请
|
||||||
|
* @param itemId 订单项id
|
||||||
|
*/
|
||||||
|
@PostMapping("pushInspection")
|
||||||
|
public ApiResult<Void> pushInspection(@RequestBody Long itemId) {
|
||||||
|
WmsInCostcenterBackItem item = inCostcenterBackItemService.getById(itemId);
|
||||||
|
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项不存在");
|
||||||
|
VUtil.trueThrowBusinessError(item.getInspectionStatus() != 3).throwMessage("请勿重复推送");
|
||||||
|
pushInspection(item);
|
||||||
|
inCostcenterBackItemService.updateById(item);
|
||||||
|
return ApiResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void pushInspection(WmsInCostcenterBackItem item) {
|
||||||
|
if (qmsService.pushBackInspection(
|
||||||
|
List.of(
|
||||||
|
new ExternalReturnInspectionApplyQO()
|
||||||
|
.setRequestNo(String.valueOf(item.getId()))
|
||||||
|
.setMaterialNo(item.getMatnr())
|
||||||
|
.setInspectionQty(item.getNum().intValue())
|
||||||
|
.setReturnType((short) 1)
|
||||||
|
)
|
||||||
|
)) {
|
||||||
|
item.setInspectionStatus(0);
|
||||||
|
} else {
|
||||||
|
item.setInspectionStatus(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,9 @@ public class QmsService {
|
||||||
@Value("${qms.pdi.apply.url}")
|
@Value("${qms.pdi.apply.url}")
|
||||||
private String pdiApplyUrl;
|
private String pdiApplyUrl;
|
||||||
|
|
||||||
|
@Value("${qms.back.apply.url}")
|
||||||
|
private String backApplyUrl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 推送IQC来料检验申请到QMS
|
* 推送IQC来料检验申请到QMS
|
||||||
*/
|
*/
|
||||||
|
|
@ -333,4 +336,29 @@ public class QmsService {
|
||||||
Objects.isNull(response.getBody()) || response.getBody().getCode() != 200
|
Objects.isNull(response.getBody()) || response.getBody().getCode() != 200
|
||||||
).throwMessage("推送PDI检验申请到QMS失败:" + response.getBody().getMessage());
|
).throwMessage("推送PDI检验申请到QMS失败:" + response.getBody().getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 推送退料入库检验申请
|
||||||
|
*/
|
||||||
|
public boolean pushBackInspection(List<ExternalReturnInspectionApplyQO> items) {
|
||||||
|
log.info("推送退料入库检验申请到QMS:{}", JSONUtil.toJsonStr(items));
|
||||||
|
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||||
|
HttpEntity<List<ExternalReturnInspectionApplyQO>> requestEntity = new HttpEntity<>(items, headers);
|
||||||
|
try {
|
||||||
|
ResponseEntity<ApiResult<Void>> response = restTemplate.exchange(
|
||||||
|
qmsHost + backApplyUrl,
|
||||||
|
HttpMethod.POST,
|
||||||
|
requestEntity,
|
||||||
|
new ParameterizedTypeReference<ApiResult<Void>>() {
|
||||||
|
}
|
||||||
|
);
|
||||||
|
log.info("推送退料入库检验申请到QMS结果:{},{}", response.getStatusCode().value(), JSONUtil.toJsonStr(response.getBody()));
|
||||||
|
return response.getBody() != null && response.getBody().getCode() == 200;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.error("推送退料入库检验申请到QMS失败",ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -90,4 +90,9 @@ public class WmsInCostcenterBackItem implements Serializable {
|
||||||
* 预留/相关需求的项目编号
|
* 预留/相关需求的项目编号
|
||||||
*/
|
*/
|
||||||
private String rspos;
|
private String rspos;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 质检状态,0:待质检;1:质检通过;2:质检未通过;3:推送失败
|
||||||
|
*/
|
||||||
|
private Integer inspectionStatus;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue