|
|
|
@ -42,6 +42,8 @@ import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Objects; |
|
|
|
import java.util.Set; |
|
|
|
import java.util.concurrent.ConcurrentHashMap; |
|
|
|
|
|
|
|
/** |
|
|
|
* 生产订单排产 |
|
|
|
@ -66,6 +68,9 @@ public class ScheduleController extends AbstractController { |
|
|
|
|
|
|
|
@Value("${mes.logs.password}") |
|
|
|
private String mesLogsPassword; |
|
|
|
|
|
|
|
/** 同一笔材料异常下机处理完成前,拒绝重复请求 */ |
|
|
|
private final Set<String> materialReturnInFlight = ConcurrentHashMap.newKeySet(); |
|
|
|
/** |
|
|
|
* TODO 获取排产班次的休息时间 |
|
|
|
* @author LR |
|
|
|
@ -1493,22 +1498,39 @@ public class ScheduleController extends AbstractController { |
|
|
|
**/ |
|
|
|
@RequestMapping(value = "materialReturnDuringProduction") |
|
|
|
public R materialReturnDuringProduction(@RequestBody SearchScheduleData inData){ |
|
|
|
Map<String, Object> resultMap = scheduleService.materialReturnDuringProduction(inData); |
|
|
|
// 获取存储过程返回的code |
|
|
|
String resultCode = String.valueOf(resultMap.get("Code")); |
|
|
|
String resultMsg = String.valueOf(resultMap.get("Message")); |
|
|
|
|
|
|
|
if ("201".equalsIgnoreCase(resultCode)) { |
|
|
|
// code=201 表示需要打印,返回打印参数 |
|
|
|
String lockKey = buildMaterialReturnLockKey(inData); |
|
|
|
if (!materialReturnInFlight.add(lockKey)) { |
|
|
|
return R.error(500, "正在处理,请勿重复提交"); |
|
|
|
} |
|
|
|
try { |
|
|
|
Map<String, Object> resultMap = scheduleService.materialReturnDuringProduction(inData); |
|
|
|
// 获取存储过程返回的code |
|
|
|
String resultCode = String.valueOf(resultMap.get("Code")); |
|
|
|
String resultMsg = String.valueOf(resultMap.get("Message")); |
|
|
|
|
|
|
|
if ("201".equalsIgnoreCase(resultCode)) { |
|
|
|
// code=201 表示需要打印,返回打印参数 |
|
|
|
return R.ok() |
|
|
|
.put("code", 201) |
|
|
|
.put("msg", resultMsg) |
|
|
|
.put("printData", resultMap); // 将存储过程返回的所有参数作为打印数据返回 |
|
|
|
} |
|
|
|
|
|
|
|
return R.ok() |
|
|
|
.put("code", 201) |
|
|
|
.put("msg", resultMsg) |
|
|
|
.put("printData", resultMap); // 将存储过程返回的所有参数作为打印数据返回 |
|
|
|
.put("code", 200) |
|
|
|
.put("msg", getLanguageMsg(SysMsgConstant.OBJECT_ID_200000)); |
|
|
|
} finally { |
|
|
|
materialReturnInFlight.remove(lockKey); |
|
|
|
} |
|
|
|
|
|
|
|
return R.ok() |
|
|
|
.put("code", 200) |
|
|
|
.put("msg", getLanguageMsg(SysMsgConstant.OBJECT_ID_200000)); |
|
|
|
} |
|
|
|
|
|
|
|
private String buildMaterialReturnLockKey(SearchScheduleData inData) { |
|
|
|
return String.valueOf(inData.getSite()) + "|" |
|
|
|
+ String.valueOf(inData.getOrderNo()) + "|" |
|
|
|
+ String.valueOf(inData.getItemNo()) + "|" |
|
|
|
+ String.valueOf(inData.getSeqNo()) + "|" |
|
|
|
+ String.valueOf(inData.getRollNo()) + "|" |
|
|
|
+ String.valueOf(inData.getHistSeqNo()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|