子表批量保存CRUD

@Data
@TableName("im_notice_details")
@ApiModel(value = "入库单据明细")
@EqualsAndHashCode(of = {"detailsId", "noticeId"})
public class ImNoticeDetails extends Model<ImNoticeDetails> {

    private static final long serialVersionUID = 1L;

    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "明细ID")
    private String detailsId;

    @ApiModelProperty(value = "单据ID")
    private String noticeId;

    @ApiModelProperty(value = "商品ID")
    private String goodsId;

        ......
}
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean updateNotice(ImNoticeDto dto) {
        try {
            List<ImNoticeDetails> detailsList = dto.getDetailsList();
            // 获取oldList与newList的交差
            List<ImNoticeDetails> oldDetailList = baseMapper.listOldDetail(dto.getNoticeId());

            oldDetailList.removeAll(detailsList);

            // 删除库存数据及中间表数据
            Set<String> hasDeleteIds = oldDetailList.stream().map(item -> item.getDetailsId()).collect(Collectors.toSet());

            imNoticeDetailsService.removeByIds(hasDeleteIds);

            for (ImNoticeDetails imNoticeDetails : detailsList) {
                imNoticeDetails.setNoticeId(dto.getNoticeId());
                imNoticeDetailsService.saveOrUpdate(imNoticeDetails);
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.info("更新入库单据失败!!!");
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }

 

posted @ 2020-09-25 13:28  方大帝的博客  阅读(186)  评论(0编辑  收藏  举报