🆕 扫码盘点待完善
This commit is contained in:
parent
9844c1ec3a
commit
a471e9807f
@ -13,17 +13,12 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
import tech.riemann.ims.dto.request.ApplyInfo;
|
import tech.riemann.ims.dto.request.ApplyInfo;
|
||||||
import tech.riemann.ims.dto.request.AuditApplyInfo;
|
import tech.riemann.ims.dto.request.AuditApplyInfo;
|
||||||
import tech.riemann.ims.dto.response.ApplyDTO;
|
import tech.riemann.ims.dto.response.ApplyDTO;
|
||||||
import tech.riemann.ims.entity.material.ApplyDetail;
|
import tech.riemann.ims.entity.material.*;
|
||||||
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.*;
|
import tech.riemann.ims.enums.*;
|
||||||
import tech.riemann.ims.service.material.IApplyDetailService;
|
import tech.riemann.ims.service.material.*;
|
||||||
import tech.riemann.ims.service.material.IApplyFormService;
|
|
||||||
import tech.riemann.ims.service.material.IMaterialService;
|
|
||||||
import tech.riemann.ims.service.material.IMaterialStockDetailService;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -41,6 +36,9 @@ public class ApplyFormController {
|
|||||||
private final IApplyDetailService applyDetailService;
|
private final IApplyDetailService applyDetailService;
|
||||||
private final IMaterialStockDetailService materialStockDetailService;
|
private final IMaterialStockDetailService materialStockDetailService;
|
||||||
private final IMaterialService materialService;
|
private final IMaterialService materialService;
|
||||||
|
private final IStocktakingScanDetailService stocktakingScanDetailService;
|
||||||
|
private final IStocktakingScanExceptionalDataService stocktakingScanExceptionalDataService;
|
||||||
|
|
||||||
|
|
||||||
@GetMapping("applies")
|
@GetMapping("applies")
|
||||||
@Operation(summary = "分页查询申请列表")
|
@Operation(summary = "分页查询申请列表")
|
||||||
@ -62,13 +60,13 @@ public class ApplyFormController {
|
|||||||
@Parameter(description = "盘点类型") @RequestParam(name = "auditType", required = false) AuditTypeEnum auditType,
|
@Parameter(description = "盘点类型") @RequestParam(name = "auditType", required = false) AuditTypeEnum auditType,
|
||||||
@Parameter(description = "盘点人") @RequestParam(name = "taker", required = false) String taker,
|
@Parameter(description = "盘点人") @RequestParam(name = "taker", required = false) String taker,
|
||||||
@Parameter(description = "创建日期") @RequestParam(name = "createDate", required = false) LocalDateTime createDate,
|
@Parameter(description = "创建日期") @RequestParam(name = "createDate", required = false) LocalDateTime createDate,
|
||||||
@Parameter(description = "审核状态") @RequestParam(name = "reviewResult", required = false) ReviewResultEnum reviewResult) {
|
@Parameter(description = "审核状态") @RequestParam(name = "reviewResults", required = false) List<ReviewResultEnum> reviewResults) {
|
||||||
return applyFormService.page(Page.of(page, size), Wrappers.<ApplyForm>lambdaQuery()
|
return applyFormService.page(Page.of(page, size), Wrappers.<ApplyForm>lambdaQuery()
|
||||||
.eq(auditType != null, ApplyForm::getAuditType, auditType)
|
.eq(auditType != null, ApplyForm::getAuditType, auditType)
|
||||||
.eq(ApplyForm::getType, ApplyTypeEnum.AUDIT)
|
.eq(ApplyForm::getType, ApplyTypeEnum.AUDIT)
|
||||||
.eq(taker != null, ApplyForm::getTaker, taker)
|
.eq(taker != null, ApplyForm::getTaker, taker)
|
||||||
.eq(createDate != null, ApplyForm::getCreatedTime, createDate)
|
.eq(createDate != null, ApplyForm::getCreatedTime, createDate)
|
||||||
.eq(reviewResult != null, ApplyForm::getReviewResult, reviewResult)
|
.in(reviewResults != null && !reviewResults.isEmpty(), ApplyForm::getReviewResult, reviewResults)
|
||||||
.orderByDesc(ApplyForm::getCreatedTime)
|
.orderByDesc(ApplyForm::getCreatedTime)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -168,6 +166,7 @@ public class ApplyFormController {
|
|||||||
ApplyForm applyForm = applyInfo.to();
|
ApplyForm applyForm = applyInfo.to();
|
||||||
applyForm.setType(ApplyTypeEnum.AUDIT);
|
applyForm.setType(ApplyTypeEnum.AUDIT);
|
||||||
applyFormService.save(applyForm);
|
applyFormService.save(applyForm);
|
||||||
|
|
||||||
List<Material> materials = materialService.listByIds(applyInfo.getIds());
|
List<Material> materials = materialService.listByIds(applyInfo.getIds());
|
||||||
|
|
||||||
materials.forEach(material -> applyDetailService.save(ApplyDetail.builder()
|
materials.forEach(material -> applyDetailService.save(ApplyDetail.builder()
|
||||||
@ -176,4 +175,81 @@ public class ApplyFormController {
|
|||||||
.quantity(material.getStock())
|
.quantity(material.getStock())
|
||||||
.build()));
|
.build()));
|
||||||
}
|
}
|
||||||
|
@PostMapping("scan-data/{applyId}")
|
||||||
|
@Operation(summary = "提交盘点扫码数据")
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void saveScanData(@Parameter(description = "扫码数据列表") @RequestBody List<StocktakingScanDetail> scanData,
|
||||||
|
@Parameter(description = "申请单ID") @PathVariable(name = "applyId") Long applyId){
|
||||||
|
//保存扫码数据
|
||||||
|
stocktakingScanDetailService.saveBatch(scanData);
|
||||||
|
//修改状态
|
||||||
|
applyFormService.update(Wrappers.<ApplyForm>lambdaUpdate()
|
||||||
|
.set(ApplyForm::getReviewResult, ReviewResultEnum.WAIT_REVIEW)
|
||||||
|
.eq(ApplyForm::getId, applyId));
|
||||||
|
new Thread(() -> {
|
||||||
|
comparisonData(scanData, applyId);
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 比较数据 生成差异数据
|
||||||
|
public void comparisonData(List<StocktakingScanDetail> scanData, Long applyId){
|
||||||
|
//生成map比较
|
||||||
|
Map<Long, List<String>> scanMap = scanData.stream().collect(Collectors.groupingBy(StocktakingScanDetail::getMaterialId,
|
||||||
|
Collectors.mapping(StocktakingScanDetail::getBarcode, Collectors.toList())));
|
||||||
|
Map<Long, List<MaterialStockDetail>> stockMap = getStockMap(applyId);
|
||||||
|
// 比较两个map,以库存为准,生成差异数据
|
||||||
|
List<StocktakingScanExceptionalData> exceptionalDataList = new ArrayList<>();
|
||||||
|
scanMap.forEach((k, v) -> {
|
||||||
|
List<MaterialStockDetail> stockList = stockMap.get(k);
|
||||||
|
List<String> scanList = scanMap.get(k);
|
||||||
|
// 比较两个list,找出库存存在但扫码不存在的条形码 或者 库存不存在但扫码存在的条形码
|
||||||
|
stockList.forEach(detail -> {
|
||||||
|
if (scanList.contains(detail.getBarcode()) && detail.getStatus() != StockStatusEnum.IN) {
|
||||||
|
// 扫码和库存都存在,但是库存的状态不对
|
||||||
|
exceptionalDataList.add(StocktakingScanExceptionalData.builder()
|
||||||
|
.barcode(detail.getBarcode())
|
||||||
|
.materialId(detail.getMaterialId())
|
||||||
|
.exceptionReason(StocktakingExceptonalStatusEnum.SOCK_OUT_BUT_SCAN_EXIST)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
if(!scanList.contains(detail.getBarcode()) && detail.getStatus() == StockStatusEnum.IN){
|
||||||
|
//库房存在,但扫码不存在
|
||||||
|
exceptionalDataList.add(StocktakingScanExceptionalData.builder()
|
||||||
|
.barcode(detail.getBarcode())
|
||||||
|
.materialId(detail.getMaterialId())
|
||||||
|
.exceptionReason(StocktakingExceptonalStatusEnum.SOCK_IN_BUT_SCAN_NOT_EXIST)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 找出扫码存在但库存不存在的条形码
|
||||||
|
scanList.forEach(barcode -> {
|
||||||
|
if (stockList.stream().noneMatch(detail -> detail.getBarcode().equals(barcode))) {
|
||||||
|
// 扫码存在,但库存不存在
|
||||||
|
exceptionalDataList.add(StocktakingScanExceptionalData.builder()
|
||||||
|
.barcode(barcode)
|
||||||
|
.materialId(k)
|
||||||
|
.exceptionReason(StocktakingExceptonalStatusEnum.SOCK_NOT_EXIST_BUT_SCAN_EXIST)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// 保存差异数据
|
||||||
|
stocktakingScanExceptionalDataService.saveBatch(exceptionalDataList);
|
||||||
|
}
|
||||||
|
// 盘点物料库存实际数据
|
||||||
|
private Map<Long, List<MaterialStockDetail>> getStockMap(Long applyId) {
|
||||||
|
ApplyForm applyForm = applyFormService.getById(applyId);
|
||||||
|
List<Long> materialIds = new ArrayList<>();
|
||||||
|
if(applyForm.getAuditType() == AuditTypeEnum.PARTIAL){
|
||||||
|
// 部分盘点
|
||||||
|
List<ApplyDetail> applyDetails = applyDetailService.list(Wrappers.<ApplyDetail>lambdaQuery().eq(ApplyDetail::getApplyId, applyId));
|
||||||
|
materialIds = applyDetails.stream().map(ApplyDetail::getMaterialId).toList();
|
||||||
|
}
|
||||||
|
//查询所有盘点物料数量
|
||||||
|
List<MaterialStockDetail> stockDetails = materialStockDetailService.list(Wrappers.<MaterialStockDetail>lambdaQuery()
|
||||||
|
.in(!materialIds.isEmpty(), MaterialStockDetail::getMaterialId, materialIds));
|
||||||
|
|
||||||
|
// 返回map结构 key 为物料id,value 该物料的所有条形码结合
|
||||||
|
return stockDetails.stream().collect(Collectors.groupingBy(MaterialStockDetail::getMaterialId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@ import org.nutz.dao.entity.annotation.*;
|
|||||||
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;
|
||||||
import tech.riemann.ims.enums.HandleEnum;
|
|
||||||
import tech.riemann.ims.enums.ReviewResultEnum;
|
import tech.riemann.ims.enums.ReviewResultEnum;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@ -104,17 +103,17 @@ public class ApplyForm extends IdBaseEntity {
|
|||||||
@ColDefine(type = ColType.VARCHAR, notNull = false, width = 512, precision = 0)
|
@ColDefine(type = ColType.VARCHAR, notNull = false, width = 512, precision = 0)
|
||||||
private String exception;
|
private String exception;
|
||||||
|
|
||||||
@Schema(description = "处理方式(1-无需处理 2-忽略并修改库存 3-补充库存 4-其他)", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
|
@Schema(description = "处理摘要", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
|
||||||
@TableField("af_exception_handle")
|
@TableField("af_exception_handle")
|
||||||
@Column("af_exception_handle")
|
@Column("af_exception_handle")
|
||||||
@Comment("处理方式(处理方式(1-无需处理 2-忽略并修改库存 3-补充库存 4-其他))")
|
@Comment("处理摘要")
|
||||||
@ColDefine(type = ColType.VARCHAR, notNull = false, width = 128, precision = 0)
|
@ColDefine(type = ColType.VARCHAR, notNull = false, width = 128, precision = 0)
|
||||||
private HandleEnum handle;
|
private String handle;
|
||||||
|
|
||||||
@Schema(description = "审核结果(1-通过 2-不通过 3-待审核 4-退回重新盘点 5-待盘点)", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
|
@Schema(description = "审核结果(1-待扫码 2-待提交 3-待审核 4-审核通过 5退回)", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
|
||||||
@TableField("af_review_result")
|
@TableField("af_review_result")
|
||||||
@Column("af_review_result")
|
@Column("af_review_result")
|
||||||
@Comment("审核结果(1-通过 2-不通过 3-待审核 4-退回重新盘点)")
|
@Comment("审核结果(1-待扫码 2-待提交 3-待审核 4-审核通过 5退回)")
|
||||||
@ColDefine(notNull = false, width = 128, precision = 0)
|
@ColDefine(notNull = false, width = 128, precision = 0)
|
||||||
private ReviewResultEnum reviewResult;
|
private ReviewResultEnum reviewResult;
|
||||||
|
|
||||||
|
@ -1,56 +0,0 @@
|
|||||||
package tech.riemann.ims.entity.material;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
|
|
||||||
import org.nutz.dao.entity.annotation.ColDefine;
|
|
||||||
import org.nutz.dao.entity.annotation.Column;
|
|
||||||
import org.nutz.dao.entity.annotation.Comment;
|
|
||||||
import tech.riemann.ims.entity.IdBaseEntity;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 盘点审核表
|
|
||||||
*
|
|
||||||
* @author mayong)
|
|
||||||
*
|
|
||||||
* @since 2024-12-06 10:32:29
|
|
||||||
*/
|
|
||||||
//@Data
|
|
||||||
//@SuperBuilder
|
|
||||||
//@NoArgsConstructor
|
|
||||||
//@AllArgsConstructor
|
|
||||||
//@FieldNameConstants
|
|
||||||
//@EqualsAndHashCode(callSuper = true)
|
|
||||||
//@Accessors(chain = true)
|
|
||||||
//@TableName("t_stocktaking_audit")
|
|
||||||
//@Table("t_stocktaking_audit")
|
|
||||||
//@Comment("盘点审核表")
|
|
||||||
//@Schema(name = "StocktakingAudit", description = "盘点审核表")
|
|
||||||
public class StocktakingAudit extends IdBaseEntity{
|
|
||||||
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@Schema(description = "申请单id", requiredMode = RequiredMode.NOT_REQUIRED)
|
|
||||||
@TableField("s_apply_id")
|
|
||||||
@Column("s_apply_id")
|
|
||||||
@Comment("申请单id")
|
|
||||||
@ColDefine(notNull = false, width = 10, precision = 0)
|
|
||||||
private Integer applyId;
|
|
||||||
|
|
||||||
@Schema(description = "盘点审核人", requiredMode = RequiredMode.NOT_REQUIRED)
|
|
||||||
@TableField("s_reviewer")
|
|
||||||
@Column("s_reviewer")
|
|
||||||
@Comment("盘点审核人")
|
|
||||||
@ColDefine(notNull = false, width = 128, precision = 0)
|
|
||||||
private String reviewer;
|
|
||||||
|
|
||||||
@Schema(description = "盘点审核结果(0-通过 1-不通过 2-待审核 3-退回重新盘点)", requiredMode = RequiredMode.NOT_REQUIRED)
|
|
||||||
@TableField("s_review_result")
|
|
||||||
@Column("s_review_result")
|
|
||||||
@Comment("盘点审核结果(0-通过 1-不通过 2-待审核 3-退回重新盘点)")
|
|
||||||
@ColDefine(notNull = false, width = 128, precision = 0)
|
|
||||||
private String reviewResult;
|
|
||||||
}
|
|
@ -0,0 +1,67 @@
|
|||||||
|
package tech.riemann.ims.entity.material;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
import lombok.experimental.FieldNameConstants;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
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 tech.riemann.ims.entity.IdBaseEntity;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 盘点审核表
|
||||||
|
*
|
||||||
|
* @author mayong)
|
||||||
|
*
|
||||||
|
* @since 2024-12-06 10:32:29
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@FieldNameConstants
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@TableName("t_stocktaking_scan_detail")
|
||||||
|
@Table("t_stocktaking_scan_detail")
|
||||||
|
@Comment("扫码盘点明细表")
|
||||||
|
@Schema(name = "StocktakingScanDetail", description = "扫码盘点明细表(记录历次盘点扫码的数据)")
|
||||||
|
public class StocktakingScanDetail extends IdBaseEntity{
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "申请单id", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
|
@TableField("s_apply_id")
|
||||||
|
@Column("s_apply_id")
|
||||||
|
@Comment("申请单id")
|
||||||
|
@ColDefine(notNull = false, width = 10, precision = 0)
|
||||||
|
private Integer applyId;
|
||||||
|
|
||||||
|
@Schema(description = "物料ID", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
|
@TableField("msd_material_id")
|
||||||
|
@Column("msd_material_id")
|
||||||
|
@Comment("物料ID")
|
||||||
|
@ColDefine(notNull = false)
|
||||||
|
private Long materialId;
|
||||||
|
|
||||||
|
@Schema(description = "条码", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
|
@TableField("msd_barcode")
|
||||||
|
@Column("msd_barcode")
|
||||||
|
@Comment("条码")
|
||||||
|
@ColDefine(notNull = false, width = 128, precision = 0)
|
||||||
|
private String barcode;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
package tech.riemann.ims.entity.material;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
import lombok.experimental.FieldNameConstants;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
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 tech.riemann.ims.entity.IdBaseEntity;
|
||||||
|
import tech.riemann.ims.enums.HandleEnum;
|
||||||
|
import tech.riemann.ims.enums.StocktakingExceptonalStatusEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扫码盘点异常数据表
|
||||||
|
*
|
||||||
|
* @author mayong)
|
||||||
|
*
|
||||||
|
* @since 2024-12-08 11:49:52
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@FieldNameConstants
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@TableName("t_stocktaking_scan_exceptional_data")
|
||||||
|
@Table("t_stocktaking_scan_exceptional_data")
|
||||||
|
@Comment("扫码盘点异常数据表")
|
||||||
|
@Schema(name = "StocktakingScanExceptionalData", description = "扫码盘点异常数据表")
|
||||||
|
public class StocktakingScanExceptionalData extends IdBaseEntity{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "申请单id", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
|
@TableField("s_apply_id")
|
||||||
|
@Column("s_apply_id")
|
||||||
|
@Comment("申请单id")
|
||||||
|
@ColDefine(notNull = false, width = 19, precision = 0)
|
||||||
|
private Long applyId;
|
||||||
|
|
||||||
|
@Schema(description = "物料ID", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
|
@TableField("s_material_id")
|
||||||
|
@Column("s_material_id")
|
||||||
|
@Comment("物料ID")
|
||||||
|
@ColDefine(notNull = false, width = 10, precision = 0)
|
||||||
|
private Long materialId;
|
||||||
|
|
||||||
|
@Schema(description = "条码", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
|
@TableField("s_barcode")
|
||||||
|
@Column("s_barcode")
|
||||||
|
@Comment("条码")
|
||||||
|
@ColDefine(notNull = false, width = 128, precision = 0)
|
||||||
|
private String barcode;
|
||||||
|
|
||||||
|
@Schema(description = "异常类型", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
|
@TableField("s_exception_reason")
|
||||||
|
@Column("s_exception_reason")
|
||||||
|
@Comment("异常类型")
|
||||||
|
@ColDefine(notNull = false, width = 128, precision = 0)
|
||||||
|
private StocktakingExceptonalStatusEnum exceptionReason;
|
||||||
|
|
||||||
|
@Schema(description = "异常处理", requiredMode = RequiredMode.NOT_REQUIRED)
|
||||||
|
@TableField("s_exception_handle")
|
||||||
|
@Column("s_exception_handle")
|
||||||
|
@Comment("异常处理")
|
||||||
|
@ColDefine(notNull = false, width = 128, precision = 0)
|
||||||
|
private HandleEnum exceptionHandle;
|
||||||
|
}
|
@ -13,10 +13,9 @@ import lombok.Getter;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum HandleEnum implements ICodeBook {
|
public enum HandleEnum implements ICodeBook {
|
||||||
|
|
||||||
NO_ACTION("1", "无需处理"),
|
INBOUND("1", "入库+1"),
|
||||||
IGNORE_AND_SAVE("2", "忽略并保存"),
|
OUTBOUND("2", "不入库-1"),
|
||||||
REPLENISH("3", "补货"),
|
DISCARD("3", "丢弃-1"),
|
||||||
OTHER("4", "其他")
|
|
||||||
;
|
;
|
||||||
|
|
||||||
@EnumValue
|
@EnumValue
|
||||||
|
@ -13,11 +13,11 @@ import lombok.Getter;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum ReviewResultEnum implements ICodeBook {
|
public enum ReviewResultEnum implements ICodeBook {
|
||||||
|
|
||||||
PASS("1", "通过"),
|
WAIT_SCAN("1", "待扫码"),
|
||||||
UN_PASS("2", "未通过"),
|
WAIT_SUBMIT("2", "待提交"),
|
||||||
WAIT_AUDIT("3", "等待审核"),
|
WAIT_REVIEW("3", "待审核"),
|
||||||
REJECT("4", "退回"),
|
PASS("4", "审核通过"),
|
||||||
WAIT_CHECK("5", "待盘点")
|
REJECT("5", "退回")
|
||||||
;
|
;
|
||||||
|
|
||||||
@EnumValue
|
@EnumValue
|
||||||
|
@ -14,11 +14,9 @@ import lombok.Getter;
|
|||||||
public enum StockStatusEnum implements ICodeBook {
|
public enum StockStatusEnum implements ICodeBook {
|
||||||
|
|
||||||
IN("0", "在库"),
|
IN("0", "在库"),
|
||||||
|
|
||||||
|
|
||||||
OUT("1", "外借"),
|
OUT("1", "外借"),
|
||||||
|
|
||||||
OFF("2", "下架"),
|
OFF("2", "下架"),
|
||||||
|
LOST("3", "丢失"),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
package tech.riemann.ims.enums;
|
||||||
|
|
||||||
|
import club.zhcs.lina.utils.enums.ICodeBook;
|
||||||
|
import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author mayong
|
||||||
|
* @since 2024/12/8 11:18
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum StocktakingExceptonalStatusEnum implements ICodeBook {
|
||||||
|
|
||||||
|
SOCK_IN_BUT_SCAN_NOT_EXIST("1", "库房在库状态但是扫码不存在"),
|
||||||
|
SOCK_OUT_BUT_SCAN_EXIST("2", "库房不是在库状态但是扫码存在"),
|
||||||
|
SOCK_NOT_EXIST_BUT_SCAN_EXIST("3", "库房不存在该条码但是扫码存在"),
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
@EnumValue
|
||||||
|
final String code;
|
||||||
|
final String description;
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package tech.riemann.ims.mapper.material;
|
package tech.riemann.ims.mapper.material;
|
||||||
|
|
||||||
import tech.riemann.ims.entity.material.StocktakingAudit;
|
import tech.riemann.ims.entity.material.StocktakingScanDetail;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -10,6 +10,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
*
|
*
|
||||||
* @since 2024-12-06 10:32:29
|
* @since 2024-12-06 10:32:29
|
||||||
*/
|
*/
|
||||||
public interface StocktakingAuditMapper extends BaseMapper<StocktakingAudit> {
|
public interface StocktakingScanDetailMapper extends BaseMapper<StocktakingScanDetail> {
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package tech.riemann.ims.mapper.material;
|
||||||
|
|
||||||
|
import tech.riemann.ims.entity.material.StocktakingScanExceptionalData;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扫码盘点异常数据表 Mapper 接口
|
||||||
|
*
|
||||||
|
* @author mayong)
|
||||||
|
*
|
||||||
|
* @since 2024-12-08 11:49:52
|
||||||
|
*/
|
||||||
|
public interface StocktakingScanExceptionalDataMapper extends BaseMapper<StocktakingScanExceptionalData> {
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package tech.riemann.ims.service.material;
|
package tech.riemann.ims.service.material;
|
||||||
|
|
||||||
import tech.riemann.ims.entity.material.StocktakingAudit;
|
import tech.riemann.ims.entity.material.StocktakingScanDetail;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import org.nutz.spring.boot.service.interfaces.IdNameEntityService;
|
import org.nutz.spring.boot.service.interfaces.IdNameEntityService;
|
||||||
|
|
||||||
@ -13,6 +13,6 @@ import org.nutz.spring.boot.service.interfaces.IdNameEntityService;
|
|||||||
*
|
*
|
||||||
* @since 2024-12-06 10:32:29
|
* @since 2024-12-06 10:32:29
|
||||||
*/
|
*/
|
||||||
public interface IStocktakingAuditService extends IService<StocktakingAudit>, IdNameEntityService<StocktakingAudit> {
|
public interface IStocktakingScanDetailService extends IService<StocktakingScanDetail>, IdNameEntityService<StocktakingScanDetail> {
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package tech.riemann.ims.service.material;
|
||||||
|
|
||||||
|
import tech.riemann.ims.entity.material.StocktakingScanExceptionalData;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import org.nutz.spring.boot.service.interfaces.IdNameEntityService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 扫码盘点异常数据表 服务类
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author mayong)
|
||||||
|
*
|
||||||
|
* @since 2024-12-08 11:49:52
|
||||||
|
*/
|
||||||
|
public interface IStocktakingScanExceptionalDataService extends IService<StocktakingScanExceptionalData>, IdNameEntityService<StocktakingScanExceptionalData> {
|
||||||
|
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
package tech.riemann.ims.service.material.impl;
|
package tech.riemann.ims.service.material.impl;
|
||||||
|
|
||||||
import tech.riemann.ims.entity.material.StocktakingAudit;
|
import tech.riemann.ims.entity.material.StocktakingScanDetail;
|
||||||
import tech.riemann.ims.mapper.material.StocktakingAuditMapper;
|
import tech.riemann.ims.mapper.material.StocktakingScanDetailMapper;
|
||||||
import tech.riemann.ims.service.material.IStocktakingAuditService;
|
import tech.riemann.ims.service.material.IStocktakingScanDetailService;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -21,7 +21,7 @@ import org.springframework.stereotype.Service;
|
|||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class StocktakingAuditServiceImpl extends ServiceImpl<StocktakingAuditMapper, StocktakingAudit> implements IStocktakingAuditService {
|
public class StocktakingScanDetailServiceImpl extends ServiceImpl<StocktakingScanDetailMapper, StocktakingScanDetail> implements IStocktakingScanDetailService {
|
||||||
|
|
||||||
private final Dao dao;
|
private final Dao dao;
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ public class StocktakingAuditServiceImpl extends ServiceImpl<StocktakingAuditMap
|
|||||||
* @see org.nutz.spring.boot.service.interfaces.EntityService#getEntityType()
|
* @see org.nutz.spring.boot.service.interfaces.EntityService#getEntityType()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Class<StocktakingAudit> getEntityType() {
|
public Class<StocktakingScanDetail> getEntityType() {
|
||||||
return StocktakingAudit.class;
|
return StocktakingScanDetail.class;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
package tech.riemann.ims.service.material.impl;
|
||||||
|
|
||||||
|
import tech.riemann.ims.entity.material.StocktakingScanExceptionalData;
|
||||||
|
import tech.riemann.ims.mapper.material.StocktakingScanExceptionalDataMapper;
|
||||||
|
import tech.riemann.ims.service.material.IStocktakingScanExceptionalDataService;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
import org.nutz.dao.Dao;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 扫码盘点异常数据表 服务实现类
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author mayong)
|
||||||
|
*
|
||||||
|
* @since 2024-12-08 11:49:52
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class StocktakingScanExceptionalDataServiceImpl extends ServiceImpl<StocktakingScanExceptionalDataMapper, StocktakingScanExceptionalData> implements IStocktakingScanExceptionalDataService {
|
||||||
|
|
||||||
|
private final Dao dao;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
* @see org.nutz.spring.boot.service.ExtService#dao()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Dao dao() {
|
||||||
|
return dao;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
* @see org.nutz.spring.boot.service.interfaces.EntityService#getEntityType()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Class<StocktakingScanExceptionalData> getEntityType() {
|
||||||
|
return StocktakingScanExceptionalData.class;
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="tech.riemann.ims.mapper.material.StocktakingAuditMapper">
|
<mapper namespace="tech.riemann.ims.mapper.material.StocktakingScanDetailMapper">
|
||||||
|
|
||||||
<!-- 通用查询映射结果 -->
|
<!-- 通用查询映射结果 -->
|
||||||
<resultMap id="BaseResultMap" type="tech.riemann.ims.entity.material.StocktakingAudit">
|
<resultMap id="BaseResultMap" type="tech.riemann.ims.entity.material.StocktakingScanDetail">
|
||||||
<result column="id" property="id" />
|
<result column="id" property="id" />
|
||||||
<result column="created_time" property="createdTime" />
|
<result column="created_time" property="createdTime" />
|
||||||
<result column="updated_time" property="updatedTime" />
|
<result column="updated_time" property="updatedTime" />
|
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="tech.riemann.ims.mapper.material.StocktakingScanExceptionalDataMapper">
|
||||||
|
|
||||||
|
<!-- 通用查询映射结果 -->
|
||||||
|
<resultMap id="BaseResultMap" type="tech.riemann.ims.entity.material.StocktakingScanExceptionalData">
|
||||||
|
<result column="id" property="id" />
|
||||||
|
<result column="created_time" property="createdTime" />
|
||||||
|
<result column="updated_time" property="updatedTime" />
|
||||||
|
<result column="created_by" property="createdBy" />
|
||||||
|
<result column="updated_by" property="updatedBy" />
|
||||||
|
<result column="s_apply_id" property="applyId" />
|
||||||
|
<result column="s_material_id" property="id" />
|
||||||
|
<result column="s_barcode" property="barcode" />
|
||||||
|
<result column="s_exception_reason" property="exceptionReason" />
|
||||||
|
<result column="s_exception_handle" property="exceptionHandle" />
|
||||||
|
</resultMap>
|
||||||
|
<!-- 通用查询结果列 -->
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
id,
|
||||||
|
created_time,
|
||||||
|
updated_time,
|
||||||
|
created_by,
|
||||||
|
updated_by,
|
||||||
|
s_apply_id, s_material_id, s_barcode, s_exception_reason, s_exception_handle
|
||||||
|
</sql>
|
||||||
|
</mapper>
|
@ -68,7 +68,7 @@ public class MysqlGenerator {
|
|||||||
List<String> relationTables = Lang.list();
|
List<String> relationTables = Lang.list();
|
||||||
|
|
||||||
NutMap.NEW()
|
NutMap.NEW()
|
||||||
.addv("material", Lang.array("t_material_barcode_config", "t_material_stock_detail", "t_stocktaking_audit"))
|
.addv("material", Lang.array("t_stocktaking_scan_exceptional_data"))
|
||||||
.entrySet()
|
.entrySet()
|
||||||
.stream()
|
.stream()
|
||||||
.forEach(e -> {
|
.forEach(e -> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user