rk
11 小时以前 580f4d3c2ca9eee53eee95a4de2f6610b790780a
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -43,6 +43,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -116,6 +117,9 @@
    private MemberCouponService memberCouponService;
    @Autowired
    private InviteRecordService inviteRecordService;
    @Autowired
    private ShopNewsService shopNewsService;
    @Autowired
    private LabelsMapper labelsMapper;
@@ -126,9 +130,12 @@
    @Autowired
    private IntegralMapper integralMapper;
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Override
    public Integer create(Shop shop) {
    public Integer create(Shop shop) throws Exception {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        isCreateParamValid(shop,user);
        shop.setCreator(user.getId());
@@ -147,6 +154,12 @@
        shop.setPassword(Utils.Secure.encryptPassword(shop.getPassword(), salt));
        shop.setSalt(salt);
        shopMapper.insert(shop);
        String url = inviteRecordService.createShopMiniProgramCode(shop.getId());
        if(StringUtils.isNotBlank(url)){
            shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                            .set(Shop::getProgramCode,url)
                    .eq(Shop::getId,shop.getId()));
        }
        return shop.getId();
    }
@@ -206,6 +219,7 @@
        shop.setEditDate(new Date());
        shop.setIsdeleted(Constants.ONE);
        shopMapper.updateById(shop);
        shopGoodsRelationMapper.delete(new UpdateWrapper<ShopGoodsRelation>().lambda().eq(ShopGoodsRelation::getShopId,id));
    }
    @Override
@@ -378,8 +392,9 @@
        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.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()+" limit 1) as goodsPrice ");
        }
        queryWrapper.select("(select count(s.id) from shop_goods_relation s left join goods g on s.goods_id =g.id where g.status=0 and s.ISDELETED=0 and s.shop_id=t.id) as pricedGoodsNum ");
        queryWrapper.selectAs(Labels::getName,Shop::getBigAreaName);
        queryWrapper.selectAs(Member::getNickname,Shop::getNickName);
        queryWrapper.selectAs(Member::getImgurl,Shop::getMemberImgurl);
@@ -402,9 +417,13 @@
        IPage<Shop> 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();
        long goodsNum = goodsMapper.selectCount(new QueryWrapper<Goods>().lambda()
                .eq(Goods::getIsdeleted,Constants.ZERO)
                .eq(Goods::getStatus,Constants.ZERO));
        for(Shop model:result.getRecords()){
            model.setImgFullUrl(path);
            model.setAreas( AreasServiceImpl.getAddressByAreaId(model.getAreaId()));
            model.setGoodsNum(goodsNum);
            if(model.getLatitude()!=null && model.getLongitude()!=null){
                model.setLocationInfo(model.getLatitude().doubleValue()+","+model.getLongitude().doubleValue());
            }
@@ -688,6 +707,11 @@
     */
    @Override
    public AccountResponse shopOpenidLogin(ShopLoginDTO dto){
        if(Objects.isNull(dto)
                || StringUtils.isBlank(dto.getOpenid())
        ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"静默登录失败,请联系管理员");
        }
        Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOpenId, dto.getOpenid())
                .eq(Shop::getIsdeleted,Constants.ZERO)
                .last("limit 1")
@@ -695,17 +719,9 @@
        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<Shop>().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);
            String token = JwtTokenUtil.generateTokenForRedis(shop.getId(), Constants.ONE, JSONObject.toJSONString(shop), redisTemplate);
            accountResponse.setToken(token);
            accountResponse.setShop(this.getShopResponseInfo(shop));
        }
        return accountResponse;
    }
@@ -720,7 +736,6 @@
    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(),"用户名或密码不能为空");
        }
@@ -737,20 +752,24 @@
            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
        }
        //创建token
        JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
        String token = JwtTokenUtil.generateToken(payLoad);
//        JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
//        String token = JwtTokenUtil.generateToken(payLoad);
        String token = JwtTokenUtil.generateTokenForRedis(shop.getId(), Constants.ONE, JSONObject.toJSONString(shop), redisTemplate);
        AccountResponse accountResponse = new AccountResponse();
        accountResponse.setToken(token);
        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                .set(Shop::getOpenId,dto.getOpenid())
                .set(Shop::getMemberId,dto.getMemberId())
                .eq(Shop::getId,shop.getId())
        );
        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                .set(Shop::getOpenId,null)
                .eq(Shop::getOpenId,dto.getOpenid())
                .ne(Shop::getId,shop.getId())
        );
        accountResponse.setShop(this.getShopResponseInfo(shop));
        if(StringUtils.isNotBlank(dto.getOpenid())){
            shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                    .set(Shop::getOpenId,dto.getOpenid())
                    .eq(Shop::getId,shop.getId())
            );
            shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                    .set(Shop::getOpenId,null)
                    .eq(Shop::getOpenId,dto.getOpenid())
                    .ne(Shop::getId,shop.getId())
            );
        }
        return accountResponse;
    }
