🆕 修改逻辑
This commit is contained in:
parent
47100b8e20
commit
e3be8f2510
@ -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) {
|
||||
//修改物料状态
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -12,7 +12,7 @@ import lombok.Getter;
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum AssignRuleEnum implements ICodeBook {
|
||||
LOW_VALUE("0", "低值易耗品(不参与赋码)"),
|
||||
LOW_VALUE("2", "低值易耗品(不参与赋码)"),
|
||||
HIGH_VALUE("1", "高价值工具类(参与唯一赋码)");
|
||||
|
||||
@EnumValue
|
||||
|
Loading…
x
Reference in New Issue
Block a user