This commit is contained in:
zhangke 2025-07-25 15:09:12 +08:00
parent 0665a12cb8
commit 4ee73bc191
18 changed files with 828 additions and 12 deletions

View File

@ -1,13 +1,16 @@
package com.nflg.wms.admin.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nflg.wms.common.pojo.qo.SRMOrderReceiveQO;
import com.nflg.wms.common.pojo.qo.SRMQualityInspectionResult;
import com.nflg.wms.repository.entity.WmsSrmOrder;
import com.nflg.wms.repository.entity.WmsSrmOrderItem;
import com.nflg.wms.repository.service.IWmsSrmOrderItemService;
import com.nflg.wms.repository.service.IWmsSrmOrderService;
import com.nflg.wms.repository.entity.WmsSrmQualityInspection;
import com.nflg.wms.repository.entity.WmsTaskItem;
import com.nflg.wms.repository.service.*;
import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@ -18,6 +21,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
@ -34,6 +39,12 @@ public class SRMController extends BaseController {
@Resource
private IWmsSrmOrderItemService srmOrderItemService;
@Resource
private IWmsSrmQualityInspectionService srmQualityInspectionService;
@Resource
private IWmsTaskService taskService;
/**
* 接收SRM送货单
*/
@ -69,4 +80,94 @@ public class SRMController extends BaseController {
return ex.getMessage();
}
}
/**
* SRM 推送质检单到WMS
*/
@Transactional
@PostMapping("/SendNFInspect")
public Object receiveQualityInspection(@RequestBody SRMQualityInspectionResult request) {
Integer result = 1;
try {
WmsSrmQualityInspection inspect = srmQualityInspectionService.lambdaQuery()
.eq(WmsSrmQualityInspection::getInspectionNum, request.getInspectionNum())
.one();
List<WmsTaskItem> tasks = new ArrayList<WmsTaskItem>();
if (Objects.nonNull(inspect)) {
inspect.setFactory(request.getFactory())
.setDeliveryQty(request.getDeliveryQty())
.setInspectionResult(request.getInspectionResult())
.setItemCode(request.getItemCode())
.setItemName(request.getItemName())
.setSupplerNum(request.getSupplierNum())
.setInspectionType(request.getInspectionType())
.setPoLineNumber(String.valueOf(request.getPoLineNumber()))
.setInspectionQty(request.getInspectionQty())
.setUnit(request.getUnit())
.setReceivedWarehouse(request.getReceivedWarehouse())
.setUnqualifiedQty(request.getUnqualifiedQty())
.setPoNum(request.getPoNum())
.setQualifiedQty(request.getQualifiedQty())
.setMaterialBatch(request.getMaterialBatch())
.setSerialNum(request.getSerialNum())
.setLineNumber(request.getLineNumber())
.setNoteNum(request.getNoteNum())
.setLastModifyTime(LocalDateTime.now());
result = srmQualityInspectionService.updateById(inspect) ? 0 : 1;
} else {
inspect = new WmsSrmQualityInspection()
.setId(IdUtil.getSnowflakeNextId())
.setInspectionNum(request.getInspectionNum())
.setFactory(request.getFactory())
.setDeliveryQty(request.getDeliveryQty())
.setInspectionResult(request.getInspectionResult())
.setItemCode(request.getItemCode())
.setItemName(request.getItemName())
.setSupplerNum(request.getSupplierNum())
.setInspectionType(request.getInspectionType())
.setPoLineNumber(String.valueOf(request.getPoLineNumber()))
.setInspectionQty(request.getInspectionQty())
.setUnit(request.getUnit())
.setReceivedWarehouse(request.getReceivedWarehouse())
.setUnqualifiedQty(request.getUnqualifiedQty())
.setPoNum(request.getPoNum())
.setQualifiedQty(request.getQualifiedQty())
.setMaterialBatch(request.getMaterialBatch())
.setSerialNum(request.getSerialNum())
.setLineNumber(request.getLineNumber())
.setNoteNum(request.getNoteNum())
.setAcceptTime(LocalDateTime.now());
result = srmQualityInspectionService.save(inspect) ? 0 : 1;
}
tasks.add(
new WmsTaskItem().setItemCode(request.getItemCode())
.setItemName(request.getItemName())
.setReceivedWarehouse(request.getReceivedWarehouse())
.setInspectionQty(request.getInspectionQty())
.setIsQuality(true)
.setFactory(request.getFactory())
.setFailResult(request.unqualifiedReason)
.setPoLineNumber(String.valueOf(request.getPoLineNumber()))
.setPoNum(request.getPoNum())
.setUnit(request.getUnit())
.setUnqualifiedQty(request.getUnqualifiedQty())
.setQualifiedQty(request.getQualifiedQty())
.setSerialNumber(String.valueOf(request.getSerialNum()))
.setSerialNumber(String.valueOf(request.getSerialNum()))
.setLineNumber(String.valueOf(request.getLineNumber()))
.setNoteNum(request.getNoteNum())
.setInspectionOrder(request.receiveNum)
);
if (result == 0 && CollectionUtil.isNotEmpty(tasks))
if (!taskService.generateTask(tasks, "普通物料送货单"))
log.error("质检单生成上架任务失败");
return result;
} catch (Exception ex) {
log.error("SRM送货单保存失败", ex);
return ex.getMessage();
}
}
}

