🆕 修改逻辑

This commit is contained in:
my_ong 2024-12-06 18:06:23 +08:00
parent 47100b8e20
commit e3be8f2510
8 changed files with 64 additions and 44 deletions

View File

@ -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<Long, Integer> confirmMap = applyInfo.getApplyDetails().stream()
.filter(item -> item.getAssignRule() == AssignRuleEnum.LOW_VALUE)
.collect(Collectors.toMap(ApplyDetail::getMaterialId, ApplyDetail::getConfirmQuantity));
Map<Long, Long> 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.<Material>lambdaUpdate().set(Material::getStock, value)
.eq(Material::getId, key)));
applyInfo.getApplyDetails().forEach(detail ->
materialService.update(Wrappers.<Material>lambdaUpdate()
.eq(Material::getId, detail.getMaterialId())
.setSql("m_stock = m_stock + " + detail.getConfirmQuantity())
));
}
else if(applyType == ApplyTypeEnum.LOAN_OUT || applyType == ApplyTypeEnum.RETURN_RECEIPT) {
//修改物料状态

View File

@ -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<String, String> cache = CacheBuilder.newBuilder()
.concurrencyLevel(8)
.expireAfterAccess(10, TimeUnit.MINUTES)
.initialCapacity(10)
.maximumSize(300)
.recordStats()
.build(new CacheLoader<String,String>() {
@Override
@Nonnull
public String load(@Nonnull String key) throws Exception {
Material material = materialService.getOne(Wrappers.<Material>lambdaQuery().eq(Material::getCode, key));
return material == null ? "" : material.getCode();
}
});
@GetMapping("materials")
@Operation(summary = "分页查询物料列表")
public IPage<Material> 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)

View File

@ -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")

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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;
}

View File

@ -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();
}
}

View File

@ -12,7 +12,7 @@ import lombok.Getter;
@Getter
@AllArgsConstructor
public enum AssignRuleEnum implements ICodeBook {
LOW_VALUE("0", "低值易耗品(不参与赋码)"),
LOW_VALUE("2", "低值易耗品(不参与赋码)"),
HIGH_VALUE("1", "高价值工具类(参与唯一赋码)");
@EnumValue