确认订单按钮和取消订单按钮中的事物学习

首先这是确认收货的model的代码

		 DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = transactionManager.getTransaction(def);
        try {

            //参数校验
            if (ordersId == null || ordersId == 0) {
                log.error("订单ID为空。");
                throw new BusinessException("订单ID为空,请重试!");
            }

            //获取订单
            Orders orders = ordersWriteDao.get(ordersId);
            if (orders == null) {
                log.error("订单信息获取失败。");
                throw new BusinessException("订单信息获取失败,请重试!");
            } else if (!orders.getOrderState().equals(Orders.ORDER_STATE_4)) {
                log.error("订单不处于已发货状态,不能确认收货。");
                throw new BusinessException("订单不处于已发货状态,不能确认收货!");
            }
			//状态为5表示已完成的订单,这里把订单状态改变
            orders.setOrderState(Orders.ORDER_STATE_5);
            //设置完成时间为当前时间
            orders.setFinishTime(new Date());
            //更新订单信息
            int count = ordersWriteDao.update(orders);
            //如果成功的话count起码是1
            if (count == 0) {
                log.error("订单更新失败。");
                throw new BusinessException("订单更新失败!");
            }

            OrderLog orderLog = new OrderLog(member.getId(), member.getName(), orders.getId(),
                orders.getOrderSn(), "您已签收订单", new Date());
                //保存进订单操作日志

            int logCount = orderLogWriteDao.save(orderLog);
            if (logCount == 0) {
                throw new BusinessException("订单日志保存失败,请重试!");
            }
			//事务管理的提交,如果有异常就回滚
            transactionManager.commit(status);
            return true;
        } catch (BusinessException be) {
            transactionManager.rollback(status);
            throw be;
        } catch (Exception e) {
            transactionManager.rollback(status);
            log.error("[OrderService][goodsReceipt]订单确认收货时发生异常:", e);
            throw e;
        }

这是取消订单的model层

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = transactionManager.getTransaction(def);
        try {
            //参数校验
            if (ordersId == null || ordersId == 0) {
                throw new BusinessException("订单ID为空,请重试!");
            }
            //获取订单
            Orders ordersDb = ordersWriteDao.get(ordersId);

            if (!ordersDb.getMemberId().equals(optId)) {
                throw new BusinessException("您不能操作别人的订单,谢谢!");
            }

            // 取消订单
            this.doCancelOrder(ordersDb, optId, optName, "您取消了订单");

            transactionManager.commit(status);
            return true;
        } catch (Exception e) {
            transactionManager.rollback(status);
            throw e;
        }
