luofl
2025-03-14 0449a6264819bce3869f47b9e5bd3729f158db54
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -9,6 +9,7 @@
import com.ruoyi.common.core.constant.ExpressCompanyMap;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.HttpUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.uuid.QRCodeGenerator;
import com.ruoyi.common.core.web.page.PageInfo;
@@ -117,6 +118,9 @@
    private ShopBalanceStatementClient shopBalanceStatementClient;
    @Resource
    private ShopPointClient shopPointClient;
    @Resource
    private RedisTemplate redisTemplate;
    @Resource
@@ -130,6 +134,10 @@
    @Resource
    private RegionClient regionClient;
    @Resource
    private AppUserGiveawayTemporaryClient appUserGiveawayTemporaryClient;
    @Resource
    private ShopGiveawayTemporaryClient shopGiveawayTemporaryClient;
    @Override
@@ -176,9 +184,9 @@
        }
        // 优惠券
        String couponJson = order.getCouponJson();
        CouponInfo couponInfo = new CouponInfo();
        JSONObject jsonObject = new JSONObject();
        if (StringUtils.isNotEmpty(couponJson)) {
            couponInfo = JSONObject.parseObject(couponJson, CouponInfo.class);
            jsonObject = JSONObject.parseObject(couponJson);
        }
        // 参与活动
@@ -201,7 +209,7 @@
        orderDetailVO.setOrderNumber(order.getOrderNumber());
        orderDetailVO.setCreateTime(order.getCreateTime());
        orderDetailVO.setTotalAmount(order.getTotalAmount());
        orderDetailVO.setCouponName(couponInfo.getCouponName());
        orderDetailVO.setCouponName(jsonObject.getString("couponName"));
        orderDetailVO.setActivityName(orderActivityInfo.getActivityName());
        orderDetailVO.setCouponAmount(order.getDiscountTotalAmount());
        orderDetailVO.setExpressAmount(order.getExpressAmount());
@@ -239,6 +247,7 @@
        }
        return orderDetailVO;
    }
    @Override
    public boolean check(Order order, Integer shopId, Long userId) {
@@ -290,15 +299,14 @@
        JSONObject jsonObject = JSONObject.parseObject(content);
        Long days = jsonObject.getLong("days");
        order.setOrderStatus(OrderStatus.COMPLETED.getCode());
        order.setIsCommission(0);
        order.setAfterSaleTime(LocalDateTime.now().plusDays(days));
        order.setEndTime(LocalDateTime.now());
        order.setCancellerAppUserId(loginUserApplet.getUserid());
        if (StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)) {
            order.setTechnicianId(Integer.valueOf(technicianId));
        }
        // TODO
        orderMapper.updateById(order);
        commissionService.calculationCommissionShop(order.getId());
    }
