doum
5 小时以前 59b1f0e9967902aa10f5e017d5a0bdfd1b60c9ea
server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
@@ -229,13 +229,7 @@
        if (pageWrap.getModel().getOpenid() != null) {
            queryWrapper.lambda().like(ShopInfo::getOpenid, pageWrap.getModel().getOpenid());
        }
        for (PageWrap.SortData sortData : pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        queryWrapper.lambda().orderByDesc(ShopInfo::getId);
        return PageData.from(shopInfoMapper.selectPage(page, queryWrapper));
    }
@@ -1094,6 +1088,7 @@
        // 取件门店
        List<Orders> takeSalesOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getType,Constants.ONE)
                .ge(Orders::getCreateTime, startTime)
                .lt(Orders::getCreateTime, endTime)
                .eq(Orders::getTakeShopId, shopId));
@@ -1124,19 +1119,27 @@
        vo.setSettlementProfit(depositFee + takeFee);
        // 3. 在库订单数
        // 3.1 存件门店=本门店,status in (2已寄存, 5待取件)
        Long depositStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
        // 3.1 就地订单:存件门店=本门店,type=0,status in (2已寄存, 5待取件)
        Long localStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getDepositShopId, shopId)
                .eq(Orders::getType, Constants.ZERO)
                .in(Orders::getStatus,
                        Constants.OrderStatus.deposited.getStatus(),
                        Constants.OrderStatus.arrived.getStatus()));
        // 3.2 取件门店=本门店,status = 5待取件
        // 3.2 异地订单:存件门店=本门店,type=1,status=2已寄存
        Long remoteStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getDepositShopId, shopId)
                .eq(Orders::getType, Constants.ONE)
                .eq(Orders::getStatus, Constants.OrderStatus.deposited.getStatus()));
        // 3.3 取件门店=本门店,异地订单,status = 5待取件
        Long takeStorageCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getType,Constants.ONE)
                .eq(Orders::getTakeShopId, shopId)
                .eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus()));
        vo.setStorageCount(depositStorageCount.intValue() + takeStorageCount.intValue());
        vo.setStorageCount(localStorageCount.intValue() + remoteStorageCount.intValue() + takeStorageCount.intValue());
        return vo;
    }
@@ -1327,10 +1330,12 @@
        if (shopInfo.getCompanyType() == null) {
            return;
        }
        Areas areas = areasService.findById(shopInfo.getAreaId());
        PricingRule pricingRule = pricingRuleMapper.selectOne(new QueryWrapper<PricingRule>().lambda()
                .eq(PricingRule::getDeleted, Constants.ZERO)
                .eq(PricingRule::getType, Constants.THREE)
                .eq(PricingRule::getFieldA, String.valueOf(shopInfo.getCompanyType()))
                .eq(PricingRule::getFieldA, String.valueOf(Constants.equalsInteger(shopInfo.getCompanyType(),Constants.ZERO)?Constants.ONE:Constants.ZERO))
                .eq(PricingRule::getCityId, areas.getParentId())
                .last("limit 1"));
        if (pricingRule != null && StringUtils.isNotBlank(pricingRule.getFieldB())) {
            shopInfo.setDepositAmount(Long.parseLong(pricingRule.getFieldB()));
@@ -1360,19 +1365,16 @@
            for (int i = 0; i < paramPairs.length - 1; i += 2) {
                templateParam.put(paramPairs[i], paramPairs[i + 1]);
            }
            boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
            String error = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(),
                    templateParam.toJSONString());
            if (result) {
                log.info("短信发送成功: phone={}, template={}", phone, smsNotify.name());
            } else {
                log.warn("短信发送失败: phone={}, template={}", phone, smsNotify.name());
            }
            // 存储短信记录
            Smsrecord smsRecord = new Smsrecord();
            smsRecord.setPhone(phone);
            smsRecord.setContent(content);
            smsRecord.setType(Constants.ONE);
            smsRecord.setStatus(result ? Constants.ONE : Constants.ZERO);
            smsRecord.setStatus(error == null ? Constants.ONE : Constants.ZERO);
            if (error != null) {
                smsRecord.setRemark(error);
            }
            smsRecord.setCreateTime(new Date());
            smsRecord.setDeleted(Constants.ZERO);
            smsrecordMapper.insert(smsRecord);
@@ -1416,4 +1418,56 @@
        }
    }
    @Autowired
    private com.doumee.core.utils.xpyun.XpyunPrintService xpyunPrintService;
    @Override
    public void bindPrinter(com.doumee.dao.dto.PrinterBindDTO dto) {
        ShopInfo shop = shopInfoMapper.selectById(dto.getShopId());
        if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        // 调用芯烨云注册打印机
        com.doumee.core.utils.xpyun.XpyunResponse resp = xpyunPrintService.addPrinter(
                dto.getPrinterSn(), shop.getName());
        if (resp.getCode() != null && resp.getCode() == 0) {
            log.info("芯烨云打印机注册成功: sn={}", dto.getPrinterSn());
        } else {
            log.warn("芯烨云打印机注册返回非0: sn={}, code={}, msg={}",
                    dto.getPrinterSn(), resp.getCode(), resp.getMsg());
        }
        // 无论云端是否成功,都绑定到门店(可后续重试云端注册)
        ShopInfo update = new ShopInfo();
        update.setId(dto.getShopId());
        update.setPrinterSn(dto.getPrinterSn());
        shopInfoMapper.updateById(update);
    }
    @Override
    public void unbindPrinter(Integer shopId) {
        ShopInfo shop = shopInfoMapper.selectById(shopId);
        if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if (StringUtils.isNotBlank(shop.getPrinterSn())) {
            xpyunPrintService.deletePrinter(shop.getPrinterSn());
        }
        ShopInfo update = new ShopInfo();
        update.setId(shopId);
        update.setPrinterSn(null);
        shopInfoMapper.updateById(update);
    }
    @Override
    public Object queryPrinterStatus(Integer shopId) {
        ShopInfo shop = shopInfoMapper.selectById(shopId);
        if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if (StringUtils.isBlank(shop.getPrinterSn())) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "该门店未绑定打印机");
        }
        return xpyunPrintService.queryPrinterStatus(shop.getPrinterSn());
    }
}