chen.lin
23 小时以前 bb7dd1f513149ecd2887895c807861fdd06a43f6
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -8,12 +8,16 @@
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.utils.LocUtils;
import com.vincent.rsf.server.common.constant.Constants;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.manager.controller.dto.ExistDto;
import com.vincent.rsf.server.manager.controller.dto.OrderOutItemDto;
import com.vincent.rsf.server.manager.controller.params.*;
import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.entity.Matnr;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.mapper.AsnOrderMapper;
import com.vincent.rsf.server.manager.mapper.LocItemMapper;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.utils.LocManageUtil;
import com.vincent.rsf.server.manager.utils.OptimalAlgorithmUtil;
@@ -83,7 +87,71 @@
    private WaveOrderRelaServiceImpl waveOrderRelaService;
    @Autowired
    private TaskItemService taskItemService;
    @Autowired
    private LocItemMapper locItemMapper;
    @Override
    public PageParam<Matnr, BaseParam> pageMatnrForOutStock(PageParam<Matnr, BaseParam> pageParam, Map<String, Object> params) {
        PageParam<Matnr, BaseParam> page = matnrService.getMatnrPage(pageParam, params);
        List<Matnr> records = page.getRecords();
        if (records == null || records.isEmpty()) {
            return page;
        }
        List<Long> matnrIds = records.stream().map(Matnr::getId).collect(Collectors.toList());
        String locUseStatus = params.get("locUseStatus") != null ? params.get("locUseStatus").toString() : null;
        List<Map<String, Object>> stockList = locItemMapper.listStockByMatnrIds(matnrIds, locUseStatus);
        Map<Long, Double> stockQtyMap = new HashMap<>();
        Map<Long, String> locStatusDescMap = new HashMap<>();
        Map<Long, String> locCodesMap = new HashMap<>();
        for (Map<String, Object> row : stockList) {
            Long matnrId = getLong(row, "matnrId", "matnrid");
            if (matnrId == null) continue;
            Object qty = getAny(row, "stockQty", "stockqty");
            double v = qty instanceof Number ? ((Number) qty).doubleValue() : 0d;
            stockQtyMap.put(matnrId, v);
            String locCodes = getStr(row, "locCodes", "loccodes");
            if (locCodes != null && !locCodes.isEmpty()) {
                locCodesMap.put(matnrId, locCodes);
            }
            String locStatuses = getStr(row, "locStatuses", "locstatuses");
            if (locStatuses != null && !locStatuses.isEmpty()) {
                String desc = Arrays.stream(locStatuses.split(","))
                        .map(String::trim)
                        .map(LocStsType::getDescByType)
                        .collect(Collectors.joining(","));
                locStatusDescMap.put(matnrId, desc);
            } else if (locUseStatus != null && !locUseStatus.isEmpty()) {
                locStatusDescMap.put(matnrId, LocStsType.getDescByType(locUseStatus));
            }
        }
        for (Matnr record : records) {
            record.setStockQty(stockQtyMap.getOrDefault(record.getId(), 0d));
            record.setLocUseStatus$(locStatusDescMap.get(record.getId()));
            record.setLocCodes$(locCodesMap.get(record.getId()));
        }
        return page;
    }
    private static Long getLong(Map<String, Object> map, String... keys) {
        Object v = getAny(map, keys);
        if (v == null) return null;
        if (v instanceof Long) return (Long) v;
        if (v instanceof Number) return ((Number) v).longValue();
        try { return Long.parseLong(v.toString()); } catch (NumberFormatException e) { return null; }
    }
    private static String getStr(Map<String, Object> map, String... keys) {
        Object v = getAny(map, keys);
        return v != null ? v.toString() : null;
    }
    private static Object getAny(Map<String, Object> map, String... keys) {
        for (String key : keys) {
            Object v = map.get(key);
            if (v != null) return v;
        }
        return null;
    }
    /**
     * @param