diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/MaterialController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/MaterialController.java new file mode 100644 index 00000000..de15d41e --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/MaterialController.java @@ -0,0 +1,73 @@ +package com.nflg.wms.admin.controller; + +import com.nflg.wms.admin.service.MaterialControllerService; +import com.nflg.wms.common.pojo.ApiResult; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.qo.MaterialAddQO; +import com.nflg.wms.common.pojo.qo.MaterialSearchQO; +import com.nflg.wms.common.pojo.qo.MaterialUpdateQO; +import com.nflg.wms.common.pojo.vo.MaterialVO; +import com.nflg.wms.starter.BaseController; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 图纸管理 + */ +@RestController +@RequestMapping("/material") +public class MaterialController extends BaseController { + + @Resource + private MaterialControllerService materialControllerService; + + /** + * 新增图纸 + */ + @PostMapping("add") + public ApiResult add(@Valid @RequestBody MaterialAddQO request){ + materialControllerService.add(request); + return ApiResult.success(); + } + + /** + * 更新图纸 + */ + @PostMapping("update") + public ApiResult update(@Valid @RequestBody MaterialUpdateQO request){ + materialControllerService.update(request); + return ApiResult.success(); + } + + /** + * 搜索图纸 + * @param request 搜索参数 + */ + @PostMapping("search") + public ApiResult> search(@Valid @RequestBody MaterialSearchQO request){ + return ApiResult.success(materialControllerService.search(request)); + } + + /** + * 获取图纸历史记录 + * @param no SAP料号 + */ + @GetMapping("/getHistory") + public ApiResult> getHistory(@Valid @RequestParam @NotBlank String no){ + return ApiResult.success(materialControllerService.getHistory(no)); + } + + /** + * 导出未设置物料清单 + */ + @PostMapping("export") + public void exportNotSet(HttpServletResponse response) throws Exception { + materialControllerService.exportNotSet(response); + } + +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java new file mode 100644 index 00000000..d0e73592 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java @@ -0,0 +1,80 @@ +package com.nflg.wms.admin.service; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.wms.common.pojo.dto.MaterialExcelExportDTO; +import com.nflg.wms.common.pojo.qo.MaterialAddQO; +import com.nflg.wms.common.pojo.qo.MaterialSearchQO; +import com.nflg.wms.common.pojo.qo.MaterialUpdateQO; +import com.nflg.wms.common.pojo.vo.MaterialVO; +import com.nflg.wms.common.util.UserUtil; +import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.Material; +import com.nflg.wms.repository.service.IMaterialService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.ttzero.excel.entity.ListSheet; +import org.ttzero.excel.entity.Workbook; + +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Component +public class MaterialControllerService { + + @Resource + private IMaterialService materialService; + + public void add(@Valid MaterialAddQO request) { + Material material = Convert.convert(Material.class, request); + material.setCreateBy(UserUtil.getUserName()); + material.setCreateTime(LocalDateTime.now()); + materialService.add(material); + } + + public void update(@Valid MaterialUpdateQO request) { + Material old = materialService.getById(request.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(old)).throwMessage("数据不存在!"); + Material material = Convert.convert(Material.class, request); + if (StrUtil.isNotBlank(old.getImage()) && Objects.nonNull(old.getWeight())) { + material.setVersion(old.getVersion() + 1); + material.setCreateBy(UserUtil.getUserName()); + material.setCreateTime(LocalDateTime.now()); + material.setId(null); + materialService.add(material); + }else { + material.setUpdateBy(UserUtil.getUserName()); + material.setUpdateTime(LocalDateTime.now()); + materialService.update(material); + } + } + + public IPage search(@Valid MaterialSearchQO request) { + return materialService.search(request); + } + + public List getHistory(@Valid @NotBlank String no) { + return materialService.getHistory(no); + } + + public void exportNotSet(HttpServletResponse response) throws IOException { + List materials = materialService.getNotSet(); + List datas = materials.stream().map(model -> Convert.convert(MaterialExcelExportDTO.class, model)).collect(Collectors.toList()); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("未设置物料清单.xlsx", StandardCharsets.UTF_8)); + new Workbook() + .addSheet(new ListSheet<>(datas).setRowHeight(100)) + .writeTo(response.getOutputStream()); + } +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/MaterialExcelExportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/MaterialExcelExportDTO.java new file mode 100644 index 00000000..a5b1478e --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/MaterialExcelExportDTO.java @@ -0,0 +1,73 @@ +package com.nflg.wms.common.pojo.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.ttzero.excel.annotation.ExcelColumn; +import org.ttzero.excel.annotation.MediaColumn; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class MaterialExcelExportDTO { + + /** + * SAP料号 + */ + @ExcelColumn("*SAP料号") + private String no; + + /** + * 物料描述 + */ + @ExcelColumn("*物料描述") + private String describe; + + /** + * 图片 + */ + @MediaColumn + private String image; + + /** + * 当前版本号 + */ + @ExcelColumn("当前版本号") + private Integer version; + + /** + * 重量 + */ + @ExcelColumn("重量") + private BigDecimal weight; + + /** + * 长度 + */ + @ExcelColumn("长度") + private BigDecimal length; + + /** + * 宽度 + */ + @ExcelColumn("宽度") + private BigDecimal width; + + /** + * 高度 + */ + @ExcelColumn("高度") + private BigDecimal height; + + /** + * 打包要求 + */ + @ExcelColumn("打包要求") + private String requirement; + + /** + * 备注 + */ + @ExcelColumn("备注") + private String remark; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialAddQO.java new file mode 100644 index 00000000..cc2c04a3 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialAddQO.java @@ -0,0 +1,62 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class MaterialAddQO { + + /** + * SAP料号 + */ + @NotBlank + private String no; + + /** + * 物料描述 + */ + @NotBlank + private String describe; + + /** + * 图片 + */ + @NotBlank + private String image; + + /** + * 重量 + */ + @NotBlank + private BigDecimal weight; + + /** + * 长度 + */ + @NotBlank + private BigDecimal length; + + /** + * 宽度 + */ + @NotBlank + private BigDecimal width; + + /** + * 高度 + */ + @NotBlank + private BigDecimal height; + + /** + * 备注 + */ + private String remark; + + /** + * 打包要求 + */ + private String requirement; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialSearchQO.java new file mode 100644 index 00000000..aa8cdd0d --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialSearchQO.java @@ -0,0 +1,17 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +@Data +public class MaterialSearchQO extends PageQO{ + + /** + * SAP料号 + */ + private String no; + + /** + * 物料描述 + */ + private String describe; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialUpdateQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialUpdateQO.java new file mode 100644 index 00000000..74fb6b65 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialUpdateQO.java @@ -0,0 +1,11 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class MaterialUpdateQO extends MaterialAddQO{ + + @NotNull + private Long id; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialVO.java new file mode 100644 index 00000000..1caf070e --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialVO.java @@ -0,0 +1,84 @@ +package com.nflg.wms.common.pojo.vo; + +import cn.hutool.core.util.StrUtil; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class MaterialVO { + + private Long id; + + /** + * SAP料号 + */ + private String no; + + /** + * 物料描述 + */ + private String describe; + + /** + * 图片 + */ + private String image; + + /** + * 图片类型 + */ + private String imageType; + /** + * 当前版本号 + */ + private Integer version; + /** + * 重量 + */ + private BigDecimal weight; + /** + * 长度 + */ + private BigDecimal length; + /** + * 宽度 + */ + private BigDecimal width; + /** + * 高度 + */ + private BigDecimal height; + /** + * 备注 + */ + private String remark; + /** + * 创建人 + */ + private String createBy; + /** + * 创建时间 + */ + private LocalDateTime createTime; + /** + * 最后更新人 + */ + private String updateBy; + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + /** + * 打包要求 + */ + private String requirement; + + public String getImageType(){ + if (StrUtil.isBlank(image)){ + return ""; + } + return image.substring(image.lastIndexOf(".")); + } +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/Material.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/Material.java new file mode 100644 index 00000000..dd483431 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/Material.java @@ -0,0 +1,102 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class Material implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * SAP料号 + */ + private String no; + + /** + * 物料描述 + */ + private String describe; + + /** + * 图片 + */ + private String image; + + /** + * 当前版本号 + */ + private Integer version; + + /** + * 重量 + */ + private BigDecimal weight; + + /** + * 长度 + */ + private BigDecimal length; + + /** + * 宽度 + */ + private BigDecimal width; + + /** + * 高度 + */ + private BigDecimal height; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新人 + */ + private String updateBy; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 打包要求 + */ + private String requirement; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/MaterialMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/MaterialMapper.java new file mode 100644 index 00000000..7bab9b1d --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/MaterialMapper.java @@ -0,0 +1,27 @@ +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.MaterialSearchQO; +import com.nflg.wms.common.pojo.vo.MaterialVO; +import com.nflg.wms.repository.entity.Material; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface MaterialMapper extends BaseMapper { + + IPage search(MaterialSearchQO request, Page objectPage); + + List getHistory(String no); + + List getNotSet(); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IMaterialService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IMaterialService.java new file mode 100644 index 00000000..a31d1d82 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IMaterialService.java @@ -0,0 +1,32 @@ +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.MaterialSearchQO; +import com.nflg.wms.common.pojo.vo.MaterialVO; +import com.nflg.wms.repository.entity.Material; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface IMaterialService extends IService { + + void add(Material material); + + void update(Material material); + + IPage search(@Valid MaterialSearchQO request); + + List getHistory(@Valid @NotBlank String no); + + List getNotSet(); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/MaterialServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/MaterialServiceImpl.java new file mode 100644 index 00000000..ac2b3c43 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/MaterialServiceImpl.java @@ -0,0 +1,63 @@ +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.MaterialSearchQO; +import com.nflg.wms.common.pojo.vo.MaterialVO; +import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.Material; +import com.nflg.wms.repository.mapper.MaterialMapper; +import com.nflg.wms.repository.service.IAuditLogService; +import com.nflg.wms.repository.service.IMaterialService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Service +public class MaterialServiceImpl extends ServiceImpl implements IMaterialService { + + @Resource + private IAuditLogService auditLogService; + + @Override + public void add(Material material) { + VUtil.trueThrowBusinessError(lambdaQuery().eq(Material::getNo, material.getNo()).exists()) + .throwMessage("SAP料号已存在"); + save(material); + auditLogService.addInsert(Material.class,material,material.getCreateBy()); + } + + @Override + public void update(Material material) { + Material old = getById(material.getId()); + material.setNo(null); + updateById(material); + Material newMaterial = getById(material.getId()); + auditLogService.addUpdate(Material.class, old, newMaterial, material.getUpdateBy()); + } + + @Override + public IPage search(MaterialSearchQO request) { + return baseMapper.search(request,new Page<>(request.getPage(),request.getPageSize())); + } + + @Override + public List getHistory(String no) { + return baseMapper.getHistory(no); + } + + @Override + public List getNotSet() { + return baseMapper.getNotSet(); + } +} diff --git a/nflg-wms-repository/src/main/resources/mapper/MaterialMapper.xml b/nflg-wms-repository/src/main/resources/mapper/MaterialMapper.xml new file mode 100644 index 00000000..2479ca39 --- /dev/null +++ b/nflg-wms-repository/src/main/resources/mapper/MaterialMapper.xml @@ -0,0 +1,33 @@ + + + + + + + + + + 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 970849e6..3cf55307 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("v_user_supplier") //只生成指定表 + .addInclude("material") //只生成指定表 .entityBuilder().idType(IdType.ASSIGN_ID) .enableLombok() .enableChainModel()