package com.panzhihua.service_community.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSONObject; 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.exceptions.ServiceException; import com.panzhihua.common.model.dtos.community.convenient.*; import com.panzhihua.common.model.dtos.grid.EventGridMemberPassResetDTO; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.convenient.*; import com.panzhihua.common.service.user.UserService; import com.panzhihua.common.utlis.Snowflake; import com.panzhihua.service_community.dao.*; import com.panzhihua.service_community.model.dos.*; import com.panzhihua.service_community.service.ConvenientMerchantService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; import static java.util.Objects.isNull; import static java.util.Objects.nonNull; import static org.apache.commons.lang3.StringUtils.isNotBlank; /** * @title: ConvenientMerchantServiceImpl * @projectName: 成都呐喊信息技术有限公司-智慧社区项目 * @description: 便民服务商家服务实现类 * @author: hans * @date: 2021/09/16 16:14 */ @Service @Slf4j public class ConvenientMerchantServiceImpl extends ServiceImpl implements ConvenientMerchantService { @Resource private UserService userService; @Resource private ConvenientServiceCategoryDAO convenientServiceCategoryDAO; @Resource private ComActDAO comActDAO; @Resource private ConvenientProductDAO convenientProductDAO; @Resource private ConvenientConsultationStatisticsDAO convenientConsultationStatisticsDAO; @Resource private ConvenientViewStatisticsDAO convenientViewStatisticsDAO; @Resource private ComShopFlowerEvaluateDAO comShopFlowerEvaluateDAO; private static final String DQ = "510402"; private static final String RHQ = "510411"; @Override @Transactional(rollbackFor = Exception.class) public R addMerchant(ConvenientMerchantDTO convenientMerchantDTO) { //校验微信手机号是否已使用 String mobilePhone = convenientMerchantDTO.getMobilePhone(); Integer count = this.baseMapper.selectCount(new LambdaQueryWrapper().eq(ConvenientMerchantDO::getMobilePhone, mobilePhone)); if (count > 0) { R.fail("该微信手机号:" + mobilePhone + "已被使用!请更换"); } ConvenientMerchantDO convenientMerchantDO = new ConvenientMerchantDO(); BeanUtils.copyProperties(convenientMerchantDTO, convenientMerchantDO); if (convenientMerchantDTO.getCommunityId() == 0) { if (DQ.equals(convenientMerchantDTO.getAreaCode())) { convenientMerchantDO.setCommunityName("东区社区"); } else if (RHQ.equals(convenientMerchantDTO.getAreaCode())) { convenientMerchantDO.setCommunityName("仁和区社区"); } else { convenientMerchantDO.setCommunityName("西区社区"); } } else { ComActDO comActDO = comActDAO.selectById(convenientMerchantDTO.getCommunityId()); convenientMerchantDO.setCommunityName(comActDO.getName()); } convenientMerchantDO.setUserId(0L); convenientMerchantDO.setCreatedAt(new Date()); int insertResult = this.baseMapper.insert(convenientMerchantDO); if (insertResult > 0) { Long merchantId = convenientMerchantDO.getId(); if (nonNull(merchantId)) { //添加服务 List serviceIds = convenientMerchantDTO.getServiceIds(); serviceIds.forEach(serviceId -> { ConvenientServiceCategoryDO convenientServiceCategoryDO = convenientServiceCategoryDAO.selectById(serviceId); convenientServiceCategoryDAO.createMerchantServiceRelation(Snowflake.getId(), merchantId, serviceId, convenientServiceCategoryDO.getName(), convenientMerchantDTO.getCreatedBy()); }); } } //添加user R addUserResult = userService.addConvenientMerchantUser(convenientMerchantDTO); if (R.isOk(addUserResult)) { Long merchantUserId = Long.parseLong(addUserResult.getData().toString()); convenientMerchantDO.setUserId(merchantUserId); this.baseMapper.updateById(convenientMerchantDO); } else { throw new ServiceException("406", addUserResult.getMsg()); } return R.ok(); } @Override @Transactional(rollbackFor = Exception.class) public R putMerchant(ConvenientMerchantDTO convenientMerchantDTO) { Long merchantId = convenientMerchantDTO.getId(); String mobilePhone = convenientMerchantDTO.getMobilePhone(); ConvenientMerchantDO merchantDO = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(ConvenientMerchantDO::getMobilePhone, mobilePhone)); ConvenientMerchantDO convenientMerchantDO = this.baseMapper.selectById(merchantId); if (isNull(convenientMerchantDO)) { return R.fail("商家不存在"); } Long createBy = convenientMerchantDO.getCreatedBy(); BeanUtils.copyProperties(convenientMerchantDTO, convenientMerchantDO); if (nonNull(merchantDO) && !merchantDO.getId().equals(convenientMerchantDO.getId())) { R.fail("该微信手机号:" + mobilePhone + "已被使用!请更换"); } Long communityId = convenientMerchantDTO.getCommunityId(); if (nonNull(communityId)) { ComActDO comActDO = comActDAO.selectById(communityId); if (comActDO != null) { convenientMerchantDO.setCommunityName(comActDO.getName()); } else { convenientMerchantDO.setCommunityName("西区社区"); } } String account = convenientMerchantDTO.getAccount(); if (isNotBlank(account)) { //修改商家绑定账户号 R putAccountResult = userService.putUserAccount(convenientMerchantDO.getUserId(), account); if (!R.isOk(putAccountResult)) { return putAccountResult; } } List serviceIds = convenientMerchantDTO.getServiceIds(); if (!serviceIds.isEmpty()) { convenientServiceCategoryDAO.deleteMerchantServiceRelation(merchantId); serviceIds.forEach(serviceId -> { ConvenientServiceCategoryDO convenientServiceCategoryDO = convenientServiceCategoryDAO.selectById(serviceId); convenientServiceCategoryDAO.createMerchantServiceRelation(Snowflake.getId(), merchantId, serviceId, convenientServiceCategoryDO.getName(), createBy); }); } convenientMerchantDO.setIntroduction(convenientMerchantDTO.getIntroduction()); this.baseMapper.updateById(convenientMerchantDO); return R.ok(); } @Override public R deleteMerchant(Long merchantId, Long operator) { int result = this.baseMapper.deleteMerchantById(merchantId, operator); if (result > 0) { return R.ok(); } return R.fail("删除失败"); } @Override public R pageMerchant(PageConvenientMerchantDTO pageConvenientMerchantDTO) { Page page = new Page<>(); page.setSize(pageConvenientMerchantDTO.getPageSize()); page.setCurrent(pageConvenientMerchantDTO.getPageNum()); IPage iPage = this.baseMapper.pageMerchant(page, pageConvenientMerchantDTO); if (nonNull(pageConvenientMerchantDTO.getServiceId())) { List records = iPage.getRecords(); if (!records.isEmpty()) { records.forEach(record -> { String serviceScope = convenientServiceCategoryDAO.selectServiceScopeByMerchantId(record.getId()); record.setServiceScope(serviceScope); }); } } return R.ok(iPage); } @Override public R getMerchant(Long merchantId) { ConvenientMerchantVO convenientMerchantVO = this.baseMapper.selectMerchantById(merchantId); List serviceIds = convenientServiceCategoryDAO.selectServiceIdsForMerchant(merchantId); convenientMerchantVO.setServiceIds(serviceIds); return R.ok(convenientMerchantVO); } @Override public R disableOrEnableMerchant(DisableOrEnableConvenientMerchantDTO disableOrEnableConvenientMerchantDTO) { List convenientMerchantDOList = this.baseMapper.selectList(new QueryWrapper() .lambda().in(ConvenientMerchantDO::getId, disableOrEnableConvenientMerchantDTO.getIds())); List userIds = convenientMerchantDOList.stream().map(ConvenientMerchantDO::getUserId).collect(Collectors.toList()); disableOrEnableConvenientMerchantDTO.setUserIds(userIds); R result = userService.disableOrEnableMerchantUsers(disableOrEnableConvenientMerchantDTO); int type = disableOrEnableConvenientMerchantDTO.getType().intValue(); if (type == 2) { this.baseMapper.batchUpdateBusinessStatus(convenientMerchantDOList, 0); } if (R.isOk(result)) { return R.ok(); } return R.fail("操作失败"); } @Override public R resetPasswordMerchant(ResetPasswordConvenientMerchantDTO resetPasswordConvenientMerchantDTO) { List convenientMerchantDOList = this.baseMapper.selectList(new QueryWrapper() .lambda().in(ConvenientMerchantDO::getId, resetPasswordConvenientMerchantDTO.getIds())); List userIds = convenientMerchantDOList.stream().map(ConvenientMerchantDO::getUserId).collect(Collectors.toList()); EventGridMemberPassResetDTO eventGridMemberPassResetDTO = new EventGridMemberPassResetDTO(); eventGridMemberPassResetDTO.setPassword(resetPasswordConvenientMerchantDTO.getPassword()); eventGridMemberPassResetDTO.setIds(userIds); return userService.gridMemberPassReset(eventGridMemberPassResetDTO); } @Override public R getUserMerchantInfoByAccount(String account) { try { R loginUserInfoVOR = userService.getUserInfo(account + "_5"); LoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(loginUserInfoVOR.getData()), LoginUserInfoVO.class); if (isNull(loginUserInfoVO)) { return R.fail(500, "该账号不存在"); } ConvenientMerchantDO merchantDO = this.baseMapper.selectOne(new LambdaQueryWrapper() .eq(ConvenientMerchantDO::getIsDel, false).eq(ConvenientMerchantDO::getUserId, loginUserInfoVO.getUserId())); if (isNull(merchantDO)) { return R.fail(500, "该账号不存在"); } ConvenientMerchantVO merchantVO = new ConvenientMerchantVO(); BeanUtils.copyProperties(merchantDO, merchantVO); merchantVO.setAccount(account); merchantVO.setAccountStatus(loginUserInfoVO.getStatus()); return R.ok(merchantVO); } catch (Exception e) { return R.fail(); } } @Override public R getMerchantInfoByAccount(String account) { try { List merchantDetailByAccount = this.baseMapper.getMerchantDetailByAccount(account); if (CollUtil.isEmpty(merchantDetailByAccount)) { return R.fail(500, "该账号不存在"); } ConvenientMerchantVO convenientMerchantVO = merchantDetailByAccount.get(0); return R.ok(convenientMerchantVO); } catch (Exception e) { return R.fail(); } } @Override public R getUserConvenientMerchantInfo(Long userId) { ConvenientMerchantDO merchantDO = this.baseMapper.selectOne(new QueryWrapper() .lambda().eq(ConvenientMerchantDO::getUserId, userId)); if (isNull(merchantDO)) { return R.fail("商家不存在"); } Long merchantId = merchantDO.getId(); ConvenientMerchantVO convenientMerchantVO = new ConvenientMerchantVO(); BeanUtils.copyProperties(merchantDO, convenientMerchantVO); List serviceIds = convenientServiceCategoryDAO.selectServiceIdsForMerchant(merchantId); convenientMerchantVO.setServiceIds(serviceIds); Date nowDate = new Date(); SimpleDateFormat mothFormat = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd"); String moth = mothFormat.format(nowDate); String day = dayFormat.format(nowDate); int consultationCount = convenientConsultationStatisticsDAO.selectTotalConsultationVolume(merchantId); int monthConsultationVolume = convenientConsultationStatisticsDAO.selectMonthConsultationVolume(merchantId, moth); int dayConsultationVolume = convenientConsultationStatisticsDAO.selectDayConsultationVolume(merchantId, day); Integer viewCount = convenientViewStatisticsDAO.selectTotalViewNum(merchantId); int monthViewNum = convenientViewStatisticsDAO.selectMonthViewNum(merchantId, moth); int dayViewNum = convenientViewStatisticsDAO.selectDayViewNum(merchantId, day); convenientMerchantVO.setConsultationVolume(consultationCount); convenientMerchantVO.setViewNum(viewCount); convenientMerchantVO.setMonthConsultationVolume(monthConsultationVolume); convenientMerchantVO.setDayConsultationVolume(dayConsultationVolume); convenientMerchantVO.setMonthViewNum(monthViewNum); convenientMerchantVO.setDayViewNum(dayViewNum); return R.ok(convenientMerchantVO); } @Override public R getPopularMerchants(PagePopularMerchantDTO pagePopularMerchantDTO) { Date nowDate = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); String currentMon = simpleDateFormat.format(nowDate).concat("%"); Page page = new Page<>(); page.setSize(pagePopularMerchantDTO.getPageSize()); page.setCurrent(pagePopularMerchantDTO.getPageNum()); IPage merchantVOList = this.baseMapper.getPopularMerchants(page, pagePopularMerchantDTO.getCommunityId(), currentMon, pagePopularMerchantDTO.getAreaCode()); if (pagePopularMerchantDTO.getPageNum().equals(1L)) { //金沙江默认第一个 List merchantVOS = new ArrayList<>(); ConvenientMerchantVO merchantVO = new ConvenientMerchantVO(); merchantVO.setName("金沙江智慧物流商贸城"); merchantVO.setLogo("https://www.psciio.com//idcard/0694d975ed4d4c49bcfb728a678518f2.jpg"); merchantVO.setIntroduction("农产直销、综合商贸、冷链储运、中央厨房、检验检疫、农博会展、总部商务、综合服务。"); merchantVO.setServiceScope(""); merchantVO.setConsultationVolume(0); merchantVO.setMonthConsultationVolume(0); merchantVOS.add(merchantVO); //第一页默认把犇师傅维修中心加载到第一个 List merchantList = this.baseMapper.selectMerchantByName(pagePopularMerchantDTO.getCommunityId(), currentMon); if (merchantList != null && merchantList.size() > 0) { merchantVOS.addAll(merchantList); merchantVOS.addAll(merchantVOList.getRecords()); merchantVOList.setRecords(merchantVOS); } } return R.ok(merchantVOList); } @Override public R getClassifyMerchants(PageClassifyMerchantDTO pageClassifyMerchantDTO) { Date nowDate = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); String currentMon = simpleDateFormat.format(nowDate).concat("%"); Page page = new Page<>(); page.setSize(pageClassifyMerchantDTO.getPageSize()); page.setCurrent(pageClassifyMerchantDTO.getPageNum()); IPage merchantVOList = this.baseMapper.getClassifyMerchants(page, pageClassifyMerchantDTO, currentMon); List records = merchantVOList.getRecords(); if (!records.isEmpty()) { records.forEach(record -> { String serviceScope = convenientServiceCategoryDAO.selectServiceScopeByMerchantId(record.getId()); record.setServiceScope(serviceScope); }); } return R.ok(merchantVOList); } /** * 小程序获取商家详情 * * @param merchantId * @return */ @Override public R getMerchantDetail(Long merchantId) { Date nowDate = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); String currentMon = simpleDateFormat.format(nowDate).concat("%"); return R.ok(this.baseMapper.getMerchantDetail(merchantId, currentMon)); } @Override public R pageSearchMerchant(PageSearchDTO pageSearchDTO) { Date nowDate = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); String currentMon = simpleDateFormat.format(nowDate).concat("%"); Page page = new Page<>(); page.setSize(pageSearchDTO.getPageSize()); page.setCurrent(pageSearchDTO.getPageNum()); IPage merchantVOIPage = this.baseMapper.pageSearchMerchant(page, pageSearchDTO, currentMon); List records = merchantVOIPage.getRecords(); if (!records.isEmpty()) { records.forEach(record -> { List merchantProduct = convenientProductDAO.getMerchantProduct(record.getId()); List productSpecifications = convenientProductDAO.getProductSpecifications(record.getId()); if (!merchantProduct.isEmpty()) { if (merchantProduct.size() > 2) { merchantProduct = merchantProduct.subList(0, 2); } merchantProduct.forEach(product -> { List list = new ArrayList<>(); productSpecifications.forEach(specification -> { if (product.getId().equals(specification.getProductId())) { list.add(specification); } }); product.setProductSpecificationVOList(list); }); } record.setProductVOList(merchantProduct); }); } return R.ok(merchantVOIPage); } @Override public R consultMerchant(Long merchantId) { ConvenientMerchantDO merchantDO = this.baseMapper.selectById(merchantId); if (isNull(merchantDO)) { return R.fail("商家不存在"); } SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String nowDate = simpleDateFormat.format(new Date()); ConvenientConsultationStatisticsDO statisticsDO = convenientConsultationStatisticsDAO.selectOne(new LambdaQueryWrapper() .eq(ConvenientConsultationStatisticsDO::getMerchantId, merchantId).eq(ConvenientConsultationStatisticsDO::getStatisticDate, nowDate)); if (isNull(statisticsDO)) { convenientConsultationStatisticsDAO.createTodayStatistic(merchantId); } else { convenientConsultationStatisticsDAO.incrConsultationNum(merchantId, nowDate); } return R.ok(); } @Override public R incrMerchantView(Long merchantId) { ConvenientMerchantDO merchantDO = this.baseMapper.selectById(merchantId); if (isNull(merchantDO)) { return R.fail("商家不存在"); } SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String nowDate = simpleDateFormat.format(new Date()); ConvenientViewStatisticsDO statisticsDO = convenientViewStatisticsDAO.selectOne(new LambdaQueryWrapper() .eq(ConvenientViewStatisticsDO::getMerchantId, merchantId).eq(ConvenientViewStatisticsDO::getStatisticDate, nowDate)); if (isNull(statisticsDO)) { convenientViewStatisticsDAO.createTodayStatistic(merchantId); } else { convenientViewStatisticsDAO.incrViewNum(merchantId, nowDate); } return R.ok(); } @Override public R exportMerchant(ExportMerchantDTO exportMerchantDTO) { List needExportIds = exportMerchantDTO.getIds(); if (nonNull(needExportIds) && !needExportIds.isEmpty()) { //根据id导出 return R.ok(this.baseMapper.exportMerchantByIds(needExportIds)); } List exportMerchantVOList = this.baseMapper.exportMerchantBySearch(exportMerchantDTO); if (nonNull(exportMerchantDTO.getServiceId()) && !exportMerchantVOList.isEmpty()) { exportMerchantVOList.forEach(merchant -> { String serviceScope = convenientServiceCategoryDAO.selectServiceScopeByMerchantId(merchant.getId()); merchant.setServiceScope(serviceScope); }); } return R.ok(exportMerchantVOList); } /** * 定时任务每隔半小时将商家浏览量和咨询量总值计入指定商家数据中 * * @return */ @Override public R timedTaskWriteDataToMerchantJobHandler() { List consultationVOList = convenientConsultationStatisticsDAO.selectSumForConsultationNum(); List viewVOList = convenientViewStatisticsDAO.selectSumForViewNum(); this.baseMapper.batchUpdateMerchantConsultationNum(consultationVOList); this.baseMapper.batchUpdateMerchantViewNum(viewVOList); return R.ok(); } /** * check商家/店铺是否有效 * * @param userId * @return */ @Override public Boolean checkStoreIsValid(Long userId) { R loginUserInfo = userService.getUserInfoByUserId(userId.toString()); LoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(loginUserInfo.getData()), LoginUserInfoVO.class); if (isNull(loginUserInfoVO) || !loginUserInfoVO.getType().equals(10) || loginUserInfoVO.getStatus() != 1) { return false; } return true; } @Override public R getMerchantByUserId(Long userId) { ConvenientMerchantVO convenientMerchantVO = this.baseMapper.selectMerchantByUserId(userId); if (isNull(convenientMerchantVO)) { return R.fail("商家不存在"); } Long merchantId = convenientMerchantVO.getId(); List serviceIds = convenientServiceCategoryDAO.selectServiceIdsForMerchant(merchantId); convenientMerchantVO.setServiceIds(serviceIds); BigDecimal score = comShopFlowerEvaluateDAO.statisticsScore(merchantId); convenientMerchantVO.setScore(null == score ? BigDecimal.ZERO : NumberUtil.round(score, 1)); Date nowDate = new Date(); SimpleDateFormat mothFormat = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd"); String moth = mothFormat.format(nowDate); String day = dayFormat.format(nowDate); int consultationCount = convenientConsultationStatisticsDAO.selectTotalConsultationVolume(merchantId); int monthConsultationVolume = convenientConsultationStatisticsDAO.selectMonthConsultationVolume(merchantId, moth); int dayConsultationVolume = convenientConsultationStatisticsDAO.selectDayConsultationVolume(merchantId, day); Integer viewCount = convenientViewStatisticsDAO.selectTotalViewNum(merchantId); int monthViewNum = convenientViewStatisticsDAO.selectMonthViewNum(merchantId, moth); int dayViewNum = convenientViewStatisticsDAO.selectDayViewNum(merchantId, day); convenientMerchantVO.setConsultationVolume(consultationCount); convenientMerchantVO.setViewNum(viewCount); convenientMerchantVO.setMonthConsultationVolume(monthConsultationVolume); convenientMerchantVO.setDayConsultationVolume(dayConsultationVolume); convenientMerchantVO.setMonthViewNum(monthViewNum); convenientMerchantVO.setDayViewNum(dayViewNum); return R.ok(convenientMerchantVO); } }