View File

@ -0,0 +1,120 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class SRMQualityInspectionResult {
/**
质检单号
*/
public String inspectionNum;
/**
工厂
*/
public String factory;
/**
送货数量
*/
public BigDecimal deliveryQty;
/**
检验结果
*/
public String inspectionResult;
/**
物料号
*/
public String itemCode;
/**
供应商代码
*/
public String supplierNum;
/**
检验类型
*/
public String inspectionType;
/**
采购单行号
*/
public String poLineNumber;
/**
检验数量
*/
public BigDecimal inspectionQty;
/**
物料描述
*/
public String itemName;
/**
单位
*/
public String unit;
/**
收货仓库
*/
public String receivedWarehouse;
/**
不合格原因
*/
public String unqualifiedReason;
/**
采购订单号
*/
public String poNum;
/**
物料凭证收货时SAP返回的凭证
*/
public String receiveNum;
/**
不合格数量
*/
public BigDecimal unqualifiedQty;
/**
合格数量合格数量
*/
public BigDecimal qualifiedQty;
/**
收货时的凭证
*/
public String materialBatch;
/**
收货时的批次
*/
public String receiveBatchNum;
/**
收货时的序列号
*/
public String serialNum;
/**
送货单行号
*/
public String lineNumber;
/**
送货单号
*/
public String noteNum;
}

View File

@ -0,0 +1,149 @@
package com.nflg.wms.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("wms_srm_quality_inspection")
public class WmsSrmQualityInspection implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 质检单号
*/
private String inspectionNum;
/**
* 工厂
*/
private String factory;
/**
* 送货数量
*/
private BigDecimal deliveryQty;
/**
* 检验结果
*/
private String inspectionResult;
/**
* 物料编号
*/
private String itemCode;
/**
* 供应商代码
*/
private String supplerNum;
/**
* 检验类型
*/
private String inspectionType;
/**
* 采购单行号
*/
private String poLineNumber;
/**
* 检验数量
*/
private BigDecimal inspectionQty;
/**
* 物料描述
*/
private String itemName;
/**
* 物料单位
*/
private String unit;
/**
* 仓库编号
*/
private String receivedWarehouse;
/**
* 不合格原因
*/
private String unqualifiedReason;
/**
* 采购订单号
*/
private String poNum;
/**
* 物料凭证收货时SAP返回的凭证
*/
private String receiveNum;
/**
* 不合格数量
*/
private BigDecimal unqualifiedQty;
/**
* 合格数量
*/
private BigDecimal qualifiedQty;
/**
* 收货时的凭证
*/
private String materialBatch;
/**
* 收货时的序列号
*/
private String serialNum;
/**
* 送货单行号
*/
private String lineNumber;
/**
* 送货单号
*/
private String noteNum;
/**
* 接收时间
*/
private LocalDateTime acceptTime;
/**
* 最后修改时间
*/
private LocalDateTime lastModifyTime;
}

View File

@ -0,0 +1,58 @@
package com.nflg.wms.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Getter
@Setter
@ToString
@TableName("wms_task")
@Accessors(chain = true)
public class WmsTask implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 任务号SJ-+任务源单号
*/
private String taskNumber;
/**
* 任务来源普通物料采购收货
*/
private String taskFrom;
/**
* 任务源单号
*/
private String orderNumber;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后一次添加任务单的时间
*/
private LocalDateTime modifyTime;
}

View File

