/**
* 填充分页返回数据
*
* @param dataList 分页数据
*/
private void fillDataToContent(List<? extends WmsExportTransBase> dataList) {
// 取出id集合
Set<Long> idList = dataList.stream().map(WmsExportTransBase::getId).collect(Collectors.toSet());
// 查询关联的详细sn列表
List<WmsOutOrderSn> wmsOutOrderSnList = wmsOutOrderSnService.selectByCondition(Condition.builder(WmsOutOrderSn.class).andWhere(Sqls.custom()
.andIn(WmsOutOrderSn.FIELD_ORDER_BODY_ID, idList)).build());
for (WmsExportTransBase wmsExportTransBase : dataList) {
// 已出odf
Set<String> odfOutSet = new HashSet<>();
// 柜号
Set<String> cabinetNoSet = new HashSet<>();
// 封条号
Set<String> sealNoSet = new HashSet<>();
// 车牌号
Set<String> licensePlateNoSet = new HashSet<>();
for (WmsOutOrderSn wmsOutOrderSn : wmsOutOrderSnList) {
if (wmsExportTransBase.getId().equals(wmsOutOrderSn.getOrderBodyId())) {
if (StrUtil.isNotEmpty(wmsOutOrderSn.getOdf())) {
odfOutSet.add(wmsOutOrderSn.getOdf());
}
if (StrUtil.isNotEmpty(wmsOutOrderSn.getCabinetNo())) {
cabinetNoSet.add(wmsOutOrderSn.getCabinetNo());
}
if (StrUtil.isNotEmpty(wmsOutOrderSn.getSealNo())) {
sealNoSet.add(wmsOutOrderSn.getSealNo());
}
if (StrUtil.isNotEmpty(wmsOutOrderSn.getLicensePlateNo())) {
licensePlateNoSet.add(wmsOutOrderSn.getLicensePlateNo());
}
}
}
wmsExportTransBase.setOdfOut(getStrFromSet(odfOutSet));
wmsExportTransBase.setCabinetNo(getStrFromSet(cabinetNoSet));
wmsExportTransBase.setSealNo(getStrFromSet(sealNoSet));
wmsExportTransBase.setLicensePlateNo(getStrFromSet(licensePlateNoSet));
}
}
/**
* 填充分页返回数据
*
* @param wmsOutOrderBodyPage 分页对象
*/
private void fillPageResult(Page<WmsOutOrderBody> wmsOutOrderBodyPage) {
// 当前页面展示的单身对象
List<WmsOutOrderBody> wmsOutOrderBodyList = wmsOutOrderBodyPage.getContent();
// 取出id集合
Set<Long> orderBodyIdSet = wmsOutOrderBodyList.stream().map(WmsOutOrderBody::getId).collect(Collectors.toSet());
// 查询关联的详细sn列表
List<WmsOutOrderSn> wmsOutOrderSnList = wmsOutOrderSnService.selectByCondition(Condition.builder(WmsOutOrderSn.class).andWhere(Sqls.custom()
.andIn(WmsOutOrderSn.FIELD_ORDER_BODY_ID, orderBodyIdSet)).build());
for (WmsOutOrderBody wmsOutOrderBody : wmsOutOrderBodyList) {
// 已出odf
Set<String> odfOutSet = new HashSet<>();
// 柜号
Set<String> cabinetNoSet = new HashSet<>();
// 封条号
Set<String> sealNoSet = new HashSet<>();
// 车牌号
Set<String> licensePlateNoSet = new HashSet<>();
for (WmsOutOrderSn wmsOutOrderSn : wmsOutOrderSnList) {
if (wmsOutOrderBody.getId().equals(wmsOutOrderSn.getOrderBodyId())) {
if (StrUtil.isNotEmpty(wmsOutOrderSn.getOdf())) {
odfOutSet.add(wmsOutOrderSn.getOdf());
}
if (StrUtil.isNotEmpty(wmsOutOrderSn.getCabinetNo())) {
cabinetNoSet.add(wmsOutOrderSn.getCabinetNo());
}
if (StrUtil.isNotEmpty(wmsOutOrderSn.getSealNo())) {
sealNoSet.add(wmsOutOrderSn.getSealNo());
}
if (StrUtil.isNotEmpty(wmsOutOrderSn.getLicensePlateNo())) {
licensePlateNoSet.add(wmsOutOrderSn.getLicensePlateNo());
}
}
}
wmsOutOrderBody.setOdfOut(getStrFromSet(odfOutSet));
wmsOutOrderBody.setCabinetNo(getStrFromSet(cabinetNoSet));
wmsOutOrderBody.setSealNo(getStrFromSet(sealNoSet));
wmsOutOrderBody.setLicensePlateNo(getStrFromSet(licensePlateNoSet));
}
}
有一段java代码,这段代码的用途是填充返回数据中的几个字段,’这个代码重复出现了三次,为什么会重复出现,原因是三个对象都不同,一个是查询操作,两个是导出操作,三个对象的字段有相同的,但也不是完全相同,请教了大佬,优化方案如下:
1、将公共字段抽取到一个基类,如下:
/**
* 单身id
*/
private Long id;
/**
* 已出odf号
*/
@Excel(width = 20, name = "已出odf",orderNum = "18")
private String odfOut;
/**
* 柜号
*/
@Excel(name = "柜号", width = 20,orderNum = "19")
private String cabinetNo;
/**
* 封条号
*/
@Excel(name = "封条号", width = 20,orderNum = "20")
private String sealNo;
/**
* 车牌号
*/
@Excel(name = "车牌号", width = 20,orderNum = "21")
private String licensePlateNo;
2、修改重复方法,入参做调整:
/**
* 填充分页返回数据
*
* @param dataList 分页数据
*/
private void fillDataToContent(List<? extends WmsExportTransBase> dataList) {
// 取出id集合
Set<Long> idList = dataList.stream().map(WmsExportTransBase::getId).collect(Collectors.toSet());
// 查询关联的详细sn列表
List<WmsOutOrderSn> wmsOutOrderSnList = wmsOutOrderSnService.selectByCondition(Condition.builder(WmsOutOrderSn.class).andWhere(Sqls.custom()
.andIn(WmsOutOrderSn.FIELD_ORDER_BODY_ID, idList)).build());
for (WmsExportTransBase wmsExportTransBase : dataList) {
// 已出odf
Set<String> odfOutSet = new HashSet<>();
// 柜号
Set<String> cabinetNoSet = new HashSet<>();
// 封条号
Set<String> sealNoSet = new HashSet<>();
// 车牌号
Set<String> licensePlateNoSet = new HashSet<>();
for (WmsOutOrderSn wmsOutOrderSn : wmsOutOrderSnList) {
if (wmsExportTransBase.getId().equals(wmsOutOrderSn.getOrderBodyId())) {
if (StrUtil.isNotEmpty(wmsOutOrderSn.getOdf())) {
odfOutSet.add(wmsOutOrderSn.getOdf());
}
if (StrUtil.isNotEmpty(wmsOutOrderSn.getCabinetNo())) {
cabinetNoSet.add(wmsOutOrderSn.getCabinetNo());
}
if (StrUtil.isNotEmpty(wmsOutOrderSn.getSealNo())) {
sealNoSet.add(wmsOutOrderSn.getSealNo());
}
if (StrUtil.isNotEmpty(wmsOutOrderSn.getLicensePlateNo())) {
licensePlateNoSet.add(wmsOutOrderSn.getLicensePlateNo());
}
}
}
wmsExportTransBase.setOdfOut(getStrFromSet(odfOutSet));
wmsExportTransBase.setCabinetNo(getStrFromSet(cabinetNoSet));
wmsExportTransBase.setSealNo(getStrFromSet(sealNoSet));
wmsExportTransBase.setLicensePlateNo(getStrFromSet(licensePlateNoSet));
}
}
现在三个地方,可以共同调用这个方法去填充数据,公用一个方法,如果需要做调整,则可以只修改一次就可以了。