WarehouseServiceImpl.java
package com.mycim.server.asm.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.fa.sesa.i18n.I18nUtils;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.server.asm.manager.LotInventoryManager;
import com.mycim.server.asm.manager.MaterialManager;
import com.mycim.server.asm.manager.WarehouseManager;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.prp.manager.OperationManager;
import com.mycim.server.system.manager.ReferenceFileManager;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.consts.AsmConst;
import com.mycim.valueobject.consts.ReferenceDetailNames;
import com.mycim.valueobject.consts.ReferenceFileConst;
import com.mycim.valueobject.inv.LotInventoryDO;
import com.mycim.valueobject.inv.MaterialDO;
import com.mycim.valueobject.inv.WarehouseInventoryDO;
import com.mycim.valueobject.inv.WarehouseTransBO;
import com.mycim.valueobject.inv.value.WarehouseNames;
import com.mycim.valueobject.prp.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author shijie.deng
* @date 2019/8/27
**/
@Service
@SofaService(interfaceType = WarehouseService.class, bindings = {@SofaServiceBinding(bindingType = "bolt")})
public class WarehouseServiceImpl implements WarehouseService {
@Autowired
private WarehouseManager warehouseManager;
@Autowired
private OperationManager operationManager;
@Autowired
private ReferenceFileManager referenceFileManager;
@Autowired
private MaterialManager materialManager;
@Autowired
private NamedObjectManager namedObjectManager;
@Autowired
private LotInventoryManager lotInventoryManager;
@Override
public Operation getWarehouse(Long facilityRrn, String warehouseId) {
Assert.isFalse(StringUtils.isEmpty(warehouseId),
Errors.create().content("Warehouse Id can not be empty!").build());
Operation warehouse = operationManager.getOperation(warehouseId, facilityRrn);
Assert.isFalse(warehouse == null || warehouse.getInstanceRrn() < 1,
Errors.create().content("Warehouse Id not exist!").build());
Assert.isFalse(warehouse.getStoreFlag() == null || !"on".equalsIgnoreCase(warehouse.getStoreFlag()),
Errors.create().content("This Warehouse Id is not a Warehouse! Please check it!").build());
return warehouse;
}
@Override
public List<Map<String, String>> getWarehouseInventoryList(Long warehouseRrn) {
List<MaterialDO> getWarehouseInventoryList = warehouseManager.getWarehouseInventoryList(warehouseRrn, null);
return buildWarehouseInfoShowList(getWarehouseInventoryList);
}
@Override
public List<Map<String, String>> getWarehouseInventoryList(Long warehouseRrn, Map<String, String> condition) {
List<MaterialDO> getWarehouseInventoryList = warehouseManager
.getWarehouseInventoryList(warehouseRrn, condition);
return buildWarehouseInfoShowList(getWarehouseInventoryList);
}
@Override
public List<Map<String, String>> getWarehouseInventoryListForMaterialWithExt(Long warehouseRrn,
Map<String, String> condition) {
List<MaterialDO> getWarehouseInventoryList = warehouseManager
.getWarehouseInventoryListForMaterialWithExt(warehouseRrn, condition);
return buildWarehouseInfoShowList(getWarehouseInventoryList);
}
@Override
public void checkWarehouseReceiveType(String warehouseId, String materialObjectSubType) {
String key;
try {
// 如果不存在,该底层方法会返回传入参数key_1_value的值
key = referenceFileManager
.getReferenceDetailExchange(ReferenceDetailNames.WAREHOUSE_ACCEPTABLE_TYPE, warehouseId,
materialObjectSubType, ReferenceFileConst.KEY_2_VALUE);
} catch (Exception e) {
key = warehouseId;
}
Assert.isFalse(key == warehouseId, Errors.create().key(MessageIdList.ASM_CANT_RECEIVE_MATERIAL_TYPE)
.content("库房未允许接收该类型{},请到类表{}进行设置!").args(materialObjectSubType,
ReferenceDetailNames.WAREHOUSE_ACCEPTABLE_TYPE)
.build());
}
@Override
public void receiveMaterialToWarehouse(Long facilityRrn, String userId, String warehouseId,
List<Map<String, Object>> receiptList) throws Exception {
Operation warehouse = getWarehouse(facilityRrn, warehouseId);
List<WarehouseTransBO> receiveTrans = new ArrayList<>();
WarehouseTransBO warehouseTrans;
for (Map<String, Object> map : receiptList) {
MaterialDO material = new MaterialDO(MapUtils.getString(map, AsmConst.MATERIAL_ID),
namedObjectManager.getNamedSpace(facilityRrn, ObjectList.ITEM_KEY),
ObjectList.ITEM_KEY);
material = materialManager.getMaterial(material);
warehouseTrans = new WarehouseTransBO();
buildWarehouseTrans(warehouseTrans, warehouse, material, map);
receiveTrans.add(warehouseTrans);
}
warehouseManager.saveReceivedMaterialToWarehouse(facilityRrn, userId, receiveTrans);
}
@Override
public List<Map<String, String>> getLotInventoryListInWarehouseByMaterialRrn(Long itemRrn, Long warehouseRrn) {
return getLotInventoryListForShowInfo(null, itemRrn, warehouseRrn, null, true);
}
@Override
public List<Map<String, String>> getLotInventoryListInWarehouseByMaterialRrn(String lotNumber, Long itemRrn, Long warehouseRrn, boolean isAll) {
return getLotInventoryListForShowInfo(lotNumber, itemRrn, warehouseRrn, null, isAll);
}
@Override
public List<Map<String, Object>> getMaterialInfoByLot(Long LotRrn) {
return lotInventoryManager.getMaterialInfoByLot(LotRrn);
}
@Override
public Map<String, Object> getMaterialInfoByUnit(long unitRrn) {
return lotInventoryManager.getMaterialInfoByUnit(unitRrn);
}
@Override
public LotInventoryDO getLotInventory(String lotNumber, Long itemRrn, Long warehouseRrn) {
return lotInventoryManager.getLotInventory(lotNumber, itemRrn, warehouseRrn);
}
@Override
public void deleteLotInventory(String lotNumber, Long itemRrn, Long warehouseRrn) {
lotInventoryManager.deleteLotInventory(lotNumber, itemRrn, warehouseRrn);
}
@Override
public void updateLotInventory(LotInventoryDO lotInventory) {
lotInventoryManager.updateLotInventory(lotInventory);
}
@Override
public void consumeMaterialFromWarehouse(Long facilityRrn, String userId, String warehouseId, String materialId,
List<Map<String, Object>> cunsumptionList) throws Exception {
Operation warehouse = getWarehouse(facilityRrn, warehouseId);
MaterialDO material = materialManager.getMaterial(
new MaterialDO(materialId, namedObjectManager.getNamedSpace(facilityRrn, ObjectList.ITEM_KEY),
ObjectList.ITEM_KEY));
WarehouseTransBO warehouseTrans;
LotInventoryDO lotInventory;
List<WarehouseTransBO> consumptionTrans = new ArrayList<>();
for (Map<String, Object> map : cunsumptionList) {
lotInventory = lotInventoryManager
.getLotInventory(MapUtils.getString(map, AsmConst.LOT_NUMBER), material.getInstanceRrn(),
warehouse.getInstanceRrn());
warehouseTrans = new WarehouseTransBO(lotInventory);
buildWarehouseTrans(warehouseTrans, warehouse, material, map);
double totalQty = lotInventory.getTotalQuantity();
lotInventory.setStatus(lotInventoryManager.getLotInventoryStatus(lotInventory.getLotNumber(), totalQty,
warehouseTrans.getTransQty()));
consumptionTrans.add(warehouseTrans);
}
warehouseManager.saveConsumeMaterialFromWarehouse(facilityRrn, userId, consumptionTrans);
}
@Override
public List<Map<String, String>> getLotInventoryListForConsumption(String lotNumber, Long itemRrn,
Long warehouseRrn) {
return getLotInventoryListForShowInfo(lotNumber, itemRrn, warehouseRrn, null, false);
}
@Override
public Page pageLotInventoryListInWarehouse(Page page, Long itemRrn, Long warehouseRrn, String lotNumber) {
return pageLotInventoryListForShowInfo(page, itemRrn, warehouseRrn, lotNumber);
}
@Override
public void checkWarehouseInventoryQuantityOfWarning(Long warehouseRrn, Long materialRrn, Double quantityOfWarning,
Double totalConsumeQty) {
WarehouseInventoryDO warehouseInventory = warehouseManager.getWarehouseInventory(warehouseRrn, materialRrn);
double totalInWarehouse = warehouseInventory.getTotalQuantity();
double afterConsumeTotal = totalInWarehouse - totalConsumeQty;
Assert.isFalse(quantityOfWarning != 0 && afterConsumeTotal < quantityOfWarning,
Errors.create().content("消耗物料后,库存数量将低于安全库存数量({}),{}, 请及时补充物料!")
.args(String.format("%.2f", quantityOfWarning),
String.format("%.2f", quantityOfWarning - afterConsumeTotal)).build());
}
@Override
public WarehouseInventoryDO checkWarehouseInventoryQuantityOfWarningForCode(Long warehouseRrn, Long materialRrn) {
return warehouseManager.getWarehouseInventory(warehouseRrn, materialRrn);
}
@Override
public void convertMaterialFromWarehouse(Long facilityRrn, String userId, String warehouseId, String materialId,
String sourceType,
List<Map<String, Object>> convertList) throws Exception {
Operation warehouse = getWarehouse(facilityRrn, warehouseId);
MaterialDO materialDO = new MaterialDO(materialId,
namedObjectManager.getNamedSpace(facilityRrn, ObjectList.ITEM_KEY),
ObjectList.ITEM_KEY);
MaterialDO material = materialManager.getMaterial(materialDO);
WarehouseTransBO warehouseTrans;
LotInventoryDO lotInventory;
List<WarehouseTransBO> convertTrans = new ArrayList<>();
for (Map<String, Object> map : convertList) {
lotInventory = lotInventoryManager
.getLotInventory(MapUtils.getString(map, AsmConst.LOT_NUMBER), material.getInstanceRrn(),
warehouse.getInstanceRrn());
warehouseTrans = new WarehouseTransBO(lotInventory);
buildWarehouseTrans(warehouseTrans, warehouse, material, map);
lotInventory.setStatus(lotInventoryManager.getLotInventoryStatus(lotInventory.getLotNumber(),
lotInventory.getTotalQuantity(),
warehouseTrans.getTransQty()));
warehouseTrans.setTargetType(MapUtils.getString(map, AsmConst.CONVERSION_TYPE));
warehouseTrans.setTransType(buildConversionTargetType(sourceType, warehouseTrans.getTargetType()));
warehouseTrans.setTargetLotNumber(StringUtils.substringBeforeLast(lotInventory.getLotNumber(), sourceType) +
warehouseTrans.getTargetType());
convertTrans.add(warehouseTrans);
}
warehouseManager.saveConvertMaterialFromWarehouse(facilityRrn, userId, convertTrans);
}
@Override
public List<Map<String, String>> getLotInventoryListForConversion(String lotNumber, Long itemRrn, Long warehouseRrn,
String transType) {
return getLotInventoryListForShowInfo(lotNumber, itemRrn, warehouseRrn, transType, false);
}
@Override
public void stocktakeMaterialFromWarehouse(Long facilityRrn, String userId, String warehouseId, String materialId,
List<Map<String, Object>> stocktakeList) throws Exception {
Operation warehouse = getWarehouse(facilityRrn, warehouseId);
MaterialDO materialDO = new MaterialDO(materialId,
namedObjectManager.getNamedSpace(facilityRrn, ObjectList.ITEM_KEY),
ObjectList.ITEM_KEY);
MaterialDO material = materialManager.getMaterial(materialDO);
WarehouseTransBO warehouseTrans;
LotInventoryDO lotInventory;
List<WarehouseTransBO> stocktakeTrans = new ArrayList<>();
for (Map<String, Object> map : stocktakeList) {
lotInventory = lotInventoryManager
.getLotInventory(MapUtils.getString(map, AsmConst.LOT_NUMBER), material.getInstanceRrn(),
warehouse.getInstanceRrn());
warehouseTrans = new WarehouseTransBO(lotInventory);
buildWarehouseTrans(warehouseTrans, warehouse, material, map);
double totalQty = lotInventory.getTotalQuantity();
if (warehouseTrans.getTransQty() == 0) {
lotInventory.setStatus(WarehouseNames.CLOSE_STATUS);
}
warehouseTrans.setTransQty(warehouseTrans.getTransQty() - totalQty);
stocktakeTrans.add(warehouseTrans);
}
warehouseManager.saveStocktakeMaterialFromWarehouse(facilityRrn, userId, stocktakeTrans);
}
@Override
public List<Map<String, String>> getLotInventoryListForStocktake(String lotNumber, Long itemRrn, Long warehouseRrn,
String transType) {
return getLotInventoryListForShowInfo(lotNumber, itemRrn, warehouseRrn, transType, true);
}
@Override
public void transferMaterialFromWarehouse(Long facilityRrn, String userId, String fromWarehouseId,
String toWarehouseId, String materialId,
List<Map<String, Object>> transferList) throws Exception {
Operation fromWarehouse = getWarehouse(facilityRrn, fromWarehouseId);
Operation toWarehouse = getWarehouse(facilityRrn, toWarehouseId);
MaterialDO materialDO = new MaterialDO(materialId,
namedObjectManager.getNamedSpace(facilityRrn, ObjectList.ITEM_KEY),
ObjectList.ITEM_KEY);
// 获取物料信息
MaterialDO material = materialManager.getMaterial(materialDO);
checkWarehouseReceiveType(toWarehouse.getInstanceId(), material.getObjectSubtype());
WarehouseTransBO warehouseTrans;
LotInventoryDO lotInventory;
List<WarehouseTransBO> transferTrans = new ArrayList<>();
for (Map<String, Object> map : transferList) {
lotInventory = lotInventoryManager
.getLotInventory(MapUtils.getString(map, AsmConst.LOT_NUMBER), material.getInstanceRrn(),
fromWarehouse.getInstanceRrn());
warehouseTrans = new WarehouseTransBO(lotInventory);
buildWarehouseTrans(warehouseTrans, fromWarehouse, material, map);
lotInventory.setStatus(lotInventoryManager.getLotInventoryStatus(lotInventory.getLotNumber(),
lotInventory.getTotalQuantity(),
warehouseTrans.getTransQty()));
warehouseTrans.setToWarehouseRrn(toWarehouse.getInstanceRrn());
warehouseTrans.setToWarehouseId(toWarehouse.getInstanceId());
warehouseTrans.setTransQty(-warehouseTrans.getTransQty());
transferTrans.add(warehouseTrans);
}
warehouseManager.saveTransferMaterialFromWarehouse(facilityRrn, userId, transferTrans);
}
@Override
public Page getInventoryTransHistoryForPage(Page page, Long warehouseRrn, Long materialRrn, String lotNumber,
String transId, Timestamp startDateTime, Timestamp endDateTime) {
Page resultPage = warehouseManager
.getInventoryTransHistoryForPage(page, warehouseRrn, materialRrn, lotNumber, transId, startDateTime,
endDateTime);
List<Map<String, String>> resultList = (List<Map<String, String>>) resultPage.getResults();
for (Map<String, String> map : resultList) {
map.put(AsmConst.MATERIAL_DESC, StringUtils.defaultString(map.get(AsmConst.MATERIAL_DESC)));
map.put(AsmConst.TRANS_TYPE, StringUtils.defaultString(referenceFileManager.getReferenceDetailExchange(
ReferenceDetailNames.INV_TRANS_ID, map.get(AsmConst.TRANS_TYPE), ReferenceFileConst.DATA_1_VALUE),
map.get(AsmConst.TRANS_TYPE)));
map.put(AsmConst.COMMENTS, StringUtils.defaultString(map.get(AsmConst.COMMENTS)));
}
return resultPage;
}
@Override
public long consumeItemQty(List<Map<String, Object>> consumedItems, String userId, long facilityRrn,
Long checklistJobRrn) {
return warehouseManager.consumeItemQty(consumedItems, userId, facilityRrn, checklistJobRrn);
}
@Override
public Page getLotConsumesMaterialHistoryForPage(Page page, Map<String, Object> conditions) {
return warehouseManager.getLotConsumesMaterialHistoryForPage(page, conditions);
}
@Override
public Page getReceiveHistoryForPage(Page page, Long warehouseRrn, Long materialRrn, String lotNumber,
Timestamp startDateTime, Timestamp endDateTime) {
return warehouseManager
.getReceiveHistoryForPage(page, warehouseRrn, materialRrn, lotNumber, startDateTime, endDateTime);
}
@Override
public List<Map<String, String>> getLotInventoryListForConversion4Erp(String lotNumber, Long itemRrn,
Long warehouseRrn) {
List<LotInventoryDO> lotInventoryList = lotInventoryManager
.getLotInventoryList4Erp(itemRrn, warehouseRrn, lotNumber);
List<Map<String, String>> result = new ArrayList<>();
for (LotInventoryDO lotInventoryDO : lotInventoryList) {
if (lotInventoryDO.getTotalQuantity() > 0) {
result.add(buildLotInventoryShowInfo(lotInventoryDO, lotInventoryDO.getTotalQuantity()));
}
}
return result;
}
@Override
public List<Map<String, String>> getLotInventoryListForConversionForBom(String lotNumber, Long itemRrn,
Long warehouseRrn) {
List<LotInventoryDO> lotInventoryList = lotInventoryManager
.getLotInventoryList4Erp(itemRrn, warehouseRrn, lotNumber);
List<Map<String, String>> result = new ArrayList<>();
for (LotInventoryDO lotInventoryDO : lotInventoryList) {
if (lotInventoryDO.getTotalQuantity() > 0) {
result.add(buildLotInventoryShowInfoForBom(lotInventoryDO, lotInventoryDO.getTotalQuantity()));
}
}
return result;
}
private String buildTargetLotNumber(String sourceLotNumber, String sourceType, String targetType) {
return StringUtils.substringBeforeLast(sourceLotNumber, sourceType) + targetType;
}
/**
* 构建库存物料显示列表
*/
private List<Map<String, String>> buildWarehouseInfoShowList(List<MaterialDO> getWarehouseInventoryList) {
List<Map<String, String>> results = new ArrayList<>();
Map<String, String> map;
for (Iterator<MaterialDO> iterator = getWarehouseInventoryList.iterator(); iterator.hasNext(); ) {
MaterialDO materialDO = iterator.next();
if (materialDO.getTotalQuantity() <= 0) {
//数量为0的,过滤掉不显示
continue;
}
map = new HashMap<>();
map.put(AsmConst.MATERIAL_ID, materialDO.getInstanceId());
map.put(AsmConst.MATERIAL_DESC, materialDO.getInstanceDesc());
map.put(AsmConst.MATERIAL_TYPE_DESC, referenceFileManager
.getReferenceDetailExchange(ReferenceDetailNames.MATERIAL_TYPE, materialDO.getObjectSubtype(),
ReferenceFileConst.DATA_1_VALUE));
map.put(AsmConst.MATERIAL_SUB_TYPE_DESC, referenceFileManager
.getReferenceDetailExchange(ReferenceDetailNames.MATERIAL_SUB_TYPE, materialDO.getItemClass(),
ReferenceFileConst.DATA_1_VALUE));
map.put(AsmConst.QUANTITY, StringUtils.toString(materialDO.getTotalQuantity()));
map.put(AsmConst.STORE_UOM_DESC, referenceFileManager
.getReferenceDetailExchange(ReferenceDetailNames.UNIT_OF_MEASURE_FOR_BANK, materialDO.getStoreUom(),
ReferenceFileConst.DATA_1_VALUE));
results.add(map);
}
return results;
}
private void buildWarehouseTrans(WarehouseTransBO warehouseTrans, Operation warehouse, MaterialDO material,
Map<String, Object> map) throws Exception {
warehouseTrans.setTransQty(NumberUtils.toDouble(MapUtils.getString(map, AsmConst.QTY)));
String equipment = MapUtils.getString(map, "equipmentId");
String language = I18nUtils.getCurrentLanguage().name();
if (StringUtils.isNotEmpty(equipment)) {
if ("CN".equalsIgnoreCase(language)) {
equipment = " 消耗机台号:" + equipment;
} else {
equipment = " Consumed Equipment ID:" + equipment;
}
} else {
equipment = StringUtils.EMPTY;
}
warehouseTrans.setTransComments(MapUtils.getString(map, AsmConst.COMMENTS) + equipment);
LotInventoryDO lotInventory = warehouseTrans.getLotInventoryDO();
lotInventory.setLotNumber(StringUtils.trim(MapUtils.getString(map, AsmConst.LOT_NUMBER)));
lotInventory.setItemRrn(material.getInstanceRrn());
lotInventory.setWarehouseRrn(warehouse.getInstanceRrn());
lotInventory.setWarehouseId(warehouse.getInstanceId());
lotInventory.setMaterialType(material.getObjectSubtype());
lotInventory.setReceiptDate(new Timestamp(System.currentTimeMillis()));
lotInventory.setExpirationDate(DateUtils.stringToTimestamp(MapUtils.getString(map, AsmConst.EXPIRATION_DATE)));
lotInventory.setProductionDate(DateUtils.stringToTimestamp(MapUtils.getString(map, AsmConst.PRODUCTION_DATE)));
lotInventory.setIncomingDate(DateUtils.stringToTimestamp(MapUtils.getString(map, AsmConst.INCOMING_DATE)));
lotInventory.setCheckDate(DateUtils.stringToTimestamp(MapUtils.getString(map, AsmConst.CHECK_DATE)));
lotInventory.setCheckUser(MapUtils.getString(map, AsmConst.CHECK_USER));
lotInventory.setCheckResult(MapUtils.getString(map, AsmConst.CHECK_RESULT));
warehouseManager.setExpirationDateForReceive(material.getExpirationLength(), lotInventory);
lotInventory.setAttributeData1(MapUtils.getString(map, AsmConst.SUPPLIER_ID));
lotInventory.setAttributeData2(MapUtils.getString(map, AsmConst.MANUFACTURER_ID));
lotInventory.setStatus(WarehouseNames.ACTIVE_STATUS);
}
private List<Map<String, String>> getLotInventoryListForShowInfo(String lotNumber, Long itemRrn, Long warehouseRrn,
String transType, Boolean isAll) {
List<LotInventoryDO> lotInventoryList = lotInventoryManager
.getLotInventoryList(itemRrn, warehouseRrn, lotNumber, transType);
List<Map<String, String>> result = new ArrayList<>();
for (LotInventoryDO lotInventoryDO : lotInventoryList) {
if (isAll || lotInventoryDO.getTotalQuantity() > 0) {
result.add(buildLotInventoryShowInfo(lotInventoryDO, lotInventoryDO.getTotalQuantity()));
}
}
return result;
}
private Map<String, String> buildLotInventoryShowInfo(LotInventoryDO lotInventoryDO, double totalQty) {
Map<String, String> map = new HashMap<>();
map.put(AsmConst.LOT_NUMBER, lotInventoryDO.getLotNumber());
map.put(AsmConst.QUANTITY, StringUtils.toString(totalQty));
map.put(AsmConst.ISSUE_QTY, StringUtils.toString(lotInventoryDO.getIssueQty()));
map.put(AsmConst.STATUS, lotInventoryDO.getStatus());
SimpleDateFormat formatter = new SimpleDateFormat(DateUtils.DATE_FORMAT4DAY);
String expirationDate = "";
if (lotInventoryDO.getExpirationDate() != null) {
expirationDate = formatter.format(lotInventoryDO.getExpirationDate());
}
map.put(AsmConst.EXPIRATION_DATE, expirationDate);
String productionDate = "";
if (lotInventoryDO.getProductionDate() != null) {
productionDate = formatter.format(lotInventoryDO.getProductionDate());
}
map.put(AsmConst.PRODUCTION_DATE, productionDate);
String incomingDate = "";
if (lotInventoryDO.getIncomingDate() != null) {
incomingDate = formatter.format(lotInventoryDO.getIncomingDate());
}
map.put(AsmConst.INCOMING_DATE, incomingDate);
String checkDate = "";
if (lotInventoryDO.getCheckDate() != null) {
checkDate = formatter.format(lotInventoryDO.getCheckDate());
}
map.put(AsmConst.CHECK_DATE, checkDate);
map.put(AsmConst.CHECK_USER, StringUtils.defaultString(lotInventoryDO.getCheckUser()));
map.put(AsmConst.CHECK_RESULT, StringUtils.defaultString(lotInventoryDO.getCheckResult()));
map.put(AsmConst.SUPPLIER_ID, StringUtils.defaultString(referenceFileManager.getReferenceDetailExchange(
ReferenceDetailNames.RAW_WAFER_SUPPLIER, lotInventoryDO.getAttributeData1(),
ReferenceFileConst.DATA_1_VALUE)));
map.put(AsmConst.MANUFACTURER_ID, StringUtils.defaultString(lotInventoryDO.getAttributeData2()));
map.put("workOrderId", StringUtils.defaultString(lotInventoryDO.getAttributeData3()));
map.put("sapMaterialId", StringUtils.defaultString(lotInventoryDO.getAttributeData4()));
return map;
}
private Map<String, String> buildLotInventoryShowInfoForBom(LotInventoryDO lotInventoryDO, double totalQty) {
Map<String, String> map = new HashMap<>();
map.put(AsmConst.LOT_NUMBER, lotInventoryDO.getLotNumber());
map.put(AsmConst.QUANTITY, StringUtils.toString(totalQty));
map.put(AsmConst.ISSUE_QTY, StringUtils.toString(lotInventoryDO.getIssueQty()));
map.put(AsmConst.STATUS, lotInventoryDO.getStatus());
SimpleDateFormat formatter = new SimpleDateFormat(DateUtils.DATE_FORMAT4DAY);
String expirationDate = "";
if (lotInventoryDO.getExpirationDate() != null) {
expirationDate = formatter.format(lotInventoryDO.getExpirationDate());
}
map.put(AsmConst.EXPIRATION_DATE, expirationDate);
String productionDate = "";
if (lotInventoryDO.getProductionDate() != null) {
productionDate = formatter.format(lotInventoryDO.getProductionDate());
}
map.put(AsmConst.PRODUCTION_DATE, productionDate);
String incomingDate = "";
if (lotInventoryDO.getIncomingDate() != null) {
incomingDate = formatter.format(lotInventoryDO.getIncomingDate());
}
map.put(AsmConst.INCOMING_DATE, incomingDate);
String checkDate = "";
if (lotInventoryDO.getCheckDate() != null) {
checkDate = formatter.format(lotInventoryDO.getCheckDate());
}
map.put(AsmConst.CHECK_DATE, checkDate);
map.put(AsmConst.CHECK_USER, StringUtils.defaultString(lotInventoryDO.getCheckUser()));
map.put(AsmConst.CHECK_RESULT, StringUtils.defaultString(lotInventoryDO.getCheckResult()));
map.put(AsmConst.SUPPLIER_ID, StringUtils.defaultString(referenceFileManager.getReferenceDetailExchange(
ReferenceDetailNames.RAW_WAFER_SUPPLIER, lotInventoryDO.getAttributeData1(),
ReferenceFileConst.DATA_1_VALUE)));
map.put(AsmConst.MANUFACTURER_ID, StringUtils.defaultString(lotInventoryDO.getAttributeData2()));
map.put("sapClintId", StringUtils.defaultString(lotInventoryDO.getAttributeData3())); //sap client号
map.put("materialType", StringUtils.defaultString(lotInventoryDO.getAttributeData4()));//主辅料
map.put("materialCertificateId", StringUtils.defaultString(lotInventoryDO.getAttributeData1()));//物料凭证号
return map;
}
private Page pageLotInventoryListForShowInfo(Page page, Long itemRrn, Long warehouseRrn, String lotNumber) {
Page pageResult = lotInventoryManager.pageLotInventoryList(page, itemRrn, warehouseRrn, lotNumber);
List<LotInventoryDO> lotInventoryList = (List<LotInventoryDO>) pageResult.getResults();
List<Map<String, String>> result = new ArrayList<>();
for (LotInventoryDO lotInventoryDO : lotInventoryList) {
result.add(buildLotInventoryShowInfo(lotInventoryDO, lotInventoryDO.getTotalQuantity()));
}
pageResult.setResults(result);
return pageResult;
}
private String buildConversionTargetType(String sourceType, String targetType) {
String transId = referenceFileManager
.getReferenceDetailExchange(ReferenceDetailNames.TRANS_MATERIAL_TYPE, sourceType, targetType,
ReferenceFileConst.DATA_3_VALUE);
if (StringUtils.isNotBlank(transId)) {
return transId;
} else {
return sourceType + "->" + targetType;
}
}
}