Browse Source

feat(wcs): 新增立库空托盘类型管理功能

- 在PalletData实体中增加stationCode字段
- 新增三个数据库操作接口:查询立库空托盘、根据家族获取托盘类型、修改托盘类型
- 实现对应的XML映射SQL逻辑
- 新增EmptyPalletTypeController控制器提供REST接口
- 支持分页查询立库内空托盘列表
- 提供根据托盘家族获取可用托盘类型的接口
- 实现修改托盘类型的业务逻辑
- 注释掉SOIssueNotifyOrderMaterialListDetailMapper中的task_ref条件限制
master
常熟吴彦祖 1 month ago
parent
commit
b3656098f3
  1. 128
      src/main/java/com/gaotao/modules/automatedWarehouse/controller/EmptyPalletTypeController.java
  2. 29
      src/main/java/com/gaotao/modules/warehouse/dao/PalletMapper.java
  3. 6
      src/main/java/com/gaotao/modules/warehouse/entity/PalletData.java
  4. 2
      src/main/resources/mapper/notify/SOIssueNotifyOrderMaterialListDetailMapper.xml
  5. 69
      src/main/resources/mapper/warehouse/PalletMapper.xml

128
src/main/java/com/gaotao/modules/automatedWarehouse/controller/EmptyPalletTypeController.java

@ -0,0 +1,128 @@
package com.gaotao.modules.automatedWarehouse.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.common.utils.R;
import com.gaotao.modules.base.entity.PalletType;
import com.gaotao.modules.sys.controller.AbstractController;
import com.gaotao.modules.warehouse.dao.PalletMapper;
import com.gaotao.modules.warehouse.entity.PalletData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* @Description 立库内空托盘类型修改Controller - rqrq
*
* <p><b>功能说明</b></p>
* <ul>
* <li>查询立库内的空托盘wcs_location不为空且empty_flag='Y'</li>
* <li>根据pallet_family获取可选的托盘类型</li>
* <li>修改托盘的pallet_type</li>
* </ul>
*
* @Author rqrq
* @Date 2025/12/11
*/
@Slf4j
@RestController
@RequestMapping("/wcsSystem/emptyPalletType")
public class EmptyPalletTypeController extends AbstractController {
@Autowired
private PalletMapper palletMapper;
/**
* @Description 查询立库内空托盘列表 - rqrq
* @param data 查询条件
* @return R
* @author rqrq
*/
@PostMapping(value="/list")
@ResponseBody
public R list(@RequestBody PalletData data) throws Exception {
log.info("开始查询立库内空托盘列表 - rqrq");
// 参数校验 - rqrq
if (!StringUtils.hasText(data.getSite())) {
throw new RuntimeException("工厂编码不能为空");
}
// 设置分页参数 - rqrq
int pageNum = data.getPage() != null ? data.getPage() : 1;
int pageSize = data.getLimit() != null ? data.getLimit() : 20;
// 查询立库内空托盘 - rqrq
IPage<PalletData> pageResult = palletMapper.selectEmptyPalletsInWarehouse(
new Page<>(pageNum, pageSize),
data
);
PageUtils pageUtils = new PageUtils(pageResult);
log.info("查询立库内空托盘列表完成 - rqrq,共{}条", pageResult.getTotal());
return R.ok().put("page", pageUtils);
}
/**
* @Description 根据pallet_family获取可选的托盘类型列表 - rqrq
* @param params 参数site, palletFamily
* @return R
* @author rqrq
*/
@PostMapping(value="/getPalletTypes")
@ResponseBody
public R getPalletTypes(@RequestBody Map<String, Object> params) throws Exception {
log.info("开始获取托盘类型列表 - rqrq");
String site = (String) params.get("site");
String palletFamily = (String) params.get("palletFamily");
// 参数校验 - rqrq
if (!StringUtils.hasText(site) || !StringUtils.hasText(palletFamily)) {
throw new RuntimeException("参数不能为空");
}
// 查询托盘类型 - rqrq
List<PalletType> rows = palletMapper.getPalletTypesByFamily(site, palletFamily);
log.info("获取托盘类型列表完成 - rqrq,共{}条", rows.size());
return R.ok().put("rows", rows);
}
/**
* @Description 修改托盘类型 - rqrq
* @param params 参数site, palletId, palletType
* @return R
* @author rqrq
*/
@PostMapping(value="/updateType")
@ResponseBody
public R updateType(@RequestBody Map<String, Object> params) throws Exception {
log.info("开始修改托盘类型 - rqrq");
String site = (String) params.get("site");
String palletId = (String) params.get("palletId");
String palletType = (String) params.get("palletType");
// 参数校验 - rqrq
if (!StringUtils.hasText(site) || !StringUtils.hasText(palletId) || !StringUtils.hasText(palletType)) {
throw new RuntimeException("参数不能为空");
}
// 获取当前用户 - rqrq
String username = getUser() != null ? getUser().getUsername() : "SYSTEM";
// 修改托盘类型 - rqrq
palletMapper.updatePalletType(site, palletId, palletType, username);
log.info("修改托盘类型完成 - rqrq,palletId={},newType={}", palletId, palletType);
return R.ok();
}
}

