package com.doumee.service.business.impl; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.Jwt.JwtPayLoad; import com.doumee.config.Jwt.JwtTokenUtil; import com.doumee.config.listener.event.VisitEvent; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.Utils; import com.doumee.dao.business.*; import com.doumee.dao.business.join.GoodsorderJoinMapper; import com.doumee.dao.business.join.MemberJoinMapper; import com.doumee.dao.business.*; import com.doumee.dao.business.join.ProductLabelJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.business.model.Labels; import com.doumee.dao.business.model.Shop; import com.doumee.dao.business.model.ShopComment; import com.doumee.dao.business.model.ShopScan; import com.doumee.dao.system.SystemUserMapper; import com.doumee.dao.system.model.SystemUser; import com.doumee.dao.web.dto.*; import com.doumee.dao.web.dto.shop.*; import com.doumee.dao.web.request.MyCustomerRequest; import com.doumee.dao.web.request.SaleReportRequest; import com.doumee.dao.web.response.*; import com.doumee.service.business.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.shiro.SecurityUtils; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.xpath.operations.Bool; import org.checkerframework.checker.units.qual.C; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * 店铺基本信息表Service实现 * @author 江蹄蹄 * @date 2023/03/21 15:48 */ @Service public class ShopServiceImpl implements ShopService { @Autowired private ShopMapper shopMapper; @Autowired private GoodsMapper goodsMapper; @Autowired private GoodsSkuMapper goodsSkuMapper; @Autowired private ShopGoodsRelationMapper shopGoodsRelationMapper; @Autowired private ShopCommentService shopCommentService; @Autowired private ProductLabelService productLabelService; @Autowired private ShopMenuService shopMenuService; @Resource private ApplicationEventPublisher applicationEventPublisher; @Autowired public CouponService couponService; @Autowired private ShopJoinMapper shopJoinMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private MemberJoinMapper memberJoinMapper; @Autowired private SystemUserMapper systemUserMapper; @Autowired private GoodsorderJoinMapper goodsorderJoinMapper; @Autowired private ProductLabelJoinMapper productLabelJoinMapper; @Autowired private ShopFollowService shopFollowService; @Autowired private ShopScanService shopScanService; @Autowired private MemberCouponService memberCouponService; @Autowired private ShopNewsService shopNewsService; @Autowired private LabelsMapper labelsMapper; @Autowired private MultifileService multifileService; @Autowired private IntegralMapper integralMapper; @Override public Integer create(Shop shop) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); isCreateParamValid(shop,user); shop.setCreator(user.getId()); shop.setCreateDate(new Date()); shop.setEditor(user.getId()); shop.setEditDate(shop.getCreateDate()); shop.setIsdeleted(Constants.ZERO); shop.setStatus(Constants.ZERO); shop.setIsrec(Constants.ONE); shop.setOrigin(Constants.ONE); shop.setSaleType(Constants.formatIntegerNum(shop.getSaleType())); String salt = RandomStringUtils.randomAlphabetic(6); shop.setPassword(shop.getCode()+"@123456"); // 生成密码 shop.setPassword(Utils.Secure.encryptPassword(shop.getPassword(), salt)); shop.setSalt(salt); shopMapper.insert(shop); return shop.getId(); } public void isCreateParamValid(Shop shop , LoginUserInfo user){ try { String[] ss = shop.getLocationInfo().split(","); shop.setLatitude(BigDecimal.valueOf(Double.parseDouble(ss[0]))); shop.setLongitude(BigDecimal.valueOf(Double.parseDouble(ss[1]))); }catch (Exception e){ } if(StringUtils.isBlank(shop.getUsername()) || StringUtils.isBlank(shop.getPhone()) || StringUtils.isBlank(shop.getBusinessImg()) || StringUtils.isBlank(shop.getStartTime()) || shop.getLatitude()==null || shop.getLongitude()==null || shop.getBigAreaId()==null || shop.getAreaId()==null || StringUtils.isBlank(shop.getRealname()) || StringUtils.isBlank(shop.getName()) || StringUtils.isBlank(shop.getCode())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(AreasServiceImpl.getAddressByAreaId(shop.getAreaId()) ==null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请选择正确的省市区信息~"); } if(labelsMapper.selectById(shop.getBigAreaId()) ==null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请选择正确的区域信息~"); } if(shopMapper.selectCount(new QueryWrapper().lambda() .eq(Shop::getName,shop.getName()) .ne(shop.getId()!=null,Shop::getId,shop.getId()) .eq(Shop::getIsdeleted,Constants.ZERO))>0){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"经销商名称重复,请返回修改~"); } if(shopMapper.selectCount(new QueryWrapper().lambda() .eq(Shop::getCode,shop.getCode()) .ne(shop.getId()!=null,Shop::getId,shop.getId()) .eq(Shop::getIsdeleted,Constants.ZERO))>0){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"门店ID重复,请返回修改~"); } if(shopMapper.selectCount(new QueryWrapper().lambda() .eq(Shop::getUsername,shop.getUsername()) .ne(shop.getId()!=null,Shop::getId,shop.getId()) .eq(Shop::getIsdeleted,Constants.ZERO))>0){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"登录账号重复,请返回修改~"); } } @Override public void deleteById(Integer id) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Shop shop =new Shop(); shop.setId(id); shop.setEditor(user.getId()); shop.setEditDate(new Date()); shop.setIsdeleted(Constants.ONE); shopMapper.updateById(shop); } @Override public void delete(Shop shop) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(shop); shopMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } shopMapper.deleteBatchIds(ids); } @Override public void updateById(Shop shop) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(shop.getId()==null ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage()); } isCreateParamValid(shop,user); shop.setEditor(user.getId()); shop.setEditDate(new Date()); shopMapper.updateById(shop); } @Override public void updateIsRecById(Shop shop) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); shop.setEditor(user.getId()); shop.setEditDate(new Date()); shopMapper.updateById(shop); } @Override public void updateByIdInBatch(List shops) { if (CollectionUtils.isEmpty(shops)) { return; } for (Shop shop: shops) { this.updateById(shop); } } @Transactional(rollbackFor = {Exception.class,BusinessException.class}) @Override public void update(ShopDTO shopDTO, Integer memberId) { // LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().eq(SystemUser::getMemberId,memberId); SystemUser user = systemUserMapper.selectById(wrapper); Shop shop = new Shop(); shop.setId(shopDTO.getId()); shop.setEditor(user.getId()); shop.setEditDate(new Date()); shop.setImgurl(shopDTO.getImgurl()); shop.setName(shopDTO.getName()); shop.setAddr(shopDTO.getAddr()); shop.setStartTime(shopDTO.getStartTime()); shop.setEndTime(shopDTO.getEndTime()); shop.setBrandStory(shopDTO.getBrandStory()); if (!CollectionUtils.isEmpty(shopDTO.getMultiFileDTOS())){ multifileService.refreshObjMultiFile(shopDTO.getId(),Constants.MultiFile.SHOP_PICTURE.getKey(),shopDTO.getMultiFileDTOS()); } if (!CollectionUtils.isEmpty(shopDTO.getLabels())){ shopDTO.getLabels().forEach(s->{ ProductLabel productLabel = new ProductLabel(); productLabel.setCreator(user.getId()); productLabel.setCreateDate(new Date()); productLabel.setEditor(user.getId()); productLabel.setEditDate(new Date()); productLabel.setIsdeleted(Constants.ZERO); productLabel.setLabelId(s); productLabel.setShopId(shopDTO.getId()); productLabelService.create(productLabel); }); } } @Override public Shop findById(Integer id) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Shop.class); queryWrapper.eq(Shop::getId,id); queryWrapper.select("(select AVG(SCORE) from shop_comment where ISDELETED=0 and OBJ_ID=t.id) as score");//门店评分 /** ----------------start店铺访问数据----------------*/ queryWrapper.select("(select count(id) from shop_scan where ISDELETED=0 and SHOP_ID=t.id) as shopTotalVisits");//主页总访问量 queryWrapper.select("(select count(id) from shop_scan where ISDELETED=0 and SHOP_ID=t.id and to_days(CREATE_DATE)=to_days(now()) ) as shopNowVisits");//今日访问量 queryWrapper.select("(select count(id) from shop_scan where ISDELETED=0 and SHOP_ID=t.id and to_days(CREATE_DATE)=to_days(DATE_SUB(CURDATE(), INTERVAL 1 DAY)) ) as shopYesterdayVisits");//昨日日访问量 queryWrapper.select("(select count(s.MEMBER_ID) from (select MEMBER_ID,SHOP_ID from shop_scan where ISDELETED=0 group by MEMBER_ID) as s where s.SHOP_ID = t.id) as shopMemberVisits");//访问总用户数 /** ----------------end店铺访问数据----------------*/ /** ----------------start店铺互动数据----------------*/ queryWrapper.select("(select count(id) from shop_follow where ISDELETED=0 and OBJ_ID=t.id and OBJ_TYPE=0) as shopFollower");//粉丝数 queryWrapper.select("(select count(id) from shop_menu where ISDELETED=0 and SHOP_ID=t.id ) as shopMenu");//菜品数 queryWrapper.select("(select count(id) from shop_comment where ISDELETED=0 and OBJ_ID=t.id ) as shopComment");//评论数 queryWrapper.select("(select count(id) from shop_news where ISDELETED=0 and SHOP_ID=t.id ) as shopNews");//新鲜事 /** ----------------end店铺互动数据----------------*/ /** ----------------start优惠券数据----------------*/ queryWrapper.select("(select count(id) from coupon where ISDELETED=0 and SHOP_ID=t.id and type=0) as couponCount");//优惠券发放总数(张) queryWrapper.select("(select count(id) from member_coupon where ISDELETED=0 and SHOP_ID=t.id and type=0) as couponDrawCount");//优惠券领取总数(张) queryWrapper.select("(select count(id) from member_coupon where ISDELETED=0 and SHOP_ID=t.id and type=0 and STATUS=1 ) as couponUserComment");//优惠券使用总数(张) queryWrapper.select("(select sum(LIMIT_PRICE) from member_coupon where ISDELETED=0 and SHOP_ID=t.id and type=0 and STATUS=1 ) as couponUserMoney");//优惠券使用金额(元) /** ----------------end店铺优惠券数据----------------*/ Shop shop= shopJoinMapper.selectJoinOne(Shop.class,queryWrapper); String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode(); if(Objects.nonNull(shop)&&StringUtils.isNotBlank(shop.getImgurl())){ shop.setImgFullUrl(path+shop.getImgurl()); } shop.setAreas(AreasServiceImpl.getAddressByAreaId(shop.getAreaId())); if(shop.getLatitude()!=null && shop.getLongitude()!=null){ shop.setLocationInfo(shop.getLatitude().doubleValue()+","+shop.getLongitude().doubleValue()); } MPJLambdaWrapper queryproduct = new MPJLambdaWrapper<>(); queryproduct.selectAs(Labels::getName,ProductLabel::getLablesName); queryproduct.eq(ProductLabel::getIsdeleted,Constants.ZERO); queryproduct.eq(ProductLabel::getShopId,shop.getId()); queryproduct.leftJoin(Labels.class, Labels::getId,ProductLabel::getLabelId); List list=productLabelJoinMapper.selectJoinList(ProductLabel.class,queryproduct); shop.setProductList(list); return shop; } @Override public Shop findOne(Shop shop) { QueryWrapper wrapper = new QueryWrapper<>(shop); return shopMapper.selectOne(wrapper); } @Override public List findList(Shop shop) { shop.setIsdeleted(Constants.ZERO); QueryWrapper wrapper = new QueryWrapper<>(shop); return shopMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.selectAll(Shop.class); if(pageWrap.getModel().getGoodsId()!=null){ //查询某商品的供货价 queryWrapper.select("(select s.price from shop_goods_relation s where s.ISDELETED=0 and s.shop_id = t.id and s.GOODS_ID="+pageWrap.getModel().getGoodsId()+") as goodsPrice "); } queryWrapper.selectAs(Labels::getName,Shop::getBigAreaName); queryWrapper.selectAs(Member::getNickname,Shop::getNickName); queryWrapper.selectAs(Member::getImgurl,Shop::getMemberImgurl); queryWrapper.selectAs(Member::getPhone,Shop::getMemberPhone); queryWrapper.leftJoin(Member.class,Member::getId,Shop::getMemberId); queryWrapper.leftJoin(Labels.class,Labels::getId,Shop::getBigAreaId); queryWrapper.eq(Shop::getIsdeleted, Constants.ZERO); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCode()) ,Shop::getCode,pageWrap.getModel().getCode()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getUsername()) ,Shop::getName,pageWrap.getModel().getUsername()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()) ,Shop::getName,pageWrap.getModel().getName()); queryWrapper.eq(pageWrap.getModel().getSaleType()!=null, Shop::getSaleType, pageWrap.getModel().getSaleType()); queryWrapper.eq(pageWrap.getModel().getStatus()!=null, Shop::getStatus, pageWrap.getModel().getStatus()); queryWrapper.eq(pageWrap.getModel().getIsrec()!=null, Shop::getIsrec, pageWrap.getModel().getIsrec()); if(pageWrap.getModel().getGoodsId()!=null){ queryWrapper.orderByAsc("goodsPrice"); } queryWrapper.orderByDesc(Shop::getId); IPage result = shopJoinMapper.selectJoinPage(page, Shop.class, queryWrapper); String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode(); for(Shop model:result.getRecords()){ model.setImgFullUrl(path); model.setAreas( AreasServiceImpl.getAddressByAreaId(model.getAreaId())); if(model.getLatitude()!=null && model.getLongitude()!=null){ model.setLocationInfo(model.getLatitude().doubleValue()+","+model.getLongitude().doubleValue()); } } return PageData.from(result ); } @Override public List findAll(PageWrap pageWrap) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.selectAll(Shop.class); queryWrapper.eq(Shop::getIsdeleted, Constants.ZERO); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()), Shop::getName, pageWrap.getModel().getName()); queryWrapper.orderByDesc(Shop::getCreateDate); List result = shopJoinMapper.selectList(queryWrapper); return result; } @Override public long count(Shop shop) { QueryWrapper wrapper = new QueryWrapper<>(shop); return shopMapper.selectCount(wrapper); } @Override public ShopSimpleDTO getShopSimpleDTO(Integer shopId) { Shop queryShop = new Shop(); queryShop.setId(shopId); QueryWrapper queryWapper = new QueryWrapper<>(queryShop); queryWapper.lambda().eq(Shop::getIsdeleted, Constants.ZERO); queryWapper.select("*,(select avg(score) from shop_comment b where b.OBJ_ID = shop.id and b.isdeleted=0) as starNum"); queryWapper.lambda().last(" limit 1"); Shop shop = shopMapper.selectOne(queryWapper); if(shop !=null){ /* ShopComment avg = shopCommentService.findAvg(shopId); if(avg!=null){ shopSimpleDTO.setStarNum(avg.getScore()); }*/ ShopSimpleDTO shopSimpleDTO = new ShopSimpleDTO(); BeanUtils.copyProperties(shop,shopSimpleDTO); return shopSimpleDTO; } return null; } @Override public List getShopSimpleDTOList(List shopIds) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().in(Shop::getId,shopIds); List shops = shopMapper.selectList(wrapper); List avgs = shopCommentService.getAvgs(shopIds); final Map collect = avgs.stream().collect(Collectors.toMap(ShopComment::getObjId, s -> s)); final Map> labelsByIds = productLabelService.getLabelsByIds(shopIds); List shopSimpleList = shops.stream().map(s -> { ShopSimpleDTO dto = new ShopSimpleDTO(); BeanUtils.copyProperties(s, dto); ShopComment shopComment = collect.get(s.getId()); List labels = labelsByIds.get(s.getId()); dto.setLabels(labels); dto.setStarNum(shopComment != null ? shopComment.getScore() : null); return dto; }).collect(Collectors.toList()); return shopSimpleList; } @Override public ShopFaceDetailDTO getShopFaceDetailDTO(Integer shopId,Integer memberId) { // LoginUserInfo info = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Shop queryShop = new Shop(); queryShop.setId(shopId); Shop shop = shopMapper.selectOne(new QueryWrapper<>(queryShop) .lambda().eq(Shop::getIsdeleted, Constants.ZERO)); shop = Optional.ofNullable(shop).orElseThrow(()->new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,商家信息不存在!")); ShopFaceDetailDTO dto = new ShopFaceDetailDTO(); Map> objAllFileUrl = multifileService.getOBJAllFileUrl(shopId, Constants.MultiFile.SHOP_PICTURE.getKey(), Constants.ZERO,Constants.SHOP_FILE); //附件信息 dto.setBannerImgUrlList((List) MapUtils.getObject(objAllFileUrl,Constants.MultiFile.SHOP_PICTURE.getKey())); BeanUtils.copyProperties(shop,dto); CouponDTO couponDTO = couponService.findCouponDTO(shopId, memberId); dto.setCouponDTO(couponDTO); List labels = productLabelService.getLabelsById(shopId); labels = Optional.ofNullable(labels).orElse(new ArrayList<>()); dto.setLabels(labels.stream().map(s->s.getName()).collect(Collectors.toList())); List shopMenuDTO = shopMenuService.findShopMenuDTO(shopId); dto.setShopMenuDTOList(shopMenuDTO); //访问操作 VisitEvent shopVisitEvent = new VisitEvent<>(this,shop); applicationEventPublisher.publishEvent(shopVisitEvent); return dto; } @Override public MemberDTO getShopMemberDTO(Integer shopId, Integer memberId) { // LoginUserInfo info = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); MemberDTO memberDTO = shopFollowService.getMemberDTO(shopId, memberId,Constants.ZERO); return memberDTO; } @Override public PageData getShopSimpleDTOList(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); Utils.MP.blankToNull(pageWrap.getModel()); QueryWrapper wrapper = new QueryWrapper<>(); //左上 Position upperLeft = pageWrap.getModel().getUpperLeft(); //右下 Position lowRight = pageWrap.getModel().getLowRight(); wrapper.lambda() .like(Shop::getName,pageWrap.getModel().getName()) .between((Objects.nonNull(upperLeft.getLongitude()) && Objects.nonNull(lowRight.getLongitude())), Shop::getLongitude, upperLeft.getLongitude(), lowRight.getLongitude()) .between((Objects.nonNull(upperLeft.getLatitude()) && Objects.nonNull(lowRight.getLatitude())), Shop::getLongitude, upperLeft.getLatitude(), lowRight.getLatitude()); IPage shopIPage = shopMapper.selectPage(page, wrapper); if (CollectionUtils.isEmpty(shopIPage.getRecords())){ return PageData.from(new Page<>()); } List shopIds = shopIPage.getRecords().stream().map(s -> s.getId()).collect(Collectors.toList()); List avgs = shopCommentService.getAvgs(shopIds); final Map collect = avgs.stream().collect(Collectors.toMap(ShopComment::getObjId, s -> s)); final Map> labelsByIds = productLabelService.getLabelsByIds(shopIds); List shopSimpleList = shopIPage.getRecords().stream().map(s -> { ShopSimpleDTO dto = new ShopSimpleDTO(); BeanUtils.copyProperties(s, dto); ShopComment shopComment = collect.get(s.getId()); List labels = labelsByIds.get(s.getId()); dto.setLabels(labels); dto.setStarNum(shopComment != null ? shopComment.getScore() : new BigDecimal("0")); return dto; }).collect(Collectors.toList()); IPage shopSimpleDTOIPage = new Page<>(); shopSimpleDTOIPage.setPages(shopIPage.getPages()); shopSimpleDTOIPage.setRecords(shopSimpleList); shopSimpleDTOIPage.setTotal(shopIPage.getTotal()); shopSimpleDTOIPage.setSize(shopIPage.getSize()); shopSimpleDTOIPage.setCurrent(shopIPage.getCurrent()); return PageData.from(shopSimpleDTOIPage); } @Override public ShopDataStatisticsDTO getShopDataStatisticsDTO(Integer shopId) { MemberCoupon memberCoupon = new MemberCoupon(); memberCoupon.setShopId(shopId); memberCoupon.setType(Constants.ZERO); memberCoupon.setStatus(Constants.ONE); long shopCouponUseCount = memberCouponService.count(memberCoupon); ShopFollow shopFollow = new ShopFollow(); shopFollow.setObjId(shopId); shopFollow.setObjType(Constants.ZERO); long shopFansCount = shopFollowService.count(shopFollow); ShopNews shopNews = new ShopNews(); shopNews.setShopId(shopId); long shopNewCount = shopNewsService.count(shopNews); ShopDataStatisticsDTO shopDataStatisticsDTO = new ShopDataStatisticsDTO(); shopDataStatisticsDTO.setShopCouponUseCount(shopCouponUseCount) .setShopFansCount(shopFansCount).setShopNewCount(shopNewCount); return shopDataStatisticsDTO; } @Override public void visitOperation(Object o) { // LoginUserInfo info = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Shop shop = (Shop) o; UpdateWrapper wrapper = new UpdateWrapper<>(); wrapper.lambda().set(Shop::getLooknum, Objects.isNull(shop.getLooknum()) ? 1 : shop.getLooknum()+1); shopMapper.update(null,wrapper); ShopScan shopScan = new ShopScan(); // shopScan.setCreator(info.getId()); shopScan.setCreateDate(new Date()); // shopScan.setEditor(info.getId()); shopScan.setEditDate(new Date()); shopScan.setShopId(shop.getId()); shopScan.setMemberId(shop.getMemberId()); shopScanService.create(shopScan); } @Override public void resetPwd(Shop dto) { // 查询用户 Shop shop = findById(dto.getId()); if (shop == null) { throw new BusinessException(ResponseStatus.DATA_EMPTY); } // 修改密码 Shop updateUserDto = new Shop(); updateUserDto.setId(dto.getId()); updateUserDto.setPassword(Utils.Secure.encryptPassword( shop.getCode()+"@123456", shop.getSalt())); shopMapper.updateById(updateUserDto); } /** * 用户下单查询可选择的自提经销商 * @param dto * @return */ @Override public List getShopList(ShopListDTO dto){ Boolean isArea = false; if(Objects.nonNull(dto)&&StringUtils.isNotBlank(dto.getLat()) && StringUtils.isNotBlank(dto.getLgt())){ isArea = true; } List shopList = shopJoinMapper.selectList(new MPJLambdaWrapper() .selectAll(Shop.class) .select(" CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+dto.getLgt()+", "+dto.getLat()+" )) /1000,DECIMAL(15,2))",Shop::getDistance) .leftJoin(Areas.class,Areas::getId,Shop::getAreaId) .eq(Objects.nonNull(dto.getCityId()),Areas::getParentId,dto.getCityId()) .like(Objects.nonNull(dto.getShopName()),Shop::getName,dto.getShopName()) .orderByDesc(!isArea,Shop::getId) .orderByAsc(isArea,Shop::getDistance) ); String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode(); for(Shop model:shopList){ model.setImgFullUrl(path+model.getImgurl()); } return shopList; } /** * 根据openid获取是否绑定了商户 * @param dto * @return */ @Override public AccountResponse shopOpenidLogin(ShopLoginDTO dto){ Shop shop = shopMapper.selectOne(new QueryWrapper().lambda().eq(Shop::getOpenId, dto.getOpenid()) .eq(Shop::getIsdeleted,Constants.ZERO) .last("limit 1") ); AccountResponse accountResponse = new AccountResponse(); accountResponse.setOpenid(dto.getOpenid()); if(Objects.nonNull(shop)){ if(Objects.isNull(dto.getMemberId()) && ( Objects.isNull(shop.getMemberId()) || !Constants.equalsInteger(shop.getMemberId(),dto.getMemberId()))){ shopMapper.update(null,new UpdateWrapper().lambda() .set(Shop::getMemberId,dto.getMemberId()) .eq(Shop::getId,shop.getId()) ); } JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId()); String token = JwtTokenUtil.generateToken(payLoad); accountResponse.setToken(token); } return accountResponse; } /** * 商户账号密码登录 * @param dto * @return */ @Override public AccountResponse shopPasswordLogin(ShopLoginDTO dto){ if(StringUtils.isBlank(dto.getUserName()) || StringUtils.isBlank(dto.getPassword()) || StringUtils.isBlank(dto.getOpenid()) ){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户名或密码不能为空"); } Shop shop = shopMapper.selectOne(new QueryWrapper().lambda().eq(Shop::getUsername, dto.getUserName()) .eq(Shop::getIsdeleted,Constants.ZERO) .last("limit 1") ); if(shop==null){ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); } //加密密码 String pwd = Utils.Secure.encryptPassword( dto.getPassword(), shop.getSalt()); if(!pwd.equals(shop.getPassword())){ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); } //创建token JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId()); String token = JwtTokenUtil.generateToken(payLoad); AccountResponse accountResponse = new AccountResponse(); accountResponse.setToken(token); shopMapper.update(null,new UpdateWrapper().lambda() .set(Shop::getOpenId,dto.getOpenid()) .set(Shop::getMemberId,dto.getMemberId()) .eq(Shop::getId,shop.getId()) ); shopMapper.update(null,new UpdateWrapper().lambda() .set(Shop::getOpenId,null) .eq(Shop::getOpenId,dto.getOpenid()) .ne(Shop::getId,shop.getId()) ); return accountResponse; } @Override public ShopInfoResponse getShopInfo(Integer shopId){ ShopInfoResponse response = new ShopInfoResponse(); Shop shop = shopMapper.selectById(shopId); if(Objects.isNull(shop)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode(); BeanUtils.copyProperties(shop,response); response.setImgurl(path + shop.getImgurl()); response.setIdcardImg(path + shop.getIdcardImg()); response.setIdcardImgBack(path + shop.getIdcardImgBack()); response.setBusinessImg(path + shop.getBusinessImg()); return response; } @Override public List myCustomer(MyCustomerRequest request, Integer shopId){ List memberList = memberJoinMapper.selectJoinList(Member.class, new MPJLambdaWrapper() .selectAll(Member.class) .eq(Member::getIsdeleted,Constants.ZERO) .eq(Member::getBindShopId,shopId) .and(StringUtils.isNotBlank(request.getMemberIfo()),i->i.like(Member::getPhone,request.getMemberIfo()).or().like(Member::getNickname,request.getMemberIfo())) ); List responseList = new ArrayList<>(); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){ String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode(); memberList.forEach(member -> { MyCustomerResponse response = new MyCustomerResponse(); response.setNickName(member.getNickname()); response.setPhone(member.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2")); response.setBindShopDate(member.getBindShopDate()); response.setImgFullUrl(StringUtils.isNotBlank(member.getImgurl())?path + member.getImgurl():""); responseList.add(response); }); } return responseList; } @Override public SaleReportResponse saleReport(SaleReportRequest request,String shopId){ SaleReportResponse saleReportResponse = new SaleReportResponse(); saleReportResponse.setSaleTotal(BigDecimal.ZERO); saleReportResponse.setOrderNum(Constants.ZERO); saleReportResponse.setProfitTotal(BigDecimal.ZERO); List goodsorderList = goodsorderJoinMapper.selectJoinList(Goodsorder.class, new MPJLambdaWrapper() .selectAll(Goodsorder.class) .selectAs(Member::getPhone,Goodsorder::getPhone) .selectAs(Member::getNickname,Goodsorder::getNickName) .select(" select ifnull(sum(g.SHOP_SETTLEMENT),0) from goodsorder_detail g where t.id = g.ORDER_ID ",Goodsorder::getShopSettlement) .leftJoin(Member.class,Member::getId,Goodsorder::getMemberId) .eq(Goodsorder::getIsdeleted,Constants.ZERO) .eq(Goodsorder::getDistributionShopId,shopId) //今日 .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(t.CREATE_DATE) = DATE(NOW()) ") //当月 .apply(Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')") //上月 .apply(Constants.equalsInteger(request.getDateType(),Constants.TWO), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') ") //固定月份 .apply(Constants.equalsInteger(request.getDateType(),Constants.THREE)&&StringUtils.isNotBlank(request.getStartDate()), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB('"+request.getStartDate()+"', INTERVAL 1 MONTH), '%Y-%m') ") //自定义日期 .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), " t.CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'") .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), " t.CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'") .ne(Goodsorder::getStatus,Constants.OrderStatus.CLOSE.getKey()) .orderByDesc(Goodsorder::getId) ); if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(goodsorderList)) { saleReportResponse.setSaleTotal(goodsorderList.stream().map(i->i.getPrice().subtract(i.getMailPrice())).reduce(BigDecimal.ZERO, BigDecimal::add)); saleReportResponse.setOrderNum(goodsorderList.size()); if(Constants.equalsInteger(request.getQueryType(),Constants.ONE)){ List list = new ArrayList<>(); goodsorderList.stream().forEach(goodsorder -> { SaleReportOrderResponse response = new SaleReportOrderResponse(); response.setId(goodsorder.getId()); response.setCode(goodsorder.getCode()); response.setPrice(goodsorder.getPrice()); response.setMailPrice(goodsorder.getMailPrice()); response.setCreateDate(goodsorder.getCreateDate()); response.setNickName(goodsorder.getNickName()); response.setPhone(goodsorder.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")); response.setShopSettlement(goodsorder.getShopSettlement()); list.add(response); }); saleReportResponse.setSaleReportOrderResponseList(list); } } List integralList = integralMapper.selectList(new QueryWrapper().lambda() .eq(Integral::getIsdeleted,Constants.ZERO) .eq(Integral::getMemberId,shopId) .eq(Integral::getUserType,Constants.TWO) .eq(Integral::getType,Constants.ZERO) .eq(Integral::getObjType,Constants.IntegralObjType.ORDER_DONE_AMOUNT.getKey()) //今日 .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(CREATE_DATE) = DATE(NOW()) ") //当月 .apply(Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')") //上月 .apply(Constants.equalsInteger(request.getDateType(),Constants.TWO), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') ") //固定月份 .apply(Constants.equalsInteger(request.getDateType(),Constants.THREE)&&StringUtils.isNotBlank(request.getStartDate()), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB('"+request.getStartDate()+"', INTERVAL 1 MONTH), '%Y-%m') ") //自定义日期 .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), " CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'") .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), " CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'") ); if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(integralList)) { saleReportResponse.setProfitTotal(integralList.stream().map(i->i.getNum()).reduce(BigDecimal.ZERO, BigDecimal::add)); } return saleReportResponse; } @Override @Transactional public String setGoodsPrice(Shop dto){ // 查询用户 Shop shop = shopMapper.selectById(dto.getId()); if (shop == null) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,供销商信息查询无效!"); } GoodsSku queryGoodsSku=new GoodsSku(); queryGoodsSku.setGoodsId(dto.getGoodsId()); queryGoodsSku.setIsdeleted(Constants.ZERO); List goodsSkuList=goodsSkuMapper.selectList(new QueryWrapper<>(queryGoodsSku)); if(goodsSkuList==null || goodsSkuList.size() ==0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,请确认商品信息有效且【销售价】已设置!"); } //默认sku信息 GoodsSku goodsSku = goodsSkuList.get(0); if(Constants.formatBigdecimal(goodsSku.getPrice()).compareTo(Constants.formatBigdecimal(dto.getGoodsPrice())) >=0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,供货价不允许大于商品销售价!"); } LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); //先删除原来的数据 shopGoodsRelationMapper.delete(new QueryWrapper().lambda() .eq(ShopGoodsRelation::getGoodsId,dto.getGoodsId()) .eq(ShopGoodsRelation::getShopId,shop.getId()) ); ShopGoodsRelation add =new ShopGoodsRelation(); add.setCreator(user.getId()); add.setCreateDate(new Date()); add.setIsdeleted(Constants.ZERO); add.setEditor(add.getCreator()); add.setEditDate(add.getCreateDate()); add.setShopId(dto.getId()); add.setGoodsId(dto.getGoodsId()); add.setGoodsSkuId(goodsSku.getId()); add.setPrice(dto.getGoodsPrice()); add.setStatus(Constants.ZERO); shopGoodsRelationMapper.insert(add); return "操作成功"; } }