private void doCancelOrder(Orders ordersDb, Integer optId, String optName, String logContent) {
        if (ordersDb == null) {
            throw new BusinessException("获取订单信息失败,请重试!");
        } else if (!(ordersDb.getOrderState().equals(Orders.ORDER_STATE_1)
                     || (ordersDb.getOrderState().equals(Orders.ORDER_STATE_2))
                     || (ordersDb.getOrderState().equals(Orders.ORDER_STATE_3)))) {
            throw new BusinessException("订单已发货不能取消!");
        }
        if (ordersDb.getOrderType().intValue() == Orders.ORDER_TYPE_5) {
            // 竞价尾款订单不能取消
            throw new BusinessException("集合竞价尾款订单不能取消!");
        }

        //设置订单状态
        Orders orders = new Orders();
        orders.setId(ordersDb.getId());
        orders.setFinishTime(new Date());
        orders.setOrderState(Orders.ORDER_STATE_6);
        int count = ordersWriteDao.update(orders);
        if (count == 0) {
            throw new BusinessException("订单更新失败,请重试!");
        }
        //记录订单日志
        OrderLog orderLog = new OrderLog();
        orderLog.setContent(logContent);
        orderLog.setOperatingId(optId);
        orderLog.setOrdersId(ordersDb.getId());
        orderLog.setOrdersSn(ordersDb.getOrderSn());
        orderLog.setOperatingName(optName);

        int logCount = orderLogWriteDao.save(orderLog);
        if (logCount == 0) {
            throw new BusinessException("订单日志保存失败,请重试!");
        }

        // 如果是父订单,则修改子订单的状态
        if (ordersDb.getIsParent().intValue() == Orders.IS_PARENT_1) {
            ordersWriteDao.cancelByPsn(ordersDb.getOrderSn());
        }

        // 返还积分
        this.cancelOrderBackIntegral(ordersDb);

        // 返回优惠券
        this.cancelOrderBackCoupon(ordersDb, optId, optName);

        // 退回付款金额
        this.cancelOrderBackMoney(ordersDb, optId, optName);

        // 还原库存和实际销量
        this.cancelOrderBackStockAndActualSales(ordersDb);
    }
 /**
     * 取消订单时退回用户优惠券
     * @param order
     * @param optId
     * @param optName
     */
    private void cancelOrderBackCoupon(Orders orderDb, Integer optId, String optName) {

        List<Orders> list = null;
        // 如果是子订单则只退这个订单的优惠券,如果是父订单,则退回该父订单下所有子订单的优惠券
        if (orderDb.getIsParent().intValue() == Orders.IS_PARENT_1) {
            list = ordersReadDao.getByOrderPsn(orderDb.getOrderSn());
        } else {
            list = new ArrayList<>();
            list.add(orderDb);
        }
        for (Orders order : list) {
            if (order.getCouponUserId() != null && order.getCouponUserId() > 0) {
                CouponUser couponUser = couponUserReadDao.get(order.getCouponUserId());
                if (couponUser == null) {
                    log.error("用户优惠券获取失败。");
                    throw new BusinessException("返还用户优惠券时失败,请重试!");
                }
                Integer backCouponUser = couponUserWriteDao.backCouponUser(order.getMemberId(),
                    couponUser.getId());
                if (backCouponUser < 1) {
                    log.error("修改用户优惠券使用次数失败。");
                    throw new BusinessException("返还用户优惠券时失败,请重试!");
                }
                // 设定优惠券使用日志
                CouponOptLog couponOptLog = new CouponOptLog();
                couponOptLog.setCouponUserId(couponUser.getId());
                couponOptLog.setMemberId(couponUser.getMemberId());
                couponOptLog.setSellerId(couponUser.getSellerId());
                couponOptLog.setCouponId(couponUser.getCouponId());
                couponOptLog.setOptType(CouponOptLog.OPT_TYPE_3);
                couponOptLog.setOrderId(order.getId());
                couponOptLog.setCreateUserId(optId);
                couponOptLog.setCreateUserName(optName);
                couponOptLog.setCreateTime(new Date());
                couponOptLogWriteDao.insert(couponOptLog);
            }
        }
    }

    /**
     * 订单取消时,1、返还该订单消耗的积分;2、追回付款时送给用户的积分
     * @param order
     */
    private void cancelOrderBackIntegral(Orders order) {
        // 最终需要修改的积分数量
        int backValue = 0;

        // 1、返还该订单消耗的积分
        // 消耗了积分才返还
        if (order.getIntegral() > 0) {
            // 返还积分是增加
            backValue = order.getIntegral();

            MemberGradeIntegralLogs memberGradeIntegralLogs = new MemberGradeIntegralLogs();
            memberGradeIntegralLogs.setMemberId(order.getMemberId());
            memberGradeIntegralLogs.setMemberName(order.getMemberName());
            memberGradeIntegralLogs.setValue(order.getIntegral());
            memberGradeIntegralLogs.setOptType(MemberGradeIntegralLogs.MEMBER_GRD_INT_LOG_OPT_T_11);
            memberGradeIntegralLogs.setOptDes("取消订单返还积分(订单号:" + order.getOrderSn() + ")");
            memberGradeIntegralLogs.setRefCode(order.getOrderSn());
            memberGradeIntegralLogs.setType(MemberGradeIntegralLogs.MEMBER_GRD_INT_LOG_T_2);
            memberGradeIntegralLogs.setCreateTime(new Date());
            Integer save = memberGradeIntegralLogsWriteDao.save(memberGradeIntegralLogs);
            if (save == 0) {
                throw new BusinessException("记录用户积分消费日志失败(取消订单返还积分),请重试!");
            }
        }

        // 2、追回付款时送给用户的积分,只有当订单是子订单时才需要追回
        if (order.getPaymentStatus().intValue() == Orders.PAYMENT_STATUS_1
            && order.getIsParent().intValue() == Orders.IS_PARENT_0) {
            // 订单已付款才会发生此类型积分追回

            // 计算购物时平台送出的积分追回为减少用户的积分
            MemberGradeIntegralLogs sendIntLog = memberGradeIntegralLogsReadDao
                .getIntLogByMIdAndOrderSnAndOptType(order.getMemberId(),
                    MemberGradeIntegralLogs.MEMBER_GRD_INT_LOG_OPT_T_3, order.getOrderSn(),
                    MemberGradeIntegralLogs.MEMBER_GRD_INT_LOG_T_2);
            if (sendIntLog != null && sendIntLog.getValue() > 0) {
                //  追回积分是减少
                backValue = backValue - sendIntLog.getValue();

                MemberGradeIntegralLogs memberGradeIntegralLogs = new MemberGradeIntegralLogs();
                memberGradeIntegralLogs.setMemberId(order.getMemberId());
                memberGradeIntegralLogs.setMemberName(order.getMemberName());
                memberGradeIntegralLogs.setValue(sendIntLog.getValue());
                memberGradeIntegralLogs
                    .setOptType(MemberGradeIntegralLogs.MEMBER_GRD_INT_LOG_OPT_T_13);
                memberGradeIntegralLogs.setOptDes("取消订单追回积分(订单号:" + order.getOrderSn() + ")");
                memberGradeIntegralLogs.setRefCode(order.getOrderSn());
                memberGradeIntegralLogs.setType(MemberGradeIntegralLogs.MEMBER_GRD_INT_LOG_T_2);
                memberGradeIntegralLogs.setCreateTime(new Date());
                Integer saveLog = memberGradeIntegralLogsWriteDao.save(memberGradeIntegralLogs);
                if (saveLog == 0) {
                    throw new BusinessException("记录用户积分消费日志失败(取消订单追回积分),请重试!");
                }
            }
        }

        // 3、修改用户积分数量,记录积分消耗日志
        Member memberNew = new Member();
        memberNew.setId(order.getMemberId());
        memberNew.setIntegral(backValue);
        Integer updateIntegral = memberWriteDao.updateIntegral(memberNew);
        if (updateIntegral == 0) {
            throw new BusinessException("取消订单修改用户积分时失败,请重试!");
        }
    }

    /**
     * 取消订单还原库存和实际销量公共方法
     * @param orderType
     * @param ordersId
     */
    private void cancelOrderBackStockAndActualSales(Orders orderDb) {
        List<OrdersProduct> opList = null;
        if (orderDb.getIsParent().intValue() == Orders.IS_PARENT_1) {
            opList = ordersProductReadDao.getByOrdersPsn(orderDb.getOrderSn());
        } else {
            opList = ordersProductReadDao.getByOrderId(orderDb.getId());
        }
        Integer orderType = orderDb.getOrderType();
        //还原库存和实际销量
        if (orderType.intValue() == Orders.ORDER_TYPE_2) {
            // 限时抢购订单时还原活动商品的库存
            // 限时抢购只有一个网单
            this.updateFlashProductStockAndActualSales(opList.get(0).getActFlashSaleProductId(),
                opList.get(0).getNumber(), true);
        } else if (orderType.intValue() == Orders.ORDER_TYPE_3) {
            // 团购订单时还原活动商品的库存
            // 团购只有一个网单
            this.updateGroupStockAndActualSales(opList.get(0).getActGroupId(),
                opList.get(0).getNumber(), true);
        } else if (orderType.intValue() == Orders.ORDER_TYPE_4) {
            // 集合竞价订单时还原活动商品的库存
            // 竞价定金订单时不会进入此逻辑,因为定金订单支付后订单状态直接设置为已完成
            this.updateBiddingStockAndActualSales(opList.get(0).getActBiddingId(),
                opList.get(0).getNumber(), true);
        } else if (orderType.intValue() == Orders.ORDER_TYPE_5) {
            // 竞价尾款订单时不会进入此逻辑,因为尾款订单不能取消
            // 此处为逻辑清晰、代码易读增加此逻辑
        } else if (orderType.intValue() == Orders.ORDER_TYPE_6) {
            // 积分换购订单时还原活动商品的库存
            // 积分换购只有一个网单
            this.updateIntegralStockAndActualSales(opList.get(0).getActIntegralId(),
                opList.get(0).getNumber(), true);
        } else {
            // 普通订单
            // 更新货品和商品的库存
            if (opList != null && opList.size() > 0) {
                for (OrdersProduct op : opList) {
                    this.updateProductActualSalesAndStock(op.getProductId(), op.getProductGoodsId(),
                        op.getNumber(), true);
                }
            }
        }
    }
