直接上代码
//FaWorkOrderSonDetail 为实体
public List<FaWorkOrderSonDetail> findBatchDetail(FaWorkOrderSonDetail model) {
Map<Object, Object> params = (Map) BeanToMapUtil.toMap(model, "yyyy-MM-dd HH:mm:ss");
Wrapper<FaWorkOrderSonDetail> wrapper = ConditionWapper.getCondition(params, this.currentModelClass());
// 查询条件写入
if(DataUtil.isNotEmpty(model.getSubWorkNo())){
wrapper.and("sub_work_no LIKE '%"+model.getSubWorkNoLike()+"%'");
}
if(DataUtil.isNotEmpty(model.getJobCode())){
wrapper.eq("job_code",model.getJobCode());
}
wrapper.and("ifnull(batch_no,'') =''");
List<FaWorkOrderSonDetail> list = mapper.selectList(wrapper);
List<Integer> grouping = model.getGrouping();//分组数据
boolean check = true;
if(DataUtil.isNotEmpty(grouping) && grouping.size() >0){
check = false;
}
// List<List<FaWorkOrderSonDetail>> groupMapList = new ArrayList<>(); //二维数组前端改为一维数组
List<FaWorkOrderSonDetail> sonDetailList = new ArrayList<>();
Integer index = 0;
boolean finalCheck = check;
list.stream().collect(Collectors.groupingBy(p ->{
if (finalCheck) {
return p.getId();
} else {
StringBuilder sb = new StringBuilder();
// 根据动态条件分组
for (Integer i : grouping) {
if(sb.length()>0){
sb.append("'-'");
}
if(i ==1){
sb.append(p.getProcessingSpecificationValue());
}
if(i==2){
sb.append(p.getPadPastingCodeValue());
}
}
return sb.toString();
}
}, Collectors.toList()))
.forEach((age, fooListByAge) -> {
List<FaWorkOrderSonDetail> sonDetails = new ArrayList<>();
FaWorkOrderSonDetail detail = fooListByAge.get(0);
for (FaWorkOrderSonDetail sonDetail : fooListByAge) {
FaWorkOrderSonDetail orderSonDetail = new FaWorkOrderSonDetail();
BeanUtils.copyProperties(sonDetail, orderSonDetail);
sonDetails.add(orderSonDetail);
}
detail.setLengthIndex(fooListByAge.size());
detail.setGroupSonDetails(sonDetails);
sonDetailList.add(detail);
});
// 排序
Collections.sort(sonDetailList,new Comparator<FaWorkOrderSonDetail>(){
public int compare(FaWorkOrderSonDetail bom1, FaWorkOrderSonDetail bom2) {
return bom2.getLengthIndex().compareTo(bom1.getLengthIndex());
}
});
return sonDetailList;
}