29
src/main/java/com/gaotao/modules/warehouse/dao/PalletMapper.java

@ -90,4 +90,33 @@ public interface PalletMapper extends BaseMapper<Pallet> {
*/
void batchInsertPallet(@Param("list") List<Pallet> palletList);
/**
* @Description 查询立库内空托盘列表 - rqrq
* @param page 分页参数
* @param queryDto 查询条件
* @return 空托盘列表
* @author rqrq
*/
IPage<PalletData> selectEmptyPalletsInWarehouse(IPage<PalletData> page, @Param("query") PalletData queryDto);
/**
* @Description 根据pallet_family获取可选的托盘类型列表 - rqrq
* @param site 工厂编码
* @param palletFamily 托盘大分类
* @return 托盘类型列表
* @author rqrq
*/
List<com.gaotao.modules.base.entity.PalletType> getPalletTypesByFamily(@Param("site") String site, @Param("palletFamily") String palletFamily);
/**
* @Description 修改托盘类型 - rqrq
* @param site 工厂编码
* @param palletId 托盘ID
* @param palletType 托盘类型
* @param updatedBy 更新人
* @author rqrq
*/
void updatePalletType(@Param("site") String site, @Param("palletId") String palletId,
@Param("palletType") String palletType, @Param("updatedBy") String updatedBy);
}

6
src/main/java/com/gaotao/modules/warehouse/entity/PalletData.java

@ -80,4 +80,10 @@ public class PalletData extends Pallet {
*/
@TableField(exist = false)
private Integer limit;
/**
* 所在站点编码关联agv_station表- rqrq
*/
@TableField(exist = false)
private String stationCode;
}

2
src/main/resources/mapper/notify/SOIssueNotifyOrderMaterialListDetailMapper.xml

@ -9,7 +9,7 @@
SET out_wcs_flag = 'Y'
WHERE site = #{site}
AND serialNo = #{serialNo}
AND task_ref = #{taskRef}
<!-- AND task_ref = #{taskRef} 立库这个数据可能不传-->
</update>
</mapper>

69
src/main/resources/mapper/warehouse/PalletMapper.xml

@ -234,4 +234,73 @@
</foreach>
</insert>
<!-- rqrq - 查询立库内空托盘列表(wcs_location不为空且empty_flag='Y') -->
<select id="selectEmptyPalletsInWarehouse" resultType="PalletData">
SELECT
p.id,
p.site,
p.pallet_id AS palletId,
p.pallet_type AS palletType,
p.pallet_family AS palletFamily,
p.calling_flag AS callingFlag,
p.location_code AS locationCode,
p.wcs_location AS wcsLocation,
p.empty_flag AS emptyFlag,
p.status,
p.remark,
p.auto_sort AS autoSort,
p.sore_type AS soreType,
pt.type_desc AS typeDesc,
pf.pallet_family_desc AS palletFamilyDesc,
s.station_code AS stationCode
FROM pallet p WITH (NOLOCK)
LEFT JOIN pallet_type pt WITH (NOLOCK) ON p.site = pt.site AND p.pallet_type = pt.pallet_type
LEFT JOIN pallet_family pf WITH (NOLOCK) ON p.site = pf.site AND p.pallet_family = pf.pallet_family
LEFT JOIN agv_station s WITH (NOLOCK) ON p.location_code = s.station_code
WHERE p.site = #{query.site}
AND p.wcs_location IS NOT NULL
AND p.empty_flag = 'Y'
<if test="query.palletId != null and query.palletId != ''">
AND p.pallet_id LIKE '%' + #{query.palletId} + '%'
</if>
<if test="query.palletType != null and query.palletType != ''">
AND p.pallet_type = #{query.palletType}
</if>
<if test="query.palletFamily != null and query.palletFamily != ''">
AND p.pallet_family = #{query.palletFamily}
</if>
ORDER BY p.pallet_id
</select>
<!-- rqrq - 根据pallet_family获取可选的托盘类型列表 -->
<select id="getPalletTypesByFamily" resultType="com.gaotao.modules.base.entity.PalletType">
SELECT
site,
pallet_type AS palletType,
type_desc AS typeDesc,
active,
remark,
pallet_family AS palletFamily,
wcs_pallet_type AS wcsPalletType,
wcs_base_pallet_type AS wcsBasePalletType,
wcs_auto_sort AS wcsAutoSort,
wcs_sore_type AS wcsSoreType,
max_layer AS maxLayer
FROM pallet_type WITH (NOLOCK)
WHERE site = #{site}
AND pallet_family = #{palletFamily}
AND active = 'Y'
ORDER BY pallet_type
</select>
<!-- rqrq - 修改托盘类型 -->
<update id="updatePalletType">
UPDATE pallet WITH (ROWLOCK)
SET pallet_type = #{palletType},
updated_by = #{updatedBy},
updated_time = GETDATE()
WHERE site = #{site}
AND pallet_id = #{palletId}
</update>
</mapper>
Loading…
Cancel
Save