diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StorageController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StorageController.java new file mode 100644 index 00000000..c690ce92 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StorageController.java @@ -0,0 +1,97 @@ +package com.nflg.wms.admin.controller; + +import com.nflg.wms.admin.service.StorageControllerService; +import com.nflg.wms.common.pojo.ApiResult; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.qo.EnableQO; +import com.nflg.wms.common.pojo.qo.StorageAddQO; +import com.nflg.wms.common.pojo.qo.StorageSearchQO; +import com.nflg.wms.common.pojo.qo.StorageUpdateQO; +import com.nflg.wms.common.pojo.vo.StorageVO; +import com.nflg.wms.starter.BaseController; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +/** + * 物料存储管理 + */ +@RestController +@RequestMapping("/storage") +public class StorageController extends BaseController { + + @Resource + private StorageControllerService storageControllerService; + + /** + * 新增 + */ + @PostMapping("add") + public ApiResult add(@Valid @RequestBody StorageAddQO request){ + storageControllerService.add(request); + return ApiResult.success(); + } + + /** + * 更新 + */ + @PostMapping("update") + public ApiResult update(@Valid @RequestBody StorageUpdateQO request){ + storageControllerService.update(request); + return ApiResult.success(); + } + + /** + * 删除 + */ + @PostMapping("delete") + public ApiResult delete(@Valid @NotNull Long id){ + storageControllerService.delete(id); + return ApiResult.success(); + } + + /** + * 启用/禁用 + * @param request 请求参数 + */ + @PostMapping("/enable") + public ApiResult enable(@Valid @RequestBody EnableQO request){ + storageControllerService.enable(request); + return ApiResult.success(); + } + + /** + * 搜索 + * @param request 搜索参数 + */ + @PostMapping("search") + public ApiResult> search(@Valid @RequestBody StorageSearchQO request){ + return ApiResult.success(storageControllerService.search(request)); + } + + /** + * 导入 + * @param file 文件 + */ + @Transactional + @PostMapping("import") + public ApiResult importFromExcel(HttpServletResponse response, @RequestParam(value = "file") MultipartFile file) throws IOException { + return storageControllerService.importFromExcel(response,file); + } + + /** + * 导出选中的数据,为空时导出模版 + * @param ids 选中的id集合 + */ + @PostMapping("export") + public void exportSelect(HttpServletResponse response,@RequestBody List ids) throws Exception { + storageControllerService.exportSelect(response,ids); + } +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java new file mode 100644 index 00000000..fa8eb515 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java @@ -0,0 +1,204 @@ +package com.nflg.wms.admin.service; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.pojo.ApiResult; +import com.nflg.wms.common.pojo.dto.StorageExcelExportDTO; +import com.nflg.wms.common.pojo.dto.StorageExcelImportDTO; +import com.nflg.wms.common.pojo.qo.EnableQO; +import com.nflg.wms.common.pojo.qo.StorageAddQO; +import com.nflg.wms.common.pojo.qo.StorageSearchQO; +import com.nflg.wms.common.pojo.qo.StorageUpdateQO; +import com.nflg.wms.common.pojo.vo.StorageVO; +import com.nflg.wms.common.util.DateTimeUtil; +import com.nflg.wms.common.util.EecExcelUtil; +import com.nflg.wms.common.util.UserUtil; +import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.WmsBin; +import com.nflg.wms.repository.entity.WmsMaterial; +import com.nflg.wms.repository.entity.WmsStorage; +import com.nflg.wms.repository.entity.WmsStorageBin; +import com.nflg.wms.repository.service.IWmsBinService; +import com.nflg.wms.repository.service.IWmsMaterialService; +import com.nflg.wms.repository.service.IWmsStorageBinService; +import com.nflg.wms.repository.service.IWmsStorageService; +import com.nflg.wms.starter.service.FileUploadService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import org.ttzero.excel.entity.ListSheet; +import org.ttzero.excel.entity.Workbook; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Component +public class StorageControllerService { + + @Resource + private IWmsStorageService storageService; + + @Resource + private IWmsStorageBinService storageBinService; + + @Resource + private FileUploadService fileUploadService; + + @Resource + private IWmsMaterialService materialService; + + @Resource + private IWmsBinService binService; + + @Transactional + public void add(@Valid StorageAddQO request) { + WmsStorage storage = Convert.convert(WmsStorage.class, request); + storage.setCreateBy(UserUtil.getUserName()); + storage.setCreateTime(LocalDateTime.now()); + storageService.add(storage); + storageBinService.add(storage.getId(), request.getBinIds()); + } + + @Transactional + public void update(@Valid StorageUpdateQO request) { + WmsStorage storage = new WmsStorage() + .setId(request.getId()) + .setEnable(request.getEnable()) + .setRemark(request.getRemark()) + .setWarehouseId(request.getWarehouseId()) + .setUpdateBy(UserUtil.getUserName()) + .setUpdateTime(LocalDateTime.now()); + storageService.update(storage); + storageBinService.add(storage.getId(), request.getBinIds()); + } + + @Transactional + public void delete(@Valid @NotNull Long id) { + storageService.delete(id); + storageBinService.deleteByStorageId(id); + } + + public void enable(@Valid EnableQO request) { + storageService.enable(request); + } + + public IPage search(@Valid StorageSearchQO request) { + return storageService.search(request); + } + + public ApiResult importFromExcel(HttpServletResponse response, MultipartFile file) throws IOException { + List data = EecExcelUtil.getExcelContext(file.getInputStream(), StorageExcelImportDTO.class); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(data)).throwMessage("导入文件内容为空"); + if (updateCheckAndImport(data)) { + return ApiResult.success(); + } else { + try(ByteArrayOutputStream osOut = new ByteArrayOutputStream()) { + new Workbook() + .addSheet(new ListSheet<>(data)) + .writeTo(osOut); + try(ByteArrayInputStream isIn = new ByteArrayInputStream(osOut.toByteArray())) { + return ApiResult.error(STATE.DataNoCheckPass, "导入文件失败",fileUploadService.upload("temp/" + DateTimeUtil.format(LocalDate.now(),"yyyyMMdd")+"/"+ IdUtil.fastUUID() + ".xlsx", isIn)); + } + }catch (Exception e){ + return ApiResult.error(STATE.BusinessError, "保存文件出错"); + } + } + } + + @Transactional + public boolean updateCheckAndImport(List data) { + List storages = new ArrayList<>(); + List storageBinAll = new ArrayList<>(); + for (StorageExcelImportDTO dto : data) { + WmsStorage storage = new WmsStorage(); + List storageBins=new ArrayList<>(); + StringBuilder sb = new StringBuilder(); + if (StrUtil.isBlank(dto.getMaterialNo())) { + sb.append("物料编号不能为空;"); + } else { + WmsMaterial material = materialService.lambdaQuery().eq(WmsMaterial::getNo, dto.getMaterialNo()).one(); + if (Objects.isNull(material)) { + sb.append("物料编号无效;"); + } else { + storage = storageService.lambdaQuery().eq(WmsStorage::getMaterialId, material.getId()).one(); + if (Objects.isNull(storage)) { + storage = new WmsStorage() + .setId(IdUtil.getSnowflakeNextId()) + .setEnable(true) + .setMaterialId(material.getId()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()); + }else { + storage.setUpdateBy(UserUtil.getUserName()); + storage.setUpdateTime(LocalDateTime.now()); + } + } + } + if (StrUtil.isBlank(dto.getBinNos())) { + sb.append("储位编号不能为空;"); + } else { + List binNos = StrUtil.split(dto.getBinNos(), ","); + List bins = binService.lambdaQuery().in(WmsBin::getNo, binNos).list(); + List bs = bins.stream().map(WmsBin::getNo).toList(); + binNos.removeAll(bs); + if (CollectionUtil.isNotEmpty(binNos)) { + sb.append(StrUtil.join(";", binNos)); + }else { + WmsStorage finalStorage = storage; + storageBins = bins.stream().map(bin -> new WmsStorageBin() + .setStorageId(finalStorage.getId()) + .setBinId(bin.getId())).toList(); + } + } + storage.setRemark(dto.getRemark()); + dto.setError(sb.toString()); + storages.add(storage); + storageBinAll.addAll(storageBins); + } + if (data.stream().noneMatch(it -> StrUtil.isNotBlank(it.getError()))) { + storageService.saveOrUpdateBatch(storages); + storageBinService.remove(new LambdaQueryWrapper() + .in(WmsStorageBin::getStorageId, storages.stream().map(WmsStorage::getId).toList())); + storageBinService.saveBatch(storageBinAll); + return true; + } + return false; + } + + public void exportSelect(HttpServletResponse response, List ids) throws IOException { + List storageVOS = CollectionUtil.isNotEmpty(ids) ? storageService.getList(ids) : new ArrayList<>(); + List datas = storageVOS.stream().map(bin -> Convert.convert(StorageExcelExportDTO.class, bin)).collect(Collectors.toList()); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("储位导出.xlsx", StandardCharsets.UTF_8)); + if (CollectionUtil.isEmpty(datas)) { + datas.add(new StorageExcelExportDTO() + .setMaterialNo("(必填)物料编号") + .setWarehouseNo("(必填)库位编号") + .setBinNos("(必填)储位编号") + .setRemark("备注信息,此行为提示信息,导入时请删除")); + } + new Workbook() + .addSheet(new ListSheet<>(datas)) + .writeTo(response.getOutputStream()); + } +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelExportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelExportDTO.java new file mode 100644 index 00000000..63b52d80 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelExportDTO.java @@ -0,0 +1,34 @@ +package com.nflg.wms.common.pojo.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.ttzero.excel.annotation.ExcelColumn; + +@Data +@Accessors(chain = true) +public class StorageExcelExportDTO { + + /** + * 物料编号 + */ + @ExcelColumn("物料编号") + private String materialNo; + + /** + * 库位编号 + */ + @ExcelColumn("库位编号") + private String warehouseNo; + + /** + * 储位编号 + */ + @ExcelColumn("储位编号") + private String binNos; + + /** + * 备注 + */ + @ExcelColumn("备注") + private String remark; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelImportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelImportDTO.java new file mode 100644 index 00000000..65da5877 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelImportDTO.java @@ -0,0 +1,32 @@ +package com.nflg.wms.common.pojo.dto; + +import lombok.Data; +import org.ttzero.excel.annotation.ExcelColumn; + +@Data +public class StorageExcelImportDTO { + + /** + * 物料编号 + */ + @ExcelColumn("*物料编号") + private String materialNo; + + /** + * 储位编号 + */ + @ExcelColumn("*储位编号") + private String binNos; + + /** + * 备注 + */ + @ExcelColumn("备注") + private String remark; + + /** + * 错误信息 + */ + @ExcelColumn("错误信息") + private String error; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageAddQO.java new file mode 100644 index 00000000..38cd1549 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageAddQO.java @@ -0,0 +1,43 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@Accessors(chain = true) +public class StorageAddQO { + + /** + * 物料id + */ + @NotBlank + private Long materialId; + + /** + * 仓库ID + */ + @NotNull + private Long warehouseId; + + /** + * 储位id列表 + */ + @NotEmpty + private List binIds; + + /** + * 是否启用 + */ + @NotNull + private Boolean enable; + + /** + * 备注 + */ + private String remark; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageSearchQO.java new file mode 100644 index 00000000..4b53a1e1 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageSearchQO.java @@ -0,0 +1,22 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +@Data +public class StorageSearchQO extends PageQO{ + + /** + * 仓库编码 + */ + private String warehouseNo; + + /** + * 储位编码 + */ + private String binNo; + + /** + * 物料编码 + */ + private String materialNo; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageUpdateQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageUpdateQO.java new file mode 100644 index 00000000..7aa4bbb8 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageUpdateQO.java @@ -0,0 +1,11 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class StorageUpdateQO extends StorageAddQO{ + + @NotNull + private Long id; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/StorageVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/StorageVO.java new file mode 100644 index 00000000..a4a2ff84 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/StorageVO.java @@ -0,0 +1,71 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class StorageVO { + + private Long id; + + /** + * 物料编码 + */ + private String materialNo; + + /** + * 物料描述 + */ + private String materialDescribe; + + /** + * 仓库编码 + */ + private String warehouseNo; + + /** + * 储位编码 + */ + private String binNos; + + /** + * 是否启用 + */ + private Boolean enable; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新人 + */ + private String updateBy; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * SAP同步状态,0:未导入;1:导入成功;2:导入失败 + */ + private Short sapState; + + /** + * SAP同步错误信息 + */ + private String sapError; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStorage.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStorage.java new file mode 100644 index 00000000..6667f8b8 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStorage.java @@ -0,0 +1,83 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 物料存储 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("wms_storage") +public class WmsStorage implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 物料id + */ + private Long materialId; + + /** + * 是否启用 + */ + private Boolean enable; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新人 + */ + private String updateBy; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * SAP同步状态,0:未导入;1:导入成功;2:导入失败 + */ + private Short sapState; + + /** + * SAP同步错误信息 + */ + private String sapError; + + /** + * 仓库ID + */ + private Long warehouseId; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStorageBin.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStorageBin.java new file mode 100644 index 00000000..af9f9b1e --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStorageBin.java @@ -0,0 +1,42 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + *

+ * + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("wms_storage_bin") +public class WmsStorageBin implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 物料存储id + */ + private Long storageId; + + /** + * 储位id + */ + private Long binId; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageBinMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageBinMapper.java new file mode 100644 index 00000000..497df13d --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageBinMapper.java @@ -0,0 +1,16 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.wms.repository.entity.WmsStorageBin; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface WmsStorageBinMapper extends BaseMapper { + +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageMapper.java new file mode 100644 index 00000000..5e2b8c38 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageMapper.java @@ -0,0 +1,25 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nflg.wms.common.pojo.qo.StorageSearchQO; +import com.nflg.wms.common.pojo.vo.StorageVO; +import com.nflg.wms.repository.entity.WmsStorage; + +import java.util.List; + +/** + *

+ * 物料存储 Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface WmsStorageMapper extends BaseMapper { + + IPage search(StorageSearchQO request, Page objectPage); + + List getList(List ids); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageBinService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageBinService.java new file mode 100644 index 00000000..bae13226 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageBinService.java @@ -0,0 +1,24 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.repository.entity.WmsStorageBin; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface IWmsStorageBinService extends IService { + + void add(Long storageId, @NotEmpty List binIds); + + void deleteByStorageId(@Valid @NotNull Long id); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageService.java new file mode 100644 index 00000000..d5d18df3 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageService.java @@ -0,0 +1,35 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.common.pojo.qo.EnableQO; +import com.nflg.wms.common.pojo.qo.StorageSearchQO; +import com.nflg.wms.common.pojo.vo.StorageVO; +import com.nflg.wms.repository.entity.WmsStorage; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +import java.util.List; + +/** + *

+ * 物料存储 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface IWmsStorageService extends IService { + + void add(WmsStorage storage); + + void update(WmsStorage storage); + + void delete(@Valid @NotNull Long id); + + void enable(@Valid EnableQO request); + + IPage search(@Valid StorageSearchQO request); + + List getList(List ids); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageBinServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageBinServiceImpl.java new file mode 100644 index 00000000..c8225b7f --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageBinServiceImpl.java @@ -0,0 +1,39 @@ +package com.nflg.wms.repository.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.repository.entity.WmsStorageBin; +import com.nflg.wms.repository.mapper.WmsStorageBinMapper; +import com.nflg.wms.repository.service.IWmsStorageBinService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Service +public class WmsStorageBinServiceImpl extends ServiceImpl implements IWmsStorageBinService { + + @Transactional + @Override + public void add(Long storageId, List binIds) { + deleteByStorageId(storageId); + saveBatch(binIds.stream().map(bId -> new WmsStorageBin() + .setStorageId(storageId) + .setBinId(bId)).collect(Collectors.toList()) + ); + } + + @Override + public void deleteByStorageId(Long id) { + remove(new LambdaQueryWrapper().eq(WmsStorageBin::getStorageId, id)); + } +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageServiceImpl.java new file mode 100644 index 00000000..d88e258f --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageServiceImpl.java @@ -0,0 +1,87 @@ +package com.nflg.wms.repository.service.impl; + +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.nflg.wms.common.pojo.qo.EnableQO; +import com.nflg.wms.common.pojo.qo.StorageSearchQO; +import com.nflg.wms.common.pojo.vo.StorageVO; +import com.nflg.wms.common.util.UserUtil; +import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.WmsStorage; +import com.nflg.wms.repository.mapper.WmsStorageMapper; +import com.nflg.wms.repository.service.IAuditLogService; +import com.nflg.wms.repository.service.IWmsStorageService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +/** + *

+ * 物料存储 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Service +public class WmsStorageServiceImpl extends ServiceImpl implements IWmsStorageService { + + @Resource + private IAuditLogService auditLogService; + + @Transactional + @Override + public void add(WmsStorage storage) { + VUtil.trueThrowBusinessError(lambdaQuery().eq(WmsStorage::getMaterialId, storage.getMaterialId()).exists()) + .throwMessage("该物料已存在"); + save(storage); + auditLogService.addInsert(WmsStorage.class, storage, storage.getCreateBy()); + } + + @Transactional + @Override + public void update(WmsStorage storage) { + WmsStorage old = getById(storage.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(old)).throwMessage("数据不存在"); + updateById(storage); + WmsStorage newInfo= getById(storage.getId()); + auditLogService.addUpdate(WmsStorage.class, old, newInfo, storage.getUpdateBy()); + } + + @Override + public void delete(Long id) { + WmsStorage old = getById(id); + VUtil.trueThrowBusinessError(Objects.isNull(old)).throwMessage("数据不存在"); + removeById(id); + auditLogService.addDelete(WmsStorage.class, old, UserUtil.getUserName()); + } + + @Override + public void enable(EnableQO request) { + WmsStorage old = getById(request.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(old)).throwMessage("储位不存在"); + lambdaUpdate() + .set(WmsStorage::getEnable, request.getEnable()) + .set(WmsStorage::getUpdateBy, UserUtil.getUserName()) + .set(WmsStorage::getUpdateTime, LocalDateTime.now()) + .eq(WmsStorage::getId, request.getId()) + .update(); + WmsStorage newInfo = getById(request.getId()); + auditLogService.addUpdate(WmsStorage.class, old, newInfo, UserUtil.getUserName()); + } + + @Override + public IPage search(StorageSearchQO request) { + return baseMapper.search(request,new Page<>(request.getPage(),request.getPageSize())); + } + + @Override + public List getList(List ids) { + return baseMapper.getList(ids); + } +} diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsStorageBinMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsStorageBinMapper.xml new file mode 100644 index 00000000..bf15a3d0 --- /dev/null +++ b/nflg-wms-repository/src/main/resources/mapper/WmsStorageBinMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsStorageMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsStorageMapper.xml new file mode 100644 index 00000000..0184a950 --- /dev/null +++ b/nflg-wms-repository/src/main/resources/mapper/WmsStorageMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + diff --git a/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java b/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java index 63295219..356b0280 100644 --- a/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java +++ b/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java @@ -33,7 +33,7 @@ public class CodeGeneratorTest { ) .strategyConfig(builder -> { builder - .addInclude("wms_bin") //只生成指定表 + .addInclude("wms_storage_bin") //只生成指定表 .entityBuilder().idType(IdType.ASSIGN_ID) .enableLombok() .enableChainModel()