diff --git a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/AiBaseModel.java b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/AiBaseModel.java index c5a956b6..b0be3130 100644 --- a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/AiBaseModel.java +++ b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/AiBaseModel.java @@ -39,7 +39,7 @@ public class AiBaseModel { /** * 模型类型编码,同ai_model_type中的编码 */ - private Long modelTypeCode; + private String modelTypeCode; /** * 基础模型名称,例如: DeepSeek-V3, Qwen1.5-72B, ChatGLM3 diff --git a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/bo/AiBaseModelBo.java b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/bo/AiBaseModelBo.java index 65727f7f..bd40a2e0 100644 --- a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/bo/AiBaseModelBo.java +++ b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/bo/AiBaseModelBo.java @@ -42,7 +42,7 @@ public class AiBaseModelBo { * 模型类型编码,同ai_model_type中的编码 */ @NotNull(message = "模型类型编码不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long modelTypeCode; + private String modelTypeCode; /** * 基础模型名称,例如: DeepSeek-V3, Qwen1.5-72B, ChatGLM3 diff --git a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/vo/AiBaseModelVo.java b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/vo/AiBaseModelVo.java index 5d5bb357..dac9a41f 100644 --- a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/vo/AiBaseModelVo.java +++ b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/domain/vo/AiBaseModelVo.java @@ -53,7 +53,7 @@ public class AiBaseModelVo implements Serializable { * 模型类型编码,同ai_model_type中的编码 */ @ExcelProperty(value = "模型类型编码") - private Long modelTypeCode; + private String modelTypeCode; /** * 基础模型名称,例如: DeepSeek-V3, Qwen1.5-72B, ChatGLM3 diff --git a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/enums/AIProviderEnum.java b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/enums/AIProviderEnum.java index 0dee18e9..77ab4402 100644 --- a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/enums/AIProviderEnum.java +++ b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/enums/AIProviderEnum.java @@ -1,21 +1,27 @@ package org.dromara.ai.process.enums; public enum AIProviderEnum { - DEEPSEEK("DeepSeek"), - TONGYI_QIANWEN("TongYi-QianWen"),//阿里通义千问 - TENCENT_LKE("Tencent-LKE"),//腾讯云智能体开发平台 - WENXIN_YIYAN("WenXin-YiYan");//百度文心一言 + DEEPSEEK("DeepSeek", 1L), + TENCENT_LKE("Tencent-LKE", 2L),//腾讯云智能体开发平台 + TONGYI_QIANWEN("TongYi-QianWen", 3L);//阿里通义千问 private final String name; - AIProviderEnum(String name) { + private final Long code;//等于ai_base_model表的base_model_id + + AIProviderEnum(String name, Long code) { this.name = name; + this.code = code; } public String getName() { return name; } + public Long getCode() { + return code; + } + /** * 从字符串转换为枚举 */ @@ -28,4 +34,16 @@ public enum AIProviderEnum { } throw new IllegalArgumentException("未知的大模型提供商: " + text); } + + /** + * 从code(baseModeId)转换为枚举 + */ + public static AIProviderEnum fromCode(Long code) { + for (AIProviderEnum provider : AIProviderEnum.values()) { + if (provider.getCode().equals(code)) { + return provider; + } + } + throw new IllegalArgumentException("未知的大模型提供商: " + code); + } } diff --git a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/provider/processor/AIProviderProcessorFactory.java b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/provider/processor/AIProviderProcessorFactory.java index b03f9d2c..223bffc4 100644 --- a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/provider/processor/AIProviderProcessorFactory.java +++ b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/provider/processor/AIProviderProcessorFactory.java @@ -38,4 +38,12 @@ public class AIProviderProcessorFactory { AIProviderEnum provider = AIProviderEnum.fromString(providerName); return getProcessor(provider); } + + /** + * 根据base_model_id获取对应的API实现 + */ + public IUnifiedAIProviderProcessor getProcessor(Long baseModelId) { + AIProviderEnum provider = AIProviderEnum.fromCode(baseModelId); + return getProcessor(provider); + } } diff --git a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/provider/processor/impl/DeepSeekProcessor.java b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/provider/processor/impl/DeepSeekProcessor.java index bba240d3..5cd9ee63 100644 --- a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/provider/processor/impl/DeepSeekProcessor.java +++ b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/process/provider/processor/impl/DeepSeekProcessor.java @@ -259,8 +259,8 @@ public class DeepSeekProcessor extends BaseAIProviderProcessor { AiChatMessageDetail aiChatMessageDetail = new AiChatMessageDetail(); aiChatMessageDetail.setChatMessageId(aiChatMessage.getChatMessageId()); aiChatMessageDetail.setSessionId(request.getSessionId()); - aiChatMessageDetail.setQuestionContent(objectMapper.writeValueAsString(messages.get(messages.size() - 1).getContent())); - aiChatMessageDetail.setAnswerContent(fullResponse); + aiChatMessageDetail.setQuestionContent(objectMapper.writeValueAsString(request.getQuestionContent())); + aiChatMessageDetail.setAnswerContent(objectMapper.writeValueAsString(fullResponse)); // aiChatMessageDetail.setPromptToken(1L); // aiChatMessageDetail.setCompletionToken(1L); // aiChatMessageDetail.setTotalToken(1L); diff --git a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/service/impl/AIAssistantServiceImpl.java b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/service/impl/AIAssistantServiceImpl.java index 2006e515..8983bf2c 100644 --- a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/service/impl/AIAssistantServiceImpl.java +++ b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/service/impl/AIAssistantServiceImpl.java @@ -1,11 +1,10 @@ package org.dromara.ai.service.impl; import com.fasterxml.jackson.core.JsonProcessingException; -import org.dromara.ai.service.IAiChatMessageDetailService; -import org.dromara.ai.service.IAiChatMessageService; -import org.dromara.ai.service.IAiModelService; +import org.dromara.ai.domain.AiModel; +import org.dromara.ai.mapper.AiModelMapper; import org.dromara.ai.test.vectorization.process.IEmbeddingProcessor; -import org.dromara.ai.mapper.DatabaseMetaMapper; +import org.dromara.ai.mapper.SQLServerDatabaseMetaMapper; import org.dromara.ai.process.dto.AIMessage; import org.dromara.ai.process.dto.AIRequest; import org.dromara.ai.process.dto.AIResponse; @@ -33,7 +32,10 @@ import java.util.*; public class AIAssistantServiceImpl implements IAIAssistantService { @Autowired - private DatabaseMetaMapper databaseMetaMapper; + private SQLServerDatabaseMetaMapper databaseMetaMapper; + + @Autowired + private AiModelMapper aiModelMapper; @Autowired private Map aiProviderProcessorMap; @@ -70,7 +72,8 @@ public class AIAssistantServiceImpl implements IAIAssistantService { } final String messageTopic = messages.get(messages.size() - 1).getContent(); - finalAiRequest.setMessageTopic(messageTopic); + finalAiRequest.setMessageTopic(messageTopic);//暂时跟提问的内容相同,后续可以总结 + finalAiRequest.setQuestionContent(messageTopic); // 尝试获取处理器,如果找不到则抛出异常 return Flux.defer(() -> { @@ -96,6 +99,12 @@ public class AIAssistantServiceImpl implements IAIAssistantService { } + /** + * 知识库检索 + * + * @param aiRequest + * @return + */ private AIRequest knowledgeChatInfo(AIRequest aiRequest) { try { List messages = aiRequest.getMessages(); @@ -110,13 +119,22 @@ public class AIAssistantServiceImpl implements IAIAssistantService { aiRequest.setText(messageContent); StringBuilder sb = new StringBuilder(messageContent); - String embeddingProcessor = "Tencent-LKE"; - aiRequest.setApiKey("AKIDyvlTyJTRDmCTXs56uUvDJNK6h9SZVDlB"); - aiRequest.setApiSecret("IOXloeHrCLH4iw30lKjxynPq7rPlwugF"); - IUnifiedAIProviderProcessor tencentLkeProcessor = aiProviderProcessorFactory.getProcessor(embeddingProcessor); + Long embeddingModelId = aiRequest.getEmbeddingModelId(); + AiModel aiModel = aiModelMapper.selectById(embeddingModelId); + if (aiModel == null) { + throw new RuntimeException("未找到对应的模型信息"); + } + +// String embeddingProcessor = "Tencent-LKE"; + //todo:后续从redis中获取 + aiRequest.setApiKey(EncryptUtils.decryptByBase64(aiModel.getApiKey())); + aiRequest.setApiSecret(EncryptUtils.decryptByBase64(aiModel.getApiSecret())); + IUnifiedAIProviderProcessor tencentLkeProcessor = aiProviderProcessorFactory.getProcessor(aiModel.getBaseModelId()); List queryEmbedding = tencentLkeProcessor.getEmbedding(aiRequest); - int topK = 5; + int topK = aiRequest.getRetrieveLimit() == null || aiRequest.getRetrieveLimit() <= 0 ? + 5 : aiRequest.getRetrieveLimit();//retrieveLimit,检索限制 + List searchResultList = vectorDBService. search(queryEmbedding, aiRequest.getKnowledgeBaseId(), topK); @@ -170,26 +188,6 @@ public class AIAssistantServiceImpl implements IAIAssistantService { } } - - public String aiFillForm() { - String aiClient = "deepSeek"; - IUnifiedAIProviderProcessor service = aiProviderProcessorMap.get(aiClient); - if (service == null) { - throw new IllegalArgumentException("Unsupported payment type"); - } - - return ""; - } - - - public String uploadContent() { - String embeddingProcessor = "tencentlke"; - IEmbeddingProcessor service = embeddingProcessorMap.get(embeddingProcessor); - - return ""; - } - - @Override public boolean testAIModel(String provider, AIRequest aiRequest) { IUnifiedAIProviderProcessor processor = aiProviderProcessorMap.get(provider); @@ -215,4 +213,17 @@ public class AIAssistantServiceImpl implements IAIAssistantService { } + + public String aiFillForm() { + String aiClient = "deepSeek"; + IUnifiedAIProviderProcessor service = aiProviderProcessorMap.get(aiClient); + if (service == null) { + throw new IllegalArgumentException("Unsupported payment type"); + } + + return ""; + } + + + } diff --git a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/service/impl/AiChatMessageServiceImpl.java b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/service/impl/AiChatMessageServiceImpl.java index 723f1478..823bc132 100644 --- a/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/service/impl/AiChatMessageServiceImpl.java +++ b/ruoyi-modules/hwmom-ai/src/main/java/org/dromara/ai/service/impl/AiChatMessageServiceImpl.java @@ -86,7 +86,8 @@ public class AiChatMessageServiceImpl implements IAiChatMessageService { .eq(bo.getDeductCost() != null, AiChatMessage::getDeductCost, bo.getDeductCost()) .eq(bo.getTotalToken() != null, AiChatMessage::getTotalToken, bo.getTotalToken()) .eq(bo.getModelId() != null, AiChatMessage::getModelId, bo.getModelId()) - .eq(bo.getKnowledgeBaseId() != null, AiChatMessage::getKnowledgeBaseId, bo.getKnowledgeBaseId()) + .eq(bo.getKnowledgeBaseId() != null && !bo.getKnowledgeBaseId().equals(-1L), AiChatMessage::getKnowledgeBaseId, bo.getKnowledgeBaseId()) + .isNull(bo.getKnowledgeBaseId() != null && bo.getKnowledgeBaseId().equals(-1L), AiChatMessage::getKnowledgeBaseId) .eq(StringUtils.isNotBlank(bo.getMessageType()), AiChatMessage::getMessageType, bo.getMessageType()) .orderByDesc(AiChatMessage::getCreateTime); return lqw; diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockDetail.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockDetail.java index fbff6cbf..68515c21 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockDetail.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockDetail.java @@ -105,14 +105,15 @@ public class WmsInstockDetail{ /** * 更新者 */ - @TableField(fill = FieldFill.INSERT_UPDATE) + @TableField(fill = FieldFill.UPDATE) private String updateBy; /** * 更新时间 */ - @TableField(fill = FieldFill.INSERT_UPDATE) + @TableField(fill = FieldFill.UPDATE) private Date updateTime; + // /** // * 打印数量 // */ @@ -146,21 +147,6 @@ public class WmsInstockDetail{ private String materialCategoryName;//字段映射 - /** - * 是否为AGV任务(0是,1否) - */ - private String isAgv; - - /** - * 完成数量 - */ - private BigDecimal completeQty; - - /** - * AGV状态(0待拾取 / 1运输中 / 2完成) - */ - private String agvStatus; - /** * 打印时间(打印记录的创建时间按) diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockOrder.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockOrder.java index 1828aa3e..facfeb0a 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockOrder.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockOrder.java @@ -99,22 +99,21 @@ public class WmsInstockOrder{ /** * 更新者 */ - @TableField(fill = FieldFill.INSERT_UPDATE) + @TableField(fill = FieldFill.UPDATE) private String updateBy; /** * 更新时间 */ - @TableField(fill = FieldFill.INSERT_UPDATE) + @TableField(fill = FieldFill.UPDATE) private Date updateTime; - - - /** * 租户id */ private String tenantId; + + @TableField(exist = false) private String warehouseCode;//字段映射 diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockPrint.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockPrint.java index 97de1a32..37b4c7c5 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockPrint.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockPrint.java @@ -96,13 +96,13 @@ public class WmsInstockPrint{ /** * 更新者 */ - @TableField(fill = FieldFill.INSERT_UPDATE) + @TableField(fill = FieldFill.UPDATE) private String updateBy; /** * 更新时间 */ - @TableField(fill = FieldFill.INSERT_UPDATE) + @TableField(fill = FieldFill.UPDATE) private Date updateTime; /** @@ -125,6 +125,18 @@ public class WmsInstockPrint{ */ private Date actualInboundTime; + + /** + * 是否为AGV任务(0是,1否) + */ + private String isAgv; + + + /** + * AGV状态(0待拾取 / 1运输中 / 2完成) + */ + private String agvStatus; + /** * 物料大类 */ diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsInstockDetailBo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsInstockDetailBo.java index 745818f7..87f59762 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsInstockDetailBo.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsInstockDetailBo.java @@ -191,21 +191,6 @@ public class WmsInstockDetailBo{ */ private String inspectionRequest; - /** - * 是否为AGV任务(0是,1否) - */ - private String isAgv; - - /** - * 完成数量 - */ - private BigDecimal completeQty; - - /** - * AGV状态(0待拾取 / 1运输中 / 2完成) - */ - private String agvStatus; - /** * 每包数量列表(当分包数量>1时使用) diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsInstockPrintBo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsInstockPrintBo.java index c1730b90..54a28be9 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsInstockPrintBo.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsInstockPrintBo.java @@ -111,4 +111,15 @@ public class WmsInstockPrintBo extends BaseEntity { */ private Date actualInboundTime; + /** + * 是否为AGV任务(0是,1否) + */ + private String isAgv; + + + /** + * AGV状态(0待拾取 / 1运输中 / 2完成) + */ + private String agvStatus; + } diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockDetailVo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockDetailVo.java index 26c33b83..cc3c8b09 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockDetailVo.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockDetailVo.java @@ -161,21 +161,6 @@ public class WmsInstockDetailVo implements Serializable { private String inspectionRequest; - /** - * 是否为AGV任务(0是,1否) - */ - private String isAgv; - - /** - * 完成数量 - */ - private BigDecimal completeQty; - - /** - * AGV状态(0待拾取 / 1运输中 / 2完成) - */ - private String agvStatus; - /** * 打印时间(打印记录的创建时间按) diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockPrintVo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockPrintVo.java index 5e2e924a..1a9a48e5 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockPrintVo.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockPrintVo.java @@ -142,5 +142,15 @@ public class WmsInstockPrintVo implements Serializable { */ private Date createTime; + /** + * 是否为AGV任务(0是,1否) + */ + private String isAgv; + + + /** + * AGV状态(0待拾取 / 1运输中 / 2完成) + */ + private String agvStatus; } diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/BaseMaterialInfoServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/BaseMaterialInfoServiceImpl.java index 3c4f0693..00391b95 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/BaseMaterialInfoServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/BaseMaterialInfoServiceImpl.java @@ -90,7 +90,7 @@ public class BaseMaterialInfoServiceImpl implements IBaseMaterialInfoService { .leftJoin(BaseMaterialType.class, BaseMaterialType::getMatrialTypeId, BaseMaterialInfo::getMaterialTypeId) //关联计量单位信息 - .select(BaseMeasurementUnitInfo::getUnitName) + .selectAs(BaseMeasurementUnitInfo::getUnitName, BaseMaterialInfo::getMaterialUnit) .leftJoin(BaseMeasurementUnitInfo.class, BaseMeasurementUnitInfo::getUnitId, BaseMaterialInfo::getMaterialUnitId) //关联物料大类信息(物料大类从字典改为了数据库表) diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockDetailServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockDetailServiceImpl.java index 4cdc05f0..7924a412 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockDetailServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockDetailServiceImpl.java @@ -30,8 +30,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.Map; @@ -96,14 +96,15 @@ public class WmsInstockDetailServiceImpl implements IWmsInstockDetailService { MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsInstockDetail.class) .selectAll(WmsInstockDetail.class) - // 关联表查询物料大类名称 .select(BaseMaterialCategory::getMaterialCategoryName) .leftJoin(BaseMaterialCategory.class, BaseMaterialCategory::getMaterialCategoryId, WmsInstockDetail::getMaterialCategoryId) - - .select(BaseMaterialInfo::getInspectionRequest)//质检要求(0必检,1免检) + //质检要求(0必检,1免检) + .select(BaseMaterialInfo::getInspectionRequest) .leftJoin(BaseMaterialInfo.class, BaseMaterialInfo::getMaterialId, WmsInstockDetail::getMaterialId) + + .eq(StringUtils.isNotBlank(bo.getIsInspection()), WmsInstockDetail::getIsInspection, bo.getIsInspection()) .eq(bo.getInstockQty() != null, WmsInstockDetail::getInstockQty, bo.getInstockQty()) @@ -120,6 +121,8 @@ public class WmsInstockDetailServiceImpl implements IWmsInstockDetailService { .like(StringUtils.isNotBlank(bo.getUnitName()), WmsInstockDetail::getUnitName, bo.getUnitName()) .eq(StringUtils.isNotBlank(bo.getCodeYesNo()), WmsInstockDetail::getCodeYesNo, bo.getCodeYesNo()) .eq(StringUtils.isNotBlank(bo.getMaterialCategoryId()), WmsInstockDetail::getMaterialCategoryId, bo.getMaterialCategoryId()) + //新增 + .eq(StringUtils.isNotBlank(bo.getInspectionRequest()), BaseMaterialInfo::getInspectionRequest, bo.getInspectionRequest()) .orderByDesc(WmsInstockDetail::getCreateTime); return lqw; } @@ -230,70 +233,42 @@ public class WmsInstockDetailServiceImpl implements IWmsInstockDetailService { String baseOrder = generateOrder(printSeq); BigDecimal totalPackaged = BigDecimal.ZERO; if (splitInt > 1) { - // 分包逻辑 - 支持平均分包和自定义分包两种模式 + // 分包逻辑 - 统一处理模式 List packageQtyList = bo.getPackageQtyList(); - String packageMode = bo.getPackageMode(); - - // 默认为平均分包模式 - if (packageMode == null) { - packageMode = "average"; + + // 验证分包数据 + if (packageQtyList == null || packageQtyList.size() != splitInt) { + throw new ServiceException("分包数量列表与分包数量不匹配"); } - - if ("custom".equals(packageMode) && packageQtyList != null && packageQtyList.size() == splitInt) { - // 自定义模式:使用用户指定的每包数量 - BigDecimal totalCustomQty = packageQtyList.stream() - .map(BigDecimal::valueOf) - .reduce(BigDecimal.ZERO, BigDecimal::add); - - if (totalCustomQty.compareTo(remaining) > 0) { - throw new ServiceException("每包数量总计不能超过剩余数量"); - } - - for (int i = 1; i <= splitInt; i++) { - String order = baseOrder + String.format("%03d", i); - String batchCode = generateBatchCode(bo, bo.getBatchCode(), order); - - BigDecimal currentPackageQty = BigDecimal.valueOf(packageQtyList.get(i - 1)); - - WmsInstockPrint print = new WmsInstockPrint(); - BeanUtils.copyProperties(bo, print); - print.setBatchCode(batchCode); - print.setApportionQty(currentPackageQty); - print.setMaterialQty(1L); // 每个包打印1份 - print.setInboundStatus("0"); // 入库状态(0-待入库,1-已入库,2-入库中) - - wmsInstockPrintService.insertWmsInstockPrint(print); - - totalPackaged = totalPackaged.add(currentPackageQty); - } - } else { - // 平均分包模式(默认模式)或自定义模式但数据不完整 - if ("average".equals(packageMode) || packageQtyList == null || packageQtyList.size() != splitInt) { - // 使用平均分包逻辑 - if (remaining.compareTo(split) < 0 || remaining.remainder(split).compareTo(BigDecimal.ZERO) != 0) { - throw new ServiceException("无法平均分包,剩余数量不能被平均分配"); - } - BigDecimal per = remaining.divide(split, 0, RoundingMode.DOWN); - - for (int i = 1; i <= splitInt; i++) { - String order = baseOrder + String.format("%03d", i); - String batchCode = generateBatchCode(bo, bo.getBatchCode(), order); - - WmsInstockPrint print = new WmsInstockPrint(); - BeanUtils.copyProperties(bo, print); - print.setBatchCode(batchCode); - print.setApportionQty(per); - print.setMaterialQty(1L); // 每个包打印1份 - print.setInboundStatus("0"); // 入库状态(0-待入库,1-已入库,2-入库中) - - wmsInstockPrintService.insertWmsInstockPrint(print); - - totalPackaged = totalPackaged.add(per); - } - } else { - // 使用自定义数量但数据验证失败 - throw new ServiceException("自定义分包数量数据验证失败"); - } + + // 验证每包数量总计是否等于入库数量 + BigDecimal totalCustomQty = packageQtyList.stream() + .map(BigDecimal::valueOf) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + if (totalCustomQty.compareTo(detail.getInstockQty()) != 0) { + throw new ServiceException("分包数量总计必须等于入库数量" + detail.getInstockQty() + ",当前总计:" + totalCustomQty); + } + + // 遍历packageQtyList创建打印记录 + for (int i = 1; i <= splitInt; i++) { + String order = baseOrder + String.format("%03d", i); + String batchCode = generateBatchCode(bo, bo.getBatchCode(), order); + + BigDecimal currentPackageQty = BigDecimal.valueOf(packageQtyList.get(i - 1)); + + WmsInstockPrint print = new WmsInstockPrint(); + BeanUtils.copyProperties(bo, print); + print.setBatchCode(batchCode); + print.setApportionQty(currentPackageQty); + print.setMaterialQty(1L); // 每个包打印1份 + print.setInboundStatus("0"); // 入库状态(0-待入库,1-已入库,2-入库中) + print.setCreateBy(LoginHelper.getUsername()); + print.setCreateTime(new Date()); + + wmsInstockPrintService.insertWmsInstockPrint(print); + + totalPackaged = totalPackaged.add(currentPackageQty); } } else { // 重复打印逻辑(split == 1) @@ -371,4 +346,5 @@ public class WmsInstockDetailServiceImpl implements IWmsInstockDetailService { // } return baseMapper.deleteByIds(ids) > 0; } + }