rk
4 天以前 e39dda2f25df9680e66c9e0dd3a606149e21bcc5
server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
@@ -32,6 +32,7 @@
import com.doumee.dao.vo.ShopCenterVO;
import com.doumee.dao.vo.ShopLoginVO;
import com.doumee.dao.vo.ShopNearbyVO;
import com.doumee.dao.vo.ShopSalesStatsVO;
import com.doumee.dao.vo.ShopWebDetailVO;
import com.doumee.service.business.AreasService;
import com.doumee.service.business.ShopInfoService;
@@ -659,6 +660,7 @@
        vo.setCreateTime(shopInfo.getCreateTime());
        vo.setAliAccount(shopInfo.getAliAccount());
        vo.setAliName(shopInfo.getAliName());
        vo.setDepositAmount(shopInfo.getDepositAmount());
        // 拼接图片前缀
        String imgPrefix = "";
@@ -995,6 +997,106 @@
                .eq(Orders::getDeleted, Constants.ZERO)
                .in(Orders::getStatus, Constants.OrderStatus.delivering.getStatus(), Constants.OrderStatus.arrived.getStatus()));
        vo.setWaitReceiveCount(waitReceiveCount.intValue());
        // 支付宝提现账号
        vo.setAliAccount(shop.getAliAccount());
        vo.setAliName(shop.getAliName());
        return vo;
    }
    @Override
    public ShopSalesStatsVO getShopSalesStats(Integer shopId, Integer period) {
        // 计算时间范围 0=今日 1=本月 2=上月
        Calendar cal = Calendar.getInstance();
        Date startTime;
        Date endTime;
        if (Constants.equalsInteger(period, 2)) {
            // 上月:上月1号00:00:00 ~ 本月1号00:00:00
            cal.set(Calendar.DAY_OF_MONTH, 1);
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            endTime = cal.getTime();
            cal.add(Calendar.MONTH, -1);
            startTime = cal.getTime();
        } else if (Constants.equalsInteger(period, 1)) {
            // 本月:本月1号00:00:00 ~ 下月1号00:00:00
            cal.set(Calendar.DAY_OF_MONTH, 1);
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            startTime = cal.getTime();
            cal.add(Calendar.MONTH, 1);
            endTime = cal.getTime();
        } else {
            // 今日:今天00:00:00 ~ 明天00:00:00
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            startTime = cal.getTime();
            cal.add(Calendar.DAY_OF_MONTH, 1);
            endTime = cal.getTime();
        }
        ShopSalesStatsVO vo = new ShopSalesStatsVO();
        // 1. 销售额 + 订单数:按订单创建时间,存件门店或取件门店是本门店
        // 存件门店
        List<Orders> depositSalesOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .ge(Orders::getCreateTime, startTime)
                .lt(Orders::getCreateTime, endTime)
                .eq(Orders::getDepositShopId, shopId));
        // 取件门店
        List<Orders> takeSalesOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .ge(Orders::getCreateTime, startTime)
                .lt(Orders::getCreateTime, endTime)
                .eq(Orders::getTakeShopId, shopId));
        long salesAmount = depositSalesOrders.stream().mapToLong(o -> o.getTotalAmount() != null ? o.getTotalAmount() : 0L).sum()
                + takeSalesOrders.stream().mapToLong(o -> o.getTotalAmount() != null ? o.getTotalAmount() : 0L).sum();
        vo.setSalesAmount(salesAmount);
        vo.setOrderCount(depositSalesOrders.size() + takeSalesOrders.size());
        // 2. 结算利润:按结算时间,根据门店角色取depositShopFee或takeShopFee
        // 存件门店 = 本门店 的订单,取 depositShopFee
        List<Orders> depositSettleOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getSettlementStatus, Constants.ONE)
                .ge(Orders::getSettlementTime, startTime)
                .lt(Orders::getSettlementTime, endTime)
                .eq(Orders::getDepositShopId, shopId));
        // 取件门店 = 本门店 的订单,取 takeShopFee
        List<Orders> takeSettleOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getSettlementStatus, Constants.ONE)
                .ge(Orders::getSettlementTime, startTime)
                .lt(Orders::getSettlementTime, endTime)
                .eq(Orders::getTakeShopId, shopId));
        long depositFee = depositSettleOrders.stream()
                .mapToLong(o -> o.getDepositShopFee() != null ? o.getDepositShopFee() : 0L).sum();
        long takeFee = takeSettleOrders.stream()
                .mapToLong(o -> o.getTakeShopFee() != null ? o.getTakeShopFee() : 0L).sum();
        vo.setSettlementProfit(depositFee + takeFee);
        // 3. 在库订单数
        // 3.1 存件门店=本门店,status in (2已寄存, 5待取件)
        Long depositStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getDepositShopId, shopId)
                .in(Orders::getStatus,
                        Constants.OrderStatus.deposited.getStatus(),
                        Constants.OrderStatus.arrived.getStatus()));
        // 3.2 取件门店=本门店,status = 5待取件
        Long takeStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getTakeShopId, shopId)
                .eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus()));
        vo.setStorageCount(depositStorageCount.intValue() + takeStorageCount.intValue());
        return vo;
    }
@@ -1058,12 +1160,13 @@
    }
    @Override
    public ShopLoginVO shopSilentLogin(String openid) {
        if (StringUtils.isBlank(openid)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "openid不能为空");
    public ShopLoginVO shopSilentLogin(Integer memberId) {
        Member member = memberMapper.selectById(memberId);
        if(Objects.isNull(member)||StringUtils.isBlank(member.getOpenid())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "当前登录会员身份异常,请联系管理员!");
        }
        ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
                .eq(ShopInfo::getOpenid, openid)
                .eq(ShopInfo::getOpenid, member.getOpenid())
                .eq(ShopInfo::getDeleted, Constants.ZERO)
                .last("limit 1"));
        if (shop == null) {