及时库存排序查询,复核添加尺寸字段,物料导入提示错误

This commit is contained in:
秦鸿展
2026-05-09 10:21:49 +08:00
parent 815ffc2a26
commit b456fb45f7
8 changed files with 170 additions and 11 deletions
@@ -473,18 +473,36 @@ public class MaterialBaseInfoApplicationService {
fillClassifyTypeAndUnit(row);
Object result = systemServiceFeign.getPackList(null, row.getPackName(), row.getOrganizationId());
if (result == null) {
errors.append("").append(rowNum).append("行:包装规格查询无返回,请稍后重试或检查系统服务;");
continue;
}
Map<String, Object> resultMap = JSON.parseObject(JSONObject.toJSONString(result), new TypeReference<Map<String, Object>>() {});
List<Map<String, Object>> rowsPack = extractTableDataRows(resultMap);
Map<String, Object> stringObjectMap = rowsPack.get(0);
if (stringObjectMap != null){
String packCode = stringObjectMap.get("packCode") == null ? "" : String.valueOf(stringObjectMap.get("packCode"));
row.setPackCode(packCode);
String packId = stringObjectMap.get("packId") == null ? "" : String.valueOf(stringObjectMap.get("packId"));
row.setPackId(Long.valueOf(packId));
String unitName = stringObjectMap.get("unitName") == null ? "" : String.valueOf(stringObjectMap.get("unitName"));
row.setUnitCode("EA");
row.setUnitName(unitName);
if (CollectionUtils.isEmpty(rowsPack)) {
if (StringUtils.isNotBlank(row.getPackName())) {
errors.append("").append(rowNum).append("行:包装规格「").append(row.getPackName()).append("」不存在或未在系统中维护,请先在主数据维护该包装;");
} else {
errors.append("").append(rowNum).append("行:包装规格未填写,或系统中无匹配的包装数据,请填写正确的包装规格名称;");
}
continue;
}
Map<String, Object> stringObjectMap = rowsPack.get(0);
if (stringObjectMap == null) {
errors.append("").append(rowNum).append("行:包装规格查询结果为空,请检查包装主数据;");
continue;
}
String packCode = stringObjectMap.get("packCode") == null ? "" : String.valueOf(stringObjectMap.get("packCode"));
row.setPackCode(packCode);
String packId = stringObjectMap.get("packId") == null ? "" : String.valueOf(stringObjectMap.get("packId"));
if (StringUtils.isBlank(packId) || !StringUtils.isNumeric(packId)) {
errors.append("").append(rowNum).append("行:包装规格数据异常(缺少包装ID),请检查系统包装主数据;");
continue;
}
row.setPackId(Long.valueOf(packId));
String unitName = stringObjectMap.get("unitName") == null ? "" : String.valueOf(stringObjectMap.get("unitName"));
row.setUnitCode("EA");
row.setUnitName(unitName);
MaterialBaseInfoDO materialBaseInfoDO = new MaterialBaseInfoDO();
BeanUtils.copyProperties(row, materialBaseInfoDO);
@@ -496,7 +514,7 @@ public class MaterialBaseInfoApplicationService {
Long materialBaseInfoId = materialBaseInfoDO.getMaterialBaseInfoId();
//商品规则批次
if (StringUtils.isNotBlank(row.getBatchRuleNameImport())){
if (StringUtils.isNotBlank(row.getBatchRuleNameImport())) {
MaterialGoodsRuleDO materialGoodsRuleDO = new MaterialGoodsRuleDO();
Object batchListByName = systemServiceFeign.getBatchListByName(row.getBatchRuleNameImport(), row.getOrganizationId());
Map<String, Object> batchListByNameMap = JSON.parseObject(JSONObject.toJSONString(batchListByName), new TypeReference<Map<String, Object>>() {});
@@ -210,6 +210,7 @@ public class ReviewOrderDomainService {
d.setMaterialCode(line.getMaterialCode());
d.setMaterialName(line.getMaterialName());
d.setBarCode(line.getBarCode());
d.setSize(line.getSize());
d.setUnitCode(line.getUnitCode());
d.setUnitName(line.getUnitName());
d.setLotNo(line.getLotNo());
@@ -272,6 +273,9 @@ public class ReviewOrderDomainService {
if (!StringUtils.hasText(d.getBarCode())) {
d.setBarCode(outMd.getBarCode());
}
if (!StringUtils.hasText(d.getSize()) && StringUtils.hasText(outMd.getSize())) {
d.setSize(outMd.getSize());
}
if (d.getMaterialBaseInfoId() == null) {
d.setMaterialBaseInfoId(outMd.getMaterialBaseInfoId());
}
@@ -42,6 +42,10 @@ public class ReviewMaterialDetail extends BaseVOEntity {
private String barCode;
@ApiModelProperty("尺寸")
@TableField("SIZE")
private String size;
private String unitCode;
private String unitName;
@@ -49,6 +49,9 @@ public class ReviewMaterialDetailPO extends BaseVOEntity {
@ApiModelProperty("物料条码")
private String barCode;
@ApiModelProperty("尺寸")
private String size;
@ApiModelProperty("单位代码")
private String unitCode;
@@ -134,4 +134,24 @@ public class ImmediateInventoryPO {
@ApiModelProperty("LOT编号")
@Excel(name = "LOT编号")
private String lotNumber;
@ApiModelProperty("库存更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date inventoryUpdateTime;
@ApiModelProperty("拣货明细最近更新时间(本库存相关已拣货明细)")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date pickLastUpdateTime;
@ApiModelProperty("复核明细最近更新时间(本库存相关复核条件内明细)")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date checkLastUpdateTime;
@ApiModelProperty("列表排序用时间(库存/拣货/复核三者最晚)")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date latestChangeTime;
}
@@ -1,8 +1,11 @@
package com.mhd.wms.interfaces.facadeApi.statementStatistics;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mhd.common.core.constant.HttpStatus;
import com.mhd.common.core.utils.PageUtils;
import com.mhd.common.core.web.page.PageDomain;
import com.mhd.common.core.web.page.TableSupport;
import com.mhd.common.core.web.page.TableDataInfo;
import com.mhd.wms.application.service.statementStatistics.StatementStatisticsService;
import com.mhd.wms.domain.statementStatistics.po.ImmediateInventoryPO;
@@ -100,6 +103,18 @@ public class StatementStatisticsApi {
PageUtils.startPage();
}
/**
* 即时库存分页不注入 PageHelper orderBy保证仅使用 SQL 中的倒序时间由晚到早
*/
private void startPageImmediateInventory()
{
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
Boolean reasonable = pageDomain.getReasonable();
PageHelper.startPage(pageNum, pageSize, "").setReasonable(reasonable);
}
/**
* 响应请求分页数据
*/
@@ -540,6 +540,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="topOrganizationId" column="top_organization_id" />
<result property="inOrderNumber" column="in_order_number" />
<result property="lotNumber" column="lot_number" />
<result property="inventoryUpdateTime" column="inventory_update_time" />
<result property="pickLastUpdateTime" column="pick_last_update_time" />
<result property="checkLastUpdateTime" column="check_last_update_time" />
<result property="latestChangeTime" column="latest_change_time" />
</resultMap>
<select id="queryImmediateInventoryList" parameterType="com.mhd.wms.domain.statementStatistics.todo.ImmediateInventoryDO"
resultMap="queryImmediateInventoryListResult">
@@ -653,7 +657,66 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.organization_name,
a.top_organization_id,
a.batch_number,
a.in_order_number,a.lot_number
a.in_order_number,
a.lot_number,
a.update_time inventory_update_time,
(
SELECT MAX(c.update_time)
FROM picking_material_detail c
LEFT JOIN picking_order d ON c.picking_order_number = d.PICKING_ORDER_NUMBER
left join STOCK_OUT_ORDER e ON d.ORDER_NUMBER = e.OUT_ORDER_NUMBER
WHERE
c.del_flag = 1 and d.STATUS = 3 and e.STATUS = 7
AND d.warehouse_id = a.warehouse_id
AND (a.shipper_id IS NULL OR d.shipper_id = a.shipper_id)
AND c.material_base_info_id = a.material_base_info_id
AND c.MATERIAL_INVENTORY_ID = a.MATERIAL_INVENTORY_ID
) pick_last_update_time,
(
SELECT MAX(c.update_time)
FROM OUT_MATERIAL_DETAIL c
LEFT JOIN STOCK_OUT_ORDER d ON c.OUT_ORDER_NUMBER = d.OUT_ORDER_NUMBER
LEFT JOIN HANDOVER_TASK_ORDER e ON d.OUT_ORDER_NUMBER = e.ORDER_NUMBER
WHERE
d.CHECK_STATUS in (2,3) and e.STATUS = 1 and d.STATUS in (8,12)
AND d.DEL_FLAG = 1
AND c.DEL_FLAG = 1
and e.del_flag = 1
AND d.warehouse_id = a.warehouse_id
AND (a.shipper_id IS NULL OR d.shipper_id = a.shipper_id)
AND c.material_base_info_id = a.material_base_info_id
AND c.MATERIAL_INVENTORY_ID = a.MATERIAL_INVENTORY_ID
) check_last_update_time,
GREATEST(
IFNULL(a.update_time, '1970-01-01 00:00:00'),
IFNULL((
SELECT MAX(c.update_time)
FROM picking_material_detail c
LEFT JOIN picking_order d ON c.picking_order_number = d.PICKING_ORDER_NUMBER
left join STOCK_OUT_ORDER e ON d.ORDER_NUMBER = e.OUT_ORDER_NUMBER
WHERE
c.del_flag = 1 and d.STATUS = 3 and e.STATUS = 7
AND d.warehouse_id = a.warehouse_id
AND (a.shipper_id IS NULL OR d.shipper_id = a.shipper_id)
AND c.material_base_info_id = a.material_base_info_id
AND c.MATERIAL_INVENTORY_ID = a.MATERIAL_INVENTORY_ID
), '1970-01-01 00:00:00'),
IFNULL((
SELECT MAX(c.update_time)
FROM OUT_MATERIAL_DETAIL c
LEFT JOIN STOCK_OUT_ORDER d ON c.OUT_ORDER_NUMBER = d.OUT_ORDER_NUMBER
LEFT JOIN HANDOVER_TASK_ORDER e ON d.OUT_ORDER_NUMBER = e.ORDER_NUMBER
WHERE
d.CHECK_STATUS in (2,3) and e.STATUS = 1 and d.STATUS in (8,12)
AND d.DEL_FLAG = 1
AND c.DEL_FLAG = 1
and e.del_flag = 1
AND d.warehouse_id = a.warehouse_id
AND (a.shipper_id IS NULL OR d.shipper_id = a.shipper_id)
AND c.material_base_info_id = a.material_base_info_id
AND c.MATERIAL_INVENTORY_ID = a.MATERIAL_INVENTORY_ID
), '1970-01-01 00:00:00')
) latest_change_time
FROM
material_inventory a
left join material_base_info b on a.material_base_info_id=b.material_base_info_id
@@ -925,6 +988,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="freezeQuantityEnd != null ">
and a.freeze_quantity &lt; #{freezeQuantityEnd}
</if>
ORDER BY GREATEST(
IFNULL(a.update_time, '1970-01-01 00:00:00'),
IFNULL((
SELECT MAX(c.update_time)
FROM picking_material_detail c
LEFT JOIN picking_order d ON c.picking_order_number = d.PICKING_ORDER_NUMBER
left join STOCK_OUT_ORDER e ON d.ORDER_NUMBER = e.OUT_ORDER_NUMBER
WHERE
c.del_flag = 1 and d.STATUS = 3 and e.STATUS = 7
AND d.warehouse_id = a.warehouse_id
AND (a.shipper_id IS NULL OR d.shipper_id = a.shipper_id)
AND c.material_base_info_id = a.material_base_info_id
AND c.MATERIAL_INVENTORY_ID = a.MATERIAL_INVENTORY_ID
), '1970-01-01 00:00:00'),
IFNULL((
SELECT MAX(c.update_time)
FROM OUT_MATERIAL_DETAIL c
LEFT JOIN STOCK_OUT_ORDER d ON c.OUT_ORDER_NUMBER = d.OUT_ORDER_NUMBER
LEFT JOIN HANDOVER_TASK_ORDER e ON d.OUT_ORDER_NUMBER = e.ORDER_NUMBER
WHERE
d.CHECK_STATUS in (2,3) and e.STATUS = 1 and d.STATUS in (8,12)
AND d.DEL_FLAG = 1
AND c.DEL_FLAG = 1
and e.del_flag = 1
AND d.warehouse_id = a.warehouse_id
AND (a.shipper_id IS NULL OR d.shipper_id = a.shipper_id)
AND c.material_base_info_id = a.material_base_info_id
AND c.MATERIAL_INVENTORY_ID = a.MATERIAL_INVENTORY_ID
), '1970-01-01 00:00:00')
) DESC, a.material_inventory_id DESC
</select>
<select id="selectOneByWhere" parameterType="com.mhd.wms.domain.statementStatistics.todo.ImmediateInventoryDO"
@@ -48,6 +48,7 @@
<result property="materialCode" column="material_code"/>
<result property="materialName" column="material_name"/>
<result property="barCode" column="bar_code"/>
<result property="size" column="SIZE"/>
<result property="unitCode" column="unit_code"/>
<result property="unitName" column="unit_name"/>
<result property="pendingReviewQty" column="pending_review_qty"/>
@@ -229,6 +230,7 @@
d.material_code,
d.material_name,
d.bar_code,
d.SIZE,
d.unit_code,
d.unit_name,
d.pending_review_qty,