From 6e8ba5ffc4b487c0cfff87626e311df2462b15c6 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Thu, 18 Sep 2025 10:51:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=98=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PalletController.java | 165 ++++++++++++++++++ .../modules/warehouse/dao/PalletMapper.java | 34 ++++ .../modules/warehouse/entity/Pallet.java | 51 ++++++ .../warehouse/entity/dto/PalletQueryDto.java | 24 +++ .../modules/warehouse/entity/vo/PalletVo.java | 41 +++++ .../warehouse/service/PalletService.java | 63 +++++++ .../service/impl/PalletServiceImpl.java | 137 +++++++++++++++ .../mapper/warehouse/PalletMapper.xml | 76 ++++++++ 8 files changed, 591 insertions(+) create mode 100644 src/main/java/com/gaotao/modules/warehouse/controller/PalletController.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/dao/PalletMapper.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/entity/Pallet.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/entity/dto/PalletQueryDto.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/entity/vo/PalletVo.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/service/PalletService.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/service/impl/PalletServiceImpl.java create mode 100644 src/main/resources/mapper/warehouse/PalletMapper.xml diff --git a/src/main/java/com/gaotao/modules/warehouse/controller/PalletController.java b/src/main/java/com/gaotao/modules/warehouse/controller/PalletController.java new file mode 100644 index 0000000..ab8219a --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/controller/PalletController.java @@ -0,0 +1,165 @@ +package com.gaotao.modules.warehouse.controller; + +import com.gaotao.common.utils.PageUtils; +import com.gaotao.common.utils.R; +import com.gaotao.modules.factory.service.AccessSiteService; +import com.gaotao.modules.warehouse.entity.Pallet; +import com.gaotao.modules.warehouse.entity.dto.PalletQueryDto; +import com.gaotao.modules.warehouse.entity.vo.PalletVo; +import com.gaotao.modules.warehouse.service.PalletService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 托盘管理控制器 + */ +@RestController +@RequestMapping("/warehouse/pallet") +public class PalletController { + + @Autowired + private PalletService palletService; + + @Autowired + private AccessSiteService accessSiteService; + + /** + * 获取托盘列表 + */ + @PostMapping("/list") + public R list(@RequestBody PalletQueryDto queryDto) { + PageUtils page = palletService.queryPage(queryDto); + return R.ok().put("page", page); + } + + /** + * 根据托盘ID获取托盘信息 + */ + @PostMapping("/info") + public R info(@RequestBody Pallet pallet) { + PalletVo palletVo = palletService.getPalletByPalletId(pallet.getPalletId()); + return R.ok().put("pallet", palletVo); + } + + /** + * 根据主键ID获取托盘信息 + */ + @GetMapping("/info/{id}") + public R info(@PathVariable("id") Long id) { + Pallet pallet = palletService.getById(id); + return R.ok().put("pallet", pallet); + } + + /** + * 保存托盘信息 + */ + @PostMapping("/save") + public R save(@RequestBody Pallet pallet) { + try { + palletService.savePallet(pallet); + return R.ok("托盘信息保存成功"); + } catch (Exception e) { + return R.error(e.getMessage()); + } + } + + /** + * 修改托盘信息 + */ + @PostMapping("/update") + public R update(@RequestBody Pallet pallet) { + try { + palletService.updatePallet(pallet); + return R.ok("托盘信息修改成功"); + } catch (Exception e) { + return R.error(e.getMessage()); + } + } + + /** + * 删除托盘 + */ + @PostMapping("/delete") + public R delete(@RequestBody Long[] ids) { + try { + palletService.deletePalletBatch(ids); + return R.ok("托盘删除成功"); + } catch (Exception e) { + return R.error(e.getMessage()); + } + } + + /** + * 检查托盘ID是否存在 + */ + @PostMapping("/checkPalletId") + public R checkPalletId(@RequestBody Pallet pallet) { + boolean exists = palletService.checkPalletIdExists(pallet.getPalletId(), pallet.getId()); + return R.ok().put("exists", exists); + } + + /** + * 获取托盘状态选项 + */ + @GetMapping("/statusOptions") + public R getStatusOptions() { + return R.ok().put("options", Arrays.asList( + new StatusOption("AVAILABLE", "可用"), + new StatusOption("OCCUPIED", "使用中"), + new StatusOption("DAMAGED", "损坏"), + new StatusOption("DISABLED", "禁用") + )); + } + + /** + * 获取用户授权站点列表 + */ + @PostMapping("/getUserAuthorizedSites") + public R getUserAuthorizedSites(@RequestBody Map params) { + String userName = (String) params.get("userName"); + + if (userName == null || userName.trim().isEmpty()) { + return R.error("用户名不能为空"); + } + + try { + List> siteList = accessSiteService.getUserAuthorizedSites(userName.trim()); + return R.ok().put("data", siteList); + } catch (Exception e) { + return R.error("获取站点列表失败:" + e.getMessage()); + } + } + + /** + * 状态选项内部类 + */ + public static class StatusOption { + private String value; + private String label; + + public StatusOption(String value, String label) { + this.value = value; + this.label = label; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + } +} diff --git a/src/main/java/com/gaotao/modules/warehouse/dao/PalletMapper.java b/src/main/java/com/gaotao/modules/warehouse/dao/PalletMapper.java new file mode 100644 index 0000000..0c11d95 --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/dao/PalletMapper.java @@ -0,0 +1,34 @@ +package com.gaotao.modules.warehouse.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.gaotao.modules.warehouse.entity.Pallet; +import com.gaotao.modules.warehouse.entity.dto.PalletQueryDto; +import com.gaotao.modules.warehouse.entity.vo.PalletVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 托盘信息Mapper接口 + */ +@Mapper +public interface PalletMapper extends BaseMapper { + + /** + * 查询托盘列表 + * @param page 分页参数 + * @param queryDto 查询条件 + * @return 托盘列表 + */ + IPage selectPalletList(IPage page, @Param("query") PalletQueryDto queryDto); + + /** + * 根据托盘ID查询托盘信息 + * @param palletId 托盘ID + * @return 托盘信息 + */ + PalletVo selectPalletByPalletId(@Param("palletId") String palletId); +} diff --git a/src/main/java/com/gaotao/modules/warehouse/entity/Pallet.java b/src/main/java/com/gaotao/modules/warehouse/entity/Pallet.java new file mode 100644 index 0000000..58bf12a --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/entity/Pallet.java @@ -0,0 +1,51 @@ +package com.gaotao.modules.warehouse.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 托盘信息实体类 + */ +@Data +@TableName("pallet") +public class Pallet { + + @TableId(type = IdType.AUTO) + private Long id; // 自增主键(内部用) + + private String site; // 站点 + + private String palletId; // 固定身份ID(唯一,不可重复,不随变更修改) + + private String palletType; // 托盘类型(如木质、塑料、铁制) + + private String palletSize; // 托盘尺寸(如 1200x1000) + + private BigDecimal maxLoad; // 最大承重(kg) + + private String status; // 托盘状态: AVAILABLE=可用, OCCUPIED=使用中, DAMAGED=损坏, DISABLED=禁用 + + private String locationCode; // 所在库位编码(可选) + + private String remark; // 备注信息 + + private String createdBy; // 创建人 + + @TableField(fill = FieldFill.INSERT) + private Date createdTime; // 创建时间 + + private String updatedBy; // 最后修改人 + + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updatedTime; // 最后修改时间 + + // 分页参数 + @TableField(exist = false) + private int page = 1; + + @TableField(exist = false) + private int size = 20; +} diff --git a/src/main/java/com/gaotao/modules/warehouse/entity/dto/PalletQueryDto.java b/src/main/java/com/gaotao/modules/warehouse/entity/dto/PalletQueryDto.java new file mode 100644 index 0000000..f079200 --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/entity/dto/PalletQueryDto.java @@ -0,0 +1,24 @@ +package com.gaotao.modules.warehouse.entity.dto; + +import lombok.Data; + +/** + * 托盘查询DTO + */ +@Data +public class PalletQueryDto { + + private String site; // 站点 + + private String palletId; // 托盘ID + + private String palletType; // 托盘类型 + + private String status; // 托盘状态 + + private String locationCode; // 所在库位编码 + + private Integer page = 1; // 页码 + + private Integer limit = 20; // 每页数量 +} diff --git a/src/main/java/com/gaotao/modules/warehouse/entity/vo/PalletVo.java b/src/main/java/com/gaotao/modules/warehouse/entity/vo/PalletVo.java new file mode 100644 index 0000000..5ccadab --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/entity/vo/PalletVo.java @@ -0,0 +1,41 @@ +package com.gaotao.modules.warehouse.entity.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 托盘信息VO + */ +@Data +public class PalletVo { + + private Long id; // 主键ID + + private String site; // 站点 + + private String palletId; // 托盘ID + + private String palletType; // 托盘类型 + + private String palletSize; // 托盘尺寸 + + private BigDecimal maxLoad; // 最大承重(kg) + + private String status; // 托盘状态 + + private String statusText; // 状态文本 + + private String locationCode; // 所在库位编码 + + private String remark; // 备注信息 + + private String createdBy; // 创建人 + + private Date createdTime; // 创建时间 + + private String updatedBy; // 最后修改人 + + private Date updatedTime; // 最后修改时间 +} diff --git a/src/main/java/com/gaotao/modules/warehouse/service/PalletService.java b/src/main/java/com/gaotao/modules/warehouse/service/PalletService.java new file mode 100644 index 0000000..fe902bf --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/service/PalletService.java @@ -0,0 +1,63 @@ +package com.gaotao.modules.warehouse.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gaotao.common.utils.PageUtils; +import com.gaotao.modules.warehouse.entity.Pallet; +import com.gaotao.modules.warehouse.entity.dto.PalletQueryDto; +import com.gaotao.modules.warehouse.entity.vo.PalletVo; + +/** + * 托盘服务接口 + */ +public interface PalletService extends IService { + + /** + * 分页查询托盘列表 + * @param queryDto 查询条件 + * @return 分页结果 + */ + PageUtils queryPage(PalletQueryDto queryDto); + + /** + * 根据托盘ID查询托盘信息 + * @param palletId 托盘ID + * @return 托盘信息 + */ + PalletVo getPalletByPalletId(String palletId); + + /** + * 保存托盘信息 + * @param pallet 托盘信息 + * @return 是否成功 + */ + boolean savePallet(Pallet pallet); + + /** + * 更新托盘信息 + * @param pallet 托盘信息 + * @return 是否成功 + */ + boolean updatePallet(Pallet pallet); + + /** + * 删除托盘 + * @param id 主键ID + * @return 是否成功 + */ + boolean deletePallet(Long id); + + /** + * 批量删除托盘 + * @param ids 主键ID数组 + * @return 是否成功 + */ + boolean deletePalletBatch(Long[] ids); + + /** + * 检查托盘ID是否存在 + * @param palletId 托盘ID + * @param excludeId 排除的主键ID(编辑时使用) + * @return 是否存在 + */ + boolean checkPalletIdExists(String palletId, Long excludeId); +} diff --git a/src/main/java/com/gaotao/modules/warehouse/service/impl/PalletServiceImpl.java b/src/main/java/com/gaotao/modules/warehouse/service/impl/PalletServiceImpl.java new file mode 100644 index 0000000..78671e5 --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/service/impl/PalletServiceImpl.java @@ -0,0 +1,137 @@ +package com.gaotao.modules.warehouse.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gaotao.common.exception.XJException; +import com.gaotao.common.utils.PageUtils; +import com.gaotao.modules.trans.entity.TransNoControl; +import com.gaotao.modules.trans.service.TransNoControlService; +import com.gaotao.modules.warehouse.dao.PalletMapper; +import com.gaotao.modules.warehouse.entity.Pallet; +import com.gaotao.modules.warehouse.entity.dto.PalletQueryDto; +import com.gaotao.modules.warehouse.entity.vo.PalletVo; +import com.gaotao.modules.warehouse.service.PalletService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * 托盘服务实现类 + */ +@Service +public class PalletServiceImpl extends ServiceImpl implements PalletService { + + @Autowired + private PalletMapper palletMapper; + + @Autowired + private TransNoControlService transNoControlService; + + @Override + public PageUtils queryPage(PalletQueryDto queryDto) { + if (queryDto.getPage() == null) { + queryDto.setPage(1); + } + if (queryDto.getLimit() == null) { + queryDto.setLimit(20); + } + + IPage ipage = palletMapper.selectPalletList(new Page(queryDto.getPage(), queryDto.getLimit()), queryDto); + return new PageUtils(ipage); + } + + @Override + public PalletVo getPalletByPalletId(String palletId) { + if (!StringUtils.hasText(palletId)) { + return null; + } + return palletMapper.selectPalletByPalletId(palletId); + } + + @Override + @Transactional + public boolean savePallet(Pallet pallet) { + // 验证站点信息 + if (!StringUtils.hasText(pallet.getSite())) { + throw new XJException("站点信息不能为空"); + } + + // 如果托盘ID为空,则自动生成 + if (!StringUtils.hasText(pallet.getPalletId())) { + // 使用TransNoControlService生成托盘ID + TransNoControl palletNoControl = transNoControlService.getTransNo(pallet.getSite(), "PALLET", 8); + pallet.setPalletId(palletNoControl.getNewTransNo()); + } else { + // 如果手动指定了托盘ID,检查是否已存在 + if (checkPalletIdExists(pallet.getPalletId(), null)) { + throw new XJException("托盘ID [" + pallet.getPalletId() + "] 已存在"); + } + } + + // 设置默认值 + if (!StringUtils.hasText(pallet.getStatus())) { + pallet.setStatus("AVAILABLE"); + } + + pallet.setCreatedTime(new Date()); + return this.save(pallet); + } + + @Override + @Transactional + public boolean updatePallet(Pallet pallet) { + // 检查托盘ID是否已被其他记录使用 + if (checkPalletIdExists(pallet.getPalletId(), pallet.getId())) { + throw new XJException("托盘ID [" + pallet.getPalletId() + "] 已被其他记录使用"); + } + + pallet.setUpdatedTime(new Date()); + return this.updateById(pallet); + } + + @Override + @Transactional + public boolean deletePallet(Long id) { + if (id == null) { + throw new XJException("托盘ID不能为空"); + } + return this.removeById(id); + } + + @Override + @Transactional + public boolean deletePalletBatch(Long[] ids) { + if (ids == null || ids.length == 0) { + throw new XJException("请选择要删除的托盘"); + } + + for (Long id : ids) { + deletePallet(id); + } + return true; + } + + @Override + public boolean checkPalletIdExists(String palletId, Long excludeId) { + if (!StringUtils.hasText(palletId)) { + return false; + } + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("pallet_id", palletId); + // 由于使用真实删除,不需要检查is_deleted字段 + + if (excludeId != null) { + wrapper.ne("id", excludeId); + } + + return this.count(wrapper) > 0; + } +} diff --git a/src/main/resources/mapper/warehouse/PalletMapper.xml b/src/main/resources/mapper/warehouse/PalletMapper.xml new file mode 100644 index 0000000..3e26832 --- /dev/null +++ b/src/main/resources/mapper/warehouse/PalletMapper.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + +