Tmall商城系统后台管理订单模块分析

商城系统后台管理订单模块分析

订单管理后台模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ch588OP8-1660550636549)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220814224808304.png)]

请求地址

http://localhost:8080/tmall/admin/order

请求方式get方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QahCRNuo-1660550636552)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220814225002745.png)]

说明:此时对应后台订单管理的模块部分主要集中在了ordercontroller这一个控制器中

后台管理全部订单模块页面跳转

//转到后台管理-订单页-ajax
@RequestMapping(value = "admin/order", method = RequestMethod.GET)
public String goToPage(HttpSession session, Map<String, Object> map){
    logger.info("获取前10条订单列表");
    PageUtil pageUtil = new PageUtil(0, 10);
    List<ProductOrder> productOrderList =
            productOrderService.getList(
                    null,
                    null,
                    new OrderUtil("productOrder_id",
                            true), pageUtil);
    map.put("productOrderList",productOrderList);
    logger.info("获取订单总数量");
    Integer productOrderCount = productOrderService.getTotal(null, null);
    map.put("productOrderCount", productOrderCount);
    logger.info("获取分页信息");
    pageUtil.setTotal(productOrderCount);
    map.put("pageUtil", pageUtil);

    logger.info("转到后台管理-订单页-ajax方式");
    return "admin/orderManagePage";
}
断点调试跳转到后台管理订单页

查询出第一次分页所需要的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UlCxdqhH-1660550636553)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220814225633882.png)]

之后封装信息完成页面的跳转

分页数据的切换

请求路径

http://localhost:8080/tmall/admin/order/1/10?productOrder_code=&productOrder_post=&productOrder_status_array=&orderBy=&isDesc=true

GET

按照条件查询数据

@ResponseBody
    @RequestMapping(value = "admin/order/{index}/{count}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
    public String getOrderBySearch(@RequestParam(required = false) String productOrder_code/* 订单号 */,
                                   @RequestParam(required = false) String productOrder_post/* 订单邮政编码 */,
                                   @RequestParam(required = false) Byte[] productOrder_status_array/* 订单状态数组 */,
                                   @RequestParam(required = false) String orderBy/* 排序字段 */,
                                   @RequestParam(required = false,defaultValue = "true") Boolean isDesc/* 是否倒序 */,
                                   @PathVariable Integer index/* 页数 */,
                                   @PathVariable Integer count/* 行数 */){
        //移除不必要条件
        if (productOrder_status_array != null && (productOrder_status_array.length <= 0 || productOrder_status_array.length >=5)) {
            productOrder_status_array = null;
        }
        if (productOrder_code != null){
            productOrder_code = "".equals(productOrder_code) ? null : productOrder_code;
        }
        if(productOrder_post != null){
            productOrder_post = "".equals(productOrder_post) ? null : productOrder_post;
        }
        if (orderBy != null && "".equals(orderBy)) {
            orderBy = null;
        }
        //封装查询条件
        ProductOrder productOrder = new ProductOrder()
                .setProductOrder_code(productOrder_code)
                .setProductOrder_post(productOrder_post);
        OrderUtil orderUtil = null;
        if (orderBy != null) {
            logger.info("根据{}排序,是否倒序:{}",orderBy,isDesc);
            orderUtil = new OrderUtil(orderBy, isDesc);
        } else {
            orderUtil = new OrderUtil("productOrder_id",
                    true);
        }
        JSONObject object = new JSONObject();
        logger.info("按条件获取第{}页的{}条订单", index + 1, count);
        PageUtil pageUtil = new PageUtil(index, count);
        List<ProductOrder> productOrderList = productOrderService.getList(productOrder, productOrder_status_array, orderUtil, pageUtil);
        object.put("productOrderList", JSONArray.parseArray(JSON.toJSONString(productOrderList)));
        logger.info("按条件获取订单总数量");
        Integer productOrderCount = productOrderService.getTotal(productOrder, productOrder_status_array);
        object.put("productOrderCount", productOrderCount);
        logger.info("获取分页信息");
        pageUtil.setTotal(productOrderCount);
        object.put("totalPage", pageUtil.getTotalPage());
        object.put("pageUtil", pageUtil);

        return object.toJSONString();
    }
断点调试按照条件来查询订单

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-anYTsWHV-1660550636555)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220815095753162.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z5ihGpNL-1660550636556)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220815095805533.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvEAZOrf-1660550636557)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220815101054665.png)]

难点在于移除条件,在整个项目中发挥了什么作用。

productOrder_code = "".equals(productOrder_code) ? null : productOrder_code;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5tvgWOXf-1660550636558)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220815102206133.png)]

在参数没有提交的情况下,将空格条件转化为null

订单详情页显示

难点在与循环倒序的拼接出详细的地址

//如果不是第一级地址,循环拼接地址信息
while (!address.getAddress_areaId().equals(address.getAddress_regionId().getAddress_areaId())) {
    address = addressService.get(address.getAddress_regionId().getAddress_areaId());
    addressStack.push(address.getAddress_name() + " ");
}

相等即为一级地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xCDrnRqO-1660550636559)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220815104047669.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bh9GTXaK-1660550636560)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220815104609353.png)]

Stack<String> addressStack = new Stack<>();
//创建一个String类型的栈实例
//转到后台管理-订单详情页-ajax
    @RequestMapping(value = "admin/order/{oid}", method = RequestMethod.GET)
    public String goToDetailsPage(HttpSession session, Map<String, Object> map, @PathVariable Integer oid/* 订单ID */) {
        logger.info("获取order_id为{}的订单信息",oid);
        ProductOrder order = productOrderService.get(oid);
        logger.info("获取订单详情-地址信息");
        Address address = addressService.get(order.getProductOrder_address().getAddress_areaId());
        Stack<String> addressStack = new Stack<>();
        //详细地址
        addressStack.push(order.getProductOrder_detail_address());
        //最后一级地址
        addressStack.push(address.getAddress_name() + " ");
        //如果不是第一级地址,循环拼接地址信息
        while (!address.getAddress_areaId().equals(address.getAddress_regionId().getAddress_areaId())) {
            address = addressService.get(address.getAddress_regionId().getAddress_areaId());
            addressStack.push(address.getAddress_name() + " ");
        }
        StringBuilder builder = new StringBuilder();
        while (!addressStack.empty()) {
            builder.append(addressStack.pop());
        }
        logger.info("订单地址字符串:{}", builder);
        order.setProductOrder_detail_address(builder.toString());
        logger.info("获取订单详情-用户信息");
        order.setProductOrder_user(userService.get(order.getProductOrder_user().getUser_id()));
        logger.info("获取订单详情-订单项信息");
        List<ProductOrderItem> productOrderItemList = productOrderItemService.getListByOrderId(oid, null);
        if (productOrderItemList != null) {
            logger.info("获取订单详情-订单项对应的产品信息");
            for (ProductOrderItem productOrderItem : productOrderItemList) {
                Integer productId = productOrderItem.getProductOrderItem_product().getProduct_id();
                logger.info("获取产品ID为{}的产品信息", productId);
                Product product = productService.get(productId);
                if (product != null) {
                    logger.info("获取产品ID为{}的第一张预览图片信息", productId);
                    product.setSingleProductImageList(productImageService.getList(productId, (byte) 0, new PageUtil(0, 1)));
                }
                productOrderItem.setProductOrderItem_product(product);
            }
        }
        order.setProductOrderItemList(productOrderItemList);
        map.put("order", order);
        logger.info("转到后台管理-订单详情页-ajax方式");
        return "admin/include/orderDetails";
  }
跳转到前端jsp地址admin/include/orderDetails
//单击发货按钮时
    $("#btn_order_save").click(function () {
        var order_id = '${requestScope.order.productOrder_id}';
        $.ajax({
            url: "admin/order/" + order_id,
            type: "PUT",
            data: null,
            success: function (data) {
                $("#btn_order_save").remove();
                if (data.success) {
                    $("#btn-ok,#btn-close").unbind("click").click(function () {
                        $('#modalDiv').modal("hide");
                        setTimeout(function () {
                            //ajax请求页面
                            ajaxUtil.getPage("order/" + data.order_id, null, true);
                        }, 170);
                    });
                    $(".modal-body").text("发货成功!");
                    $('#modalDiv').modal();
                }
            },
            beforeSend: function () {
                $("#btn_order_save").attr("disabled", true).val("发货中...");
            },
            error: function () {

            }
        });
    });
});

其他点击时可以通过jsp发送的ajax请求实现页面的定向跳转

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ueeIWjvj-1660550636561)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220815105713094.png)]

<div class="details_tools_div">
    <c:if test="${requestScope.order.productOrder_status==1}">
        <input class="frm_btn" id="btn_order_save" type="button" value="发货"/>
    </c:if>
    <input class="frm_btn frm_clear" id="btn_order_cancel" type="button" value="取消"/>
</div>

根据c-if标签进行动态显示

发货时更新状态的信息

同时更新状态值为2,在将时间进行更新

//更新订单信息-ajax
@ResponseBody
@RequestMapping(value = "admin/order/{order_id}", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")
public String updateOrder(@PathVariable("order_id") String order_id) {
    JSONObject jsonObject = new JSONObject();
    logger.info("整合订单信息");
    ProductOrder productOrder = new ProductOrder()
            .setProductOrder_id(Integer.valueOf(order_id))
            .setProductOrder_status((byte) 2)
            .setProductOrder_delivery_date(new Date());
    logger.info("更新订单信息,订单ID值为:{}", order_id);
    boolean yn = productOrderService.update(productOrder);
    if (yn) {
        logger.info("更新成功!");
        jsonObject.put("success", true);
    } else {
        logger.info("更新失败!事务回滚");
        jsonObject.put("success", false);
        throw new RuntimeException();
    }
    jsonObject.put("order_id", order_id);
    return jsonObject.toJSONString();
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
tmall-data是一个包含丰富数据的数据集,主要用于淘宝天猫电商平台的研究和分析tmall-data数据集中包含了大量关于淘宝天猫平台上商品、用户和交易的信息。该数据集涵盖了多个方面的数据,包括商品的类别、销售量、价格、品牌等信息,用户的行为、消费习惯、地理位置等信息,以及交易的日期、支付方式、物流信息等内容。 通过对tmall-data数据集的分析,可以获得淘宝天猫平台上商品销售的趋势和规律,了解不同用户的购物行为和兴趣偏好,优化商品的推荐策略和销售策略,提升用户的购物体验和平台的盈利能力。 对于商家来说,tmall-data数据集可以帮助他们更好地了解市场需求和竞争态势,通过分析用户行为和购买决策的数据,提高商品定价的精确度和市场竞争力,优化广告投放和促销活动的效果,提升销售额和利润。 对于研究人员和学者来说,tmall-data数据集可以作为一个宝贵的资源,用于电商行为研究、市场营销分析、用户行为建模等方面。通过对该数据集的深入分析,可以获取大量有关电子商务领域的实证数据,为相关领域的研究提供支持和参考。 总之,tmall-data数据集是一个非常具有价值的资源,通过对其进行深入分析,可以获得有关淘宝天猫平台上商品、用户和交易的丰富信息,为商家和研究人员提供有力的支持和参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值