@ -0,0 +1,152 @@
package com.nflg.wms.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("wms_task_item")
public class WmsTaskItem implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
private String taskNumber;
private String poLineNumber;
private String poNum;
/**
* 送货单行号
*/
private String lineNumber;
/**
* 送货单号
*/
private String noteNum;
/**
* 物料编号
*/
private String itemCode;
/**
* 物料描述
*/
private String itemName;
/**
* 物料单位
*/
private String unit;
/**
* 仓库编号
*/
private String receivedWarehouse;
/**
* 储位
*/
private String storageLocation;
/**
* 标志位
*/
private Short signPosition;
/**
* 是否质检
*/
private Boolean isQuality;
/**
* 不合格数量
*/
private BigDecimal unqualifiedQty;
/**
* 合格数量
*/
private BigDecimal qualifiedQty;
/**
* 工厂
*/
private String factory;
/**
* 数据状态 0 待上架1 已上架2 sap同步失败
*/
private Short dataStatus;
/**
* sap 同步失败原因
*/
private String failResult;
/**
* 上架操作人
*/
private Long operationUserId;
/**
* 上架操作人
*/
private String operationUserName;
/**
* 批次号
*/
private String batchNumber;
/**
* 序列号,多个序列号使用;号隔开
*/
private String serialNumber;
/**
* 报检数量
*/
private BigDecimal inspectionQty;
/**
* 物料凭证编号
*/
private String materialVoucherNum;
/**
* 物料凭证年度
*/
private String materialVoucherYear;
/**
* 物料有效期
*/
private LocalDateTime periodTime;
private String inspectionOrder;
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.repository.entity.WmsSrmQualityInspection;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsSrmQualityInspectionMapper extends BaseMapper<WmsSrmQualityInspection> {
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.repository.entity.WmsTaskItem;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsTaskItemMapper extends BaseMapper<WmsTaskItem> {
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.repository.entity.WmsTask;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsTaskMapper extends BaseMapper<WmsTask> {
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsSrmQualityInspection;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsSrmQualityInspectionService extends IService<WmsSrmQualityInspection> {
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsTaskItem;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsTaskItemService extends IService<WmsTaskItem> {
}

View File

@ -0,0 +1,22 @@
package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.repository.entity.WmsTaskItem;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsTaskService extends IService<WmsTask> {
/**
生成任务单
*/
boolean generateTask(List<WmsTaskItem> tasks, String taskSource);
}

View File

@ -0,0 +1,20 @@
package com.nflg.wms.repository.service.impl;
import com.nflg.wms.repository.entity.WmsSrmQualityInspection;
import com.nflg.wms.repository.mapper.WmsSrmQualityInspectionMapper;
import com.nflg.wms.repository.service.IWmsSrmQualityInspectionService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class WmsSrmQualityInspectionServiceImpl extends ServiceImpl<WmsSrmQualityInspectionMapper, WmsSrmQualityInspection> implements IWmsSrmQualityInspectionService {
}

View File

@ -0,0 +1,20 @@
package com.nflg.wms.repository.service.impl;
import com.nflg.wms.repository.entity.WmsTaskItem;
import com.nflg.wms.repository.mapper.WmsTaskItemMapper;
import com.nflg.wms.repository.service.IWmsTaskItemService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class WmsTaskItemServiceImpl extends ServiceImpl<WmsTaskItemMapper, WmsTaskItem> implements IWmsTaskItemService {
}

View File

@ -0,0 +1,79 @@
package com.nflg.wms.repository.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.nflg.wms.repository.entity.WmsTask;
import com.nflg.wms.repository.entity.WmsTaskItem;
import com.nflg.wms.repository.mapper.WmsTaskMapper;
import com.nflg.wms.repository.service.IWmsTaskItemService;
import com.nflg.wms.repository.service.IWmsTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* <p>
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class WmsTaskServiceImpl extends ServiceImpl<WmsTaskMapper, WmsTask> implements IWmsTaskService {
@Resource
private IWmsTaskItemService wmsTaskItemService;
@Override
@Transactional
public boolean generateTask(List<WmsTaskItem> tasks, String taskSource) {
boolean result = false;
if (Objects.isNull(tasks) || CollectionUtil.isEmpty(tasks)) {
return result;
}
List<WmsTask> newTaskList = new ArrayList<WmsTask>();
List<WmsTask> oldTaskList = new ArrayList<WmsTask>();
tasks.forEach(task -> {
String taskNumber = "SJ-" + task.getNoteNum();
task.setId(IdUtil.getSnowflake().nextId());
task.setTaskNumber(taskNumber);
WmsTask wmsTask = lambdaQuery().eq(WmsTask::getTaskNumber, taskNumber).one();
if (Objects.nonNull(wmsTask)) {
if (!newTaskList.stream().anyMatch(t -> t.getTaskNumber().equals(taskNumber))) {
newTaskList.add(new WmsTask().setTaskFrom(taskSource)
.setId(IdUtil.getSnowflakeNextId())
.setTaskNumber(taskNumber)
.setOrderNumber(task.getNoteNum())
.setCreateTime(LocalDateTime.now())
.setModifyTime(LocalDateTime.now())
);
}
} else {
if (!oldTaskList.stream().anyMatch(t -> t.getTaskNumber().equals(taskNumber))) {
wmsTask.setModifyTime(LocalDateTime.now());
oldTaskList.add(wmsTask);
}
}
});
if (CollectionUtil.isNotEmpty(newTaskList)) {
result = saveBatch(newTaskList);
}
if (result && CollectionUtil.isNotEmpty(oldTaskList)) {
result = updateBatchById(oldTaskList);
}
if (result) {
result = wmsTaskItemService.saveBatch(tasks);
}
return result;
}
}

View File

@ -0,0 +1,5 @@
<?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="com.nflg.wms.repository.mapper.WmsSrmQualityInspectionMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?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="com.nflg.wms.repository.mapper.WmsTaskItemMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?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="com.nflg.wms.repository.mapper.WmsTaskMapper">
</mapper>

View File

@ -33,7 +33,7 @@ public class CodeGeneratorTest {
)
.strategyConfig(builder -> {
builder
.addInclude("wms_srm_order_item") //只生成指定表
.addInclude("wms_task_item") //只生成指定表
.entityBuilder().idType(IdType.ASSIGN_ID)
.enableLombok()
.enableChainModel()