Browse Source

2025-11-10

仓库盘点管理的盘点仓库、盘点库位、盘点物料改为多选
master
fengyuan_yang 7 months ago
parent
commit
a3dbbfc976
  1. 23
      src/main/java/com/gaotao/modules/warehouse/controller/CountingReportController.java
  2. 8
      src/main/java/com/gaotao/modules/warehouse/dao/CountingReportMapper.java
  3. 24
      src/main/java/com/gaotao/modules/warehouse/entity/CountingReport.java
  4. 8
      src/main/java/com/gaotao/modules/warehouse/service/CountingReportService.java
  5. 13
      src/main/java/com/gaotao/modules/warehouse/service/impl/CountingReportServiceImpl.java
  6. 80
      src/main/resources/mapper/warehouse/CountingReportMapper.xml

23
src/main/java/com/gaotao/modules/warehouse/controller/CountingReportController.java

@ -335,5 +335,28 @@ public class CountingReportController extends AbstractController {
return R.error("查询盘点单明细列表失败: " + e.getMessage());
}
}
/**
* 查询下拉选择数据仓库/货位/物料
*/
@PostMapping("/querySelectData")
public R querySelectData(@RequestBody Map<String, Object> params) {
try {
String sql = (String) params.get("sql");
if (sql == null || sql.trim().isEmpty()) {
return R.error("SQL不能为空");
}
List<Map<String, Object>> list = countingReportService.querySelectData(sql);
return R.ok()
.put("code", 0)
.put("msg", getLanguageMsg(SysMsgConstant.OBJECT_ID_200000))
.put("list", list);
} catch (Exception e) {
logger.error("查询下拉选择数据失败", e);
return R.error("查询下拉选择数据失败: " + e.getMessage());
}
}
}

8
src/main/java/com/gaotao/modules/warehouse/dao/CountingReportMapper.java

@ -191,6 +191,14 @@ public interface CountingReportMapper {
* @return 影响行数
*/
int saveDetail(CountingReportDetail detail);
/**
* 查询下拉选择数据执行SQL
*
* @param sql SQL语句
* @return 查询结果列表
*/
List<Map<String, Object>> querySelectData(@Param("sql") String sql);
}

24
src/main/java/com/gaotao/modules/warehouse/entity/CountingReport.java

@ -34,20 +34,35 @@ public class CountingReport implements Serializable {
private String checkDimension;
/**
* 盘点仓库ID当维度为"按仓库""按货位"时需填写
* 盘点仓库ID当维度为"按仓库""按货位"时需填写多个用逗号分隔
*/
private String warehouseId;
/**
* 盘点货位ID当维度为"按货位""按仓库"时需填写
* 盘点仓库名称多个用逗号分隔
*/
private String warehouseName;
/**
* 盘点货位ID当维度为"按货位""按仓库"时需填写多个用逗号分隔
*/
private String locationId;
/**
* 盘点物料ID当维度为"按物料""按仓库"时需填写
* 盘点货位名称多个用逗号分隔
*/
private String locationName;
/**
* 盘点物料ID当维度为"按物料""按仓库"时需填写多个用逗号分隔
*/
private String partNo;
/**
* 盘点物料名称多个用逗号分隔
*/
private String partDesc;
/**
* 计划盘点时间
*/
@ -89,9 +104,6 @@ public class CountingReport implements Serializable {
// 用于前端显示的字段
private String bu; // BU组合字段site_buNo
private String statusDesc; // 状态描述
private String warehouseDesc; // 仓库描述
private String locationDesc; // 货位描述
private String partDesc; // 物料描述
}

8
src/main/java/com/gaotao/modules/warehouse/service/CountingReportService.java

@ -120,6 +120,14 @@ public interface CountingReportService {
* @return 盘点任务单号
*/
String generateReportId(String site, String buNo, String type);
/**
* 查询下拉选择数据执行SQL
*
* @param sql SQL语句
* @return 查询结果列表
*/
List<Map<String, Object>> querySelectData(String sql);
}

13
src/main/java/com/gaotao/modules/warehouse/service/impl/CountingReportServiceImpl.java

@ -254,5 +254,18 @@ public class CountingReportServiceImpl implements CountingReportService {
throw new RuntimeException("生成盘点任务单号失败: " + e.getMessage(), e);
}
}
@Override
public List<Map<String, Object>> querySelectData(String sql) {
logger.info("查询下拉选择数据,SQL: {}", sql);
try {
List<Map<String, Object>> list = countingReportMapper.querySelectData(sql);
logger.info("查询下拉选择数据成功,记录数: {}", list != null ? list.size() : 0);
return list;
} catch (Exception e) {
logger.error("查询下拉选择数据失败,错误信息: {}", e.getMessage(), e);
throw new RuntimeException("查询下拉选择数据失败: " + e.getMessage(), e);
}
}
}

80
src/main/resources/mapper/warehouse/CountingReportMapper.xml

