package org.jeecg.modules.wms.service.impl;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.jeecg.common.aspect.annotation.ApiLog;
|
import org.jeecg.common.constant.ApiLogCategoryEnum;
|
import org.jeecg.modules.base.entity.LineSideWarehouse;
|
import org.jeecg.modules.base.service.ILineSideWarehouseService;
|
import org.jeecg.modules.lsw.entity.LswMaterial;
|
import org.jeecg.modules.lsw.entity.LswMaterialInbound;
|
import org.jeecg.modules.lsw.entity.LswMaterialInventory;
|
import org.jeecg.modules.lsw.entity.LswMaterialOutbound;
|
import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
|
import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
|
import org.jeecg.modules.lsw.service.ILswMaterialOutboundService;
|
import org.jeecg.modules.lsw.service.ILswMaterialService;
|
import org.jeecg.modules.mes.entity.MesMaterialTransferRequest;
|
import org.jeecg.modules.mes.entity.MesTransferOrderPrint;
|
import org.jeecg.modules.mes.enums.MaterialTransferRequestStatus;
|
import org.jeecg.modules.mes.enums.TransferOrderStatusEnum;
|
import org.jeecg.modules.mes.service.IMesMaterialTransferRequestService;
|
import org.jeecg.modules.mes.service.IMesTransferOrderPrintService;
|
import org.jeecg.modules.wms.dto.WSResponse;
|
import org.jeecg.modules.wms.request.ReceiveWMSScanItemList;
|
import org.jeecg.modules.wms.request.WMSWebServiceSendItem;
|
import org.jeecg.modules.wms.service.MESWebServiceSoap;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.jws.WebMethod;
|
import javax.jws.WebParam;
|
import javax.jws.WebResult;
|
import javax.jws.WebService;
|
import javax.xml.ws.RequestWrapper;
|
import javax.xml.ws.ResponseWrapper;
|
import java.math.BigDecimal;
|
|
|
@Slf4j
|
@Service
|
@WebService(name = "MESWebServiceSoap", targetNamespace = "http://xhj008.server.webservice.com", endpointInterface = "org.jeecg.modules.wms.service.MESWebServiceSoap")
|
public class MESWebServiceSoapImpl implements MESWebServiceSoap {
|
|
@Autowired
|
private IMesMaterialTransferRequestService materialTransferRequestService;
|
@Autowired
|
private ILineSideWarehouseService lineSideWarehouseService;
|
@Autowired
|
private ILswMaterialInboundService materialInboundService;
|
@Autowired
|
private IMesTransferOrderPrintService transferOrderPrintService;
|
@Autowired
|
private ILswMaterialOutboundService materialOutboundService;
|
@Autowired
|
private ILswMaterialInventoryService materialInventoryService;
|
@Autowired
|
private ILswMaterialService materialService;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
@WebMethod(operationName = "ReceiveWMSScanItemList", action = "http://xhj008.server.webservice.com/ReceiveWMSScanItemList")
|
@RequestWrapper(localName = "ReceiveWMSScanItemList", targetNamespace = "http://xhj008.server.webservice.com/", className = "ReceiveWMSScanItemList")
|
@ResponseWrapper(localName = "ReceiveWMSScanItemListResponse", targetNamespace = "http://xhj008.server.webservice.com/", className = "ReceiveWMSScanItemListResponse")
|
@WebResult(name = "ReceiveWMSScanItemListResult", targetNamespace = "http://xhj008.server.webservice.com/")
|
@ApiLog(apiName = "接收WMS的移库信息(ReceiveWMSScanItemList(MES)", apiCategory = ApiLogCategoryEnum.WMS)
|
public WSResponse receiveWMSScanItemList(@WebParam(name = "ReceiveWMSScanItemList", targetNamespace = "http://xhj008.server.webservice.com/") ReceiveWMSScanItemList request) {
|
WSResponse response = new WSResponse();
|
if (request == null || CollectionUtil.isEmpty(request.getWmsWebServiceSendItemList())) {
|
response.setErrorCode("N");
|
response.setErrorDesc("传入的参数为空!");
|
return response;
|
}
|
int errorCount = 0;
|
int successCount = 0;
|
StringBuilder errorMsg = new StringBuilder();
|
for (WMSWebServiceSendItem item : request.getWmsWebServiceSendItemList()) {
|
if (StringUtils.isNotBlank(item.getReservationOrder())) {
|
//物料拉动回调
|
MesMaterialTransferRequest transferRequest = materialTransferRequestService.queryByReservationCode(item.getReservationOrder());
|
if (transferRequest == null) {
|
errorCount++;
|
errorMsg.append("根据预留号[").append(item.getReservationOrder()).append("]未找到物料拉动单!\n");
|
continue;
|
}
|
LineSideWarehouse warehouse = lineSideWarehouseService.getById(transferRequest.getTargetWarehouseId());
|
if (warehouse == null || !warehouse.getWarehouseCode().equals(item.getDestSection())) {
|
errorCount++;
|
errorMsg.append("线边库[").append(item.getDestSection()).append("]未找到!\n");
|
continue;
|
}
|
if (!transferRequest.getMaterialNumber().equals(item.getSkuCode())) {
|
errorCount++;
|
errorMsg.append("物料编号[").append(item.getSkuCode()).append("]不匹配!\n");
|
continue;
|
}
|
if (StringUtils.isBlank(item.getTrackLot())) {
|
errorCount++;
|
errorMsg.append("批次号[").append(item.getTrackLot()).append("]不能为空!\n");
|
continue;
|
}
|
transferRequest.setRequestStatus(MaterialTransferRequestStatus.CHECKED_IN.name());
|
//计算实际拉动数量
|
BigDecimal actualQuantity = transferRequest.getActualQuantity() == null ? item.getQuantity() : transferRequest.getActualQuantity().add(item.getQuantity());
|
transferRequest.setActualQuantity(actualQuantity);
|
|
//添加入库信息
|
LswMaterialInbound inbound = new LswMaterialInbound();
|
inbound.setWarehouseId(transferRequest.getTargetWarehouseId());
|
inbound.setReceiver("WMS");
|
inbound.setMaterialNumber(transferRequest.getMaterialNumber());
|
inbound.setMaterialName(transferRequest.getMaterialName());
|
inbound.setBatchNumber(item.getTrackLot());
|
inbound.setQuantity(item.getQuantity());
|
inbound.setFactoryId(warehouse.getFactoryId());
|
boolean b = materialInboundService.inboundMaterial(inbound);
|
if (!b) {
|
errorCount++;
|
errorMsg.append("预留号[").append(item.getReservationOrder()).append("]入库失败!\n");
|
continue;
|
}
|
//更新物料拉动单
|
materialTransferRequestService.updateById(transferRequest);
|
successCount++;
|
} else if (StringUtils.isNotBlank(item.getAlign())) {
|
//移库单回调
|
MesTransferOrderPrint transferOrder = transferOrderPrintService.queryByOrderCode(item.getAlign());
|
if (transferOrder == null) {
|
errorCount++;
|
errorMsg.append("移库单[").append(item.getAlign()).append("]不存在!\n");
|
continue;
|
}
|
LswMaterialInventory inventory = materialInventoryService.getById(item.getMesStockID());
|
if (inventory == null) {
|
errorCount++;
|
errorMsg.append("库存信息[").append(item.getMesStockID()).append("]不存在!\n");
|
continue;
|
}
|
LswMaterial material = materialService.queryByMaterialNumber(item.getSkuCode());
|
if(material == null) {
|
errorCount++;
|
errorMsg.append("物料编号[").append(item.getSkuCode()).append("]不存在!\n");
|
continue;
|
}
|
LineSideWarehouse warehouse = lineSideWarehouseService.getById(transferOrder.getOriginalWarehouseId());
|
if (warehouse == null || !warehouse.getWarehouseCode().equals(item.getDestSection())) {
|
errorCount++;
|
errorMsg.append("线边库[").append(item.getDestSection()).append("]未找到!\n");
|
continue;
|
}
|
//移库单更改
|
transferOrder.setOrderStatus(TransferOrderStatusEnum.COMPLETED.name());
|
//成品出库
|
LswMaterialOutbound outbound = new LswMaterialOutbound();
|
outbound.setBatchNumber(inventory.getBatchNumber());
|
outbound.setQuantity(item.getQuantity());
|
outbound.setMaterialNumber(material.getMaterialNumber());
|
outbound.setMaterialName(material.getMaterialName());
|
outbound.setInventoryId(inventory.getId());
|
outbound.setWarehouseId(transferOrder.getOriginalWarehouseId());
|
outbound.setFactoryId(warehouse.getFactoryId());
|
outbound.setOutboundStaff("WMS");
|
boolean b = materialOutboundService.outboundMaterial(outbound);
|
if (!b) {
|
errorCount++;
|
errorMsg.append("移库单[").append(item.getAlign()).append("]出库失败!\n");
|
continue;
|
}
|
transferOrderPrintService.updateById(transferOrder);
|
successCount++;
|
}
|
}
|
//处理返回结果
|
if (errorCount > 0) {
|
response.setErrorCode("N");
|
if (successCount > 0) {
|
String msg = "成功执行" + successCount + "条,失败" + errorCount + "条!\n";
|
errorMsg.insert(0, msg);
|
} else {
|
String msg = "失败" + errorCount + "条!\n";
|
errorMsg.insert(0, msg);
|
}
|
response.setErrorDesc(errorMsg.toString());
|
} else {
|
response.setErrorCode("Y");
|
String msg = "成功执行" + successCount + "条!\n";
|
response.setErrorDesc(msg);
|
}
|
return response;
|
}
|
}
|