在网页或应用程序增加确认取消按钮,通常是为了提供用户交互的选择性操作。以下是实现这一功能的一般步骤: 1. 确定按钮的位置和样式:首先要确定确认取消按钮在界面上的具体位置,以及它们的外观样式,比如按钮的颜色、大小和标签。 2. 编写按钮的事件处理代码:为确认按钮编写点击事件处理函数,以便在用户点击确认时执行相应的操作。同样的,为取消按钮编写点击事件处理函数,执行取消操作。 3. 实现确认取消的逻辑:在事件处理函数,根据业务需求编写实际的业务逻辑。例如,确认操作可能涉及数据的提交、表单的提交等,而取消操作可能是关闭对话框、重置表单数据等。 4. 测试按钮功能:在实现了按钮和相应的逻辑后,需要进行充分的测试以确保在各种情况下按钮都能正常工作。 下面是一个简单的HTML和JavaScript示例代码,演示了如何在一个表单增加确认取消按钮: ```html <!DOCTYPE html> <html> <head> <title>按钮示例</title> </head> <body> <form id="myForm"> <!-- 表单内容 --> <input type="text" name="username" placeholder="请输入用户名"> <input type="submit" value="确认" onclick="confirmAction()"> <input type="button" value="取消" onclick="cancelAction()"> </form> <script> function confirmAction() { // 确认按钮的逻辑 alert('确认操作被触发!'); } function cancelAction() { // 取消按钮的逻辑 alert('取消操作被触发!'); } </script> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值