@@ -759,49 +778,62 @@
    @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 this.getShopResponseInfo(shop)   ;
    }
    public ShopInfoResponse getShopResponseInfo(Shop shop){
        ShopInfoResponse response = new ShopInfoResponse();
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() ;
        String shopFile = systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
        BeanUtils.copyProperties(shop,response);
        response.setImgurl(StringUtils.isNotBlank(shop.getImgurl())?(path + shopFile + shop.getImgurl()):"");
        response.setIdcardImg(StringUtils.isNotBlank(shop.getIdcardImg())?(path + shopFile + shop.getIdcardImg()):"");
        response.setIdcardImgBack(StringUtils.isNotBlank(shop.getIdcardImgBack())?(path + shopFile + shop.getIdcardImgBack()):"");
        response.setBusinessImg(StringUtils.isNotBlank(shop.getBusinessImg())?(path + shopFile + shop.getBusinessImg()):"");
        response.setAreas(AreasServiceImpl.getAddressByAreaId(shop.getAreaId()));
        if(StringUtils.isNotBlank(shop.getProgramCode())){
            String sharesFile = systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHARES_FILE).getCode();
            response.setProgramCode(path + sharesFile + shop.getProgramCode());
        }
        if(StringUtils.isNotBlank(shop.getPosterImgCode())){
            String sharesFile = systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHARES_FILE).getCode();
            response.setPosterImgCode(path + sharesFile + shop.getPosterImgCode());
        }
        return response;
    }
    @Override
    public List<MyCustomerResponse> myCustomer(MyCustomerRequest request, Integer shopId){
        List<Member>  memberList = memberJoinMapper.selectJoinList(Member.class,
                new MPJLambdaWrapper<Member>()
                        .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()))
    public PageData<Member> myCustomer(PageWrap<MyCustomerRequest> pageWrap, Integer shopId){
        IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        Utils.MP.blankToNull(pageWrap.getModel());
        MyCustomerRequest model = pageWrap.getModel();
        IPage<Member> result = memberJoinMapper.selectJoinPage(page,Member.class, new MPJLambdaWrapper<Member>()
                .selectAll(Member.class)
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getBindShopId,shopId)
                .and(StringUtils.isNotBlank(model.getMemberInfo()),i->i.like(Member::getPhone,model.getMemberInfo()).or().like(Member::getNickname,model.getMemberInfo()))
        );
        List<MyCustomerResponse> responseList = new ArrayList<>();
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result.getRecords())){
            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);
            result.getRecords().forEach(member -> {
                member.setPhone(member.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"));
                member.setImgFullUrl(StringUtils.isNotBlank(member.getImgurl())?path + member.getImgurl():"");
            });
        }
        return responseList;
        return PageData.from(result);
    }
    @Override
    public SaleReportResponse saleReport(SaleReportRequest request,Integer shopId){
@@ -819,39 +851,23 @@
                        .eq(Goodsorder::getIsdeleted,Constants.ZERO)
                        .eq(Goodsorder::getDistributionShopId,shopId)
                        //今日
                        .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(t.CREATE_DATE) = DATE(NOW())  ")
                        .apply(Objects.nonNull(request.getDateType())&&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(Objects.nonNull(request.getDateType())&&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(Objects.nonNull(request.getDateType())&&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(Objects.nonNull(request.getDateType())&&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'")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), "  t.CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'")
                        .apply(Objects.nonNull(request.getDateType())&&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<SaleReportOrderResponse> 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<Integral> integralList = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
                .eq(Integral::getIsdeleted,Constants.ZERO)
@@ -876,12 +892,6 @@
        }
        return  saleReportResponse;
    }
    @Override
    @Transactional
@@ -923,4 +933,22 @@
        shopGoodsRelationMapper.insert(add);
        return "操作成功";
    }
    @Override
    public void logOut(String token,Integer shopId){
        Shop shop = shopMapper.selectById(shopId);
        if(Objects.nonNull(shop)&&StringUtils.isNotBlank(shop.getOpenId())){
            shopMapper.update(new UpdateWrapper<Shop>().lambda()
                    .set(Shop::getOpenId,null)
                    .eq(Shop::getId,shop.getId())
            );
        }
        redisTemplate.delete(token);
    }
}