package cn.lili.modules.store.serviceimpl; import cn.hutool.core.date.DateTime; import cn.hutool.core.map.MapUtil; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.BeanUtil; import cn.lili.modules.goods.entity.dos.Category; import cn.lili.modules.goods.service.CategoryService; import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.search.utils.EsIndexUtil; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreDeliverGoodsAddressDTO; import cn.lili.modules.store.entity.dto.StoreSettingDTO; import cn.lili.modules.store.entity.dto.StoreSettlementDay; import cn.lili.modules.store.entity.vos.StoreBasicInfoVO; import cn.lili.modules.store.entity.vos.StoreDetailVO; import cn.lili.modules.store.entity.vos.StoreManagementCategoryVO; import cn.lili.modules.store.entity.vos.StoreOtherVO; import cn.lili.modules.store.mapper.StoreDetailMapper; import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.store.service.StoreService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.GoodsTagsEnum; import cn.lili.rocketmq.tags.StoreTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; /** * 店铺详细业务层实现 * * @author pikachu * @since 2020-03-07 16:18:56 */ @Service public class StoreDetailServiceImpl extends ServiceImpl implements StoreDetailService { /** * 店铺 */ @Autowired private StoreService storeService; /** * 分类 */ @Autowired private CategoryService categoryService; @Autowired private GoodsService goodsService; @Autowired private RocketmqCustomProperties rocketmqCustomProperties; @Autowired private RocketMQTemplate rocketMQTemplate; @Autowired private Cache cache; @Override public StoreDetailVO getStoreDetailVO(String storeId) { StoreDetailVO storeDetailVO = (StoreDetailVO) cache.get(CachePrefix.STORE.getPrefix() + storeId); if (storeDetailVO == null) { storeDetailVO = this.baseMapper.getStoreDetail(storeId); cache.put(CachePrefix.STORE.getPrefix() + storeId, storeDetailVO, 7200L); } return storeDetailVO; } @Override public StoreDetailVO getStoreDetailVOByMemberId(String memberId) { return this.baseMapper.getStoreDetailByMemberId(memberId); } @Override public StoreDetail getStoreDetail(String storeId) { LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(StoreDetail::getStoreId, storeId); return this.getOne(lambdaQueryWrapper); } @Override public Boolean editStoreSetting(StoreSettingDTO storeSettingDTO) { AuthUser tokenUser = Objects.requireNonNull(UserContext.getCurrentUser()); //修改店铺 Store store = storeService.getById(tokenUser.getStoreId()); BeanUtil.copyProperties(storeSettingDTO, store); boolean result = storeService.updateById(store); if (result) { this.updateStoreGoodsInfo(store); this.removeCache(store.getId()); } String destination = rocketmqCustomProperties.getStoreTopic() + ":" + StoreTagsEnum.EDIT_STORE_SETTING.name(); //发送订单变更mq消息 rocketMQTemplate.asyncSend(destination, store, RocketmqSendCallbackBuilder.commonCallback()); return result; } @Override public void updateStoreGoodsInfo(Store store) { goodsService.updateStoreDetail(store); Map updateIndexFieldsMap = EsIndexUtil.getUpdateIndexFieldsMap( MapUtil.builder(new HashMap()).put("storeId", store.getId()).build(), MapUtil.builder(new HashMap()).put("storeName", store.getStoreName()).put("selfOperated", store.getSelfOperated()).build()); String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_FIELD.name(); //发送mq消息 rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(updateIndexFieldsMap), RocketmqSendCallbackBuilder.commonCallback()); } @Override public Boolean editMerchantEuid(String merchantEuid) { AuthUser tokenUser = Objects.requireNonNull(UserContext.getCurrentUser()); Store store = storeService.getById(tokenUser.getStoreId()); store.setMerchantEuid(merchantEuid); this.removeCache(store.getId()); return storeService.updateById(store); } /** * 获取待结算店铺列表 * * @param day 结算日 * @return 待结算店铺列表 */ @Override public List getSettlementStore(int day) { return this.baseMapper.getSettlementStore(day); } @Override public StoreDeliverGoodsAddressDTO getStoreDeliverGoodsAddressDto() { String storeId = Objects.requireNonNull(UserContext.getCurrentUser().getStoreId()); return this.baseMapper.getStoreDeliverGoodsAddressDto(storeId); } @Override public StoreDeliverGoodsAddressDTO getStoreDeliverGoodsAddressDto(String id) { StoreDeliverGoodsAddressDTO storeDeliverGoodsAddressDto = this.baseMapper.getStoreDeliverGoodsAddressDto(id); if (storeDeliverGoodsAddressDto == null) { storeDeliverGoodsAddressDto = new StoreDeliverGoodsAddressDTO(); } return storeDeliverGoodsAddressDto; } @Override public boolean editStoreDeliverGoodsAddressDTO(StoreDeliverGoodsAddressDTO storeDeliverGoodsAddressDto) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser().getStoreId()); LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorName, storeDeliverGoodsAddressDto.getSalesConsignorName()); lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorMobile, storeDeliverGoodsAddressDto.getSalesConsignorMobile()); lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorAddressId, storeDeliverGoodsAddressDto.getSalesConsignorAddressId()); lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorAddressPath, storeDeliverGoodsAddressDto.getSalesConsignorAddressPath()); lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorDetail, storeDeliverGoodsAddressDto.getSalesConsignorDetail()); lambdaUpdateWrapper.eq(StoreDetail::getStoreId, storeId); this.removeCache(storeId); return this.update(lambdaUpdateWrapper); } /** * 修改店铺的结算日 * * @param storeId 店铺ID * @param dateTime 结算日 */ @Override public void updateSettlementDay(String storeId, DateTime dateTime) { this.removeCache(storeId); this.baseMapper.updateSettlementDay(storeId, dateTime); } @Override public StoreBasicInfoVO getStoreBasicInfoDTO(String storeId) { return this.baseMapper.getStoreBasicInfoDTO(storeId); } @Override public StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO() { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); return this.baseMapper.getStoreAfterSaleAddressDTO(storeId); } @Override public StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String id) { StoreAfterSaleAddressDTO storeAfterSaleAddressDTO = this.baseMapper.getStoreAfterSaleAddressDTO(id); if (storeAfterSaleAddressDTO == null) { storeAfterSaleAddressDTO = new StoreAfterSaleAddressDTO(); } return storeAfterSaleAddressDTO; } @Override public boolean editStoreAfterSaleAddressDTO(StoreAfterSaleAddressDTO storeAfterSaleAddressDTO) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.set(StoreDetail::getSalesConsigneeName, storeAfterSaleAddressDTO.getSalesConsigneeName()); lambdaUpdateWrapper.set(StoreDetail::getSalesConsigneeAddressId, storeAfterSaleAddressDTO.getSalesConsigneeAddressId()); lambdaUpdateWrapper.set(StoreDetail::getSalesConsigneeAddressPath, storeAfterSaleAddressDTO.getSalesConsigneeAddressPath()); lambdaUpdateWrapper.set(StoreDetail::getSalesConsigneeDetail, storeAfterSaleAddressDTO.getSalesConsigneeDetail()); lambdaUpdateWrapper.set(StoreDetail::getSalesConsigneeMobile, storeAfterSaleAddressDTO.getSalesConsigneeMobile()); lambdaUpdateWrapper.eq(StoreDetail::getStoreId, storeId); this.removeCache(storeId); return this.update(lambdaUpdateWrapper); } @Override public boolean updateStockWarning(Integer stockWarning) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.set(StoreDetail::getStockWarning, stockWarning); lambdaUpdateWrapper.eq(StoreDetail::getStoreId, storeId); this.removeCache(storeId); return this.update(lambdaUpdateWrapper); } @Override public List goodsManagementCategory(String storeId) { //获取顶部分类列表 List categoryList = categoryService.firstCategory(); //获取店铺信息 StoreDetail storeDetail = this.getOne(new LambdaQueryWrapper().eq(StoreDetail::getStoreId, storeId)); //获取店铺分类 String[] storeCategoryList = storeDetail.getGoodsManagementCategory().split(","); List list = new ArrayList<>(); for (Category category : categoryList) { StoreManagementCategoryVO storeManagementCategoryVO = new StoreManagementCategoryVO(category); for (String storeCategory : storeCategoryList) { if (storeCategory.equals(category.getId())) { storeManagementCategoryVO.setSelected(true); } } list.add(storeManagementCategoryVO); } return list; } @Override public StoreOtherVO getStoreOtherVO(String storeId) { return this.baseMapper.getLicencePhoto(storeId); } /** * 删除缓存 * * @param storeId 店铺id */ private void removeCache(String storeId) { cache.remove(CachePrefix.STORE.getPrefix() + storeId); } }