@ -47,11 +47,11 @@
cr.report_id AS reportId,
cr.check_dimension AS checkDimension,
cr.warehouse_id AS warehouseId,
w.warehouseName AS warehouseName,
cr.warehouse_name AS warehouseName,
cr.location_id AS locationId,
l.locationName AS locationName,
cr.location_name AS locationName,
cr.part_no AS partNo,
p.PartDescription AS partDesc,
cr.part_desc AS partDesc,
cr.plan_date AS planDate,
cr.create_by AS createBy,
cr.update_by AS updateBy,
@ -66,10 +66,7 @@
ELSE '未知'
END AS statusDesc,
cr.remark
FROM counting_report cr
LEFT JOIN warehouse w ON cr.site = w.site AND cr.warehouse_id = w.warehouseID and cr.bu_no = w.bu_no
LEFT JOIN location l ON cr.site = l.site AND cr.location_id = l.locationID and cr.bu_no = l.bu_no
LEFT JOIN part p ON cr.site = p.site AND cr.part_no = p.partNo
FROM counting_report cr WITH(NOLOCK)
WHERE cr.site IN (SELECT site FROM AccessSite WHERE UPPER(userID) = #{userName})
AND cr.bu_no IN (SELECT bu_no FROM AccessBu WHERE username = #{userName})
<if test="buNo != null and buNo != ''">
@ -82,13 +79,13 @@
AND cr.check_dimension = #{checkDimension}
</if>
<if test="warehouseId != null and warehouseId != ''">
AND cr.warehouse_id = #{warehouseId}
AND (cr.warehouse_id LIKE '%' + #{warehouseId} + '%' OR cr.warehouse_name LIKE '%' + #{warehouseId} + '%')
</if>
<if test="locationId != null and locationId != ''">
AND cr.location_id = #{locationId}
AND (cr.location_id LIKE '%' + #{locationId} + '%' OR cr.location_name LIKE '%' + #{locationId} + '%')
</if>
<if test="partNo != null and partNo != ''">
AND cr.part_no = #{partNo}
AND (cr.part_no LIKE '%' + #{partNo} + '%' OR cr.part_desc LIKE '%' + #{partNo} + '%')
</if>
<if test="status != null">
AND cr.status = #{status}
@ -105,7 +102,7 @@
<!-- 查询总记录数 -->
<select id="queryTotal" resultType="int">
SELECT COUNT(*)
FROM counting_report cr
FROM counting_report cr WITH(NOLOCK)
WHERE cr.site IN (SELECT site FROM AccessSite WHERE UPPER(userID) = #{userName})
AND cr.bu_no IN (SELECT bu_no FROM AccessBu WHERE username = #{userName})
<if test="buNo != null and buNo != ''">
@ -118,13 +115,13 @@
AND cr.check_dimension = #{checkDimension}
</if>
<if test="warehouseId != null and warehouseId != ''">
AND cr.warehouse_id = #{warehouseId}
AND (cr.warehouse_id LIKE '%' + #{warehouseId} + '%' OR cr.warehouse_name LIKE '%' + #{warehouseId} + '%')
</if>
<if test="locationId != null and locationId != ''">
AND cr.location_id = #{locationId}
AND (cr.location_id LIKE '%' + #{locationId} + '%' OR cr.location_name LIKE '%' + #{locationId} + '%')
</if>
<if test="partNo != null and partNo != ''">
AND cr.part_no = #{partNo}
AND (cr.part_no LIKE '%' + #{partNo} + '%' OR cr.part_desc LIKE '%' + #{partNo} + '%')
</if>
<if test="status != null">
AND cr.status = #{status}
@ -145,8 +142,11 @@
report_id,
check_dimension,
warehouse_id,
warehouse_name,
location_id,
location_name,
part_no,
part_desc,
plan_date,
create_by,
update_by,
@ -154,7 +154,7 @@
update_date,
status,
remark
FROM counting_report
FROM counting_report WITH(NOLOCK)
WHERE site = #{site}
AND bu_no = #{buNo}
AND report_id = #{reportId}
@ -168,8 +168,11 @@
report_id,
check_dimension,
warehouse_id,
warehouse_name,
location_id,
location_name,
part_no,
part_desc,
plan_date,
create_by,
update_by,
@ -183,8 +186,11 @@
#{reportId},
#{checkDimension},
#{warehouseId},
#{warehouseName},
#{locationId},
#{locationName},
#{partNo},
#{partDesc},
#{planDate},
#{createBy},
#{updateBy},
@ -201,8 +207,11 @@
SET
check_dimension = #{checkDimension},
warehouse_id = #{warehouseId},
warehouse_name = #{warehouseName},
location_id = #{locationId},
location_name = #{locationName},
part_no = #{partNo},
part_desc = #{partDesc},
plan_date = #{planDate},
update_by = #{updateBy},
update_date = GETDATE(),
@ -377,16 +386,51 @@
WHERE a.site = #{site}
AND a.bu_no = #{buNo}
<if test="warehouseId != null and warehouseId != ''">
AND a.warehouse_id = #{warehouseId}
<choose>
<when test="warehouseId.indexOf(',') > 0">
AND a.warehouse_id IN
<foreach collection="warehouseId.split(',')" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</when>
<otherwise>
AND a.warehouse_id = #{warehouseId}
</otherwise>
</choose>
</if>
<if test="locationId != null and locationId != ''">
AND a.location_id = #{locationId}
<choose>
<when test="locationId.indexOf(',') > 0">
AND a.location_id IN
<foreach collection="locationId.split(',')" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</when>
<otherwise>
AND a.location_id = #{locationId}
</otherwise>
</choose>
</if>
<if test="partNo != null and partNo != ''">
AND a.part_no = #{partNo}
<choose>
<when test="partNo.indexOf(',') > 0">
AND a.part_no IN
<foreach collection="partNo.split(',')" item="no" open="(" separator="," close=")">
#{no}
</foreach>
</when>
<otherwise>
AND a.part_no = #{partNo}
</otherwise>
</choose>
</if>
</select>
<!-- 查询下拉选择数据(执行SQL) -->
<select id="querySelectData" resultType="map">
${sql}
</select>
<!-- 生成盘点任务单号 -->
<select id="generateReportId" resultType="string" statementType="CALLABLE">
{call getSerialNo(#{site, mode=IN, jdbcType=VARCHAR},

Loading…
Cancel
Save