@@ -439,52 +447,26 @@
        if (200 == r.getCode()) {
            this.updateById(order);
        }
        R r1 = balanceChangeRecordClient.deleteBalanceChangeRecordCopy(orderId, Arrays.asList(4));
        if (200 != r1.getCode()) { // 项目没有分布式事务,此处报错可能会导致数据不一致
         throw new RuntimeException("订单取消失败");
        }
        R r2 = userPointClient.deleteUserPointCopy(orderId, Arrays.asList(2,8,9,10,14));
        if (200 != r2.getCode()) { // 项目没有分布式事务,此处报错可能会导致数据不一致
            throw new RuntimeException("订单取消失败");
        }
        R<Boolean> r3 = shopBalanceStatementClient.deleteShopBalanceStatementCopy(orderId, Arrays.asList(1,2,3));
        if (200 != r3.getCode()) { // 项目没有分布式事务,此处报错可能会导致数据不一致
            throw new RuntimeException("订单取消失败");
        }
        shopPointClient.deleteShopPointCopy(orderId, Arrays.asList(1,2,3));
        appUserGiveawayTemporaryClient.delAppUserGiveawayTemporary(orderId);
        shopGiveawayTemporaryClient.delShopGiveawayTemporary(orderId);
        return r;
    }
    /**
     * 确认发货操作
     *
     * @return
     */
    @Override
    public R confirmDelivery(ConfirmDelivery confirmDelivery) {
        Order order = this.getById(confirmDelivery.getOrderId());
        if (1 == order.getPayStatus()) {
            return R.fail("订单还未完成支付");
        }
        if (1 == order.getOrderType() || null == order.getAddressJson()) {
            return R.fail("该订单不支付快递配送");
        }
        if (1 != order.getOrderStatus()) {
            return R.fail("无效的操作");
        }
        //添加快递号和修改订单状态
        order.setExpressJson(confirmDelivery.getCode());
        order.setDeliverProvince(confirmDelivery.getDeliverProvince());
        order.setDeliverProvinceCode(confirmDelivery.getDeliverProvinceCode());
        order.setDeliverCity(confirmDelivery.getDeliverCity());
        order.setDeliverCityCode(confirmDelivery.getDeliverCityCode());
        order.setDeliverDistrict(confirmDelivery.getDeliverDistrict());
        order.setDeliverDistrictCode(confirmDelivery.getDeliverDistrictCode());
        order.setOrderStatus(2);
        //添加查询快递信息队列
        //一小时后定时查询快递信息
        SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData();
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        Integer waitTime = jsonObject.getInteger("waitTime");
        redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC));
        JSONObject jsonObject1 = JSON.parseObject(confirmDelivery.getCode());
        String com = jsonObject1.getString("com");
        String num = jsonObject1.getString("num");
        UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class);
        MapTrackKD100Vo mapTrackKD100Vo = ExpressDeliveryUtil.kd100MapTrack(com, num, order.getDeliverProvince() + order.getDeliverCity(),
                userAddress.getProvince() + userAddress.getCity());
        order.setExpressResult(JSON.toJSONString(mapTrackKD100Vo));
        this.updateById(order);
        return R.ok();
    }
    /**
@@ -519,7 +501,8 @@
    public R refundPayMoney(Order order) {
        //开始退款
        Integer payMethod = order.getPayMethod();
        BigDecimal paymentAmount = order.getPaymentAmount();
        BigDecimal expressAmount = order.getExpressAmount() == null ? BigDecimal.ZERO : order.getExpressAmount();
        BigDecimal paymentAmount = order.getPaymentAmount().add(expressAmount);
        AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
        if (1 == payMethod) {
            //微信退款
@@ -562,6 +545,7 @@
            balanceChangeRecord.setDelFlag(0);
            balanceChangeRecord.setCreateTime(LocalDateTime.now());
            balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord);
            //退回获得的消费积分
            //需要先检查会员等级时候回回退,使用回退后的会员等级查询配置
@@ -613,7 +597,6 @@
        if (3 == payMethod) {
            //开始运费退款,积分支付,运费是单独进行支付的,所以需要单独退款
            if (null != order.getExpressAmount() && BigDecimal.ZERO.compareTo(order.getExpressAmount()) < 0) {
                BigDecimal expressAmount = order.getExpressAmount();
                if (1 == order.getExpressPayMethod()) {
                    //微信退款
                    RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), expressAmount.doubleValue(), "/order/order/refundExpressPayMoneyCallback");
@@ -680,6 +663,11 @@
        order.setRefundStatus(2);
        order.setRefundTime(LocalDateTime.now());
        shopPointClient.deleteShopPointCopy(order.getId(), Arrays.asList(1,2,3));
        shopBalanceStatementClient.deleteShopBalanceStatementCopy(order.getId(), Arrays.asList(1,2,3));
        appUserGiveawayTemporaryClient.delAppUserGiveawayTemporary(order.getId());
        shopGiveawayTemporaryClient.delShopGiveawayTemporary(order.getId());
        return R.ok();
    }
@@ -826,6 +814,7 @@
        Long days = jsonObject.getLong("days");
        order.setAfterSaleTime(LocalDateTime.now().plusDays(days));
        this.updateById(order);
        commissionService.calculationCommissionShop(order.getId());
        return R.ok();
    }
@@ -953,6 +942,10 @@
        if (order_express.size() > 0) {
            for (Long id : order_express) {
                Order order = this.getById(id);
                if (order == null){
                    redisTemplate.opsForZSet().remove("order_express", id);
                    continue;
                }
                if (order.getOrderStatus() != 2) {
                    redisTemplate.opsForZSet().remove("order_express", id);
                    continue;
@@ -980,11 +973,15 @@
        }
    }
    @SneakyThrows
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void importExpress(String url) {
        URL url1 = new URL(url);
        URL url1 = null;
        try {
            url1 = new URL(url);
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
        try (InputStream fileInputStream = url1.openStream()) {
            Workbook workbook = new XSSFWorkbook(fileInputStream);
            Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet
@@ -992,18 +989,33 @@
            for (int i = 1; i <= lastRowNum; i++) {
                Row row = sheet.getRow(i);
                // 订单编号
                if (row.getCell(0) == null){
                    throw new ServiceException("第" + i + "行订单编号为空", 500);
                }
                row.getCell(0).setCellType(CellType.STRING);
                String orderNum = row.getCell(0).getStringCellValue();
                // 快递单号
                if (row.getCell(1) == null){
                    throw new ServiceException("第" + i + "行快递单号为空", 500);
                }
                row.getCell(1).setCellType(CellType.STRING);
                String expressNum = row.getCell(1).getStringCellValue();
                // 快递公司名称
                if (row.getCell(2) == null){
                    throw new ServiceException("第" + i + "行快递公司为空", 500);
                }
                row.getCell(2).setCellType(CellType.STRING);
                String expressName = row.getCell(2).getStringCellValue();
                // 省区划代码
                if (row.getCell(3) == null){
                    throw new ServiceException("第" + i + "行省区划代码为空", 500);
                }
                row.getCell(3).setCellType(CellType.STRING);
                String provinceCode = row.getCell(3).getStringCellValue();
                // 市区划代码
                if (row.getCell(4) == null){
                    throw new ServiceException("第" + i + "行市区划代码为空", 500);
                }
                row.getCell(4).setCellType(CellType.STRING);
                String cityCode = row.getCell(4).getStringCellValue();
                Order order = this.getOne(new LambdaQueryWrapper<Order>()
@@ -1048,7 +1060,10 @@
                confirmDelivery.setDeliverProvinceCode(regionBiCode.getData().getCode());
                confirmDelivery.setDeliverCity(regionBiCode1.getData().getName());
                confirmDelivery.setDeliverCityCode(regionBiCode1.getData().getCode());
                confirmDelivery(confirmDelivery);
                R r = confirmDelivery(confirmDelivery);
                if (R.isError(r)) {
                    throw new ServiceException(r.getMsg(), 500);
                }
            }
        } catch (IOException e) {
@@ -1057,6 +1072,79 @@
        }
    }
    /**
     * 确认发货操作
     *
     * @return
     */
    @Override
    public R confirmDelivery(ConfirmDelivery confirmDelivery) {
        Order order = this.getById(confirmDelivery.getOrderId());
        if (1 == order.getPayStatus()) {
            return R.fail("订单还未完成支付");
        }
        if (1 == order.getOrderType() || null == order.getAddressJson()) {
            return R.fail("该订单不支付快递配送");
        }
        if (1 != order.getOrderStatus()) {
            return R.fail("无效的操作");
        }
        //添加快递号和修改订单状态
        order.setExpressJson(confirmDelivery.getCode());
        order.setDeliverProvince(confirmDelivery.getDeliverProvince());
        order.setDeliverProvinceCode(confirmDelivery.getDeliverProvinceCode());
        order.setDeliverCity(confirmDelivery.getDeliverCity());
        order.setDeliverCityCode(confirmDelivery.getDeliverCityCode());
        order.setDeliverDistrict(confirmDelivery.getDeliverDistrict());
        order.setDeliverDistrictCode(confirmDelivery.getDeliverDistrictCode());
        order.setOrderStatus(2);
        //添加查询快递信息队列
        //一小时后定时查询快递信息
        SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData();
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        Integer waitTime = jsonObject.getInteger("waitTime");
        redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC));
        JSONObject jsonObject1 = JSON.parseObject(confirmDelivery.getCode());
        String com = jsonObject1.getString("com");
        String num = jsonObject1.getString("num");
        UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class);
        MapTrackKD100Vo mapTrackKD100Vo = ExpressDeliveryUtil.kd100MapTrack(com, num, order.getDeliverProvince() + order.getDeliverCity(),
                userAddress.getProvince() + userAddress.getCity());
        order.setExpressResult(JSON.toJSONString(mapTrackKD100Vo));
        this.updateById(order);
        String s = HttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxdeed472c98e42a54&secret=c89c697c981452480e0781fb82d4284c");
        JSONObject jsonObject2 = JSONObject.parseObject(s);
        System.out.println(jsonObject.getString("access_token"));
        return R.ok();
    }
    public static void main(String[] args) {
        String a = "{\n" +
                "  \"access_token\": \"90_4PJ8b5aLJa2M7aCtoskALEzfoap1me291Jc3ogi18NGH0Ts-Tol7K3COLLvkQ1JLcouvew11ORqcHf6mH5LA2KSC08NxiDhsjRPKuRh14mpvQRHmeFvwr-wKWjkANLdACAUHF\",\n" +
                "  \"order_key\": {\n" +
                "    \"order_number_type\": 1\n" +
                "  },\n" +
                "  \"logistics_type\": 1,\n" +
                "  \"delivery_mode\": 1,\n" +
                "  \"shipping_list\": [\n" +
                "    {\n" +
                "      \"item_desc\": \"这是一个测试\"\n" +
                "    }\n" +
                "  ],\n" +
                "  \"upload_time\": \"2022-12-15T13:29:35.120+08:00\",\n" +
                "  \"payer\": {\n" +
                "    \"openid\": \"ooOrs63KYDHcyhnUmTFpprHc6sb4\"\n" +
                "  }\n" +
                "}";
        JSONObject jsonObject = JSONObject.parseObject(a);
        System.out.println(jsonObject);
    }
@@ -1091,4 +1179,9 @@
    public Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type) {
        return this.baseMapper.getShopSaleNumByShopIds(shopIds, type);
    }
    @Override
    public List<OrderExport> getOrderExportList(OrderPageList orderPageList) {
        return Collections.emptyList();
    }
}