ErpServiceImpl.java
package com.mycim.server.erp.service;
import com.alipay.sofa.runtime.api.annotation.SofaService;
import com.alipay.sofa.runtime.api.annotation.SofaServiceBinding;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.mycim.framework.utils.exception.ExceptionUtils;
import com.fa.sesa.exception.SystemIllegalException;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.logging.Logger;
import com.mycim.framework.logging.LoggerFactory;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.framework.utils.msg.JsonUtils;
import com.mycim.server.erp.dto.*;
import com.mycim.server.erp.manager.ErpManager;
import com.mycim.valueobject.erp.ErpMesProductBindBean;
import com.mycim.valueobject.prp.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Luopeng.Wang
* @version 6.0.0
* @date 2021/5/24
**/
@Service
@SofaService(interfaceType = ErpService.class, bindings = {@SofaServiceBinding(bindingType = "bolt")})
public class ErpServiceImpl implements ErpService {
private final static Logger logger = LoggerFactory.getLogger(ErpConstants.ERP_LOGGER_NAME);
@Autowired
private ErpManager erpManager;
/**
* 接收物料主数据的接口
*/
@Override
public void receiveErpMaterial() {
Date startDate = new Date();
List<ErpMaterialDto> erpMaterialDtos = erpManager.getAvaliableErpMaterial();
logger.info("ReceiveMaterial --> Data size : " + erpMaterialDtos.size() + " , Receive time : " +
DateUtils.formatDate(startDate, DateUtils.DATE_FORMAT4DATE));
for (ErpMaterialDto erpMaterialDto : erpMaterialDtos) {
try {
erpManager.receiveErpMaterial(erpMaterialDto);
logger.info("ReceiveMaterial --> Excute success , Data: " + JsonUtils.toString(erpMaterialDto));
} catch (Exception e) {
erpManager.changeErpMaterialStatus(erpMaterialDto, ErpConstants.STATUS_FAIL);
SystemIllegalException systemIllegalException = ExceptionUtils.findSystemException(e);
logger.error("ReceiveMaterial --> Excute failed , Data: " + JsonUtils.toString(erpMaterialDto) +
" , Error msg:" + systemIllegalException.getMessage());
}
}
}
@Override
public List<Map<String, String>> getCanReceiveMaterialList() {
return erpManager.getCanReceiveMaterialList();
}
/**
* 接收工单以及工单明细的接口
*/
@Override
public void receiveErpWorkOrder() {
Date startDate = new Date();
List<ErpWorkOrderDto> erpWorkOrderDtos = erpManager.getAvaliableErpWorkOrder();
logger.info("ReceiveWorkOrder -->Head Data size : " + erpWorkOrderDtos.size() + " , Receive time : " +
DateUtils.formatDate(startDate, DateUtils.DATE_FORMAT4DATE));
List<ErpWorkOrderLineDto> erpWorkOrderLineDtos = erpManager.getAvaliableErpWorkOrderLine();
logger.info("ReceiveWorkOrder -->Line Data size : " + erpWorkOrderLineDtos.size() + " , Receive time : " +
DateUtils.formatDate(startDate, DateUtils.DATE_FORMAT4DATE));
Map<String, List<ErpWorkOrderLineDto>> lineMap = erpWorkOrderLineDtos.stream().collect(
Collectors.groupingBy(ErpWorkOrderLineDto::getAufnr));
for (ErpWorkOrderDto workOrderDto : erpWorkOrderDtos) {
List<ErpWorkOrderLineDto> workOrderLineDtos = new ArrayList<>();
try {
Object object = MapUtils.getObject(lineMap, workOrderDto.getAufnr());
Assert.isFalse(object == null,
Errors.create().content("ZMES_POREL_H WorkOrder {} not match ZMES_POREL_I Data")
.args(workOrderDto.getAufnr()).build());
workOrderLineDtos = (List<ErpWorkOrderLineDto>) object;
workOrderDto.setLines(workOrderLineDtos);
erpManager.receiveErpWorkOrder(workOrderDto);
logger.info("ReceiveWorkOrder --> Excute success , Data: " + JsonUtils.toString(workOrderDto));
} catch (Exception e) {
erpManager.changeErpWorkOrderStatus(workOrderDto, ErpConstants.STATUS_FAIL);
erpManager.changeErpWorkOrderLineStatus(workOrderLineDtos, ErpConstants.STATUS_FAIL);
SystemIllegalException systemIllegalException = ExceptionUtils.findSystemException(e);
logger.error("ReceiveMaterial --> Excute failed , Data: " + JsonUtils.toString(workOrderDto) +
" , Error msg:" + systemIllegalException.getMessage());
}
}
}
/**
* Wafer Start 接口
* @param transInfo
* @return
*/
@Override
public Map createLot4Erp(Map transInfo) {
return erpManager.createLot(transInfo);
}
/**
* MES界面手动接收 物料批
* @param receiveList
* @param warehouse
*/
@Override
public void batchReceiveMaterial(List<String> receiveList, Operation warehouse) {
erpManager.batchReceiveMaterial(receiveList, warehouse);
}
@Override
public void recordMaterialReturnLog(String warehouseId, String materialId, String sourceType,
List<Map<String, Object>> conversionList) {
erpManager.recordMaterialReturnLog(warehouseId, materialId, sourceType, conversionList);
}
@Override
public void returnErpMaterial() {
List<Map<String,String>> confirmedReturnRequest = erpManager.getConfirmedReturnRequest();
if (CollectionUtils.isNotEmpty(confirmedReturnRequest)){
erpManager.actuallyReturnMaterial("WAFER_BANK", confirmedReturnRequest);
}
}
@Override
public List<Map<String, String>> getReceiveOrReturnBomList(String moveType) {
return erpManager.getReceiveOrReturnBomList(moveType);
}
@Override
public void batchReturnBom(List<String> returnList, Operation warehouse, String conversionType) {
erpManager.batchReturnMaterialBom(returnList, warehouse, conversionType);
}
@Override
public List<String> queryMaterialIdByWorkOrderId(String workOrderId) {
return erpManager.queryMaterialIdByWorkOrderId(workOrderId);
}
@Override
public void shipLot4Erp() {
Date startDate = new Date();
List<ErpShipLotDto> erpShipLotDtos = erpManager.getAvaliableErpShipLot();
logger.info("ShipLot4Erp --> Data size : " + erpShipLotDtos.size() + " , Receive time : " +
DateUtils.formatDate(startDate, DateUtils.DATE_FORMAT4DATE));
for (ErpShipLotDto erpShipLotDto : erpShipLotDtos) {
try {
erpManager.shipLot4Erp(erpShipLotDto);
logger.info("ShipLot4Erp --> Excute success , Data: " + JsonUtils.toString(erpShipLotDto));
} catch (Exception e) {
erpManager.changeErpShipLotStatus(erpShipLotDto, ErpConstants.STATUS_FAIL);
SystemIllegalException systemIllegalException = ExceptionUtils.findSystemException(e);
logger.error("ShipLot4Erp --> Excute failed , Data: " + JsonUtils.toString(erpShipLotDto) +
" , Error msg:" + systemIllegalException.getMessage());
}
}
}
@Override
public void shipLotRequest(List<Map<String, String>> paramMap) {
erpManager.shipLotRequest(paramMap);
}
@Override
public void insertBindMesProduct(ErpMesProductBindBean erpMesProductBindBean) {
erpManager.insertBindMesProduct(erpMesProductBindBean);
}
@Override
public void updateBindMesProduct(ErpMesProductBindBean erpMesProductBindBean) {
erpManager.updateBindMesProduct(erpMesProductBindBean);
}
@Override
public void deleteBindMesProduct(ErpMesProductBindBean erpMesProductBindBean) {
erpManager.deleteBindMesProduct(erpMesProductBindBean);
}
@Override
public Page queryBindMesProduct(Page page, ErpMesProductBindBean erpMesProductBindBean) {
return erpManager.queryBindMesProduct(page, erpMesProductBindBean);
}
@Override
public List<ErpMesProductBindBean> queryNotBindMesProduct() {
return erpManager.queryNotBindMesProduct();
}
@Override
public void batchReceiveBom(List<String> receiveList, Operation warehouse) {
erpManager.batchReceiveMaterialBom(receiveList, warehouse);
}
}