🆕 修改逻辑
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.Material;
|
||||||
import tech.riemann.ims.entity.material.MaterialStockDetail;
|
import tech.riemann.ims.entity.material.MaterialStockDetail;
|
||||||
import tech.riemann.ims.enums.ApplyTypeEnum;
|
import tech.riemann.ims.enums.ApplyTypeEnum;
|
||||||
|
import tech.riemann.ims.enums.AssignRuleEnum;
|
||||||
import tech.riemann.ims.enums.StockStatusEnum;
|
import tech.riemann.ims.enums.StockStatusEnum;
|
||||||
import tech.riemann.ims.service.material.IApplyDetailService;
|
import tech.riemann.ims.service.material.IApplyDetailService;
|
||||||
import tech.riemann.ims.service.material.IApplyFormService;
|
import tech.riemann.ims.service.material.IApplyFormService;
|
||||||
@ -74,6 +75,7 @@ public class ApplyFormController {
|
|||||||
|
|
||||||
// 校验物料数量
|
// 校验物料数量
|
||||||
Map<Long, Integer> confirmMap = applyInfo.getApplyDetails().stream()
|
Map<Long, Integer> confirmMap = applyInfo.getApplyDetails().stream()
|
||||||
|
.filter(item -> item.getAssignRule() == AssignRuleEnum.LOW_VALUE)
|
||||||
.collect(Collectors.toMap(ApplyDetail::getMaterialId, ApplyDetail::getConfirmQuantity));
|
.collect(Collectors.toMap(ApplyDetail::getMaterialId, ApplyDetail::getConfirmQuantity));
|
||||||
Map<Long, Long> dataMap = applyInfo.getDetailList().stream()
|
Map<Long, Long> dataMap = applyInfo.getDetailList().stream()
|
||||||
.collect(Collectors.groupingBy(MaterialStockDetail::getMaterialId, Collectors.counting()));
|
.collect(Collectors.groupingBy(MaterialStockDetail::getMaterialId, Collectors.counting()));
|
||||||
@ -98,8 +100,11 @@ public class ApplyFormController {
|
|||||||
});
|
});
|
||||||
materialStockDetailService.saveBatch(applyInfo.getDetailList());
|
materialStockDetailService.saveBatch(applyInfo.getDetailList());
|
||||||
//记录物料库存数据
|
//记录物料库存数据
|
||||||
confirmMap.forEach((key, value) -> materialService.update(Wrappers.<Material>lambdaUpdate().set(Material::getStock, value)
|
applyInfo.getApplyDetails().forEach(detail ->
|
||||||
.eq(Material::getId, key)));
|
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) {
|
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.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nutz.lang.Strings;
|
import org.nutz.lang.Strings;
|
||||||
import org.nutz.lang.random.R;
|
import org.nutz.lang.random.R;
|
||||||
import org.springframework.http.HttpStatus;
|
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.entity.material.Material;
|
||||||
import tech.riemann.ims.service.material.IMaterialService;
|
import tech.riemann.ims.service.material.IMaterialService;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author mayong
|
* @author mayong
|
||||||
* @since 2024/11/27 15:11
|
* @since 2024/11/27 15:11
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
|
@Slf4j
|
||||||
@Tag(name = "Material", description = "物料管理")
|
@Tag(name = "Material", description = "物料管理")
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class MaterialController {
|
public class MaterialController {
|
||||||
|
|
||||||
private final IMaterialService materialService;
|
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")
|
@GetMapping("materials")
|
||||||
@Operation(summary = "分页查询物料列表")
|
@Operation(summary = "分页查询物料列表")
|
||||||
public IPage<Material> materials(
|
public IPage<Material> materials(
|
||||||
@ -63,7 +87,8 @@ public class MaterialController {
|
|||||||
@Operation(summary = "增加/编辑物料")
|
@Operation(summary = "增加/编辑物料")
|
||||||
public Material saveOrUpdateMaterial(@Validated @Parameter(description = "物料信息") @RequestBody Material material) {
|
public Material saveOrUpdateMaterial(@Validated @Parameter(description = "物料信息") @RequestBody Material material) {
|
||||||
if (material.getId() == null || material.getId() <= 0) {
|
if (material.getId() == null || material.getId() <= 0) {
|
||||||
material.setCode(R.UU16());
|
material.setCode(getCode());
|
||||||
|
material.setStock(0);
|
||||||
if (materialService.save(material)) {
|
if (materialService.save(material)) {
|
||||||
return material;
|
return material;
|
||||||
} else {
|
} 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}")
|
@DeleteMapping("material/{id}")
|
||||||
@Operation(summary = "删除物料")
|
@Operation(summary = "删除物料")
|
||||||
@ResponseStatus(HttpStatus.OK)
|
@ResponseStatus(HttpStatus.OK)
|
||||||
|
@ -12,6 +12,7 @@ import lombok.experimental.FieldNameConstants;
|
|||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
import org.nutz.dao.entity.annotation.*;
|
import org.nutz.dao.entity.annotation.*;
|
||||||
import tech.riemann.ims.entity.IdBaseEntity;
|
import tech.riemann.ims.entity.IdBaseEntity;
|
||||||
|
import tech.riemann.ims.enums.AssignRuleEnum;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
|
|
||||||
@ -43,6 +44,9 @@ public class ApplyDetail extends IdBaseEntity {
|
|||||||
@ColDefine(notNull = false)
|
@ColDefine(notNull = false)
|
||||||
private Long applyId;
|
private Long applyId;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
private AssignRuleEnum assignRule;
|
||||||
|
|
||||||
@Schema(description = "物料Id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
|
@Schema(description = "物料Id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
|
||||||
@TableField("ad_material_id")
|
@TableField("ad_material_id")
|
||||||
@Column("ad_material_id")
|
@Column("ad_material_id")
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package tech.riemann.ims.entity.material;
|
package tech.riemann.ims.entity.material;
|
||||||
|
|
||||||
import club.zhcs.lina.utils.enums.Codebook;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
@ -12,7 +11,6 @@ import lombok.experimental.Accessors;
|
|||||||
import lombok.experimental.FieldNameConstants;
|
import lombok.experimental.FieldNameConstants;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
import org.nutz.dao.entity.annotation.*;
|
import org.nutz.dao.entity.annotation.*;
|
||||||
import org.nutz.json.JsonField;
|
|
||||||
import tech.riemann.ims.entity.IdBaseEntity;
|
import tech.riemann.ims.entity.IdBaseEntity;
|
||||||
import tech.riemann.ims.enums.ApplyTypeEnum;
|
import tech.riemann.ims.enums.ApplyTypeEnum;
|
||||||
import tech.riemann.ims.enums.AuditTypeEnum;
|
import tech.riemann.ims.enums.AuditTypeEnum;
|
||||||
@ -20,7 +18,6 @@ import tech.riemann.ims.enums.HandleEnum;
|
|||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author mayong
|
* @author mayong
|
||||||
@ -99,18 +96,4 @@ public class ApplyForm extends IdBaseEntity {
|
|||||||
@ColDefine(type = ColType.VARCHAR, notNull = false, width = 128, precision = 0)
|
@ColDefine(type = ColType.VARCHAR, notNull = false, width = 128, precision = 0)
|
||||||
private HandleEnum handle;
|
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;
|
package tech.riemann.ims.entity.material;
|
||||||
|
|
||||||
import club.zhcs.lina.utils.enums.Codebook;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
@ -12,12 +11,10 @@ import lombok.experimental.Accessors;
|
|||||||
import lombok.experimental.FieldNameConstants;
|
import lombok.experimental.FieldNameConstants;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
import org.nutz.dao.entity.annotation.*;
|
import org.nutz.dao.entity.annotation.*;
|
||||||
import org.nutz.json.JsonField;
|
|
||||||
import tech.riemann.ims.entity.IdBaseEntity;
|
import tech.riemann.ims.entity.IdBaseEntity;
|
||||||
import tech.riemann.ims.enums.AssignRuleEnum;
|
import tech.riemann.ims.enums.AssignRuleEnum;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
@ -49,7 +46,7 @@ public class Material extends IdBaseEntity {
|
|||||||
@ColDefine(notNull = false, width = 128, precision = 0)
|
@ColDefine(notNull = false, width = 128, precision = 0)
|
||||||
private String name;
|
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")
|
@TableField("m_assign_rule")
|
||||||
@Column("m_assign_rule")
|
@Column("m_assign_rule")
|
||||||
@Comment("赋码规则")
|
@Comment("赋码规则")
|
||||||
@ -85,9 +82,5 @@ public class Material extends IdBaseEntity {
|
|||||||
@ColDefine(notNull = false, width = 500, precision = 0)
|
@ColDefine(notNull = false, width = 500, precision = 0)
|
||||||
private String description;
|
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
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Schema(description = "物料Key", requiredMode = RequiredMode.NOT_REQUIRED)
|
@Schema(description = "物料Id", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
@TableField("mbc_material_key")
|
@TableField("mbc_material_id")
|
||||||
@Column("mbc_material_key")
|
@Column("mbc_material_id")
|
||||||
@Comment("物料Key")
|
@Comment("物料Id")
|
||||||
@ColDefine(notNull = false, width = 128, precision = 0)
|
@ColDefine(notNull = false)
|
||||||
private String mbcMaterialKey;
|
private Long materialId;
|
||||||
|
|
||||||
@Schema(description = "最新编码位置", requiredMode = RequiredMode.NOT_REQUIRED)
|
@Schema(description = "最新编码位置", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
@TableField("mbc_latest_location")
|
@TableField("mbc_latest_location")
|
||||||
@Column("mbc_latest_location")
|
@Column("mbc_latest_location")
|
||||||
@Comment("最新编码位置")
|
@Comment("最新编码位置")
|
||||||
@ColDefine(notNull = false, width = 19, precision = 0)
|
@ColDefine(notNull = false)
|
||||||
private Long mbcLatestLocation;
|
private Long latestLocation;
|
||||||
}
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package tech.riemann.ims.entity.material;
|
package tech.riemann.ims.entity.material;
|
||||||
|
|
||||||
import club.zhcs.lina.utils.enums.Codebook;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
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.Column;
|
||||||
import org.nutz.dao.entity.annotation.Comment;
|
import org.nutz.dao.entity.annotation.Comment;
|
||||||
import org.nutz.dao.entity.annotation.Table;
|
import org.nutz.dao.entity.annotation.Table;
|
||||||
import org.nutz.json.JsonField;
|
|
||||||
import tech.riemann.ims.entity.IdBaseEntity;
|
import tech.riemann.ims.entity.IdBaseEntity;
|
||||||
import tech.riemann.ims.enums.StockStatusEnum;
|
import tech.riemann.ims.enums.StockStatusEnum;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 物料明细数据表
|
* 物料明细数据表
|
||||||
@ -74,8 +71,5 @@ public class MaterialStockDetail extends IdBaseEntity{
|
|||||||
@ColDefine(notNull = false, width = 128, precision = 0)
|
@ColDefine(notNull = false, width = 128, precision = 0)
|
||||||
private StockStatusEnum status;
|
private StockStatusEnum status;
|
||||||
|
|
||||||
@JsonField
|
|
||||||
public Codebook getStatusInfo() {
|
|
||||||
return Optional.of(getStatus()).orElse(StockStatusEnum.IN).build();
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -12,7 +12,7 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum AssignRuleEnum implements ICodeBook {
|
public enum AssignRuleEnum implements ICodeBook {
|
||||||
LOW_VALUE("0", "低值易耗品(不参与赋码)"),
|
LOW_VALUE("2", "低值易耗品(不参与赋码)"),
|
||||||
HIGH_VALUE("1", "高价值工具类(参与唯一赋码)");
|
HIGH_VALUE("1", "高价值工具类(参与唯一赋码)");
|
||||||
|
|
||||||
@EnumValue
|
@EnumValue
|
||||||
|
Loading…
x
Reference in New Issue
Block a user