Commit 97985999 LN

api010处理过程中不能retry和abort

1 个父辈 5999e85c
...@@ -851,27 +851,35 @@ public class MicronApi { ...@@ -851,27 +851,35 @@ public class MicronApi {
// } // }
// ] // ]
// } // }
int retryCount = dataCache.getCache(Constants.CACHE_API_RetryCount, 3);
int retryInterval = dataCache.getCache(Constants.CACHE_API_RetryInterval, 30);
//出库前预扣 //出库前预扣
List<TrackStatus> statusList = new ArrayList<>(); List<TrackStatus> statusList = new ArrayList<>();
if (Debug) { if (Debug) {
for (Material m : long v = retryCount * (retryInterval + 60) * 1000;
materialList) { try {
TrackStatus trackStatus = new TrackStatus(); Thread.sleep(v);
log.info("调用MES接口 API010 Debug 模式,sleep=" + v);
for (Material m :
materialList) {
TrackStatus trackStatus = new TrackStatus();
// trackStatus.setSuccess(false); // trackStatus.setSuccess(false);
trackStatus.setSapSuccess(false); trackStatus.setSapSuccess(false);
trackStatus.setMesSuccess(false); trackStatus.setMesSuccess(false);
trackStatus.setDescription("api010 fail"); trackStatus.setDescription("api010 fail");
trackStatus.setMaterialStatus("fail"); trackStatus.setMaterialStatus("fail");
trackStatus.setPartNumber(m.getPartNumber()); trackStatus.setPartNumber(m.getPartNumber());
trackStatus.setSerialNum(m.getSerialNum()); trackStatus.setSerialNum(m.getSerialNum());
statusList.add(trackStatus); statusList.add(trackStatus);
}
} catch (Exception e) {
log.error("调用MES接口 API010 Debug 模式,sleep=" + v + "出错", e);
} }
return statusList; return statusList;
} }
int retryCount = dataCache.getCache(Constants.CACHE_API_RetryCount, 3);
int retryInterval = dataCache.getCache(Constants.CACHE_API_RetryInterval, 30);
String url = config.getUrl(config.api_name_010); String url = config.getUrl(config.api_name_010);
try { try {
......
...@@ -106,6 +106,11 @@ public class MicronDispatchController { ...@@ -106,6 +106,11 @@ public class MicronDispatchController {
} }
} }
public TaskDto UpdateTaskDto(TaskDto taskDto, int apiPro) {
taskDto.setApiProStatus(apiPro);
dataCache.updateCache(Constants.CACHE_DISPATCH + taskDto.getMode(), taskDto);
return taskDto;
}
private boolean NeedInputLineId(String mode){ private boolean NeedInputLineId(String mode){
if(mode.equalsIgnoreCase(Mode_RACK)){ if(mode.equalsIgnoreCase(Mode_RACK)){
return false; return false;
...@@ -137,7 +142,7 @@ public class MicronDispatchController { ...@@ -137,7 +142,7 @@ public class MicronDispatchController {
LiteOrder order = getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
if (dto != null && ObjectUtil.isNotEmpty(dto.getOperationId()) && ObjectUtil.isNotEmpty(dto.getLineId()) && order != null) { if (dto != null && ObjectUtil.isNotEmpty(dto.getOperationId()) && ObjectUtil.isNotEmpty(dto.getLineId()) && order != null) {
return getTaskInfo(order); return getTaskInfo(dto, order);
} else { } else {
if (dto != null && ObjectUtil.isNotEmpty(dto.getOperationId())) { if (dto != null && ObjectUtil.isNotEmpty(dto.getOperationId())) {
...@@ -186,20 +191,30 @@ public class MicronDispatchController { ...@@ -186,20 +191,30 @@ public class MicronDispatchController {
} }
private ResultBean getTaskInfo(LiteOrder order) { private ResultBean getTaskInfo(TaskDto taskDto, LiteOrder order) {
//如果工单还未出库 //如果工单还未出库
if (order.isNew()) { if (order.isNew()) {
//返回可以勾选的物料及已验证成功的物料列表 //返回可以勾选的物料及已验证成功的物料列表
//3=物料选择,5=物料选择页面,接口正在处理中
List<SelReelDetialDto> reelDetialDtos = getReelDetialList(order); List<SelReelDetialDto> reelDetialDtos = getReelDetialList(order);
ResultBean resultBean = ResultBean.newErrorResult(3, "", "", new String[]{}, false); ResultBean resultBean = ResultBean.newErrorResult(3, "", "", new String[]{}, false);
resultBean.setData(reelDetialDtos); resultBean.setData(reelDetialDtos);
if(taskDto.getApiProStatus()==1) {
resultBean.setCode(5);
}
return resultBean; return resultBean;
} else { } else {
//已出库,4=已出库,6=已出库,接口正在处理中,不能retry和abort
ResultBean resultBean = ResultBean.newErrorResult(4, "", "", new String[]{}, false);
//返回出库信息 //返回出库信息
List<MaterialDispatchDto> materialDispatchDtos = getOrderMaterialList(order); List<MaterialDispatchDto> materialDispatchDtos = getOrderMaterialList(order);
ResultBean resultBean = ResultBean.newErrorResult(4, "", "", new String[]{}, false);
resultBean.setData(materialDispatchDtos); resultBean.setData(materialDispatchDtos);
if(taskDto.getApiProStatus()==1) {
resultBean.setCode(6);
}
return resultBean; return resultBean;
} }
} }
...@@ -350,7 +365,7 @@ public class MicronDispatchController { ...@@ -350,7 +365,7 @@ public class MicronDispatchController {
} }
String lineId = dto.getLineId(); String lineId = dto.getLineId();
dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto); dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto);
return NewOrderProcess(mode, lineId); return NewOrderProcess(dto,mode, lineId);
} else { } else {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
...@@ -363,7 +378,7 @@ public class MicronDispatchController { ...@@ -363,7 +378,7 @@ public class MicronDispatchController {
} }
} }
private ResultBean NewOrderProcess(String mode, String lineId ) { private ResultBean NewOrderProcess(TaskDto taskDto, String mode, String lineId ) {
//工单上传成功,开始挑料 //工单上传成功,开始挑料
LiteOrder order = getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
...@@ -374,9 +389,23 @@ public class MicronDispatchController { ...@@ -374,9 +389,23 @@ public class MicronDispatchController {
if (liteOrderCache.dispatchOrderIsCheckOk(order)) { if (liteOrderCache.dispatchOrderIsCheckOk(order)) {
log.info(order.getOrderNo() + "工单已备料完成,直接出料"); log.info(order.getOrderNo() + "工单已备料完成,直接出料");
//直接开始出库 //直接开始出库
liteOrderCache.dispatchCheckOut(order, false, false,new ArrayList<>()); // liteOrderCache.dispatchCheckOut(order, false, false,new ArrayList<>());
dispatchCheckOut(taskDto, order, false, false,new ArrayList<>());
}
return getTaskInfo(taskDto, order);
}
public String dispatchCheckOut(TaskDto taskDto, LiteOrder order, boolean isRetry,boolean isOver,List<String> selRiList) {
String msg = "";
try {
taskDto = UpdateTaskDto(taskDto, 1);
msg = liteOrderCache.dispatchCheckOut(order, isRetry, isOver, selRiList);
log.info("dispatchCheckOut 工单:[" + order.getOrderNo() + "][" + taskDto.getMode() + "]执行结果:" + msg);
} catch (Exception e) {
throw e;
} finally {
taskDto = UpdateTaskDto(taskDto, 0);
} }
return getTaskInfo(order); return msg;
} }
...@@ -402,7 +431,7 @@ public class MicronDispatchController { ...@@ -402,7 +431,7 @@ public class MicronDispatchController {
// //已存在,直接返回列表页面 // //已存在,直接返回列表页面
// List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList); // List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList);
// return ResultBean.newOkResult(list); // return ResultBean.newOkResult(list);
return getTaskInfo(order); return getTaskInfo(getTaskDtoByMode(mode),order);
} else { } else {
...@@ -510,7 +539,7 @@ public class MicronDispatchController { ...@@ -510,7 +539,7 @@ public class MicronDispatchController {
liteOrder = liteOrderManager.createWithItems(liteOrder); liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder); liteOrderCache.addOrderToMap(liteOrder);
return NewOrderProcess(mode, taskDto.getLineId()); return NewOrderProcess(taskDto,mode, taskDto.getLineId());
} catch (Exception exception) { } catch (Exception exception) {
log.error(exception.toString()); log.error(exception.toString());
return ResultBean.newErrorResult(-1, exception.toString(), exception.toString()); return ResultBean.newErrorResult(-1, exception.toString(), exception.toString());
...@@ -615,6 +644,10 @@ public class MicronDispatchController { ...@@ -615,6 +644,10 @@ public class MicronDispatchController {
log.info("pnSubmit 操作失败,taskDto数据不完整"); log.info("pnSubmit 操作失败,taskDto数据不完整");
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
if(taskDto.getApiProStatus()==1){
//正在处理中,不能重复提交
return ResultBean.newErrorResult(-1, "smfcore.micron.apiProcess", "正在处理中,请稍后");
}
List<Barcode> allBarcodes = new ArrayList<>(); List<Barcode> allBarcodes = new ArrayList<>();
//查找到详情,循环RI,生成API009数据 //查找到详情,循环RI,生成API009数据
for (Object ri : for (Object ri :
...@@ -711,8 +744,10 @@ public class MicronDispatchController { ...@@ -711,8 +744,10 @@ public class MicronDispatchController {
log.info(order.getOrderNo() + "已勾选物料完成,直接出料"); log.info(order.getOrderNo() + "已勾选物料完成,直接出料");
//直接开始出库 //直接开始出库
liteOrderCache.dispatchCheckOut(order, false, isOver,selectRis); // liteOrderCache.dispatchCheckOut(order, false, isOver,selectRis);
return getTaskInfo(order); dispatchCheckOut(taskDto,order, false, isOver,selectRis);
return getTaskInfo(taskDto, order);
//判断是否需要勾选 //判断是否需要勾选
// return ResultBean.newOkResult(""); // return ResultBean.newOkResult("");
...@@ -744,8 +779,19 @@ public class MicronDispatchController { ...@@ -744,8 +779,19 @@ public class MicronDispatchController {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
TaskDto taskDto = getTaskDtoByMode(mode);
if (taskDto == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
if(taskDto.getApiProStatus()==1){
//正在处理中,不能重复提交
return ResultBean.newErrorResult(-1, "smfcore.micron.apiProcess", "正在处理中,请稍后");
}
//调用API010扣除库存,扣除成功的才可以出库 //调用API010扣除库存,扣除成功的才可以出库
String msg = liteOrderCache.dispatchCheckOut(order, false, isOver,new ArrayList<>()); // String msg = liteOrderCache.dispatchCheckOut(order, false, isOver,new ArrayList<>());
String msg = dispatchCheckOut(taskDto, order, false, isOver,new ArrayList<>());
if (ObjectUtil.isNotEmpty(msg)) { if (ObjectUtil.isNotEmpty(msg)) {
return ResultBean.newErrorResult(-1, msg, msg); return ResultBean.newErrorResult(-1, msg, msg);
} }
...@@ -777,8 +823,17 @@ public class MicronDispatchController { ...@@ -777,8 +823,17 @@ public class MicronDispatchController {
if (order == null) { if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
TaskDto taskDto = getTaskDtoByMode(mode);
if (taskDto == null) {
String msg = liteOrderCache.dispatchCheckOut(order, true, isOver,new ArrayList<>()); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
if(taskDto.getApiProStatus()==1){
//正在处理中,不能重复提交
return ResultBean.newErrorResult(-1, "smfcore.micron.apiProcess", "正在处理中,请稍后");
}
// String msg = liteOrderCache.dispatchCheckOut(order, true, isOver,new ArrayList<>());
String msg = dispatchCheckOut(taskDto, order, true, isOver,new ArrayList<>());
if (ObjectUtil.isNotEmpty(msg)) { if (ObjectUtil.isNotEmpty(msg)) {
return ResultBean.newErrorResult(-1, msg, msg); return ResultBean.newErrorResult(-1, msg, msg);
} }
...@@ -861,6 +916,10 @@ public class MicronDispatchController { ...@@ -861,6 +916,10 @@ public class MicronDispatchController {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
if(taskDto.getApiProStatus()==1){
//正在处理中,不能重复提交
return ResultBean.newErrorResult(-1, "smfcore.micron.apiProcess", "正在处理中,请稍后");
}
if (order != null) { if (order != null) {
//自动取消任务 //自动取消任务
List<DataLog> allTask = taskService.getAllTasks(); List<DataLog> allTask = taskService.getAllTasks();
......
...@@ -164,6 +164,11 @@ public class MicronPreTaskController { ...@@ -164,6 +164,11 @@ public class MicronPreTaskController {
} }
return dto; return dto;
} }
public TaskDto UpdateTaskDto(TaskDto taskDto, int apiPro) {
taskDto.setApiProStatus(apiPro);
dataCache.updateCache(Constants.CACHE_DISPATCH + taskDto.getMode(), taskDto);
return taskDto;
}
@ApiOperation("根据勾选的ID,提交后 创建工单任务") @ApiOperation("根据勾选的ID,提交后 创建工单任务")
@AnonymousAccess @AnonymousAccess
@PostMapping("/submit") @PostMapping("/submit")
...@@ -173,6 +178,10 @@ public class MicronPreTaskController { ...@@ -173,6 +178,10 @@ public class MicronPreTaskController {
if (dto == null) { if (dto == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
if(dto.getApiProStatus()==1){
//正在处理中,不能重复提交
return ResultBean.newErrorResult(-1, "smfcore.micron.apiProcess", "正在处理中,请稍后");
}
String operationId = dto.getOperationId(); String operationId = dto.getOperationId();
List<String> pretasks = preTask.getPretasks(); List<String> pretasks = preTask.getPretasks();
...@@ -244,9 +253,18 @@ public class MicronPreTaskController { ...@@ -244,9 +253,18 @@ public class MicronPreTaskController {
liteOrderCache.addOrderToMap(liteOrder); liteOrderCache.addOrderToMap(liteOrder);
log.info("submit 勾选后,生成工单:[" + orderNo + "][" + mode + "]"); log.info("submit 勾选后,生成工单:[" + orderNo + "][" + mode + "]");
//开始查询是否可以出库 //开始查询是否可以出库
String msg = liteOrderCache.preTaskCheckOut(liteOrder, operationId, materialList, false);
log.info("submit 工单:[" + orderNo + "][" + mode + "]执行结果:" + msg); try{
UpdateTaskDto(dto,1);
String msg = liteOrderCache.preTaskCheckOut(liteOrder, operationId, materialList, false);
log.info("submit 工单:[" + orderNo + "][" + mode + "]执行结果:" + msg);
}catch (Exception e){
throw e;
}finally {
UpdateTaskDto(dto,0);
}
} }
} catch (Exception ex) { } catch (Exception ex) {
...@@ -289,20 +307,26 @@ public class MicronPreTaskController { ...@@ -289,20 +307,26 @@ public class MicronPreTaskController {
if (dto == null) { if (dto == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
if(dto.getApiProStatus()==1){
//正在处理中,不能重复提交
return ResultBean.newErrorResult(-1, "smfcore.micron.apiProcess", "正在处理中,请稍后");
}
//判断有没有生成任务 //判断有没有生成任务
LiteOrder order = getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
if (order == null) { if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
try { try {
UpdateTaskDto(dto,1);
//开始查询是否可以出库 //开始查询是否可以出库
String msg = liteOrderCache.preTaskCheckOut(order, dto.getOperationId(), new ArrayList<>(), true); String msg = liteOrderCache.preTaskCheckOut(order, dto.getOperationId(), new ArrayList<>(), true);
if (ObjectUtil.isNotEmpty(msg)) { if (ObjectUtil.isNotEmpty(msg)) {
return ResultBean.newErrorResult(-1, msg, "操作失败"); return ResultBean.newErrorResult(-1, msg, "操作失败");
} }
} catch (Exception ex) { } catch (Exception ex) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}finally {
UpdateTaskDto(dto, 0);
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
...@@ -354,6 +378,10 @@ public class MicronPreTaskController { ...@@ -354,6 +378,10 @@ public class MicronPreTaskController {
if (dto == null) { if (dto == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
if(dto.getApiProStatus()==1){
//正在处理中,不能重复提交
return ResultBean.newErrorResult(-1, "smfcore.micron.apiProcess", "正在处理中,请稍后");
}
log.info(" abort :mode=" + mode); log.info(" abort :mode=" + mode);
LiteOrder order = getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
if (order == null) { if (order == null) {
......
...@@ -12,6 +12,7 @@ public class TaskDto { ...@@ -12,6 +12,7 @@ public class TaskDto {
*0=勾选数据还未获取,1=勾选页面勾选数据,2=已开始出库 *0=勾选数据还未获取,1=勾选页面勾选数据,2=已开始出库
*/ */
private int type=1;// private int type=1;//
private int apiProStatus=0;//=0不在处理中,=1表示正在接口请求中,不能abort或retry
private String mode; private String mode;
private String operationId; private String operationId;
private String lineId;//Controlled Dispatch 按钮中输入的lineID private String lineId;//Controlled Dispatch 按钮中输入的lineID
......
...@@ -383,3 +383,4 @@ smfcore.inlist.noJobToEnd=no job or no operation need to perform for END ...@@ -383,3 +383,4 @@ smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7 smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7
smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF
smfcore.message.critical=\u4E25\u91CD\u9519\u8BEF smfcore.message.critical=\u4E25\u91CD\u9519\u8BEF
smfcore.micron.apiProcess=\u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u8BF7\u7A0D\u540E
...@@ -371,4 +371,5 @@ smfcore.micron.inlisttaskhasfail=Operation failed: All materials must be success ...@@ -371,4 +371,5 @@ smfcore.micron.inlisttaskhasfail=Operation failed: All materials must be success
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=Log Monitoring smfcore.logMonitor=Log Monitoring
smfcore.materialTrace=Material Trace smfcore.materialTrace=Material Trace
smfcore.message.critical=Critical
\ No newline at end of file \ No newline at end of file
smfcore.message.critical=Critical
smfcore.micron.apiProcess=Processing, please wait
\ No newline at end of file \ No newline at end of file
...@@ -366,4 +366,5 @@ smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u6557\uFF1A\u3059\u3079\u306 ...@@ -366,4 +366,5 @@ smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u6557\uFF1A\u3059\u3079\u306
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=\u30ED\u30B0\u76E3\u8996 smfcore.logMonitor=\u30ED\u30B0\u76E3\u8996
smfcore.materialTrace=\u30DE\u30C6\u30EA\u30A2\u30EB\u30C8\u30EC\u30FC\u30B9 smfcore.materialTrace=\u30DE\u30C6\u30EA\u30A2\u30EB\u30C8\u30EC\u30FC\u30B9
smfcore.message.critical=\u91CD\u5927\u30A8\u30E9\u30FC
\ No newline at end of file \ No newline at end of file
smfcore.message.critical=\u91CD\u5927\u30A8\u30E9\u30FC
smfcore.micron.apiProcess=\u51E6\u7406\u4E2D\u3067\u3059\u3001\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044
\ No newline at end of file \ No newline at end of file
...@@ -366,4 +366,5 @@ smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u516 ...@@ -366,4 +366,5 @@ smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u516
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7 smfcore.logMonitor=\u65E5\u5FD7\u76D1\u63A7
smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF
smfcore.message.critical=\u4E25\u91CD\u9519\u8BEF
\ No newline at end of file \ No newline at end of file
smfcore.message.critical=\u4E25\u91CD\u9519\u8BEF
smfcore.micron.apiProcess=\u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u8BF7\u7A0D\u540E
\ No newline at end of file \ No newline at end of file
...@@ -367,4 +367,5 @@ smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u516 ...@@ -367,4 +367,5 @@ smfcore.micron.inlisttaskhasfail=\u64CD\u4F5C\u5931\u8D25\uFF1A\u7269\u6599\u516
smfcore.inlist.noJobToEnd=no job or no operation need to perform for END smfcore.inlist.noJobToEnd=no job or no operation need to perform for END
smfcore.logMonitor=\u65E5\u8A8C\u76E3\u63A7 smfcore.logMonitor=\u65E5\u8A8C\u76E3\u63A7
smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF smfcore.materialTrace=\u7269\u6599\u8FFD\u6EAF
smfcore.message.critical=\u56B4\u91CD\u932F\u8AA4
\ No newline at end of file \ No newline at end of file
smfcore.message.critical=\u56B4\u91CD\u932F\u8AA4
smfcore.micron.apiProcess=\u6B63\u5728\u8655\u7406\u4E2D\uFF0C\u8ACB\u7A0D\u5F8C
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!