package com.panzhihua.service_community.service.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import javax.annotation.Resource; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.panzhihua.common.model.dtos.community.ComCvtServeDTO; import com.panzhihua.common.model.dtos.community.PageComCvtServeDTO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComCvtBusinessCategoryServeVO; import com.panzhihua.common.model.vos.community.ComCvtServeExcelVO; import com.panzhihua.common.model.vos.community.ComCvtServeVO; import com.panzhihua.common.model.vos.community.ComMngPopulationImportErrorVO; import com.panzhihua.service_community.dao.ComCvtBusinessDAO; import com.panzhihua.service_community.dao.ComCvtCategoryDAO; import com.panzhihua.service_community.dao.ComCvtServeDAO; import com.panzhihua.service_community.model.dos.ComCvtBusinessDO; import com.panzhihua.service_community.model.dos.ComCvtCategoryDO; import com.panzhihua.service_community.model.dos.ComCvtServeDO; import com.panzhihua.service_community.service.ComCvtServeService; /** * @description: 社区 便民服务接口实现类 * @author: Null * @date: 2021/3/12 8:58 */ @Service public class ComCvtServeServiceImpl extends ServiceImpl implements ComCvtServeService { @Resource private ComCvtServeDAO comCvtServeDAO; @Resource private ComCvtBusinessDAO comCvtBusinessDAO; @Resource private ComCvtCategoryDAO comCvtCategoryDAO; @Override public R pageComCvtServe(PageComCvtServeDTO pageComCvtServeDTO) { Page page = new Page<>(); Long pageNum = pageComCvtServeDTO.getPageNum(); Long pageSize = pageComCvtServeDTO.getPageSize(); if (null == pageNum || 0 == pageNum) { pageNum = 1l; } if (null == pageSize || 0 == pageSize) { pageSize = 10l; } page.setSize(pageSize); page.setCurrent(pageNum); IPage iPage = comCvtServeDAO.pageComCvtServe(page, pageComCvtServeDTO); return R.ok(iPage); } @Override public R addComCvtServe(ComCvtServeDTO comCvtServeDTO) { ComCvtServeDO comCvtServeDO = new ComCvtServeDO(); BeanUtils.copyProperties(comCvtServeDTO, comCvtServeDO); if (checkRepeat(comCvtServeDO)) { return R.fail("服务已存在"); } int insert = comCvtServeDAO.insert(comCvtServeDO); if (insert > 0) { return R.ok(); } return R.fail(); } @Override public R putComCvtServe(ComCvtServeDTO comCvtServeDTO) { ComCvtServeDO comCvtServeDO = comCvtServeDAO.selectById(comCvtServeDTO.getId()); if (null == comCvtServeDO) { return R.fail("该服务不存在"); } ComCvtServeDO comCvtServeDO2 = new ComCvtServeDO(); BeanUtils.copyProperties(comCvtServeDTO, comCvtServeDO2); if (!comCvtServeDO.equals(comCvtServeDO2) && checkRepeat(comCvtServeDO2)) { return R.fail("该服务与其他服务重复"); } int update = comCvtServeDAO.updateById(comCvtServeDO2); if (update > 0) { return R.ok(); } return R.fail(); } @Override public R getComCvtServe(Long id) { ComCvtServeDO comCvtServeDO = comCvtServeDAO.selectById(id); if (null == comCvtServeDO) { return R.fail("该服务不存在"); } ComCvtServeVO comCvtServeVO = new ComCvtServeVO(); BeanUtils.copyProperties(comCvtServeDO, comCvtServeVO); ComCvtBusinessDO comCvtBusinessDO = comCvtBusinessDAO.selectById(comCvtServeDO.getBusinessId()); if (null != comCvtBusinessDO) { comCvtServeVO.setBusinessName(comCvtBusinessDO.getName()); } ComCvtCategoryDO comCvtCategoryDO = comCvtCategoryDAO.selectById(comCvtServeDO.getCategoryId()); if (null != comCvtCategoryDO) { comCvtServeVO.setCategoryName(comCvtCategoryDO.getName()); } return R.ok(comCvtServeDO); } @Override public R deleteComCvtServe(Long id) { ComCvtServeDO comCvtServeDO = comCvtServeDAO.selectById(id); if (null == comCvtServeDO) { return R.fail("该服务不存在"); } int count = comCvtServeDAO.deleteById(id); if (count < 1) { return R.fail("删除失败"); } return R.ok(); } @Override public List getBusinessCategoryServeVOS(Long businessId) { List comCvtBusinessCategoryServeVOS = new ArrayList<>(); List comCvtServeDOS = comCvtServeDAO .selectList(new QueryWrapper().lambda().eq(ComCvtServeDO::getBusinessId, businessId)); List categoryDOS = comCvtCategoryDAO .selectList(new QueryWrapper().lambda().orderByDesc(ComCvtCategoryDO::getWeight)); categoryDOS.stream().forEach(categoryDO -> { List serveVOS = getComCvtServeDOSByCategory(comCvtServeDOS, categoryDO.getId()); if (!ObjectUtils.isEmpty(serveVOS)) { ComCvtBusinessCategoryServeVO comCvtServeVo = new ComCvtBusinessCategoryServeVO(); comCvtServeVo.setCategoryName(categoryDO.getName()); comCvtServeVo.setComCvtServeVOS(serveVOS); comCvtBusinessCategoryServeVOS.add(comCvtServeVo); } }); return comCvtBusinessCategoryServeVOS; } /** * 按分类筛选 * * @param comCvtServeDOS * @param categoryId * @return */ private List getComCvtServeDOSByCategory(List comCvtServeDOS, Long categoryId) { List comCvtServeVOS = new ArrayList<>(); comCvtServeDOS = comCvtServeDOS.stream().filter(dos -> dos.getCategoryId() == categoryId).collect(Collectors.toList()); comCvtServeDOS.forEach(comCvtServeDO -> { ComCvtServeVO vo = new ComCvtServeVO(); BeanUtils.copyProperties(comCvtServeDO, vo); comCvtServeVOS.add(vo); }); return comCvtServeVOS; } @Override public R listSaveConvenientServeExcelVO(List list, Long communityId) { List comCvtServeDOS = new ArrayList<>(); List populationImportErrorVOList = new ArrayList<>(); List categoryDOS = comCvtCategoryDAO .selectList(new QueryWrapper().lambda().orderByDesc(ComCvtCategoryDO::getWeight)); Map categoryMap = getCategoryMap(categoryDOS); List comCvtBusinessDOS; if (null != communityId && communityId != 0) { comCvtBusinessDOS = comCvtBusinessDAO.selectList( new QueryWrapper().lambda().eq(ComCvtBusinessDO::getCommunityId, communityId)); } else { comCvtBusinessDOS = comCvtBusinessDAO.selectList(new LambdaQueryWrapper<>()); } Map businessMap = getBusinessMap(comCvtBusinessDOS); int index = 2; for (ComCvtServeExcelVO comCvtServeExcelVO : list) { /** * 便民服务分类存在 并且 便民服务商家 匹配上 */ if (categoryMap.containsKey(comCvtServeExcelVO.getCategoryName()) && businessMap.containsKey(comCvtServeExcelVO.getBusinessName())) { ComCvtServeDO comCvtServeDO = new ComCvtServeDO(); BeanUtils.copyProperties(comCvtServeExcelVO, comCvtServeDO); comCvtServeDO.setCategoryId(categoryMap.get(comCvtServeExcelVO.getCategoryName())); comCvtServeDO.setBusinessId(businessMap.get(comCvtServeExcelVO.getBusinessName())); // 检查商家是否已有某服务 if (!checkRepeat(comCvtServeDO)) { comCvtServeDOS.add(comCvtServeDO); } else { ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO(); importErrorVO.setErrorMsg(String.format("导入失败:商家【%s】下已有服务【%s】", comCvtServeExcelVO.getBusinessName(), comCvtServeExcelVO.getServiceName())); // importErrorVO.setErrorPosition("第" + index + "行"); populationImportErrorVOList.add(importErrorVO); log.error(String.format("导入失败:商家【%s】下已有服务【%s】", comCvtServeExcelVO.getBusinessName(), comCvtServeExcelVO.getServiceName())); } } else { if (!categoryMap.containsKey(comCvtServeExcelVO.getCategoryName())) { ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO(); importErrorVO.setErrorMsg("导入失败: 服务分类" + comCvtServeExcelVO.getCategoryName() + "不存在"); // importErrorVO.setErrorPosition("第" + index + "行,第1列"); populationImportErrorVOList.add(importErrorVO); // errorInfo.add(comCvtServeExcelVO.getCategoryName() +"导入失败: 服务分类不存在"); } if (!businessMap.containsKey(comCvtServeExcelVO.getBusinessName())) { ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO(); importErrorVO.setErrorMsg("导入失败: 便民服务商家" + comCvtServeExcelVO.getBusinessName() + "不存在"); // importErrorVO.setErrorPosition("第" + index + "行,第5列"); populationImportErrorVOList.add(importErrorVO); } } index++; } boolean saveBatched = this.saveBatch(comCvtServeDOS); if (saveBatched) { if (comCvtServeDOS.size() > 0 && populationImportErrorVOList.size() > 0) { return R.fail(JSON.toJSONString(populationImportErrorVOList)); } if (comCvtServeDOS.size() == 0 && populationImportErrorVOList.size() > 0) { return R.fail(JSON.toJSONString(populationImportErrorVOList)); } } else { return R.fail(JSON.toJSONString(populationImportErrorVOList)); } return R.ok("共计导入服务数量:" + comCvtServeDOS.size()); } // 获取分类集合 private Map getCategoryMap(List categoryDOS) { Map categoryMap = new HashMap<>(); if (!ObjectUtils.isEmpty(categoryDOS)) { categoryDOS.forEach(categoryDO -> { categoryMap.put(categoryDO.getName(), categoryDO.getId()); }); } return categoryMap; } // 获取商家集合 private Map getBusinessMap(List comCvtBusinessDOS) { Map businessMap = new HashMap<>(); if (!ObjectUtils.isEmpty(comCvtBusinessDOS)) { comCvtBusinessDOS.forEach(businessDO -> { businessMap.put(businessDO.getName(), businessDO.getId()); }); } return businessMap; } /** * 检查服务是否重复 商家名称、分类名称,服务名称、服务价格、服务描述不能同时重复 * * @param comCvtServeDO * @return */ private boolean checkRepeat(ComCvtServeDO comCvtServeDO) { Integer count = comCvtServeDAO.selectCount( new QueryWrapper().lambda().eq(ComCvtServeDO::getBusinessId, comCvtServeDO.getBusinessId()) .and(wrapper -> wrapper.eq(ComCvtServeDO::getCategoryId, comCvtServeDO.getCategoryId())) .and(wrapper -> wrapper.eq(ComCvtServeDO::getServiceName, comCvtServeDO.getServiceName())) .and(wrapper -> wrapper.eq(ComCvtServeDO::getServicePrice, comCvtServeDO.getServicePrice())) .and(wrapper -> wrapper.eq(ComCvtServeDO::getServiceDesc, comCvtServeDO.getServiceDesc()))); return count > 0; } }