【MPM集成接口】批量从MPM系统同步物料图纸数据,批量从MPM系统同步钢构包数据
This commit is contained in:
parent
907dc774cf
commit
41e30dbc63
|
|
@ -176,4 +176,13 @@ public class MaterialController extends BaseController {
|
|||
public ApiResult<EbomParentVO> queryMaterial(@Valid @RequestBody @NotNull EbomMaterialQO request) {
|
||||
return ApiResult.success(materialControllerService.queryMaterial(request));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量从MPM系统同步图纸数据
|
||||
*/
|
||||
@PostMapping("/mpm/syncFromMpmBatch")
|
||||
public ApiResult<Void> syncFromMpmBatch(/*@Valid */@RequestBody @NotEmpty List<MaterialAddQO> requests) {
|
||||
materialControllerService.syncFromMpmBatch(requests);
|
||||
return ApiResult.success();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import jakarta.annotation.Resource;
|
|||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
|
@ -137,6 +138,24 @@ public class StructuralPackageController extends BaseController {
|
|||
public ApiResult<String> exportPdf(@Valid @RequestParam @NotNull Long id) throws Exception {
|
||||
return ApiResult.success(packageControllerService.exportPdf(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 从MPM系统同步钢构包数据(MPM推送数据到本系统)
|
||||
*/
|
||||
@PostMapping("/mpm/syncFromMpm")
|
||||
public ApiResult<Void> syncFromMpm(/*@Valid */@RequestBody PackageAddQO request) {
|
||||
packageControllerService.syncFromMpm(request);
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量从MPM系统同步钢构包数据
|
||||
*/
|
||||
@PostMapping("/mpm/syncFromMpmBatch")
|
||||
public ApiResult<Void> syncFromMpmBatch(/*@Valid */@RequestBody @NotEmpty List<PackageAddQO> requests) {
|
||||
packageControllerService.syncFromMpmBatch(requests);
|
||||
return ApiResult.success();
|
||||
}
|
||||
//
|
||||
// /**
|
||||
// * 导出老鼠图PDF
|
||||
|
|
|
|||
|
|
@ -60,6 +60,9 @@ import java.util.Objects;
|
|||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class MaterialControllerService {
|
||||
|
||||
|
|
@ -392,4 +395,34 @@ public class MaterialControllerService {
|
|||
public List<MaterialVO> getMaterials(@Valid @NotEmpty Set<String> nos) {
|
||||
return materialService.getMaterials(nos);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量从MPM系统同步图纸数据
|
||||
* 每次推送都是新版本,直接新增
|
||||
*/
|
||||
@Transactional
|
||||
public void syncFromMpmBatch(@Valid @NotEmpty List<MaterialAddQO> requests) {
|
||||
log.info("开始批量从MPM系统同步图纸数据,共{}条", requests.size());
|
||||
|
||||
for (MaterialAddQO request : requests) {
|
||||
try {
|
||||
log.info("开始从MPM系统同步图纸数据: {}", request.getNo());
|
||||
|
||||
WmsMaterial wmsMaterial = Convert.convert(WmsMaterial.class, request);
|
||||
|
||||
wmsMaterial.setCreateBy("MPM_SYNC");
|
||||
wmsMaterial.setCreateTime(LocalDateTime.now());
|
||||
wmsMaterial.setFromMpm(true); // 标记为来自MPM
|
||||
|
||||
materialService.add(wmsMaterial);
|
||||
|
||||
log.info("成功从MPM系统同步图纸数据: {}, 版本: {}", request.getNo(), wmsMaterial.getVersion());
|
||||
} catch (Exception e) {
|
||||
log.error("同步图纸失败: {}, 错误: {}", request.getNo(), e.getMessage(), e);
|
||||
// 继续处理下一条,不中断整个批量同步
|
||||
}
|
||||
}
|
||||
|
||||
log.info("批量从MPM系统同步图纸数据完成");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import jakarta.annotation.Resource;
|
|||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
|
|
@ -559,4 +560,94 @@ public class StructuralPackageControllerService {
|
|||
//// sapService.zwm3A02(qo.getFactory(), qo.getMaterialNo(), qo.getReceivedWarehouse(), qo.getBinNos());
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* 从 MPM系统同步钢构包数据(MPM推送数据到本系统)
|
||||
* 每次推送都是新版本,直接新增
|
||||
*/
|
||||
@Transactional
|
||||
public void syncFromMpm(@Valid PackageAddQO request) {
|
||||
log.info("开始从MPM系统同步钢构包数据: {}, 版本: {}", request.getNo(), request.getVersion());
|
||||
|
||||
WmsStructuralPackage structuralPackage = Convert.convert(WmsStructuralPackage.class, request);
|
||||
structuralPackage.setOrderNo(getOrderNo());
|
||||
structuralPackage.setCreateBy("MPM_SYNC");
|
||||
structuralPackage.setCreateTime(LocalDateTime.now());
|
||||
|
||||
String modelNo = request.getModelNos();
|
||||
if (StrUtil.isNotBlank(modelNo)) {
|
||||
List<String> modelNos = StrUtil.split(modelNo, ",");
|
||||
if (CollectionUtil.isNotEmpty(modelNos)) {
|
||||
List<WmsModel> models = modelService.lambdaQuery().select(WmsModel::getId, WmsModel::getNo).eq(WmsModel::getEnable, true).in(WmsModel::getNo, modelNos).list();
|
||||
modelNos.removeIf(mno -> models.stream().anyMatch(model -> model.getNo().equals(mno)));
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(modelNos)).throwMessage("以下机型编号无效:" + StrUtil.join(",", modelNos));
|
||||
structuralPackage.setModelIds(StrUtil.join(",", models.stream().map(WmsModel::getId).toList()));
|
||||
}
|
||||
}
|
||||
|
||||
structuralPackage.setFromMpm(true); // 标记为来自MPM
|
||||
structuralPackage.setLatest(true); // 设置为最新版本
|
||||
|
||||
// 将同编号的其他版本设置为非最新
|
||||
packageService.lambdaUpdate()
|
||||
.set(WmsStructuralPackage::getLatest, false)
|
||||
.eq(WmsStructuralPackage::getNo, request.getNo())
|
||||
.update();
|
||||
|
||||
// 处理零件清单,补充完整的物料信息
|
||||
List<PackageMaterialDTO> materials = new ArrayList<>();
|
||||
for (PackageMaterialDTO dto : request.getMaterials()) {
|
||||
// 从物料服务获取当前最新的物料信息
|
||||
WmsMaterial material = materialService.getCurrent(dto.getNo());
|
||||
if (Objects.isNull(material)) {
|
||||
log.warn("零件编码{}不存在,跳过", dto.getNo());
|
||||
continue;
|
||||
}
|
||||
|
||||
// 补充完整的物料信息
|
||||
dto.setName(material.getDescribe());
|
||||
dto.setDrawingNo(material.getDrawingNo());
|
||||
dto.setImage(material.getImage());
|
||||
|
||||
// 如果MPM推送的版本号为空,使用物料当前版本
|
||||
if (Objects.isNull(dto.getVersion())) {
|
||||
dto.setVersion(material.getVersion());
|
||||
}
|
||||
|
||||
dto.setCreateBy("MPM_SYNC");
|
||||
dto.setCreateTime(DateTimeUtil.format(LocalDateTime.now()));
|
||||
materials.add(dto);
|
||||
}
|
||||
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(materials)).throwMessage("有效的零件不能为空");
|
||||
|
||||
// 计算总重
|
||||
structuralPackage.setWeight(materials.stream()
|
||||
.map(m -> m.getWeight().multiply(m.getNum()))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||
|
||||
structuralPackage.setMaterials(JSONUtil.toJsonStr(materials));
|
||||
packageService.add(structuralPackage);
|
||||
|
||||
log.info("成功从MPM系统同步钢构包数据: {}, 版本: {}, 零件数: {}", request.getNo(), request.getVersion(), materials.size());
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量从MPM系统同步钢构包数据
|
||||
*/
|
||||
@Transactional
|
||||
public void syncFromMpmBatch(@Valid @NotEmpty List<PackageAddQO> requests) {
|
||||
log.info("开始批量从MPM系统同步钢构包数据,共{}条", requests.size());
|
||||
|
||||
for (PackageAddQO request : requests) {
|
||||
try {
|
||||
syncFromMpm(request);
|
||||
} catch (Exception e) {
|
||||
log.error("同步钢构包失败: {}, 错误: {}", request.getNo(), e.getMessage(), e);
|
||||
// 继续处理下一条,不中断整个批量同步
|
||||
}
|
||||
}
|
||||
|
||||
log.info("批量从MPM系统同步钢构包数据完成");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,4 +71,9 @@ public class MaterialAddQO {
|
|||
*/
|
||||
@NotNull
|
||||
private Long supplierId;
|
||||
|
||||
/**
|
||||
* 版本号
|
||||
*/
|
||||
private Integer version;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,4 +75,14 @@ public class PackageAddQO {
|
|||
@Valid
|
||||
@NotEmpty
|
||||
private List<PackageMaterialDTO> materials;
|
||||
|
||||
/**
|
||||
* 托盘数量
|
||||
*/
|
||||
private BigDecimal trayNum;
|
||||
|
||||
/**
|
||||
* 机型编号(多个,隔开)
|
||||
*/
|
||||
private String modelNos;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,9 @@ public class SaTokenConfigure {
|
|||
.setAuth(obj -> {
|
||||
// 登录校验 -- 拦截所有路由
|
||||
SaRouter.match("/**")
|
||||
.notMatch("/auth/**","/srm-receive/**", "/shipment/material/**","**/actuator/**")
|
||||
.notMatch("/auth/**","/srm-receive/**", "/shipment/material/**","**/actuator/**"
|
||||
// MPM 免登录接口
|
||||
, "/admin/material/mpm/**", "/admin/package/mpm/**")
|
||||
.check(r -> {
|
||||
String traceId = SaHolder.getRequest().getHeader(Constant.TRACE_ID_HEADER, IdUtil.getSnowflakeNextIdStr());
|
||||
MDC.put(Constant.TRACE_ID, traceId);
|
||||
|
|
|
|||
|
|
@ -122,4 +122,9 @@ public class WmsMaterial implements Serializable {
|
|||
public Boolean getComplete() {
|
||||
return StrUtil.isNotBlank(getImage()) && Objects.nonNull(getWeight());
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否来自MPM
|
||||
*/
|
||||
private Boolean fromMpm;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,4 +116,14 @@ public class WmsStructuralPackage implements Serializable {
|
|||
* 最新版本
|
||||
*/
|
||||
private Boolean latest;
|
||||
|
||||
/**
|
||||
* 托盘数量
|
||||
*/
|
||||
private BigDecimal trayNum;
|
||||
|
||||
/**
|
||||
* 是否来自MPM
|
||||
*/
|
||||
private Boolean fromMpm;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue