Controller
@ApiOperation("获取任务单信息")
@PostMapping("/queryWorkOrder/{batchNo}")
public BaseResponse<Map<String,ProduceBatchCraftstepInfo>> queryWorkOrder(@PathVariable String batchNo) throws ServiceException {
Map<String, ProduceBatchCraftstepInfo> map = taskService.queryWorkOrder(batchNo);
if (CollectionUtils.isEmpty(map))
throw new ServiceException(ErrorEnum.NULL_TASK);
return ResultResponseUtil.success(map);
}
Service
public interface TaskService {
Map<String, ProduceBatchCraftstepInfo> queryWorkOrder(String batchNo);
}
Constant
public class TaskWorkOrderConstant {
public static final String ZHUANG_LU = "装炉";
public static final String KAI_LU = "开炉";
public static final String Z_MATERIAL = "装料";
public static final String CHOU_ZHENKONG = "抽真空(Pad)";
public static final String YIN_JING = "引晶";
public static final String CHAI_QING = "拆清";
}
ServiceImpl
@Override
public Map<String, ProduceBatchCraftstepInfo> queryWorkOrder(String batchNo) {
Example example = new Example(ProduceBatchCraftstepInfo.class);
List<String> list = new ArrayList<>();
list.add(TaskWorkOrderConstant.ZHUANG_LU);
list.add(TaskWorkOrderConstant.KAI_LU);
list.add(TaskWorkOrderConstant.Z_MATERIAL);
list.add(TaskWorkOrderConstant.CHOU_ZHENKONG);
list.add(TaskWorkOrderConstant.YIN_JING);
list.add(TaskWorkOrderConstant.CHAI_QING);
example.selectProperties("batchNo", "stepName", "operateData", "startTime", "operatorName")
.createCriteria().andEqualTo("batchNo", batchNo).andIn("stepName", list);
List<ProduceBatchCraftstepInfo> infos = produceBatchCraftstepInfoMapper.selectByExample(example);
if (CollectionUtils.isEmpty(infos)) {
return null;
}
Map<String, ProduceBatchCraftstepInfo> infomap =
infos.stream().collect(Collectors.toMap(ProduceBatchCraftstepInfo::getStepName, Function.identity(), (p1, p2) -> p1));
ProduceBatchCraftstepInfo info = infomap.get(TaskWorkOrderConstant.Z_MATERIAL);
if (info != null) {
String data = info.getOperateData();
JSONObject dataJson = JSONObject.parseObject(data);
JSONArray scanList = dataJson.getJSONArray("scanList");
if (scanList != null) {
Map<String, List<MaterialItem>> map = new HashMap<>();
for (int i = 0; i < scanList.size(); i++) {
JSONObject jsonScanList = scanList.getJSONObject(i);
List<MaterialItem> materialItems = new ArrayList<>();
JSONArray scanItemList = jsonScanList.getJSONArray("scanItemList");
for (int k = 0; k < scanItemList.size(); k++) {
JSONObject JSONScanItemList = scanItemList.getJSONObject(k);
MaterialItem materialItem = new MaterialItem();
materialItem.setMatSpecs(JSONScanItemList.getString("matSpecs"));
materialItem.setWeight(JSONScanItemList.getString("relWeight"));
materialItem.setManName(JSONScanItemList.getString("manName"));
materialItem.setCode(JSONScanItemList.getString("materialCode"));
materialItem.setName(JSONScanItemList.getString("materialName"));
materialItems.add(materialItem);
}
map.put(jsonScanList.getString("name"), materialItems);
}
List<MaterialItem> blocks = map.get(ProduceConstant.BLOCK);
List<MaterialItem> faces = map.get(ProduceConstant.FACE);
blocks = getSum(blocks);
faces = getSum(faces);
List<MaterialItem> sumList = new ArrayList<>();
sumList.addAll(blocks);
sumList.addAll(faces);
dataJson.put("sum", sumList);
}
info.setOperateData(dataJson.toJSONString());
infomap.put(TaskWorkOrderConstant.Z_MATERIAL, info);
}
return infomap;
}
private List<MaterialItem> getSum(List<MaterialItem> blocks) {
Map<String, MaterialItem> collect = blocks.stream()
.collect(Collectors.toMap(m -> m.getManName() + "_" + m.getMatSpecs(), Function.identity(), (m1, m2) -> {
m1.setWeight((Integer.valueOf(m1.getWeight()) + Integer.valueOf(m2.getWeight())) + "");
return m1;
}));
List<MaterialItem> result = Lists.newArrayList();
for (Map.Entry<String, MaterialItem> entry : collect.entrySet()) {
result.add(entry.getValue());
}
return Lists.newArrayList(collect.values());
}