From e3be8f2510a2463fe0e6cf3b4bef826ef5753bfe Mon Sep 17 00:00:00 2001 From: my_ong <429426262@qq.com> Date: Fri, 6 Dec 2024 18:06:23 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20=E4=BF=AE=E6=94=B9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../material/ApplyFormController.java | 9 +++- .../platform/material/MaterialController.java | 43 ++++++++++++++++++- .../ims/entity/material/ApplyDetail.java | 4 ++ .../ims/entity/material/ApplyForm.java | 17 -------- .../riemann/ims/entity/material/Material.java | 9 +--- .../material/MaterialBarcodeConfig.java | 16 +++---- .../entity/material/MaterialStockDetail.java | 8 +--- .../riemann/ims/enums/AssignRuleEnum.java | 2 +- 8 files changed, 64 insertions(+), 44 deletions(-) diff --git a/src/main/java/tech/riemann/ims/controller/platform/material/ApplyFormController.java b/src/main/java/tech/riemann/ims/controller/platform/material/ApplyFormController.java index e8ddfb6..80e6cae 100644 --- a/src/main/java/tech/riemann/ims/controller/platform/material/ApplyFormController.java +++ b/src/main/java/tech/riemann/ims/controller/platform/material/ApplyFormController.java @@ -17,6 +17,7 @@ import tech.riemann.ims.entity.material.ApplyForm; import tech.riemann.ims.entity.material.Material; import tech.riemann.ims.entity.material.MaterialStockDetail; import tech.riemann.ims.enums.ApplyTypeEnum; +import tech.riemann.ims.enums.AssignRuleEnum; import tech.riemann.ims.enums.StockStatusEnum; import tech.riemann.ims.service.material.IApplyDetailService; import tech.riemann.ims.service.material.IApplyFormService; @@ -74,6 +75,7 @@ public class ApplyFormController { // 校验物料数量 Map confirmMap = applyInfo.getApplyDetails().stream() + .filter(item -> item.getAssignRule() == AssignRuleEnum.LOW_VALUE) .collect(Collectors.toMap(ApplyDetail::getMaterialId, ApplyDetail::getConfirmQuantity)); Map dataMap = applyInfo.getDetailList().stream() .collect(Collectors.groupingBy(MaterialStockDetail::getMaterialId, Collectors.counting())); @@ -98,8 +100,11 @@ public class ApplyFormController { }); materialStockDetailService.saveBatch(applyInfo.getDetailList()); //记录物料库存数据 - confirmMap.forEach((key, value) -> materialService.update(Wrappers.lambdaUpdate().set(Material::getStock, value) - .eq(Material::getId, key))); + applyInfo.getApplyDetails().forEach(detail -> + materialService.update(Wrappers.lambdaUpdate() + .eq(Material::getId, detail.getMaterialId()) + .setSql("m_stock = m_stock + " + detail.getConfirmQuantity()) + )); } else if(applyType == ApplyTypeEnum.LOAN_OUT || applyType == ApplyTypeEnum.RETURN_RECEIPT) { //修改物料状态 diff --git a/src/main/java/tech/riemann/ims/controller/platform/material/MaterialController.java b/src/main/java/tech/riemann/ims/controller/platform/material/MaterialController.java index 9f4f30d..83e4d8c 100644 --- a/src/main/java/tech/riemann/ims/controller/platform/material/MaterialController.java +++ b/src/main/java/tech/riemann/ims/controller/platform/material/MaterialController.java @@ -4,10 +4,14 @@ import club.zhcs.lina.starter.exception.BizException; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.nutz.lang.Strings; import org.nutz.lang.random.R; import org.springframework.http.HttpStatus; @@ -16,19 +20,39 @@ import org.springframework.web.bind.annotation.*; import tech.riemann.ims.entity.material.Material; import tech.riemann.ims.service.material.IMaterialService; +import javax.annotation.Nonnull; import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; /** * @author mayong * @since 2024/11/27 15:11 */ @RestController +@Slf4j @Tag(name = "Material", description = "物料管理") @RequiredArgsConstructor public class MaterialController { private final IMaterialService materialService; + LoadingCache cache = CacheBuilder.newBuilder() + .concurrencyLevel(8) + .expireAfterAccess(10, TimeUnit.MINUTES) + .initialCapacity(10) + .maximumSize(300) + .recordStats() + .build(new CacheLoader() { + + @Override + @Nonnull + public String load(@Nonnull String key) throws Exception { + Material material = materialService.getOne(Wrappers.lambdaQuery().eq(Material::getCode, key)); + return material == null ? "" : material.getCode(); + } + }); + @GetMapping("materials") @Operation(summary = "分页查询物料列表") public IPage materials( @@ -63,7 +87,8 @@ public class MaterialController { @Operation(summary = "增加/编辑物料") public Material saveOrUpdateMaterial(@Validated @Parameter(description = "物料信息") @RequestBody Material material) { if (material.getId() == null || material.getId() <= 0) { - material.setCode(R.UU16()); + material.setCode(getCode()); + material.setStock(0); if (materialService.save(material)) { return material; } else { @@ -78,6 +103,22 @@ public class MaterialController { } } + private String getCode() { + String code; + while (true) { + code = String.valueOf(R.random(100000, 999999)); + try { + // 如果代码已经存在,继续循环 + if (Strings.isBlank(cache.get(code))) { + cache.put(code, code); + return code; // 找到合适的代码后返回 + } + } catch (ExecutionException e) { + log.error("获取物料编码失败", e); + } + } + } + @DeleteMapping("material/{id}") @Operation(summary = "删除物料") @ResponseStatus(HttpStatus.OK) diff --git a/src/main/java/tech/riemann/ims/entity/material/ApplyDetail.java b/src/main/java/tech/riemann/ims/entity/material/ApplyDetail.java index c1cb652..9f8512b 100644 --- a/src/main/java/tech/riemann/ims/entity/material/ApplyDetail.java +++ b/src/main/java/tech/riemann/ims/entity/material/ApplyDetail.java @@ -12,6 +12,7 @@ import lombok.experimental.FieldNameConstants; import lombok.experimental.SuperBuilder; import org.nutz.dao.entity.annotation.*; import tech.riemann.ims.entity.IdBaseEntity; +import tech.riemann.ims.enums.AssignRuleEnum; import java.io.Serial; @@ -43,6 +44,9 @@ public class ApplyDetail extends IdBaseEntity { @ColDefine(notNull = false) private Long applyId; + @TableField(exist = false) + private AssignRuleEnum assignRule; + @Schema(description = "物料Id", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @TableField("ad_material_id") @Column("ad_material_id") diff --git a/src/main/java/tech/riemann/ims/entity/material/ApplyForm.java b/src/main/java/tech/riemann/ims/entity/material/ApplyForm.java index 745ecf2..5033528 100644 --- a/src/main/java/tech/riemann/ims/entity/material/ApplyForm.java +++ b/src/main/java/tech/riemann/ims/entity/material/ApplyForm.java @@ -1,6 +1,5 @@ package tech.riemann.ims.entity.material; -import club.zhcs.lina.utils.enums.Codebook; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; @@ -12,7 +11,6 @@ import lombok.experimental.Accessors; import lombok.experimental.FieldNameConstants; import lombok.experimental.SuperBuilder; import org.nutz.dao.entity.annotation.*; -import org.nutz.json.JsonField; import tech.riemann.ims.entity.IdBaseEntity; import tech.riemann.ims.enums.ApplyTypeEnum; import tech.riemann.ims.enums.AuditTypeEnum; @@ -20,7 +18,6 @@ import tech.riemann.ims.enums.HandleEnum; import java.io.Serial; import java.time.LocalDateTime; -import java.util.Optional; /** * @author mayong @@ -99,18 +96,4 @@ public class ApplyForm extends IdBaseEntity { @ColDefine(type = ColType.VARCHAR, notNull = false, width = 128, precision = 0) private HandleEnum handle; - @JsonField - public Codebook getTypeInfo() { - return Optional.of(getType()).orElse(ApplyTypeEnum.PURCHASE_RECEIPT).build(); - } - - @JsonField - public Codebook getAuditTypeInfo() { - return Optional.of(getAuditType()).orElse(AuditTypeEnum.ALL).build(); - } - - @JsonField - public Codebook getHandleInfo() { - return Optional.of(getHandle()).orElse(HandleEnum.NO_ACTION).build(); - } } diff --git a/src/main/java/tech/riemann/ims/entity/material/Material.java b/src/main/java/tech/riemann/ims/entity/material/Material.java index b0a2da4..317b02f 100644 --- a/src/main/java/tech/riemann/ims/entity/material/Material.java +++ b/src/main/java/tech/riemann/ims/entity/material/Material.java @@ -1,6 +1,5 @@ package tech.riemann.ims.entity.material; -import club.zhcs.lina.utils.enums.Codebook; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; @@ -12,12 +11,10 @@ import lombok.experimental.Accessors; import lombok.experimental.FieldNameConstants; import lombok.experimental.SuperBuilder; import org.nutz.dao.entity.annotation.*; -import org.nutz.json.JsonField; import tech.riemann.ims.entity.IdBaseEntity; import tech.riemann.ims.enums.AssignRuleEnum; import java.io.Serial; -import java.util.Optional; @Data @SuperBuilder @@ -49,7 +46,7 @@ public class Material extends IdBaseEntity { @ColDefine(notNull = false, width = 128, precision = 0) private String name; - @Schema(description = "赋码规则(0-低值易耗品(不参与赋码) 1-高价值工具类(参与唯一赋码)", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @Schema(description = "赋码规则(2-低值易耗品(不参与赋码) 1-高价值工具类(参与唯一赋码)", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @TableField("m_assign_rule") @Column("m_assign_rule") @Comment("赋码规则") @@ -85,9 +82,5 @@ public class Material extends IdBaseEntity { @ColDefine(notNull = false, width = 500, precision = 0) private String description; - @JsonField - public Codebook getAssignRuleInfo() { - return Optional.of(getAssignRule()).orElse(AssignRuleEnum.LOW_VALUE).build(); - } } diff --git a/src/main/java/tech/riemann/ims/entity/material/MaterialBarcodeConfig.java b/src/main/java/tech/riemann/ims/entity/material/MaterialBarcodeConfig.java index f66e483..6004513 100644 --- a/src/main/java/tech/riemann/ims/entity/material/MaterialBarcodeConfig.java +++ b/src/main/java/tech/riemann/ims/entity/material/MaterialBarcodeConfig.java @@ -42,17 +42,17 @@ public class MaterialBarcodeConfig extends IdBaseEntity{ @Serial private static final long serialVersionUID = 1L; - @Schema(description = "物料Key", requiredMode = RequiredMode.NOT_REQUIRED) - @TableField("mbc_material_key") - @Column("mbc_material_key") - @Comment("物料Key") - @ColDefine(notNull = false, width = 128, precision = 0) - private String mbcMaterialKey; + @Schema(description = "物料Id", requiredMode = RequiredMode.NOT_REQUIRED) + @TableField("mbc_material_id") + @Column("mbc_material_id") + @Comment("物料Id") + @ColDefine(notNull = false) + private Long materialId; @Schema(description = "最新编码位置", requiredMode = RequiredMode.NOT_REQUIRED) @TableField("mbc_latest_location") @Column("mbc_latest_location") @Comment("最新编码位置") - @ColDefine(notNull = false, width = 19, precision = 0) - private Long mbcLatestLocation; + @ColDefine(notNull = false) + private Long latestLocation; } \ No newline at end of file diff --git a/src/main/java/tech/riemann/ims/entity/material/MaterialStockDetail.java b/src/main/java/tech/riemann/ims/entity/material/MaterialStockDetail.java index f7cca46..3bdade6 100644 --- a/src/main/java/tech/riemann/ims/entity/material/MaterialStockDetail.java +++ b/src/main/java/tech/riemann/ims/entity/material/MaterialStockDetail.java @@ -1,6 +1,5 @@ package tech.riemann.ims.entity.material; -import club.zhcs.lina.utils.enums.Codebook; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; @@ -16,12 +15,10 @@ import org.nutz.dao.entity.annotation.ColDefine; import org.nutz.dao.entity.annotation.Column; import org.nutz.dao.entity.annotation.Comment; import org.nutz.dao.entity.annotation.Table; -import org.nutz.json.JsonField; import tech.riemann.ims.entity.IdBaseEntity; import tech.riemann.ims.enums.StockStatusEnum; import java.io.Serial; -import java.util.Optional; /** * 物料明细数据表 @@ -74,8 +71,5 @@ public class MaterialStockDetail extends IdBaseEntity{ @ColDefine(notNull = false, width = 128, precision = 0) private StockStatusEnum status; - @JsonField - public Codebook getStatusInfo() { - return Optional.of(getStatus()).orElse(StockStatusEnum.IN).build(); - } + } \ No newline at end of file diff --git a/src/main/java/tech/riemann/ims/enums/AssignRuleEnum.java b/src/main/java/tech/riemann/ims/enums/AssignRuleEnum.java index 27a998f..d9597f8 100644 --- a/src/main/java/tech/riemann/ims/enums/AssignRuleEnum.java +++ b/src/main/java/tech/riemann/ims/enums/AssignRuleEnum.java @@ -12,7 +12,7 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum AssignRuleEnum implements ICodeBook { - LOW_VALUE("0", "低值易耗品(不参与赋码)"), + LOW_VALUE("2", "低值易耗品(不参与赋码)"), HIGH_VALUE("1", "高价值工具类(参与唯一赋码)"); @EnumValue