diff --git a/wms-module-system/src/main/java/top/wms/admin/material/mapper/MaterialInfoMapper.java b/wms-module-system/src/main/java/top/wms/admin/material/mapper/MaterialInfoMapper.java index 1d1b791..dd54d25 100644 --- a/wms-module-system/src/main/java/top/wms/admin/material/mapper/MaterialInfoMapper.java +++ b/wms-module-system/src/main/java/top/wms/admin/material/mapper/MaterialInfoMapper.java @@ -4,6 +4,8 @@ import top.continew.starter.data.mp.base.BaseMapper; import top.wms.admin.material.model.entity.MaterialInfoDO; import org.springframework.stereotype.Repository; +import java.util.List; + /** * 物料信息 Mapper * @@ -12,5 +14,6 @@ import org.springframework.stereotype.Repository; */ @Repository public interface MaterialInfoMapper extends BaseMapper { - + public int updateByName(List list); + public int updateByCode(List list); } diff --git a/wms-module-system/src/main/java/top/wms/admin/material/model/req/MaterialImportRowReq.java b/wms-module-system/src/main/java/top/wms/admin/material/model/req/MaterialImportRowReq.java new file mode 100644 index 0000000..1b76cc1 --- /dev/null +++ b/wms-module-system/src/main/java/top/wms/admin/material/model/req/MaterialImportRowReq.java @@ -0,0 +1,45 @@ +package top.wms.admin.material.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@Schema(description = "物料信息导入行数据") +public class MaterialImportRowReq implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + /** + * 物料名称 + */ + @Schema(description = "物料名称") + @NotBlank(message = "物料名称不能为空") + @Length(max = 255, message = "物料名称长度不能超过 {max} 个字符") + private String materialName; + + /** + * 物料编码 + */ + @Schema(description = "物料编码") + @NotBlank(message = "物料编码不能为空") + @Length(max = 255, message = "物料编码长度不能超过 {max} 个字符") + private String encoding; + + /** + * 物料单位重量(g) + */ + @Schema(description = "物料单位重量(g)") + private BigDecimal unitWeight; + + /* + * 物料规格 + * */ + @Schema(description = "物料规格") + private String materialSpec; +} diff --git a/wms-module-system/src/main/java/top/wms/admin/material/model/req/MaterialInfoImportReq.java b/wms-module-system/src/main/java/top/wms/admin/material/model/req/MaterialInfoImportReq.java new file mode 100644 index 0000000..2fc65c5 --- /dev/null +++ b/wms-module-system/src/main/java/top/wms/admin/material/model/req/MaterialInfoImportReq.java @@ -0,0 +1,47 @@ +package top.wms.admin.material.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import top.wms.admin.common.enums.DisEnableStatusEnum; +import top.wms.admin.system.enums.ImportPolicyEnum; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@Schema(description = "物料导入参数") +public class MaterialInfoImportReq implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 导入会话KEY + */ + @Schema(description = "导入会话KEY", example = "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed") + @NotBlank(message = "导入已过期,请重新上传") + private String importKey; + + /** + * 物料名称重复策略 + */ + @Schema(description = "物料名称重复策略", example = "1") + @NotNull(message = "物料名称重复策略不能为空") + private ImportPolicyEnum duplicateName; + + /** + * 重复编码策略 + */ + @Schema(description = "重复编码策略", example = "1") + @NotNull(message = "重复编码策略不能为空") + private ImportPolicyEnum duplicateCode; + + /** + * 默认状态 + */ + @Schema(description = "默认状态", example = "1") + private DisEnableStatusEnum defaultStatus; + +} diff --git a/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialImportParseResp.java b/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialImportParseResp.java new file mode 100644 index 0000000..c2f0cf9 --- /dev/null +++ b/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialImportParseResp.java @@ -0,0 +1,55 @@ +package top.wms.admin.material.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 物料导入解析结果 + * + * @author kils + * @since 2024/6/18 14:37 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "用户导入解析结果") +public class MaterialImportParseResp implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 导入会话 Key + */ + @Schema(description = "导入会话Key", example = "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed") + private String importKey; + + /** + * 总计行数 + */ + @Schema(description = "总计行数", example = "100") + private Integer totalRows; + + /** + * 有效行数 + */ + @Schema(description = "有效行数", example = "100") + private Integer validRows; + + /** + * 重复物料名行数 + */ + @Schema(description = "重复物料名行数", example = "100") + private Integer duplicateNameRows; + + /** + * 重复物料编码行数 + */ + @Schema(description = "重复物料编码行数", example = "100") + private Integer duplicateCodeRows; +} diff --git a/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialInfoImportResp.java b/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialInfoImportResp.java new file mode 100644 index 0000000..0ac98e8 --- /dev/null +++ b/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialInfoImportResp.java @@ -0,0 +1,35 @@ +package top.wms.admin.material.model.resp; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Schema(description = "物料信息导入结果") +@AllArgsConstructor +@NoArgsConstructor +public class MaterialInfoImportResp implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 总计行数 + */ + @Schema(description = "总计行数", example = "100") + private Integer totalRows; + + /** + * 新增行数 + */ + @Schema(description = "新增行数", example = "100") + private Integer insertRows; + + /** + * 修改行数 + */ + @Schema(description = "修改行数", example = "100") + private Integer updateRows; +} diff --git a/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialInfoResp.java b/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialInfoResp.java index bb572ef..910ceba 100644 --- a/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialInfoResp.java +++ b/wms-module-system/src/main/java/top/wms/admin/material/model/resp/MaterialInfoResp.java @@ -49,7 +49,7 @@ public class MaterialInfoResp extends BaseDetailResp { */ @Schema(description = "物料规格") @ExcelProperty(value = "物料规格") - private Double materialSpec; + private String materialSpec; /** * 物料照片地址 diff --git a/wms-module-system/src/main/java/top/wms/admin/material/service/MaterialInfoService.java b/wms-module-system/src/main/java/top/wms/admin/material/service/MaterialInfoService.java index 1841a66..1c394cf 100644 --- a/wms-module-system/src/main/java/top/wms/admin/material/service/MaterialInfoService.java +++ b/wms-module-system/src/main/java/top/wms/admin/material/service/MaterialInfoService.java @@ -1,10 +1,20 @@ package top.wms.admin.material.service; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.multipart.MultipartFile; import top.continew.starter.extension.crud.service.BaseService; import top.wms.admin.material.model.entity.MaterialInfoDO; import top.wms.admin.material.model.query.MaterialInfoQuery; +import top.wms.admin.material.model.req.MaterialInfoImportReq; import top.wms.admin.material.model.req.MaterialInfoReq; +import top.wms.admin.material.model.resp.MaterialImportParseResp; +import top.wms.admin.material.model.resp.MaterialInfoImportResp; import top.wms.admin.material.model.resp.MaterialInfoResp; +import top.wms.admin.system.model.req.user.UserImportReq; +import top.wms.admin.system.model.resp.user.UserImportParseResp; +import top.wms.admin.system.model.resp.user.UserImportResp; + +import java.io.IOException; /** * 物料信息业务接口 @@ -13,5 +23,34 @@ import top.wms.admin.material.model.resp.MaterialInfoResp; * @since 2026/02/27 14:19 */ public interface MaterialInfoService extends BaseService { + + /* + * + * 根据编码查询物料信息 + * */ public MaterialInfoDO getMaterialInfoByCode(String code); + + /** + * 下载导入模板 + * + * @param response 响应对象 + * @throws IOException / + */ + void downloadImportTemplate(HttpServletResponse response) throws IOException; + + /** + * 解析导入数据 + * + * @param file 导入文件 + * @return 解析结果 + */ + MaterialImportParseResp parseImport(MultipartFile file); + + /** + * 导入数据 + * + * @param req 导入信息 + * @return 导入结果 + */ + MaterialInfoImportResp importMaterial(MaterialInfoImportReq req); } diff --git a/wms-module-system/src/main/java/top/wms/admin/material/service/impl/MaterialInfoServiceImpl.java b/wms-module-system/src/main/java/top/wms/admin/material/service/impl/MaterialInfoServiceImpl.java index d0119a0..930d09f 100644 --- a/wms-module-system/src/main/java/top/wms/admin/material/service/impl/MaterialInfoServiceImpl.java +++ b/wms-module-system/src/main/java/top/wms/admin/material/service/impl/MaterialInfoServiceImpl.java @@ -1,20 +1,71 @@ package top.wms.admin.material.service.impl; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.lang.UUID; +import cn.hutool.core.math.MathUtil; +import cn.hutool.core.util.*; +import cn.hutool.extra.validation.ValidationUtil; +import cn.hutool.http.ContentType; +import cn.hutool.json.JSONUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import me.ahoo.cosid.IdGenerator; +import me.ahoo.cosid.provider.DefaultIdGeneratorProvider; +import net.dreamlu.mica.core.result.R; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import top.continew.starter.cache.redisson.util.RedisUtils; +import top.continew.starter.core.exception.BusinessException; +import top.continew.starter.core.util.SpringUtils; +import top.continew.starter.core.validation.CheckUtils; import top.continew.starter.extension.crud.service.BaseServiceImpl; +import top.continew.starter.web.util.FileUploadUtils; +import top.wms.admin.common.constant.CacheConstants; +import top.wms.admin.common.context.UserContextHolder; +import top.wms.admin.common.enums.GenderEnum; +import top.wms.admin.common.util.SecureUtils; import top.wms.admin.material.mapper.MaterialInfoMapper; import top.wms.admin.material.model.entity.MaterialInfoDO; import top.wms.admin.material.model.query.MaterialInfoQuery; +import top.wms.admin.material.model.req.MaterialImportRowReq; +import top.wms.admin.material.model.req.MaterialInfoImportReq; import top.wms.admin.material.model.req.MaterialInfoReq; +import top.wms.admin.material.model.resp.MaterialImportParseResp; +import top.wms.admin.material.model.resp.MaterialInfoImportResp; import top.wms.admin.material.model.resp.MaterialInfoResp; import top.wms.admin.material.service.MaterialInfoService; +import top.wms.admin.system.model.entity.DeptDO; +import top.wms.admin.system.model.entity.RoleDO; +import top.wms.admin.system.model.entity.UserDO; +import top.wms.admin.system.model.entity.UserRoleDO; +import top.wms.admin.system.model.req.user.UserImportReq; +import top.wms.admin.system.model.req.user.UserImportRowReq; +import top.wms.admin.system.model.resp.user.UserImportParseResp; +import top.wms.admin.system.model.resp.user.UserImportResp; + +import java.io.IOException; +import java.math.BigDecimal; +import java.sql.Time; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static top.wms.admin.system.enums.ImportPolicyEnum.*; +import static top.wms.admin.system.enums.ImportPolicyEnum.SKIP; /** * 物料信息业务实现 @@ -34,4 +85,241 @@ public class MaterialInfoServiceImpl extends BaseServiceImpl importRowList; + // 读取表格数据 + try { + importRowList = EasyExcel.read(file.getInputStream()) + .head(MaterialImportRowReq.class) + .sheet() + .headRowNumber(1) + .doReadSync(); + } catch (Exception e) { + log.error("物料信息导入数据文件解析异常:{}", e); + throw new BusinessException("数据文件解析异常"); + } + // 总计行数 + materialImportResp.setTotalRows(importRowList.size()); + CheckUtils.throwIfEmpty(importRowList, "数据文件格式错误"); + // 有效行数:过滤无效(同名物料)数据 + List validRowList = this.filterImportData(importRowList); + materialImportResp.setValidRows(validRowList.size()); + CheckUtils.throwIfEmpty(validRowList, "数据文件格式错误"); + + // 检测表格内数据是否合法 + Set seenCode = new HashSet<>(); + boolean hasDuplicateEncoding = validRowList.stream() + .map(MaterialImportRowReq::getEncoding) + .anyMatch(encoding -> encoding != null && !seenCode.add(encoding)); + CheckUtils.throwIf(hasDuplicateEncoding, "存在重复物料编码,请检测数据"); + + // 查询重复用户 + materialImportResp + .setDuplicateNameRows(countExistByField(validRowList, MaterialImportRowReq::getMaterialName, MaterialInfoDO::getMaterialName, false)); + // 查询重复邮箱 + materialImportResp + .setDuplicateCodeRows(countExistByField(validRowList, MaterialImportRowReq::getEncoding, MaterialInfoDO::getEncoding, false)); + // 设置导入会话并缓存数据,有效期10分钟 + String importKey = UUID.fastUUID().toString(true); + RedisUtils.set(CacheConstants.DATA_IMPORT_KEY + importKey, JSONUtil.toJsonStr(validRowList), Duration + .ofMinutes(10)); + materialImportResp.setImportKey(importKey); + return materialImportResp; + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public MaterialInfoImportResp importMaterial(MaterialInfoImportReq req) { + // 校验导入会话是否过期 + List importMaterialList; + try { + String data = RedisUtils.get(CacheConstants.DATA_IMPORT_KEY + req.getImportKey()); + importMaterialList = JSONUtil.toList(data, MaterialImportRowReq.class); + CheckUtils.throwIf(CollUtil.isEmpty(importMaterialList), "导入已过期,请重新上传"); + } catch (Exception e) { + log.error("导入异常:", e); + throw new BusinessException("导入已过期,请重新上传"); + } + // 已存在数据查询 + List existName = listExistByField(importMaterialList, MaterialImportRowReq::getMaterialName, MaterialInfoDO::getMaterialName); + List existCode = listExistByField(importMaterialList, MaterialImportRowReq::getEncoding, MaterialInfoDO::getEncoding); + CheckUtils + .throwIf(isExitImportMaterial(req, importMaterialList, existName, existCode), "数据不符合导入策略,已退出导入"); + // 批量操作数据库集合 + List insertList = new ArrayList<>(); + List updateByNameList = new ArrayList<>(); + List updateByCodeList = new ArrayList<>(); + // ID生成器 +// IdGenerator idGenerator = DefaultIdGeneratorProvider.INSTANCE.getShare(); + for (MaterialImportRowReq row : importMaterialList) { + if (isSkipMaterialImport(req, row, existName, existCode)) { + // 按规则跳过该行 + continue; + } + MaterialInfoDO materialDO = BeanUtil.toBeanIgnoreError(row, MaterialInfoDO.class); + materialDO.setUnitWeight(NumberUtil.isValidNumber(row.getUnitWeight())?row.getUnitWeight(): null); + materialDO.setMaterialSpec(StrUtil.isNotBlank(row.getMaterialSpec())?row.getMaterialSpec():null); + // 修改 or 新增 + if (UPDATE.validate(req.getDuplicateName(), row.getMaterialName(), existName)) { + materialDO.setMaterialName(row.getMaterialName()); + materialDO.setUpdateTime(LocalDateTime.now()); + materialDO.setUpdateUser(UserContextHolder.getUserId()); + updateByNameList.add(materialDO); + } else if (UPDATE.validate(req.getDuplicateCode(), row.getEncoding(), existCode)) { + materialDO.setEncoding(row.getEncoding()); + materialDO.setUpdateTime(LocalDateTime.now()); + materialDO.setUpdateUser(UserContextHolder.getUserId()); + updateByCodeList.add(materialDO); + } else { +// materialDO.setId(idGenerator.generate()); + insertList.add(materialDO); + } + } + doImportMaterial(insertList, updateByNameList, updateByCodeList); + RedisUtils.delete(CacheConstants.DATA_IMPORT_KEY + req.getImportKey()); + int insertCount = insertList.size(); + int updateByNameCount = updateByNameList.size(); + int updateByCodeCount = updateByCodeList.size(); + int totalUpdateCount = updateByNameCount + updateByCodeCount; + int totalHandleCount = insertCount + totalUpdateCount; + return new MaterialInfoImportResp( + totalHandleCount, // 总处理数 + insertCount, // 新增数 + totalUpdateCount // 更新总数 + ); + } + + + + + + /** + * 按指定数据集获取数据库已存在的数量 + * + * @param materialRowList 导入的数据源 + * @param rowField 导入数据的字段 + * @param dbField 对比数据库的字段 + * @return 存在的数量 + */ + private int countExistByField(List materialRowList, + Function rowField, + SFunction dbField, + boolean fieldEncrypt) { + List fieldValues = materialRowList.stream().map(rowField).filter(Objects::nonNull).toList(); + if (fieldValues.isEmpty()) { + return 0; + } + return (int)this.count(Wrappers.lambdaQuery() + .in(dbField, fieldEncrypt ? SecureUtils.encryptFieldByAes(fieldValues) : fieldValues)); + } + + + /** + * 过滤无效的导入用户数据(批量导入不严格校验数据) + * + * @param importRowList 导入数据 + */ + private List filterImportData(List importRowList) { + // 校验过滤 + List list = importRowList.stream() + .filter(row -> ValidationUtil.validate(row).isEmpty()) + .toList(); + // 物料名去重 + return list.stream() + .collect(Collectors.toMap(MaterialImportRowReq::getMaterialName, row -> row, (existing, replacement) -> existing)) + .values() + .stream() + .toList(); + } + + /** + * 按指定数据集获取数据库已存在内容 + * + * @param materialRowList 导入的数据源 + * @param rowField 导入数据的字段 + * @param dbField 对比数据库的字段 + * @return 存在的内容 + */ + private List listExistByField(List materialRowList, + Function rowField, + SFunction dbField) { + List fieldValues = materialRowList.stream().map(rowField).filter(Objects::nonNull).toList(); + if (fieldValues.isEmpty()) { + return Collections.emptyList(); + } + List materialDOList = baseMapper.selectList(Wrappers.lambdaQuery() + .in(dbField, fieldValues) + .select(dbField)); + return materialDOList.stream().map(dbField).filter(Objects::nonNull).toList(); + } + + /** + * 判断是否退出导入 + * + * @param req 导入参数 + * @param list 导入数据 + * @param existName 导入数据中已存在的物料名 + * @param existCode 导入数据中已存在的物料编号 + * @return 是否退出 + */ + private boolean isExitImportMaterial(MaterialInfoImportReq req, + List list, + List existName, + List existCode) { + return list.stream() + .anyMatch(row -> EXIT.validate(req.getDuplicateName(), row.getMaterialName(), existName) || EXIT.validate(req + .getDuplicateCode(), row.getEncoding(), existCode)); + } + + /** + * 判断是否跳过导入 + * + * @param req 导入参数 + * @param row 导入数据 + * @param existName 导入数据中已存在的物料名称 + * @param existCode 导入数据中已存在的物料编号 + * @return 是否跳过 + */ + private boolean isSkipMaterialImport(MaterialInfoImportReq req, + MaterialImportRowReq row, + List existName, + List existCode) { + return SKIP.validate(req.getDuplicateName(), row.getMaterialName(), existName) || SKIP.validate(req + .getDuplicateCode(), row.getEncoding(), existCode); + } + + /** + * 导入用户 + * + * @param insertList 新增用户 + * @param updateByNameList 修改用户 + * @param updateByCodeList 用户角色关联 + */ + private void doImportMaterial(List insertList, List updateByNameList, List updateByCodeList) { + if (CollUtil.isNotEmpty(insertList)) { + baseMapper.insertBatch(insertList); + } + if (CollUtil.isNotEmpty(updateByNameList)) { + baseMapper.updateByName(updateByNameList); + } + if (CollUtil.isNotEmpty(updateByCodeList)) { + baseMapper.updateByCode(updateByCodeList); + } + } } diff --git a/wms-module-system/src/main/java/top/wms/admin/system/mapper/RuleRelationMapper.java b/wms-module-system/src/main/java/top/wms/admin/system/mapper/RuleRelationMapper.java deleted file mode 100644 index 722b2ec..0000000 --- a/wms-module-system/src/main/java/top/wms/admin/system/mapper/RuleRelationMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package top.wms.admin.system.mapper; - -import org.springframework.stereotype.Repository; -import top.continew.starter.data.mp.base.BaseMapper; -import top.wms.admin.system.model.entity.RuleRelationDO; - -/** - * 通行规则-设备关联 Mapper - * - * @author zc - * @since 2025/12/22 17:16 - */ -@Repository -public interface RuleRelationMapper extends BaseMapper { - - int deleteByRuleId(RuleRelationDO ruleRelation); - -} diff --git a/wms-module-system/src/main/java/top/wms/admin/system/model/entity/RuleRelationDO.java b/wms-module-system/src/main/java/top/wms/admin/system/model/entity/RuleRelationDO.java deleted file mode 100644 index 2310d12..0000000 --- a/wms-module-system/src/main/java/top/wms/admin/system/model/entity/RuleRelationDO.java +++ /dev/null @@ -1,37 +0,0 @@ -package top.wms.admin.system.model.entity; - -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 通行规则-设备关联实体 - * - * @author zc - * @since 2025/12/22 17:16 - */ -@Data -@TableName("equipment_rule_relation") -public class RuleRelationDO implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 平台侧规则ID(关联规则表主键) - */ - private Long ruleId; - - /** - * 设备ID(关联设备表主键) - */ - private Long equipmentId; - - /** - * 设备侧的规则ID(设备本地存储的规则标识) - */ - private String equipmentRuleId; - -} diff --git a/wms-module-system/src/main/java/top/wms/admin/system/model/req/RuleRelationReq.java b/wms-module-system/src/main/java/top/wms/admin/system/model/req/RuleRelationReq.java deleted file mode 100644 index 82518c8..0000000 --- a/wms-module-system/src/main/java/top/wms/admin/system/model/req/RuleRelationReq.java +++ /dev/null @@ -1,52 +0,0 @@ -package top.wms.admin.system.model.req; - -import jakarta.validation.constraints.*; - -import lombok.Data; - -import io.swagger.v3.oas.annotations.media.Schema; - -import org.hibernate.validator.constraints.Length; - -import java.io.Serial; -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * 创建或修改通行规则-设备关联参数 - * - * @author zc - * @since 2025/12/22 17:16 - */ -@Data -@Schema(description = "创建或修改通行规则-设备关联参数") -public class RuleRelationReq implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 平台侧规则ID(关联规则表主键) - */ - @Schema(description = "平台侧规则ID(关联规则表主键)") - @NotNull(message = "平台侧规则ID(关联规则表主键)不能为空") - private Long ruleId; - - /** - * 设备ID(关联设备表主键) - */ - @Schema(description = "设备ID(关联设备表主键)") - @NotNull(message = "设备ID(关联设备表主键)不能为空") - private Long equipmentId; - - /** - * 设备侧的规则ID(设备本地存储的规则标识) - */ - @Schema(description = "设备侧的规则ID(设备本地存储的规则标识)") - @NotBlank(message = "设备侧的规则ID(设备本地存储的规则标识)不能为空") - @Length(max = 64, message = "设备侧的规则ID(设备本地存储的规则标识)长度不能超过 {max} 个字符") - private String equipmentRuleId; - - @Schema(description = "创建时间") - private LocalDateTime createTime; -} diff --git a/wms-module-system/src/main/java/top/wms/admin/system/service/impl/PeopleEquipmentServiceImpl.java b/wms-module-system/src/main/java/top/wms/admin/system/service/impl/PeopleEquipmentServiceImpl.java deleted file mode 100644 index 6d6e18f..0000000 --- a/wms-module-system/src/main/java/top/wms/admin/system/service/impl/PeopleEquipmentServiceImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package top.wms.admin.system.service.impl; - -import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Service; - -import top.continew.starter.extension.crud.service.BaseServiceImpl; -import top.wms.admin.system.mapper.PeopleEquipmentMapper; -import top.wms.admin.system.model.entity.PeopleEquipmentDO; -import top.wms.admin.system.model.query.PeopleEquipmentQuery; -import top.wms.admin.system.model.req.PeopleEquipmentReq; -import top.wms.admin.system.model.resp.PeopleEquipmentResp; -import top.wms.admin.system.service.PeopleEquipmentService; - -/** - * 人员设备下发信息业务实现 - * - * @author zc - * @since 2025/03/27 14:59 - */ -@Service -@RequiredArgsConstructor -public class PeopleEquipmentServiceImpl extends BaseServiceImpl implements PeopleEquipmentService {} \ No newline at end of file diff --git a/wms-module-system/src/main/java/top/wms/admin/system/service/impl/UserServiceImpl.java b/wms-module-system/src/main/java/top/wms/admin/system/service/impl/UserServiceImpl.java index 528d53c..35fe50c 100644 --- a/wms-module-system/src/main/java/top/wms/admin/system/service/impl/UserServiceImpl.java +++ b/wms-module-system/src/main/java/top/wms/admin/system/service/impl/UserServiceImpl.java @@ -36,6 +36,7 @@ import net.dreamlu.mica.core.result.R; import org.dromara.x.file.storage.core.FileInfo; import org.dromara.x.file.storage.core.FileStorageService; import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -131,6 +132,8 @@ public class UserServiceImpl extends BaseServiceImpl + + + + + UPDATE sys_material_info + SET + + encoding = #{item.encoding}, + + + unit_weight = #{item.unitWeight}, + + + material_spec = #{item.materialSpec}, + + + update_time = NOW(), + + + update_user = #{item.updateUser} + + WHERE material_name = #{item.materialName} + + + + + + UPDATE sys_material_info + SET + + material_name = #{item.materialName}, + + + unit_weight = #{item.unitWeight}, + + + material_spec = #{item.materialSpec}, + + + update_time = NOW(), + + + update_user = #{item.updateUser} + + WHERE encoding = #{item.encoding} + + + diff --git a/wms-module-system/src/main/resources/mapper/RuleRelationMapper.xml b/wms-module-system/src/main/resources/mapper/RuleRelationMapper.xml deleted file mode 100644 index ab80cba..0000000 --- a/wms-module-system/src/main/resources/mapper/RuleRelationMapper.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - DELETE FROM equipment_rule_relation - WHERE 1=1 - - - AND rule_id = #{ruleId} - - - AND equipment_id = #{equipmentId} - - - AND equipment_rule_id = #{equipmentRuleId} - - - - diff --git a/wms-webapi/src/main/java/top/wms/admin/controller/meterial/MaterialInfoController.java b/wms-webapi/src/main/java/top/wms/admin/controller/meterial/MaterialInfoController.java index 380b692..67751d7 100644 --- a/wms-webapi/src/main/java/top/wms/admin/controller/meterial/MaterialInfoController.java +++ b/wms-webapi/src/main/java/top/wms/admin/controller/meterial/MaterialInfoController.java @@ -1,5 +1,13 @@ package top.wms.admin.controller.meterial; +import cn.dev33.satoken.annotation.SaCheckPermission; +import io.swagger.v3.oas.annotations.Operation; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotNull; +import org.springframework.http.MediaType; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.multipart.MultipartFile; +import top.continew.starter.core.validation.ValidationUtils; import top.continew.starter.extension.crud.enums.Api; import io.swagger.v3.oas.annotations.tags.Tag; @@ -11,9 +19,17 @@ import top.continew.starter.extension.crud.annotation.CrudRequestMapping; import top.wms.admin.common.controller.BaseController; import top.wms.admin.material.model.entity.MaterialInfoDO; import top.wms.admin.material.model.query.MaterialInfoQuery; +import top.wms.admin.material.model.req.MaterialInfoImportReq; import top.wms.admin.material.model.req.MaterialInfoReq; +import top.wms.admin.material.model.resp.MaterialImportParseResp; +import top.wms.admin.material.model.resp.MaterialInfoImportResp; import top.wms.admin.material.model.resp.MaterialInfoResp; import top.wms.admin.material.service.MaterialInfoService; +import top.wms.admin.system.model.req.user.UserImportReq; +import top.wms.admin.system.model.resp.user.UserImportParseResp; +import top.wms.admin.system.model.resp.user.UserImportResp; + +import java.io.IOException; /** * 物料信息管理 API @@ -33,4 +49,26 @@ public class MaterialInfoController extends BaseController